From 0cb8a93e38ded581fb8a3cfe4811017a666cdd7a Mon Sep 17 00:00:00 2001 From: Pierre Riteau Date: Tue, 29 Aug 2023 16:53:49 +0200 Subject: [PATCH] Speed up calls to Bifrost For overcloud commands involving Bifrost (e.g. overcloud provision), we use the Bifrost dynamic inventory. This runs bifrost_inventory.py which gathers node and port information for all bare metal hosts. Because this gets executed for each node in our inventory, it produces a large number of API requests to Ironic, which grows as the number of hosts increases. Halve the number of calls using the BIFROST_NODE_NAMES environment variable, which restricts fetching port information to just the node being queried. bifrost_inventory.py still performs one call for each node, which must be fixed separately in Bifrost [1]. Time to query overcloud nodes' hardware introspection data for 44 hosts: * before patch: 823 seconds * after patch: 415 seconds With the patch to Bifrost [1], this is further reduced to 46 seconds. [1] https://review.opendev.org/c/openstack/bifrost/+/882950 Change-Id: I341075115442a38c327e3ade74b81b1b9e7e85c6 (cherry picked from commit 3e03884c476604a717c1fa5fb35771f60e39dd8f) --- ansible/overcloud-bios-raid.yml | 2 ++ ansible/overcloud-deprovision.yml | 3 +++ ansible/overcloud-hardware-inspect.yml | 4 ++++ ansible/overcloud-introspection-data-save.yml | 2 +- ansible/overcloud-provision.yml | 4 ++++ releasenotes/notes/bifrost-speedup-9902552b86150ad4.yaml | 5 +++++ 6 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/bifrost-speedup-9902552b86150ad4.yaml diff --git a/ansible/overcloud-bios-raid.yml b/ansible/overcloud-bios-raid.yml index 8d657a9b7..efa25ad42 100644 --- a/ansible/overcloud-bios-raid.yml +++ b/ansible/overcloud-bios-raid.yml @@ -71,6 +71,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal --connection local --inventory /etc/bifrost/inventory/ @@ -102,6 +103,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal --connection local --inventory /etc/bifrost/inventory/ diff --git a/ansible/overcloud-deprovision.yml b/ansible/overcloud-deprovision.yml index e907508e0..76bd34459 100644 --- a/ansible/overcloud-deprovision.yml +++ b/ansible/overcloud-deprovision.yml @@ -38,6 +38,7 @@ export OS_CLOUD=bifrost && export OS_BAREMETAL_API_VERSION=1.34 && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal --connection local --inventory /etc/bifrost/inventory/ @@ -72,6 +73,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal -vvvv --connection local --inventory /etc/bifrost/inventory/ @@ -98,6 +100,7 @@ export OS_CLOUD=bifrost && export OS_BAREMETAL_API_VERSION=1.34 && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal --connection local --inventory /etc/bifrost/inventory/ diff --git a/ansible/overcloud-hardware-inspect.yml b/ansible/overcloud-hardware-inspect.yml index e784f201a..3477b7c15 100644 --- a/ansible/overcloud-hardware-inspect.yml +++ b/ansible/overcloud-hardware-inspect.yml @@ -32,6 +32,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal --connection local --inventory /etc/bifrost/inventory/ @@ -66,6 +67,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal -vvvv --connection local --inventory /etc/bifrost/inventory/ @@ -91,6 +93,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal -vvvv --connection local --inventory /etc/bifrost/inventory/ @@ -115,6 +118,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal --connection local --inventory /etc/bifrost/inventory/ diff --git a/ansible/overcloud-introspection-data-save.yml b/ansible/overcloud-introspection-data-save.yml index 25c0d3600..945567b8a 100644 --- a/ansible/overcloud-introspection-data-save.yml +++ b/ansible/overcloud-introspection-data-save.yml @@ -13,7 +13,7 @@ command: > docker exec bifrost_deploy bash -c ' - env BIFROST_INVENTORY_SOURCE=ironic OS_CLOUD=bifrost + env BIFROST_INVENTORY_SOURCE=ironic BIFROST_NODE_NAMES="{{ inventory_hostname }}" OS_CLOUD=bifrost ansible baremetal --connection local --inventory /etc/bifrost/inventory/ diff --git a/ansible/overcloud-provision.yml b/ansible/overcloud-provision.yml index d1536de30..20ef8be93 100644 --- a/ansible/overcloud-provision.yml +++ b/ansible/overcloud-provision.yml @@ -43,6 +43,7 @@ export OS_CLOUD=bifrost && export OS_BAREMETAL_API_VERSION=1.34 && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal --connection local --inventory /etc/bifrost/inventory/ @@ -77,6 +78,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal -vvvv --connection local --inventory /etc/bifrost/inventory/ @@ -102,6 +104,7 @@ bash -c ' export OS_CLOUD=bifrost && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal -vvvv --connection local --inventory /etc/bifrost/inventory/ @@ -166,6 +169,7 @@ export OS_CLOUD=bifrost && export OS_BAREMETAL_API_VERSION=1.34 && export BIFROST_INVENTORY_SOURCE=ironic && + export BIFROST_NODE_NAMES="{{ inventory_hostname }}" && ansible baremetal --connection local --inventory /etc/bifrost/inventory/ diff --git a/releasenotes/notes/bifrost-speedup-9902552b86150ad4.yaml b/releasenotes/notes/bifrost-speedup-9902552b86150ad4.yaml new file mode 100644 index 000000000..2f1473fe7 --- /dev/null +++ b/releasenotes/notes/bifrost-speedup-9902552b86150ad4.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Improves performance of Bifrost operations by preventing unnecessary + requests to the Ironic API.