【问题标题】:Ansible variable undefined syntax error using set_fact使用 set_fact 的 Ansible 变量未定义语法错误
【发布时间】:2020-03-15 00:52:56
【问题描述】:

当我尝试从 set_fact 中的另一个变量将值“附加”到变量“recdb”时,出现变量未定义错误。

下面是我的剧本:

   - name: "Collecting information"     
     shell: "ls -l {{ item }}\n\"
     register: APP
     with_fileglob:
       - "{{ playbook_dir }}/tmpfiles/*"

   - set_fact:
       fdet: "{{ APP.results|map(attribute='stdout')|list }}"

   - set_fact:
      recdb: "{{ recdb + inventory_hostname }}"

   - set_fact:
       recdb: "{{ recdb + item }}"
     loop: "{{ fdet }}" 

   - debug: msg="SOLUTION FOR TRICKY {{ recdb }}"

recdb 变量的预期输出应如下所示:

10.7.7.111
177    0 -rw-rw-r--  1 user1    was              0 Sep 23 10:29 /was/user1/fname1.out
177    0 -rw-rw-r--  1 user1    was              0 Sep 23 10:29 /was/user1/fname2.out
10.9.12.11
177    0 -rw-rw-r--  1 user1    was              0 Sep 23 10:29 /was/user1/fname1.out
177    0 -rw-rw-r--  1 user1    was              0 Sep 23 10:29 /was/user1/fname2.out

但是,我在运行我的剧本时遇到以下错误。

致命:[10.9.12.11]:失败! => {"msg": "该任务包含一个带有未定义变量的选项。错误是:'recdb' 未定义\n\n错误似乎在 '/app/deploy.yml':第 942 行,第 6 列,但可能\n位于文件中的其他位置,具体取决于确切的语法问题。\n\n违规行似乎是:\n\n\n - set_fact:\n ^ here\n"}

【问题讨论】:

    标签: variables ansible undefined


    【解决方案1】:

    没有语法错误,只有一个未定义的变量。

    您的代码:

    - set_fact:
        recdb: "{{ recdb + inventory_hostname }}"
    

    这是明确告诉 ansible:

    recdb 的当前值,添加(作为字符串或列表操作,我无法从您的代码中看出......)inventory_hostname 的值并将结果分配给recdb var。

    在这个操作中,如果recdb 没有首先定义,你会得到一个 undefined var 错误。

    Ansible 有一个default filter 来处理这种情况。我唯一的问题是要知道您是要连接两个字符串还是加入 2 个列表。因此,我将为两者举一个例子。

    连接字符串

    - set_fact:
        my_string_var: "{{ my_string_var | default('') + my_string_var_to_concat }}"
    

    加入列表

    - set_fact:
        my_list_var: "{{ my_list_var | default([]) + [my_new_value] }}"
    

    如果您要同时添加多个值:

    - set_fact:
        my_list_var: "{{ my_list_var | default([]) + [my_new_value1, my_new_value2, my_new_value3...] }}"
    

    【讨论】:

    • 这回答了我的问题。感谢您的投入。
    猜你喜欢
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多