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:使命令的输出成为下一个命令的键值项/变量_Variables_Output_Ansible_Allocation - Fatal编程技术网

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"