Ansible - 同时使用with_items和with_sequence

时间:2015-06-30 18:02:43

标签: loops sequence roles ansible

有没有办法像这样成为角色的一部分: 我需要运行nrpe.cfg中的五次命令(配置文件中有5个命令 - 所以5 x 5命令)?

- name: grep the commands from nagios
  shell: grep -R check_http_ /etc/nagios/nrpe.cfg | cut -d= -f2-
  register: nagios_check
- name: check_before
  shell: (printf $(echo '{{ item }}' | awk -F'country=' '{print $2}' | cut -d'&' -f1); printf ' ';{{ item }} | cut -d ' ' -f-2) >> {{ ansible_env.DATA_LOG }}/eden-{{ dateext.stdout }}
  register: checkedenbefore
  with_items: "{{ nagios_check.stdout_lines }}"
  **with_sequence: count=5**
  ignore_errors: True

2 个答案:

答案 0 :(得分:1)

目前这不可能,但应该再次发布Ansible 2.0。使用Ansible 2,您可以将with_itemsinclude一起使用,这样您就可以将check_before任务中的with_sequence循环放在单独的yml文件中,然后再包括它与with_items一起。

这些方面的东西:

<强> main.yml

- name: grep the commands from nagios
  shell: grep -R check_http_ /etc/nagios/nrpe.cfg | cut -d= -f2-
  register: nagios_check
- include: check_before.yml
  with_items: "{{ nagios_check.stdout_lines }}"

<强> check_before.yml

- name: check_before
  shell: (printf $(echo '{{ item }}' | awk -F'country=' '{print $2}' | cut -d'&' -f1); printf ' ';{{ item }} | cut -d ' ' -f-2) >> {{ ansible_env.DATA_LOG }}/eden-{{ dateext.stdout }}
  register: checkedenbefore
  with_sequence: count=5
  ignore_errors: True

我不知道何时会发布Ansible 2,但您可以使用devel branch from github并查看它是否符合您的需求。

答案 1 :(得分:1)

您可以使用with_nested。

- name: grep the commands from nagios
  shell: grep -R check_http_ /etc/nagios/nrpe.cfg | cut -d= -f2-
  register: nagios_check

- name: check_before
  shell: (printf $(echo '{{ item.0 }}' | awk -F'country=' '{print $2}' | cut -d'&' -f1); printf ' ';{{ item.0 }} | cut -d ' ' -f-2) >> {{ ansible_env.DATA_LOG }}/eden-{{ dateext.stdout }}
  register: checkedenbefore
  with_nested:
   - "{{ nagios_check.stdout_lines }}"
   - "{{ range(0, 5) }}"
  ignore_errors: True