Variables Ansible:使命令的输出成为下一个命令的键值项/变量
我想将此输出(来自上一个命令)用作键值数组或同一剧本中下一个命令的清单Variables Ansible:使命令的输出成为下一个命令的键值项/变量,variables,output,ansible,allocation,Variables,Output,Ansible,Allocation,我想将此输出(来自上一个命令)用作键值数组或同一剧本中下一个命令的清单 stdout: hot-01: 10.100.0.101 hot-02: 10.100.0.102 hot-03: 10.100.0.103 .... hot-32: 10.100.0.132 像这样: - shell: "echo {{ item.key }} has value {{ item.value }}" with_items: "{{ output.stdout_lines }}" 或: echo命令的
stdout:
hot-01: 10.100.0.101
hot-02: 10.100.0.102
hot-03: 10.100.0.103
....
hot-32: 10.100.0.132
像这样:
- shell: "echo {{ item.key }} has value {{ item.value }}"
with_items: "{{ output.stdout_lines }}"
或:
echo命令的所需输出:
hot-01 has value 10.100.0.101
我还尝试了使用_dict:{{output.stdout}}但仍然没有成功
"fatal: [ANSIBLE] => with_dict expects a dict"
AFAIK没有Jinja2过滤器可以将字符串转换为字典 但在您的特定情况下,可以使用将键与值分开:
-shell:“echo{{item.split(':')[0]}具有值{{item.split(':')[1]}”
带_项:“{{output.stdout_line}”
我知道,必须使用split两次有点草率
在本例中,您的输出是有效的YAML,因此您还可以执行以下操作:
-shell:“echo{{item.key}}具有值{{item.value}”
使用_dict:{{output.stdout}from_yaml}”
作为最后手段,您还可以创建自己的ansible模块来创建Jinja2过滤器来覆盖您的案例。这里有一个
split
模块过滤器,您可以将其作为灵感使用:作为一个附带问题:在这种情况下,我如何使用dict?我的意思是。stdout或。stdout_行将是一个关键,但我如何与_dict一起使用?您的答案符合我的要求,但我正在尝试找到一个更好的解决方案:)我添加了一个使用和\u dict
的示例。
"fatal: [ANSIBLE] => with_dict expects a dict"