我想使用自定义变量文件但是我有错误。请解释我如何拥有自定义变量文件?
我的vars/var1.yml
是:
---
ip_ssh_srv1: 192.168.10.10
和vars/var2.yml
是:
---
ip_ssh_srv2: 192.168.10.20
我的task.yml
是:
---
- include_vars:
file: var1.yml
file: var2.yml
- name: -- my task --
template: src=db_info.j2 dest=/root/db_info.cnf
我的输出是:
[root@anisble ansible]# ansible-playbook playbooks/get_ip_ssh.yml
TASK [Gathering Facts]
*********************************************************************
ok: [db1]
ok: [db3]
TASK [ssh : include_vars] ***************************************************************
ok: [db1]
ok: [db2]
TASK [ssh : -- my task --] *******************************************************************
fatal: [db1]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'ip_ssh_srv1' is undefined"}
fatal: [db2]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'ip_ssh_srv2' is undefined"}
PLAY RECAP ****************************************************************
db1 : ok=2 changed=0 unreachable=0 failed=1
db2 : ok=2 changed=0 unreachable=0 failed=1
为什么未知变量?
答案 0 :(得分:1)
错误1
您似乎包含了一个未指定的vars文件。
错误2
您不应多次定义相同的密钥。
这是一个YAML词典:
- include_vars:
file: var1.yml
file: var2.yml
它在语法上是正确的,但您定义了相同的键file
两次。
当Ansible查询它时,它只能获得file
键值(var2.yml
)的单个值。
如果查看include_vars
module docs,您会找到一些方法来包含多个文件(但没有通过定义相同的密钥),例如:
- include_vars:
dir: vars
files_matching: var