Запускайте ANSIBLE задачу только один раз для каждого уникального значения факта

Я хотел бы добавить также решение для Cygwin :

Вам нужно установить пакет python2-devel или python3-devel, в зависимости от версии Python, которую вы с помощью.

Вы можете быстро установить его с помощью 32-битного или 64-битного setup.exe (в зависимости от вашей установки) из Cygwin. com .

Пример (измените имя файла setup.exe и основную версию Python, если вам нужно):

$ setup.exe -q --packages=python3-devel

Вы также можете проверить мои другие answer еще несколько вариантов установки пакетов Cygwin из командной строки.

0
задан k3it 21 February 2019 в 03:14
поделиться

2 ответа

Вариант будет

  • group_by cluster_number
  • run_once цикл по номерам кластеров
  • и выберите первого хоста из каждой группы.

Например, учитывая хостов

[test]
test01 cluster_number='1'
test02 cluster_number='1'
test03 cluster_number='1'
test04 cluster_number='1'
test05 cluster_number='1'
test06 cluster_number='2'
test07 cluster_number='2'
test08 cluster_number='2'
test09 cluster_number='3'
test10 cluster_number='3'
[test:vars]
cluster_numbers=['1','2','3']

, следующая книга воспроизведения

- hosts: all
  gather_facts: no
  tasks:
    - group_by: key=cluster_{{ cluster_number }}
    - debug: var=groups['cluster_{{ item }}'][0]
      loop:  "{{ cluster_numbers }}"
      run_once: true

дает

> ansible-playbook test.yml | grep groups
"groups['cluster_1'][0]": "test01", 
"groups['cluster_2'][0]": "test06", 
"groups['cluster_3'][0]": "test09",

выполнить задачи в целях include_tasks (вместо отладки в цикле выше) и делегат_ в цели

- set_fact:
    my_group: "cluster_{{ item }}"
- command: hostname
  delegate_to: "{{ groups[my_group][0] }}"

Примечание: собрать список cluster_numbers [1110 ] из инвентаря

cluster_numbers: "{{ hostvars|json_query('*.cluster_number')|unique }}"
0
ответ дан Vladimir Botka 21 February 2019 в 03:14
поделиться

Если вы не возражаете, загромождение логов в игре, вот один из способов:

- hosts: all
  gather_facts: no
  serial: 1
  tasks:
    - group_by:
        key: "single_{{ cluster_number }}"
      when: groups['single_'+cluster_number] | default([]) | count == 0

- hosts: single_*
  gather_facts: no
  tasks:
    - debug:
        msg: "{{ inventory_hostname }}"

serial: 1 крайне важно в первой игре переоценить оператор when для каждого хоста.

После первой игры у вас будет N групп для каждого кластера, в котором будет только один хост.

0
ответ дан Konstantin Suvorov 21 February 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: