【问题标题】:Reuse base path variable in Ansible variable block在 Ansible 变量块中重用基本路径变量
【发布时间】:2020-04-08 17:39:29
【问题描述】:

我有一个特定应用程序的变量块,其中包含子变量。其中一个是基本目录,我想在不同的其他子变量中重复使用,如下所示:

- hosts: all
  vars:
    app:
      base_dir: /opt/app
      data_dir: "{{ app.base_dir }}/data"

  tasks:
    - name: Test
      shell: "echo data dir: {{ app.data_dir }}"

app.data_dir 应该是/opt/app/data,但不会强迫我为每个变量重复/opt/app。但它不起作用,相反我从 Ansible 得到了一个很长的异常:

任务 [测试] ****************************************************** ****************************************************** ****************************************************** ****************************** 2019 年 12 月 16 日星期一 11:13:55 +0100 (0:00:02.417)
0:00:02.439 *******致命:[192.168.122.91]:失败! => {“味精”:“一个 模板时发生未处理的异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:未处理 模板时发生异常 '{u'data_dir': u'{{ app.base_dir }}/data', u'base_dir': u'/opt/app'}'。错误是原始消息:递归循环 在模板字符串中检测到:{{ app.base_dir }}/data"}

看起来 Ansible 做了一些递归。如何引用app.base_dir?也试过{{ base_dir }}。这给了我一个它不存在的错误,所以我假设 Ansible 在全局范围内而不是在 app 中搜索它。

【问题讨论】:

    标签: variables ansible


    【解决方案1】:

    发现我们需要在完整的变量路径前加上vars

      vars:
        app:
          base_dir: /opt/app
          data_dir: "{{ vars.app.base_dir }}/data"
    

    当运行ansible-playbook -i inventory test.yml -vv 时,它给出了opt/app/data 的预期输出:

    TASK [Test] ************************************************************************************************************************************************************************************
    task path: /home/daniel/cnx6-kvm/ansible/test.yml:8
    Monday 16 December 2019  11:17:31 +0100 (0:00:02.452)       0:00:02.475 *******
    changed: [192.168.122.91] => {"changed": true, "cmd": "echo data dir: /opt/app/data", "delta": "0:00:00.054859", "end": "2019-12-16 11:17:30.744850", "rc": 0, "start": "2019-12-16 11:17:30.689991", "stderr": "", "stderr_lines": [], "stdout": "data dir: /opt/app/data", "stdout_lines": ["data dir: /opt/app/data"]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 2017-08-30
      • 1970-01-01
      • 2018-01-18
      相关资源
      最近更新 更多