【发布时间】:2015-01-16 18:23:17
【问题描述】:
似乎所有作业都已入队,一次只能运行一个。我们如何运行多个?
【问题讨论】:
-
这是一个很好的问题。确实可以通过接受的回复或一些反馈来更新我们的答案。
标签: ansible ansible-awx
似乎所有作业都已入队,一次只能运行一个。我们如何运行多个?
【问题讨论】:
标签: ansible ansible-awx
Tower 旨在并行化作业,但在某些情况下它不会。
【讨论】:
共享同一个 Inventory 或 SCM 源的作业不能同时运行。
【讨论】:
假设您的工作由三个任务组成:
任务 1:“做 x”,任务 2:“做 y”,任务 3:“做 z”
使用 ansible,“do x”将在所有服务器上运行,然后“do y”将在所有服务器上运行,然后“do z”将在所有服务器上运行。
另外,我说“所有服务”,但实际上它在 ansible “forks” 值时达到最大值,默认为 5。在我的 100 服务器环境中,我将此值设置为 20。更多信息请参见:http://docs.ansible.com/intro_configuration.html#forks
请记住 ansible 的优势在于同时在多台机器上完成一项工作(一组任务)。如果您想要在一台机器上多次运行相同的任务,那么您需要类似 fork 或并行的东西。
事实上,Ansible 会尝试在多台机器上尽可能多地运行“do x”。您可以使用“serial”关键字 (http://docs.ansible.com/playbooks_delegation.html#rolling-update-batch-size) 调整此行为,让整个作业在部分机器上运行,然后再在更多机器上运行。
不是分叉和串行之间的细微差别。
forks 是“每个任务”
serial 是“每个作业”(任务集合)
大卫·桑顿
编辑:我重新阅读了您的问题。这是关于一次运行多个作业,而不是在作业中运行多个任务。所以我认为你对 ansible-awx 是正确的,但对命令行不正确。通过 Web 界面,您可以将作业提交到作业队列,但您不能让 ansible-awx 一次运行多个任务。我认为。但是通过命令行,如果您打开多个窗口,您可以同时运行多个 ansible-playbook。你有 ansible 支持帐户吗?恕我直言,这些人很棒,他们花了很多时间来回答我的问题(比如你的问题)。
【讨论】:
可以从 Tower 执行同时作业。作业模板具有“启用并发作业”选项。请参阅http://docs.ansible.com/ansible-tower/latest/html/userguide/jobs.html 上的“15.4. 作业并发”部分。
【讨论】:
如果我在单个服务器上运行其称为同步模式管理的 3 个不同任务,则 3 个任务将分配给单个作业 ID,并且每个任务一个接一个地执行,如果它消耗大量时间。
在 Ansible 2.5 之后的版本中,我们可以为 3 个不同的任务获取 3 个作业 ID,并同时开始执行,这样可以节省大量时间。这种类型称为异步模式。
【讨论】: