问题描述
我有一本非常普通的剧本,没有任何硬编码的信息。剧本中的所有内容都是变量,并通过提供额外的变量(包括连接的主机名)进行填充。没有清单文件正在使用,因为运行该清单的主机通常是随机的。
在Linux的命令行上,我可以通过传递不同的变量来多次运行ansible剧本,它们都将同时运行。
ansible-playbook cluster_check_build.yml -e {"host": "host1"...}
ansible-playbook cluster_check_build.yml -e {"host": "host2"...}
但是,在塔楼中,如果我创建作业模板并使用相同的剧本,那么事情将依次运行。我使用API多次调用该作业模板,并将数据作为JSON传递。每次我调用API启动作业任务时,我都会提供新的extra_vars
,因此作业任务针对不同的主机运行。我看到作业是串行运行的,而不是像从命令行并行运行的。
我有 400 + 个主机,这些主机需要随机运行相同的剧本。这本剧本可能需要一个小时左右才能完成。有时,剧本需要针对20或30个随机主机运行。时间很关键,而串行作业的处理是没有开始的。
是否可以针对不同的主机并行运行相同的作业模板?如果答案是否定的,那么我有什么选择?希望不要创建 400 + 个工作模板。看来这违背了非常通用的剧本的目的。
解决方法
是的,您可以在Tower / AWX中针对多个主机并行运行模板/剧本。
在以下情况下,模板将顺序运行:
- “叉子”在模板中设置为1 您的剧本中的
- SERIAL = 1
- 您的Tower / AWX实例仅用1个分叉进行设置
- 您的实例设置有> 1个分叉,但其他作业正在同时运行。
我真是个傻瓜。我的工作模板的右下角有一个很小的复选框,上面写着“启用并发作业”