Как сделать цикл над списком и использовать условие «когда» - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть список пакетов, сохраненных в виде переменной: pkg_list: - dstat - iftop - innotop - MySQL-python - mytop - winrar

У меня возникают трудности при попытке создать задачу для: 1) проверить, установлен ли (используя модуль yum с командой list) 2) создать условие когда в цикле запускается задача, когда пакет недоступен

Я пытаюсь понять, какцикл условий работает над каждым значением / элементом в списке.

pkg_list:
  - dstat
  - iftop
  - innotop
  - MySQL-python
  - mytop
  - winrar

- name: "Check if package is installed - Oracle"
  yum:
    list: "{{ item }}"
  with_items: "{{ pkg_list }}"
  register: pkg_stats
- debug: msg={{ pkg_stats }}

Я предполагаю, что результат должен быть:

  • проверить каждый элемент, если он присутствует

  • для элемента 1, если он отсутствует, сделать это ...

  • для элемента 2, если он отсутствует, сделать это ...

  • и так далее ...

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Вы можете использовать модуль package_facts, чтобы получить информацию о том, какие пакеты установлены. Результат будет сохранен в переменной ansible_facts.packages.

- name: Gather package facts
  package_facts:
    manager: rpm

- name: Show package facts
  debug:
    var: ansible_facts.packages

После этого вы можете иметь задачи, которые зависят от того, установлены пакеты или нет. Например, следующая задача выведет отладочную информацию только для пакетов в вашем списке, которые не установлены:

- name: Print debug info for missing packages
  debug:
    var: item
  with_items: '{{ pkg_list }}'
  when: item not in ansible_facts.packages
0 голосов
/ 30 сентября 2019

Поэтому, не зная, как настроен ваш репозиторий, вы можете столкнуться с дополнительными сложностями из-за этого, но эта задача отладки будет одна: пропустите отладку, если пакет не существует в вашем репо, а затем 2, покажет информацию только еслипакет установлен.

- debug: var=item.results|selectattr('yumstate','equalto','installed')|list
  with_items: "{{ pkg_stats.results }}"
  loop_control:
    label: "{{item.item }}"
  when: item.results | length > 0

Я также добавил элементы управления циклом, потому что этот итератор элементов в ваших выходных данных будет очень уродливым и не очень полезным, если вы не создадите его пару, но егоне требуется для того, что вы пытаетесь сделать.

Так что, если у вас есть несколько репозиториев или несколько версий одного и того же пакета в вашем репозитории, и не зная, что вы делаете дальше, эта задача может не показать все перестановки фильтров и когда, но это должноподойди ближе.

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