我正在尝试使用Ansible playbook中的一个寄存器来存储我的输出。下面是我正在使用的代码。
我试过下面的代码
- name: Check if Service Exists
stat: path=/etc/init.d/{{ item }}
register: {{ item }}_service_status
with_items:
- XXX
- YYY
- ZZZ
我需要根据代码中提到的项目将不同的输出存储在不同的寄存器变量中。它正在失败,无法继续。任何帮助都将不胜感激。
发布于 2019-04-23 01:17:57
已更新答案
我认为你需要在它周围加上引号:
register: "{{ item }}_service_status"
通过循环静态变量output
中的每一项,
output
,然后使用循环迭代地构建新的变量service_status
(list- name: Check if Service Exists
stat: path=/etc/init.d/{{ item }}
register: output
with_items:
- XXX
- YYY
- ZZZ
- name: Setting fact using output of loop
set_fact:
service_status:
- rc: "{{ item.rc }}"
stdout: "{{ item.stdout }}"
id: "{{ item.id }}"
with_items:
- "{{ output }}"
- debug:
msg: "ID and stdout: {{ item.id }} - {{ item.stdout }}"
with_items:
- "{{ service_status }}"
初始答案
Ansible文档中的this link展示了如何在循环中使用register
(参见this SO post中的另一个示例)。
有几点
XXX, YYY, ZZZ
)分配给单独的变量可能更方便(例如,2)with_items
is no longer the recommended approach循环遍历变量:而不是使用loop
-参见here以获取的示例
vars:
items:
- XXX
- YYY
- ZZZ
- name: Check if Service Exists
stat: path=/etc/init.d/{{ item }}
register: service_status
loop: "{{ items|flatten(levels=1) }}"
- name: Show the return code and stdout
debug:
msg: "Cmd {{ item.cmd }}, return code {{ item.rc }}, stdout {{ item.stdout }}"
when: item.rc != 0
with_items: "{{ service_status.results }}"
https://stackoverflow.com/questions/55797883
复制相似问题