Ansible 索引资源清册中除一台主机外的所有主机
我有一本剧本,看起来像:Ansible 索引资源清册中除一台主机外的所有主机,ansible,ansible-playbook,Ansible,Ansible Playbook,我有一本剧本,看起来像: - name: Install myApp hosts: tag_app_prod[0] sudo: yes roles: - { role: myApp, master: "true" } 基本上,我有一组服务器,它们的安装方式完全相同,除了一个我指定为主服务器的服务器需要一个不同的参数集。由于我可以选择组中的第一台服务器并设置参数,然后按照下面的程序块安装其余的主机,因此上述操作非常有效: - name: Insta
- name: Install myApp
hosts: tag_app_prod[0]
sudo: yes
roles:
- { role: myApp, master: "true" }
基本上,我有一组服务器,它们的安装方式完全相同,除了一个我指定为主服务器的服务器需要一个不同的参数集。由于我可以选择组中的第一台服务器并设置参数,然后按照下面的程序块安装其余的主机,因此上述操作非常有效:
- name: Install myApp
hosts: tag_app_prod[1-25]
sudo: yes
roles:
- { role: myApp, master: "false" }
问题是我使用的是动态资源清册,我不知道在运行时会存在多少台主机。有没有办法在我的主机行上指定上限,而不是像我上面所做的那样将其设置为一个特定的数字,如25?Ansible实际上是可以的,如果您使用的索引高于实际服务器列表的范围,那么这应该可以工作:
- name: Install myApp
hosts: tag_app_prod[0]
sudo: yes
roles:
- { role: myApp, master: "true" }
- name: Install myApp
hosts: tag_app_prod[1-9999]
sudo: yes
roles:
- { role: myApp, master: "false" }
不过,还有另一种方法可以做到这一点。您可以使用jinja动态设置master
变量:
- name: Install myApp
hosts: tag_app_prod
sudo: yes
roles:
- { role: myApp, master: "{% if inventory_hostname == groups['tag_app_prod'][0] %}True{% else %}False{% endif %}" }
当为
tag\u app\u prod
组(groups['tag\u app\u prod'][0]
)中的第一台主机调用该角色时,变量master
将设置为True。对于所有其他主机,它将设置为False。非常感谢。我喜欢第二种选择。看起来很干净。