我有一个如下的 Ansible 清单:
[group1]
host1.mydomain
[maingroup:children]
group1
[group2]
host1.mydomain
我需要在不同的组上声明同一个主机,因为在这个主机上有两个类似的服务并置。为了区分这两个服务,我创建了以下组变量:
group_vars/maingroup
---
servicepath: /service1/path
group_vars/group2
---
servicepath: /service2/path
当我第一次使用 运行剧本hosts: maingroup
,然后使用 运行相同的剧本时,它每次都hosts: group2
使用正确的变量值(第一次运行= ,第二次运行= )。servicepath
/service1/path
/service2/path
但是,在我运行剧本的所有后续重试中,maingroup
我得到了值servicepath: /service2/path
--extra-vars=@group_vars/group2
我仅设法使用ansible-playbook 参数运行具有正确变量的剧本 。
这可能是 Ansible 错误还是我遗漏了什么?
答案1
事实上,ansible 将变量的值绑定到主机,而不是组。也就是说,一个主机上的一个变量只能有一个值。
尝试这样做只是为了每次覆盖主机上的变量的值:
---
- hosts: "{{ hosts }}"
vars_files:
- group_vars/{{ hosts }}.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"
- hosts: "{{ hosts }}"
vars_files:
- group_vars/{{ hosts }}.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"
其中 {{ hosts }} =“maingroup”或“group2”
例子:
---
- hosts: "maingroup"
vars_files:
- group_vars/maingroup.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"
- hosts: "group2"
vars_files:
- group_vars/group2.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"
- hosts: "maingroup"
vars_files:
- group_vars/maingroup.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"