** Обновление ** реальный ответ:
На узле 2 и 3 выполняют:
$: touch /tmp/hi
анзибль:
- stat:
path: /tmp/hi
register: me
- set_fact:
run_on: "{{ item }}"
with_items: "{{ play_hosts }}"
when: run_on is undefined and hostvars[item].me.stat.exists
run_once: true
- shell: echo
when: inventory_hostname == run_on
** Ниже приведен старый answe r **
Хорошо, все готово. Это не очень хороший метод, но он выполняет свою работу. Это freaking bitc * h, потому что вы не можете просто нацеливать хосты в игре или устанавливать глобальные переменные для хостов в роли.
Единственное, что есть у хозяев, - это окончательное число. Это либо 1, 2, либо 3. И можно установить переменные для других хостов в игре.
Надеюсь, что я смогу спасти другого человека с этим когда-нибудь.
Здесь мы идем:
- hosts:
- node1
- node2
- node3
tasks:
- name: some command to check on host for TRUE or false
shell: somecommand
register: commando
- name: set fact where stat is false
set_fact:
theCheck: present
when: commando.stat.exists == false
- name: echo the hostnames, for convience and shorter naming
shell: hostname
register: hn
changed_when: false
# First host check
- name: check if 1st node is applicable
set_fact:
firstNode: True
when: "{{ hn.stdout | last | last }} == 1 and theCheck is defined"
- name: set a fact for all hosts in play
set_fact:
checkFirst: "{{ hostvars[groups['all'][0]]['firstNode'] | default(False) }}"
- name: perform task if applicable on first host
shell: echo
when: firstNode is defined
# Second host check
- name: check if 2nd node is applicable host
set_fact:
secondNode: present
when: "{{ hn.stdout | last | last }} == 2 and theCheck is defined and checkFirst == False"
- name: set a fact for all hosts in play
set_fact:
checkSecond: "{{ hostvars[groups['all'][1]]['secondNode'] | default(False) }}"
- name: perform task on second node if applicable
shell: echo
when: secondNode is defined
# Third host check
- name: perform task on third node if applicable
shell: echo
when: "{{ hn.stdout | last | last }} == 3 and mongoSlaves is defined and checkSecond == False"
register: thirdNode
### EXTRA
- name: perform task on first node if not selected
shell: another echo
when: "{{ hn.stdout | last | last }} == 1 and firstNode is not defined"
- name: perform task on secondary node if not selected
shell: another echo
when: "{{ hn.stdout | last | last }} == 2 and secondNode is not defined"
- name: perform task on third node if not selected
shell: another echo
when: "{{ hn.stdout | last | last }} == 3 and thirdNode is not defined"
вам нужно выполнить задачу на каждом хосте, который имеет 'variable.stdout == false' ли? –
Только один хост. И не «случайный». – Kevin