Решение
Вам нужно перетасовать элементы группы и сначала выбрать три. Выражение 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: