例如,我想创建10个目录,这些目录具有递增数量的5个主机组。 任务结束后,结果应为:
Server1 Server2 Server3 Server4 server5
dir01 dir02 dir03 dir04 dir05
dir06 dir07 dir08 dir09 dir10
如果我必须创建更多目录,则服务器之间的轮换将继续进行。
当时在5个主机的组中运行以下任务:
- name: Creates Project's directory in server
file:
path: /opt/dir{{item}}
state: directory
owner: xxxx
group: xxxx
mode: 0775
with_sequence:
start=1
end=10
format=%02d
结果是:
Server1 Server2 Server3 Server4 Server5
dir01 dir01 dir01 dir01 dir01
dir02 dir02 dir02 dir02 dir02
dir03 dir03 dir03 dir03 dir03
dir04 dir04 dir04 dir04 dir04
…… …… …… …… ……
dir10 dir10 dir10 dir10 dir10
答案 0 :(得分:1)
我找到了一种针对目标主机的解决方案:
options: {
'horizontalLine': [{
'y': this.objectifs[this.name],
'style': '#82be00',
'text': "Objectif"
}],
showLines: true,
....
这会像您的示例一样循环遍历应创建的目录,但是在循环的每次运行中,它都会选择不同的目标主机,并依次遍历所有目标主机。
变量“ play_hosts”包含所有当前目标主机。通过“ play_hosts [((item | int)-1)]”,我们选择与“ item”中当前编号对应的主机。然后,我们将循环的当前运行委派给该主机,因此仅在其上执行任务。使用“ run_once”可以使任务在每个循环中仅执行一次。否则,每次循环运行将在所选主机上执行的次数与“ play_hosts”中存在主机的次数相同。
我还使用了“循环”而不是“ with_sequence”,因为这是ansible推荐的。您可以在这里了解更多信息:https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html
通过“ dirsPerHost”,您可以选择在每个主机上创建的目录数。这也是在“ delegate_to”中进行模运算的原因。
我希望这对您有用。