如何在嵌套的Ansible剧本中传递变量?

如何在嵌套的Ansible剧本中传递变量?,ansible,Ansible,我有一个嵌套的ansible playbook(主)文件,我想用它们自己的JSON变量调用包含的playbook(从) 亚姆大师 - name: this is a play at the top level of a file hosts: local connection: local tasks: - debug: msg=hello - include: slave_first.yaml - include: slave_second.yaml slave_fi

我有一个嵌套的ansible playbook(主)文件,我想用它们自己的JSON变量调用包含的playbook(从)

亚姆大师

- name: this is a play at the top level of a file
  hosts: local
  connection: local
  tasks:
    - debug: msg=hello

- include: slave_first.yaml
- include: slave_second.yaml 

slave_first.yaml应使用“vars/slave_first_vars.json”文件,slave_second.yaml应使用“vars/slave_second_vars.json”文件。

在包含剧本时,只能使用
vars
语句覆盖变量,如:

- include: slave_first.yaml
  vars:
    myvar: foo
- include: slave_second.yaml
  vars:
    myvar: foo
没有其他选择


如果需要从文件中加载变量,则必须在从属剧本中使用
vars\u文件
包含变量。

在您的场景中,我将这样使用,
master.yml

- hosts: localhost
  connection: local
  tasks:
    - include: slave_first.yml
      vars:
        VAR_FILE: "slave_first_vars"
    - include: slave_second.yml
      vars:
        VAR_FILE: "slave_second_vars"
虽然
slave_first.yml
slave_second.yml
是这样的,但在我的情况下,两者都是相同的,但您知道如何使用它们:
slave\u first.yml:

---
- include_vars: "{{ VAR_FILE }}.yml"

- debug:
   msg: "{{ DOMAIN_NAME }}"
---
- include_vars: "{{ VAR_FILE }}.yml"

- debug:
   msg: "{{ DOMAIN_NAME }}"
---
DOMAIN_NAME: "second.com"
slave\u second.yml:

---
- include_vars: "{{ VAR_FILE }}.yml"

- debug:
   msg: "{{ DOMAIN_NAME }}"
---
- include_vars: "{{ VAR_FILE }}.yml"

- debug:
   msg: "{{ DOMAIN_NAME }}"
---
DOMAIN_NAME: "second.com"
现在来看不同的变量部分:
slave\u first\u vars.yml:
在您的情况下,它将是
json

---
DOMAIN_NAME: "first.com"
slave\u second\u vars.yml:

---
- include_vars: "{{ VAR_FILE }}.yml"

- debug:
   msg: "{{ DOMAIN_NAME }}"
---
- include_vars: "{{ VAR_FILE }}.yml"

- debug:
   msg: "{{ DOMAIN_NAME }}"
---
DOMAIN_NAME: "second.com"
然后,您可以运行并验证是否按预期工作:

➤ansible-playbook -i localhost, master.yml

PLAY [localhost] **********************************************************************************

TASK [Gathering Facts] **********************************************************************************
ok: [localhost]

TASK [include_vars] **********************************************************************************
ok: [localhost]

TASK [debug] **********************************************************************************
ok: [localhost] => {
    "changed": false,
    "msg": "first.com"
}

TASK [include_vars] **********************************************************************************
ok: [localhost]

TASK [debug] **********************************************************************************
ok: [localhost] => {
    "changed": false,
    "msg": "second.com"
}

PLAY RECAP **********************************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0
希望这能对你有所帮助