我写了一个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点,有人可以让我知道需要做些什么来使它工作):
该脚本将检查所提及的所有服务的状态(正确执行此操作)
如果其中一个服务状态显示为停止。它将执行将运行命令以恢复该特定服务的任务。
如果一次启动后服务仍然没有出现,那么脚本应该失败(我还没有为这部分编写代码)。
答案 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}}"