Python Ansible:无法设置vars变量
我正试图建立一个剧本,从我的主人那里收集某些信息。 因此,我将启动一些shell命令,并将其返回值存储在一个变量中。每个命令输出,例如“ls-la”都应与前者关联,因此如果所有主机都通过了,我将得到一个完整的列表 这是我的剧本:Python Ansible:无法设置vars变量,python,ansible,Python,Ansible,我正试图建立一个剧本,从我的主人那里收集某些信息。 因此,我将启动一些shell命令,并将其返回值存储在一个变量中。每个命令输出,例如“ls-la”都应与前者关联,因此如果所有主机都通过了,我将得到一个完整的列表 这是我的剧本: --- - name: try to set variable hosts: all vars: my_test_var: [] tasks: - name: just get a simple list and show it
---
- name: try to set variable
hosts: all
vars:
my_test_var: []
tasks:
- name: just get a simple list and show it
shell: ls -la
register: out
my_test_var: "{{ my_test_var + out.stdout }}"
- debug:
msg: "Listing of current dir: {{ my_test_var }}"
因此,首先我创建一个名为:my_test_var的空列表,第一个任务应该附加ls-la命令的输出
但事实并非如此。
Ansible只是忽略变量。但为什么
[WARNING]: Ignoring invalid attribute: my_test_var
你的剧本有一些问题 1: msg还需要一个缩进,您需要更改为:
- debug:
msg: "Listing of current dir: {{ my_test_var }}"
2:
您无法从ls-al获得输出,并且在同一个任务中操作my_test_var。您需要使用不同的任务。关于这一点,请看下面我的剧本
3:
out.stdout变量是一个字符串变量,而my_test_变量是一个列表。如果要将整个out.stdout添加到列表中,则需要使用以下语法:
my_test_var: "{{ my_test_var + [ out.stdout ] }}"
如果您打算添加out.stdout_行,这是ls-al输出的每一行的列表,那么您的语法很好:
my_test_var: "{{ my_test_var + out.stdout_lines }}"
提示:
您不需要将my_test_var变量初始化为空列表。您可以通过以下方式使用默认过滤器:
my_test_var: "{{ my_test_var|default([]) + out.stdout_lines }}"
完整剧本如下:
---
- name: try to set variable
hosts: localhost
gather_facts: false
vars:
# my_test_var: []
tasks:
- name: just get a simple list and show it
shell: ls -la
register: out
- name: print out
debug:
var: out
- name: set the my_test_var to the output
set_fact:
my_test_var: "{{ my_test_var|default([]) + out.stdout_lines }}"
- debug:
var: my_test_var
嗨,非常感谢你的帮助。只有一件事:如果我有多个任务产生一些输出,我想添加到我的_test_var AFAIK中,我不能使用set_fact,因为一旦设置了它,你就不能覆盖它,你可以使用这个语法在my_test_var列表中附加更多的元素:my_test_var:{{my_test u var}default[]+}
---
- name: try to set variable
hosts: localhost
gather_facts: false
vars:
# my_test_var: []
tasks:
- name: just get a simple list and show it
shell: ls -la
register: out
- name: print out
debug:
var: out
- name: set the my_test_var to the output
set_fact:
my_test_var: "{{ my_test_var|default([]) + out.stdout_lines }}"
- debug:
var: my_test_var