在剧本中进行Ansible递归检查

时间:2016-08-31 15:57:05

标签: ansible ansible-playbook

我们需要经历这个结构

区域规格 https://gist.github.com/git001/9230f041aaa34d22ec82eb17d444550c

我能够运行以下snipplet,但现在我一直在检查错误。

剧本

--
- hosts: all
  gather_facts: no

  vars_files:
    - "../doc/application-zone-spec.yml"

  roles:
    - { role: ingress_add, customers: "{{ application_zone_spec }}" }

作用

- name: check if router exists
  shell: "oc get dc -n default {{ customers.zone_name }}-{{ item.type }}"
  with_items: "{{ customers.ingress }}"
  ignore_errors: True
  register: check_router

- name: Print ingress hostnames
  debug: var=check_router

- name: create new router
  shell: "echo 'I will create a router'"
  with_items: "{{ customers.ingress }}"
  when: check_router.rc == 1

输出ansible运行

https://gist.github.com/git001/dab97d7d12a53edfcf2a69647ad543b7

问题是我需要浏览入口项目,我需要从“check_router”寄存器中映射不同类型的错误。

制作类似的东西会很棒。

伪代码。

Iterate through the "customers.ingress"
  check in "check_router" if the rc is ! 0
    execute command.

我们使用。

ansible-playbook --version
ansible-playbook 2.1.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

1 个答案:

答案 0 :(得分:0)

您可以将第二个循环替换为:

- name: create new router
  shell: "echo 'I will create a router with type {{ item.item }}'"
  with_items: "{{ check_router.results }}"
  when: item.rc == 1

这会迭代check_route循环的每一步,您可以通过item.item访问原始项目。