Несчастные пять случайных хостов из / etc / ansible / hosts

    public List<string>  InstalledPrinters
    {
        get
        {
            return (from PrintQueue printer in new LocalPrintServer().GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local,
                EnumeratedPrintQueueTypes.Connections }).ToList()
                    select printer.Name).ToList(); 
        } 
    }
0
задан Elsopapa 13 July 2018 в 22:29
поделиться

2 ответа

Решение

Вам нужно перетасовать элементы группы и сначала выбрать три. Выражение Jinja2 для этого:

(groups['ciscos'] | shuffle)[0:3]

Реализация, которая должна работать, но имеет проблемы

Вы должны просто фильтровать группу в объявлении hosts :

- hosts: "{{ (groups['ciscos'] | shuffle)[0:3] }}"
  gather_facts: no
  tasks:
    - debug:

Однако результаты неточны - хотя игра показывает как работает против трех случайно выбранных хостов, задачи иногда выполняются на 1, 2, 3 или 0:

PLAY [[u'stagin2', u'stagin4', u'stagin5']] *******************************************************************************

TASK [debug] **************************************************************************************************************
ok: [stagin2] => {
    "msg": "Hello world!"
}
ok: [stagin5] => {
    "msg": "Hello world!"
}

Обходной путь (реализация, которая работает)

Используйте модуль add_host для создания отфильтрованной группы:

- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
    - add_host:
        name: "{{ item }}"
        groups: limited_selection
      loop:  "{{ (groups['ciscos'] | shuffle)[0:3] }}"

- hosts: limited_selection
  gather_facts: no
  tasks:
    - debug:
0
ответ дан techraf 17 August 2018 в 12:06
поделиться
  • 1
    его не работает со смертельным исходом: [stagin]: FAILED! = & GT; {«failed»: true, «msg»: «Неожиданный сбой при поиске поиска с именем« {{groups ['ciscos'] | shuffle] [0: 3]}} 'в доступных плагинах просмотра "} – Elsopapa 16 July 2018 в 16:34
  • 2
    Какую версию Ansible вы используете? – techraf 16 July 2018 в 16:37
  • 3
    ansible --version ansible 2.2.1.0 config file = /etc/ansible/ansible.cfg настраиваемый путь поиска модуля = по умолчанию без переопределений – Elsopapa 17 July 2018 в 19:55
  • 4
    Как насчет использования текущей версии? – techraf 17 July 2018 в 19:56
  • 5
    спасибо, это была проблема. Это работает сейчас! , – Elsopapa 17 July 2018 в 20:17

Как насчет этого?

---
- hosts: ciscos
  gather_facts: False
  connection: local

  tasks:

    - name: Fact My Inventory
      set_fact:
        myinventory: "{{ ansible_play_batch | shuffle }}"
      run_once: True
      delegate_to: localhost

    - name: Fact limited_selection
      set_fact:
        limited_selection: "{{ myinventory[0:max_index|int] }}"
      run_once: True
      delegate_to: localhost

    - name: Create Inventory
      add_host:
        name: '{{ item }}'
        groups: limited_selection
      with_items: "{{ limited_selection }}"
      delegate_to: localhost

- hosts: limited_selection
  gather_facts: no

  tasks:
    - name: Debug
      debug:
        msg: "I'm in the limited selection group!"

Будьте осторожны с play_hosts, поскольку он устарел.

Примечание. Я сохранил книгу с connection:ciscos вместо localhost для обучения и отображения переменных ansible_play_batch и max_index. Лучше иметь локальную игру с groups вместо delegate_to:localhost

0
ответ дан imjoseangel 17 August 2018 в 12:06
поделиться
Другие вопросы по тегам:

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