Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 索引资源清册中除一台主机外的所有主机_Ansible_Ansible Playbook - Fatal编程技术网

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。

非常感谢。我喜欢第二种选择。看起来很干净。