检查Ansible流程的状态

时间:2017-10-20 15:16:44

标签: ansible

理论上,我定位的机器应该为每个客户端运行一个名为“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 }}"

1 个答案:

答案 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并使用干净的单个任务重写代码。