在给变量

时间:2017-05-22 11:04:42

标签: ansible

我写了一个ansible脚本,当一个变量只有一个输入时运行正常:

---
- hosts: ListA
  vars:
    app-dir: /tmp
    service_name: exampleAAA
    roles:
    - prechecks

以下是我正在使用的任务,当只为service_name定义了一个服务时:     ---

- name: check service status
  command: "{{app_dir}}/app-name {{item}} status"
  with_items: '{{service_name}}'
  ignore_errors: yes
  register: service_status

- name: starting service if it's in failed state
  set_fact: serviceTostart={{item}}
  with_items: '{{service_name}}'
  when: service_status | failed

- shell: "{{app_dir}}/app-name {{serviceTostart}} start"
  when: service_status | failed

根据我的用法,我需要在下面工作:

vars:
  service_name:
  - exampleAAA
  - exampleBBB
  - exampleCCC

在定义多个service_name后运行playbook时。它会在步骤检查服务状态中显示失败服务状态,但在其余步骤中表示正常。当我检查服务的状态时,没有变化。我怎样才能使它适用于多个service_names ???

所以这里我的脚本应该做什么(我坚持使用第2点和第3点,有人可以让我知道需要做些什么来使它工作):

  1. 该脚本将检查所提及的所有服务的状态(正确执行此操作)

  2. 如果其中一个服务状态显示为停止。它将执行将运行命令以恢复该特定服务的任务。

  3. 如果一次启动后服务仍然没有出现,那么脚本应该失败(我还没有为这部分编写代码)。

1 个答案:

答案 0 :(得分:0)

老实说,您的问题的答案在文档中:Using register with a loop

- name: check service status
  command: "{{app_dir}}/app-name {{item}} status"
  with_items: "{{service_name}}"
  ignore_errors: yes
  register: service_status

- shell: "{{app_dir}}/app-name {{item.item}} start"
  when: item | failed
  with_items: "{{service_status.results}}"