理论上,我定位的机器应该为每个客户端运行一个名为“marketaccess {client_name}”的进程,我想确保此进程正在运行。 Ansible对于检查进程是否正在运行非常具有挑战性。下面是我试图用来查看给定机器上是否有进程运行的剧本。我打算在'stdout'上运行一个条件,并说如果它不包含客户的名字,那么就针对给定的客户运行重启过程脚本。问题是,当我运行这个剧本时,它告诉我字典对象没有属性'stdout',但当我删除'.stdout'时它运行正常,我可以清楚地看到service_status的stdout值。
- name: Check if process for each client exists
shell: ps aux | grep {{ item.key|lower }}
ignore_errors: yes
changed_when: false
register: service_status
with_dict: "{{ customers }}"
- name: Report status of service
debug:
msg: "{{ service_status.stdout }}"
答案 0 :(得分:0)
您的问题是service_status
是循环任务的结果,因此它有service_status.results
列表,其中包含每次迭代的结果。
要查看每次迭代的stdout
,您可以使用:
- name: Report status of service
debug:
msg: "{{ item.stdout }}"
with_items: "{{ service_status.results }}"
但您可能希望阅读有关幂等shell任务的this note并使用干净的单个任务重写代码。