mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-22 21:00:22 -07:00
Fix gathering facts in run_once play (#39453)
* Fix gathering facts in run_once play Fixes https://github.com/ansible/ansible/issues/39312 * Check that run_once doesn't prevent fact gathering
This commit is contained in:
parent
05d5d21d1c
commit
8ac69b0a5f
4 changed files with 43 additions and 0 deletions
|
@ -169,6 +169,9 @@ class PlayIterator:
|
||||||
fact_path = self._play.fact_path
|
fact_path = self._play.fact_path
|
||||||
|
|
||||||
setup_block = Block(play=self._play)
|
setup_block = Block(play=self._play)
|
||||||
|
# Gathering facts with run_once would copy the facts from one host to
|
||||||
|
# the others.
|
||||||
|
setup_block.run_once = False
|
||||||
setup_task = Task(block=setup_block)
|
setup_task = Task(block=setup_block)
|
||||||
setup_task.action = 'setup'
|
setup_task.action = 'setup'
|
||||||
setup_task.name = 'Gathering Facts'
|
setup_task.name = 'Gathering Facts'
|
||||||
|
|
|
@ -5,3 +5,5 @@ set -eux
|
||||||
# ANSIBLE_CACHE_PLUGINS=cache_plugins/ ANSIBLE_CACHE_PLUGIN=none ansible-playbook test_gathering_facts.yml -i ../../inventory -v "$@"
|
# ANSIBLE_CACHE_PLUGINS=cache_plugins/ ANSIBLE_CACHE_PLUGIN=none ansible-playbook test_gathering_facts.yml -i ../../inventory -v "$@"
|
||||||
ansible-playbook test_gathering_facts.yml -i ../../inventory -v "$@"
|
ansible-playbook test_gathering_facts.yml -i ../../inventory -v "$@"
|
||||||
#ANSIBLE_CACHE_PLUGIN=base ansible-playbook test_gathering_facts.yml -i ../../inventory -v "$@"
|
#ANSIBLE_CACHE_PLUGIN=base ansible-playbook test_gathering_facts.yml -i ../../inventory -v "$@"
|
||||||
|
|
||||||
|
ANSIBLE_GATHERING=smart ansible-playbook test_run_once.yml -i ../../inventory -v "$@"
|
||||||
|
|
28
test/integration/targets/gathering_facts/test_run_once.yml
Normal file
28
test/integration/targets/gathering_facts/test_run_once.yml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
- hosts: facthost1
|
||||||
|
gather_facts: no
|
||||||
|
tasks:
|
||||||
|
- name: install test local facts
|
||||||
|
copy:
|
||||||
|
src: uuid.fact
|
||||||
|
dest: /etc/ansible/facts.d/
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
- hosts: facthost1,facthost2
|
||||||
|
gather_facts: yes
|
||||||
|
run_once: yes
|
||||||
|
tasks:
|
||||||
|
- block:
|
||||||
|
- name: 'Check the same host is used'
|
||||||
|
assert:
|
||||||
|
that: 'hostvars.facthost1.ansible_fqdn == hostvars.facthost2.ansible_fqdn'
|
||||||
|
msg: 'This test requires 2 inventory hosts referring to the same host.'
|
||||||
|
- name: "Check that run_once doesn't prevent fact gathering (#39453)"
|
||||||
|
assert:
|
||||||
|
that: 'hostvars.facthost1.ansible_local.uuid != hostvars.facthost2.ansible_local.uuid'
|
||||||
|
msg: "{{ 'Same value for ansible_local.uuid on both hosts: ' ~ hostvars.facthost1.ansible_local.uuid }}"
|
||||||
|
always:
|
||||||
|
- name: remove test local facts
|
||||||
|
file:
|
||||||
|
path: /etc/ansible/facts.d/uuid.fact
|
||||||
|
state: absent
|
10
test/integration/targets/gathering_facts/uuid.fact
Normal file
10
test/integration/targets/gathering_facts/uuid.fact
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
import json
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
|
||||||
|
# return a random string
|
||||||
|
print(json.dumps(str(uuid.uuid4())))
|
Loading…
Add table
Add a link
Reference in a new issue