只调用角色的子集?

时间:2016-12-14 15:33:24

标签: ansible

inventories/
   production/
      hosts.yml           # inventory file for production servers
      group_vars/         # contains global variables for microservices

webservers.yml      

roles/
    webservers/
      tasks/              
        main.yml          # has include statements for all the other files in tasks
        microservice1.yml
        microservice2.yml
        install_certificates.yml
        etc
    vars/                 # contains variables for each microservice

这是我目前的目录结构。最初我设置它以便webservers.yml playbook将完全部署新配置的Web服务器...所以安装apache,php,certs和所有微服务站点。

我想知道的是,完成仅运行Web服务器角色子集的最佳方法是什么?就像我只想运行microservice1.yml任务而没有别的。这是可行的当前库存结构还是我需要让每个任务都是自己的角色,并将它们全部包含在webservers.yml中?哪种方式被认为是更好的做法?

1 个答案:

答案 0 :(得分:0)

实现此目的的最简单方法是使用标签。您将相同的标记添加到要组合在一起的规则,然后运行ansible,以便它只执行标记的规则。

例如,此规则标有" usersetup"

- name: Create user groups
  group: name={{ item.username }} state=present
  with_items: "{{ my_items }}"
  tags: [ "usersetup" ]

如果你像这样运行你的剧本:

ansible-playbook -i hosts --ask-become-pass site.yml --tags usersetup

只会执行用useretup标记的规则。请注意,您可以通过用逗号分隔多个标记来添加规则。