限制ans剧本由'主持人'播放

时间:2017-06-14 09:58:51

标签: ansible ansible-inventory

我有一个库存文件,如:

[my_domain]
255.255.255.255

[production:children]
my_domain


[load_balancer:children]
my_domain

[webservers:children]
my_domain

我有playbook.yml喜欢:

---

- hosts: webservers
  gather_facts: no
  tasks:
    - debug:
        msg: Hello webservers

- hosts: load_balancer
  gather_facts: no
  tasks:
    - debug:
        msg: Hello load_balancer

当运行以下命令时,它会在剧本中运行两个剧本,即它打印" Hello webservers"和" Hello load_balancer":

ansible-playbook ./playbook.yml --limit "webservers:&production"

我可以通过在命令行上添加标记并在命令行上使用tags来运行Web服务器播放,例如:

...
- hosts: webservers
  tags: ['webservers']
  # or if using roles then:
  # roles:
  #   - { role: provision_webserver, tags: [ 'provision_webservers' ] }
  ...

并使用:

ansible-playbook ./playbook.yml --limit "webservers:&production" --tags "webservers"

我希望limit arg不仅可以在库存文件上工作,还可以在每个游戏的hosts值上工作。 The docs seem to suggest this is possible虽然他们使用ansible和一个关闭命令而不是ansible-playbook和一个剧本来提供示例:

  

这可能意味着要与之通信的主机,但就Playbook而言,它实际上意味着应用特定配置或IT流程的主机。

我认为答案是我使用错误的剧本和should only have one play per playbook,这必然意味着它只会有一个hostsyou select which plays you want to run by changing the playbook<-abc>.yml you are using。但是,最后一个链接还建议您只需使用--limit来设置哪些主机。很困惑。

1 个答案:

答案 0 :(得分:4)

您是对的,根据best practices,您可能希望将不同类型的配置拆分为单独的Playbook,以便能够单独运行它们。

但这段文字可能有点令人困惑:

  

这与ansible的“-limit”参数类似,但更明确一点:

ansible-playbook site.yml --limit webservers
ansible-playbook webservers.yml

仅当webservers组中的主机不属于任何其他组时才会出现。否则(如您的示例中所示)主机server1是否在组中{{ 1}}和webservers,然后播放网络服务器,负载均衡器将应用于此主机。

另外,正如您所正确指出的那样,您可以使用标记标记游戏手册的某些部分,并使用load_balancers来限制此标准的游戏手册。

有时我会使用一种技巧在不同的库存名称下拥有相同的主机,因此Ansible将它们视为不同的主机:

--tags

这种方式[webservers] myhost_ws ansible_host=myhost [load_balancers] myhost_lb ansible_host=myhost myhost_ws实际上是同一台服务器,但myhost_lb只会执行此剧本的第一次播放:

--limit webservers

但请注意,使用此设置,在第一次播放期间为- hosts: webservers .... - hosts: load_balancers .... 收集的任何事实在第二次播放期间都无法用于myhost_ws(但您仍然可以通过{{1}获取它们})。