如何在嵌套的Ansible剧本中传递变量?
我有一个嵌套的ansible playbook(主)文件,我想用它们自己的JSON变量调用包含的playbook(从) 亚姆大师如何在嵌套的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
- 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
希望这能对你有所帮助