Как я могу выполнить al oop для include_tasks или многих задач, а условие - это переменная при записи ansible playbook - PullRequest
0 голосов
/ 14 июля 2020

Я пробовал:

- name: set passed
  set_fact:
      i: 0
- name: test
  include_tasks: test2.yml
  until: i == 3

в test2.yml:

- name: set i
  set_fact:
    i: '{{ i|int + 1 }}'

Но, похоже, «до» нельзя использовать в include_tasks, можно использовать только для одиночных задача, но мне нужно l oop набор задач.

Затем я попробовал что-то вроде:

 - name: test
   include_tasks: test2.yml
   loop: [1,2,3,4]
   when: i != 3

Но, похоже, условие «когда» проверено только один раз, так что все выполняются 4 цикла.

Решение?

Спасибо.

1 Ответ

0 голосов
/ 14 июля 2020

Во-первых, перед тем, как дать вам возможность писать циклы в Ansible, небольшой совет. НЕ ЗАПИСЫВАЙТЕ ПРОГРАММЫ В ANSIBLE. Каждый раз, когда вы пытаетесь использовать l oop с большим списком задач, вы вносите более тонкую сложность в свои playbooks, что заставит вас страдать позже.

Большинство задач, которые вы хотите выполнять со списками, можно выполнить как серия операций над списком. Например, если у вас есть foo: [1,2,3,4], и вы хотите создать каталоги с этими именами и отправить эти имена на удаленный сервер, лучше написать так:

- name: Creating dirs
  file:
    state: directory
    name: '{{ item }}'
  loop: '{{ foo }}'
  when: item != 3

- name: Sending to remote
  uri:
    url: 'http://example.com/{{ item }}'
  loop: '{{ foo }}'
  when: item != 3

Этот код можно поддерживать, и он относительно прост. отлаживать. Итак, вот что вы хотите сделать, включает:

tasklist.yaml:

 - file:
     state: directory
     name: '{{ item }}'
 - uri:
     url: 'http://example.com/{{ item }}'

внешний список задач:

 - include_tasks: tasklist.yaml
   loop: '{{ foo }}'
   when: item != 3

когда оценивается на каждом run, но вам нужно поместить туда какой-то неинвариант, например, item (переменная magi c для l oop для создания).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...