public List<string> InstalledPrinters
{
get
{
return (from PrintQueue printer in new LocalPrintServer().GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local,
EnumeratedPrintQueueTypes.Connections }).ToList()
select printer.Name).ToList();
}
}
Решение
Вам нужно перетасовать элементы группы и сначала выбрать три. Выражение 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:
Как насчет этого?
---
- 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
, поскольку он устарел.
Примечание. Я сохранил книгу с
blockquote>connection:ciscos
вместоlocalhost
для обучения и отображения переменныхansible_play_batch
иmax_index
. Лучше иметь локальную игру сgroups
вместоdelegate_to:localhost