Ansible:为一组主机创建动态增加编号的目录

时间:2019-02-27 12:04:23

标签: ansible

例如,我想创建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

1 个答案:

答案 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”中进行模运算的原因。

我希望这对您有用。