include_vars和未知变量

时间:2018-02-18 15:54:10

标签: ansible

我想使用自定义变量文件但是我有错误。请解释我如何拥有自定义变量文件? 我的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                                  

为什么未知变量?

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