Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables Ansible变量未定义语法错误使用set_fact_Variables_Ansible_Undefined - Fatal编程技术网

Variables Ansible变量未定义语法错误使用set_fact

Variables Ansible变量未定义语法错误使用set_fact,variables,ansible,undefined,Variables,Ansible,Undefined,当我尝试从set_fact中的另一个变量向变量“recdb”添加值时,我发现变量是未定义的错误 下面是我的剧本: - name: "Collecting information" shell: "ls -l {{ item }}\n\" register: APP with_fileglob: - "{{ playbook_dir }}/tmpfiles/*" - set_fact: fdet: "{{ APP.r

当我尝试从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\u事实:\n^here\n”}


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

您的代码:

- set_fact:
    recdb: "{{ recdb + inventory_hostname }}"
这明确地告诉ansible:

获取
recdb
的当前值,添加
inventory\u hostname
的值(作为字符串或列表操作,我无法从您的代码中看出…),并将结果分配给
recdb
变量

在这个操作中,如果没有首先定义
recdb
,您将得到一个未定义的var错误

Ansible有办法处理这种情况。我这里唯一的问题是要知道您是要连接两个字符串还是要连接两个列表。因此,我将为这两个方面给出一个例子

连接字符串

- 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_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...] }}"

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

您的代码:

- set_fact:
    recdb: "{{ recdb + inventory_hostname }}"
这明确地告诉ansible:

获取
recdb
的当前值,添加
inventory\u hostname
的值(作为字符串或列表操作,我无法从您的代码中看出…),并将结果分配给
recdb
变量

在这个操作中,如果没有首先定义
recdb
,您将得到一个未定义的var错误

Ansible有办法处理这种情况。我这里唯一的问题是要知道您是要连接两个字符串还是要连接两个列表。因此,我将为这两个方面给出一个例子

连接字符串

- 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_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...] }}"

这回答了我的问题。谢谢你的意见,这回答了我的问题。谢谢你的投入。