【问题标题】:Ansbile: File not loading with include_vars moduleAnsible:文件未使用 include_vars 模块加载
【发布时间】:2022-08-18 14:48:17
【问题描述】:

我正在使用带有files_matching 选项的include_vars 模块来加载yaml 文件。我在运行 playbook 时没有看到任何错误,但它没有加载 yaml 文件

---
- hosts: localhost
  gather_facts: no
  vars:
    work_folder: /home/ubuntu/vars
  tasks:
    - name: Load yaml file
      include_vars:
        dir: \"/home/ubuntu/vars\"
        files_matching: \"^(.*)-hive-proxy_values.yaml\"
        name: hive_proxy_values

    - debug:
        var: \"{{ hive_proxy_values}}\"

输出

TASK [Load yaml file] *************************************************************************************************************************
task path: /home/ubuntu/hive.yaml:7
ok: [localhost] => {
    \"ansible_facts\": {
        \"hive_proxy_values\": {}
    },
    \"ansible_included_var_files\": [],
    \"changed\": false
}

ok: [localhost] => {
    \"<class \'dict\'>\": \"VARIABLE IS NOT DEFINED!: \"
}

文件存在于/home/ubuntu/vars 文件夹中

ls -l /home/ubuntu/vars
-rw-rw-r-- 1 ubuntu ubuntu 145 Aug 15 05:20 mtn-wbel-AAA-OAM-12x-hive-proxy_values.yaml
  • 除非我更改 /home/ubuntu/vars 的权限,否则我无法复制此失败,以便执行 playbook 的用户无权读取该目录。
  • 不要展开它,即如果要显示变量var: hive_proxy_values,请不要将其放入大括号\"{{ }}\"。你问调试向您显示名称存储在其中的变量的值hive_proxy_values.的价值hive_proxy_values不是另一个变量的名称。这是错误的原因:\"VARIABLE IS NOT DEFINED!: \"
  • @flowerysong 你能看到\"ansible_included_var_files\": [], 的价值吗?
  • 是的。 \"ansible_included_var_files\": [ \"/home/ubuntu/vars/mtn-wbel-AAA-OAM-12x-hive-proxy_values.yaml\" ],

标签: ansible ansible-2.x


【解决方案1】:

去掉大括号"{{ }}"

    - debug:
        var: hive_proxy_values

例子

给定树和内容

shell> tree .
.
├── ansible.cfg
├── hosts
├── pb.yaml
└── vars
    └── 01-test.yaml
shell> cat hosts
localhost
shell> cat vars/01-test.yaml 
test_var: value from vars/01-test.yaml
shell> cat pb.yaml 
- hosts: localhost
  tasks:

    - block:
        - include_vars:
            dir: "{{ playbook_dir }}/vars"
            files_matching: "^(.*)-test.yaml"
            name: hive_proxy_values
        - debug:
            var: hive_proxy_values
      tags: test

    - block:
        - include_vars:
            dir: "{{ playbook_dir }}/vars"
            files_matching: "^(.*)-missing.yaml"
            name: hive_proxy_values
        - debug:
            var: hive_proxy_values
      tags: missing
  • 模块包含变量vars/01-test.yaml.词典hive_proxy_values保持内容vars/01-test.yaml
shell> ansible-playbook pb.yaml -t test

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

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

TASK [debug] ****************************************************************************
ok: [localhost] => 
  hive_proxy_values:
    test_var: value from vars/01-test.yaml

PLAY RECAP ******************************************************************************
localhost: ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  • 何时文件匹配没有太多的文件模块包含变量什么都不读,字典hive_proxy_values是空的
shell> ansible-playbook pb.yaml -t missing

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

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

TASK [debug] ****************************************************************************
ok: [localhost] => 
  hive_proxy_values: {}

PLAY RECAP ******************************************************************************
localhost: ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  • 注册的变量只显示我们已经知道的。文件列表和字典hive_proxy_values是空的
    - block:
        - include_vars:
            dir: "{{ playbook_dir }}/vars"
            files_matching: "^(.*)-missing.yaml"
            name: hive_proxy_values
          register: result
        - debug:
            var: result
        - debug:
            var: hive_proxy_values
      tags: missing

给出(删节)

TASK [debug] ****************************************************************************
ok: [localhost] => 
  result:
    ansible_facts:
      hive_proxy_values: {}
    ansible_included_var_files: []
    changed: false
    failed: false

【讨论】:

  • 没有 {{}},我厌倦了 hive_proxy_values。它没有用。我认为Load yaml file 任务中的问题为"ansible_included_var_files": [], 是空的
  • 同样的任务还显示hive_proxy_values: {} 为空。很难相信调试可能会失败。
猜你喜欢
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 2011-08-05
相关资源
最近更新 更多