diff --git a/playbooks/common-tasks/dynamic-address-fact.yml b/playbooks/common-tasks/dynamic-address-fact.yml index f8087fab87..0a42190df2 100644 --- a/playbooks/common-tasks/dynamic-address-fact.yml +++ b/playbooks/common-tasks/dynamic-address-fact.yml @@ -13,13 +13,21 @@ # See the License for the specific language governing permissions and # limitations under the License. +- name: Gathering facts for {{ network_address }} interface on metal hosts + setup: + gather_subset: "!all,network" + filter: "{{ dynamic_address_gather_filter | default(('ansible_' ~ container_networks[network_address]['bridge']) | replace('-','_')) }}" + when: + - is_metal + - (dynamic_address_gather_filter is defined) or (container_networks[network_address] is defined and container_networks[network_address]['bridge'] is defined) + - name: Set IP to use for {{ network_address }} set_fact: "{{ network_address }}={{ hostvars[inventory_hostname] | json_query(query) }}" vars: query: "{{ is_metal | ternary(metal_query, non_metal_query) }}" non_metal_query: "container_networks.{{ network_address }}.address || ansible_host" find_bridge: "container_networks.{{ network_address }}.bridge" - metal_query: "\"ansible_{{ hostvars[inventory_hostname] | json_query(find_bridge) | replace('-','_') }}\".ipv4.address || {{ non_metal_query }}" + metal_query: "ansible_facts.\"{{ hostvars[inventory_hostname] | json_query(find_bridge) | replace('-','_') }}\".ipv4.address || {{ non_metal_query }}" tags: - common-address - always diff --git a/releasenotes/notes/dynamic-address-facts-988abe70b2a5df90.yaml b/releasenotes/notes/dynamic-address-facts-988abe70b2a5df90.yaml new file mode 100644 index 0000000000..fc15b7f9c1 --- /dev/null +++ b/releasenotes/notes/dynamic-address-facts-988abe70b2a5df90.yaml @@ -0,0 +1,19 @@ +--- +features: + - | + Only minimal facts are gathered when calculating the 'dynamic address fact' + for the neutron, nova and cinder playbooks. On compute and network nodes + this previously took a significant amount of time, and gathering minimal + facts will speed this up. Facts are instead gathered for interfaces + specified in provider_networks for the storage, overlay and management + networks. +upgrade: + - | + Only minimal facts are gathered when calculating the 'dynamic address fact' + for the neutron, nova and cinder playbooks. If overrides are in use for + setting the neutron tunnel address, or various storage or management + addresses which rely on ansible fact gathering to provide variables of the + form ansible_, it is likley that these facts will no longer be + gathered by default. The new variable dynamic_address_gather_filter is + available to specify a shell-style (fnmatch) wildcard to specify the set + of facts gathered early in the neutron/nova/cinder playbooks.