{"id":19120,"date":"2023-11-05T20:34:15","date_gmt":"2023-11-05T17:34:15","guid":{"rendered":"https:\/\/kifarunix.com\/?p=19120"},"modified":"2024-03-10T15:13:02","modified_gmt":"2024-03-10T12:13:02","slug":"add-compute-nodes-into-openstack-using-kolla-ansible","status":"publish","type":"post","link":"https:\/\/kifarunix.com\/add-compute-nodes-into-openstack-using-kolla-ansible\/","title":{"rendered":"Add Compute Nodes into OpenStack using Kolla-Ansible"},"content":{"rendered":"\n<p>Is it possible to add compute nodes into OpenStack using <a href=\"https:\/\/docs.openstack.org\/kolla-ansible\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kolla-Ansible<\/a>? Yes, definitely. In this step-by-step guide, you will learn how to add compute nodes into an existing <a href=\"https:\/\/docs.openstack.org\/kolla-ansible\/latest\/user\/quickstart.html\" target=\"_blank\" rel=\"noreferrer noopener\">OpenStack<\/a> deployment using Kolla-Ansible. Kolla-Ansible, a cutting-edge tool in the world of cloud orchestration, simplifies the process of integrating additional compute nodes into an existing OpenStack deployment seamlessly.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Table of Contents<\/h2><nav><ul><li><a href=\"#adding-compute-nodes-into-open-stack-using-kolla-ansible\">Adding Compute Nodes into OpenStack using Kolla-Ansible<\/a><ul><li><a href=\"#prepare-the-nodes-for-addition-into-open-stack\">Prepare the Nodes for Addition into OpenStack<\/a><\/li><li><a href=\"#copy-deployment-user-ssh-keys-from-control-node-to-new-compute-node\">Copy Deployment User SSH Keys from Control Node to New Compute Node<\/a><\/li><li><a href=\"#update-kolla-ansible-inventory\">Update Kolla-Ansible Inventory<\/a><\/li><li><a href=\"#activate-kolla-ansible-virtual-environment\">Activate Kolla-Ansible Virtual Environment<\/a><\/li><li><a href=\"#test-connectivity-to-the-node\">Test Connectivity to the Node<\/a><\/li><li><a href=\"#bootstrap-the-new-compute-node\">Bootstrap the new compute node<\/a><\/li><li><a href=\"#run-pre-deployment-checks-on-the-host\">Run Pre-Deployment Checks on the Host<\/a><\/li><li><a href=\"#deploy-docker-containers-for-required-services-on-the-new-node\">Deploy Docker Containers for Required Services on the new Node<\/a><\/li><li><a href=\"#verify-new-node-addition-to-open-stack\">Verify New Node Addition to OpenStack<\/a><\/li><li><a href=\"#launch-an-instance-to-check-if-it-boots-on-new-compute-node\">Launch An Instance to Check if it boots on New Compute Node<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"adding-compute-nodes-into-open-stack-using-kolla-ansible\">Adding Compute Nodes into OpenStack using Kolla-Ansible<\/h2>\n\n\n\n<p>In our previous guide, we learnt how to <a href=\"https:\/\/kifarunix.com\/deploy-multinode-openstack-using-kolla-ansible\/\" target=\"_blank\" rel=\"noreferrer noopener\">deploy multinode OpenStack<\/a> with three node, Controller, Storage and compute nodes, using Kolla-Ansible.<\/p>\n\n\n\n<p>When you speak about openstack compute, there are two terms that can be interchangeably used. These terms are <strong>compute node<\/strong> and <strong>compute host<\/strong>.<\/p>\n\n\n\n<p><strong>Compute Node<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A compute node, also known as a compute server or hypervisor host, is a physical or virtual server that runs virtual machines (VMs). It provides the computational resources, such as CPU, memory, and storage, for running VMs. Compute nodes are responsible for creating, terminating, and managing VMs, including tasks like scheduling and resource allocation.<\/li>\n\n\n\n<li>In OpenStack, a compute node runs the Nova Compute service and is part of the compute resource pool available for launching and managing VMs.<\/li>\n<\/ul>\n\n\n\n<p><strong>Compute Host<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A compute host is a term that can be used interchangeably with a compute node in some contexts. However, in other cases, a compute host might refer to the physical or virtual machine that acts as a host for multiple compute nodes.<\/li>\n\n\n\n<li>For example, in a scenario where multiple compute nodes run on a single physical server or hypervisor, that physical server could be referred to as the compute host.<\/li>\n<\/ul>\n\n\n\n<p>Let&#8217;s confirm the number of compute nodes we currently have in our deployment<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>source $HOME\/kolla-ansible\/bin\/activate<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>source \/etc\/kolla\/admin-openrc.sh<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>openstack hypervisor list<\/code><\/pre>\n\n\n\n<p>Sample output;<\/p>\n\n\n\n<pre class=\"scroll-sz\"><code>+--------------------------------------+---------------------+-----------------+-----------------+-------+\n| ID                                   | Hypervisor Hostname | Hypervisor Type | Host IP         | State |\n+--------------------------------------+---------------------+-----------------+-----------------+-------+\n| 6aa76044-d456-4c3b-8f28-fcfc7e79b658 | compute01           | QEMU            | 192.168.200.202 | up    |\n+--------------------------------------+---------------------+-----------------+-----------------+-------+\n<\/code><\/pre>\n\n\n\n<p>As you can see, we only have one single compute node at the moment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"prepare-the-nodes-for-addition-into-open-stack\">Prepare the Nodes for Addition into OpenStack<\/h3>\n\n\n\n<p>Well, since we are using Kolla-Ansible for deployment, most of the pre-requisites will be taken care by Kolla-Ansible.<\/p>\n\n\n\n<p>However, the fresh installation, initial IP assignent to the node, hostname, creation of first user accounts, you need to do this yourself (You can automate if you want).<\/p>\n\n\n\n<p>Also, I would recommend that you use same OS version for uniformity across the cluster and easy management. We are running Ubuntu 22.04 LTS<\/p>\n\n\n\n<p>Based on our basic deployment architecture;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>------------------+---------------------------------------------+--------------------------------+ \n                  |                                             |                                |\n+-----------------+-------------------------+     +-------------+-------------+     +------------+--------------+ \n|        [ Controller Node ]                |     |     [ Compute01 Node ]    |     |    [ Storage01 Node ]     |\n|                                           |     |                           |     |                           |\n|        br0: VIP and Mgt IP                |     |  enp1s0: 192.168.200.202  |     |  enp1s0: 192.168.200.201  |\n|             VIP: 192.168.200.254          |     |  enp2s0: 10.100.0.110\/24  |     |                           |\n|             Mgt IP: 192.168.200.200       |     +---------------------------+     +---------------------------+\n|        br-ex: Provider Network            |\n|               10.100.0.100\/24             |\n+-------------------------------------------+\n<\/code><\/pre>\n\n\n\n<p>we have setup our node, assigned the IP addresses, create required user account with required sudo rights. Our basic architecture will now look like;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>------------------+---------------------------------------------+--------------------------------+----------------------------------+\n                  |                                             |                                |                                  |\n+-----------------+-------------------------+     +-------------+-------------+     +------------+--------------+     +-------------+-------------+\n|        [ Controller Node ]                |     |     [ Compute01 Node ]    |     |    [ Storage01 Node ]     |     |     [ Compute02 Node ]    |\n|                                           |     |                           |     |                           |     |                           |\n|        br0: VIP and Mgt IP                |     |  enp1s0: 192.168.200.202  |     |  enp1s0: 192.168.200.201  |     |  enp1s0: 192.168.200.203  |\n|             VIP: 192.168.200.254          |     |  enp2s0: 10.100.0.110\/24  |     |                           |     |  enp2s0: 10.100.0.111\/24  |\n|             Mgt IP: 192.168.200.200       |     +---------------------------+     +---------------------------+     +---------------------------+\n|        br-ex: Provider Network            |\n|               10.100.0.100\/24             |\n+-------------------------------------------+\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"copy-deployment-user-ssh-keys-from-control-node-to-new-compute-node\">Copy Deployment User SSH Keys from Control Node to New Compute Node<\/h3>\n\n\n\n<p>Your control node is the node where you are running Kolla-ansible. In our setup, we are running Kolla-ansible in our controller node.<\/p>\n\n\n\n<p>In regards to the deployment user, if you are not using SSH keys, you need to define the username and password in the multinode configuration file for the respective compute to define how Kolla-Ansible will login to configure that respective node.<\/p>\n\n\n\n<p>We are using SSH keys on our guide which we already generated while <a href=\"https:\/\/kifarunix.com\/deploy-multinode-openstack-using-kolla-ansible\/#create-kolla-ansible-deployment-user-account\" target=\"_blank\" rel=\"noreferrer noopener\">creating Kolla-Ansible Deployment User Account<\/a>.<\/p>\n\n\n\n<p>Hence, let just copy the SSH keys into the new compute node.<\/p>\n\n\n\n<p>First of all, let&#8217;s ensure the new compute node is reachable via the hostname from the control node.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tee -a \/etc\/hosts &lt;&lt; EOL\n192.168.200.203 compute02\nEOL<\/code><\/pre>\n\n\n\n<p>Let&#8217;s confirm reachability;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ping compute02 -c 4<\/code><\/pre>\n\n\n\n<pre class=\"scroll-box\"><code>PING compute02 (192.168.200.203) 56(84) bytes of data.\n64 bytes from compute02 (192.168.200.203): icmp_seq=1 ttl=64 time=0.182 ms\n64 bytes from compute02 (192.168.200.203): icmp_seq=2 ttl=64 time=0.421 ms\n64 bytes from compute02 (192.168.200.203): icmp_seq=3 ttl=64 time=0.176 ms\n64 bytes from compute02 (192.168.200.203): icmp_seq=4 ttl=64 time=0.446 ms\n\n--- compute02 ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 3082ms\nrtt min\/avg\/max\/mdev = 0.176\/0.306\/0.446\/0.127 ms\n\n<\/code><\/pre>\n\n\n\n<p>Next, copy the keys;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-copy-id kifarunix@compute02<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"update-kolla-ansible-inventory\">Update Kolla-Ansible Inventory<\/h3>\n\n\n\n<p>Since we are running a multinode deployment, open the <strong>multinode<\/strong> inventory and add your new compute node.<\/p>\n\n\n\n<p>This is a snippet of how our multinode inventory looks like before we add the new compute node;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat multinode<\/code><\/pre>\n\n\n\n<pre class=\"scroll-box\"><code># These initial groups are the only groups required to be modified. The\n# additional groups are for more control of the environment.\n[control]\ncontroller01 ansible_connection=local neutron_external_interface=vethext\n\n# The above can also be specified as follows:\n#control[01:03]     ansible_user=kolla\n\n# The network nodes are where your l3-agent and loadbalancers will run\n# This can be the same as a host in the control group\n[network]\ncontroller01 ansible_connection=local neutron_external_interface=vethext network_interface=br0\n\n[compute]\ncompute01 neutron_external_interface=enp2s0 network_interface=enp1s0\n\n\n[monitoring]\ncontroller01 ansible_connection=local neutron_external_interface=vethext\n\n# When compute nodes and control nodes use different interfaces,\n# you need to comment out \"api_interface\" and other interfaces from the globals.yml\n# and specify like below:\n#compute01 neutron_external_interface=eth0 api_interface=em1 tunnel_interface=em1\n\n[storage]\nstorage01 neutron_external_interface=enp10s0 network_interface=enp1s0\n\n[deployment]\nlocalhost       ansible_connection=local\n\n[baremetal:children]\ncontrol\nnetwork\ncompute\nstorage\nmonitoring\n\n[tls-backend:children]\ncontrol\n\n# You can explicitly specify which hosts run each project by updating the\n# groups in the sections below. Common services are grouped together.\n\n[common:children]\ncontrol\nnetwork\ncompute\nstorage\nmonitoring\n...\n<\/code><\/pre>\n\n\n\n<p>So, we will update the <strong>[compute]<\/strong> group to add our new node such that the configuration looks like;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vim multinode<\/code><\/pre>\n\n\n\n<pre class=\"scroll-box\"><code># These initial groups are the only groups required to be modified. The\n# additional groups are for more control of the environment.\n[control]\ncontroller01 ansible_connection=local neutron_external_interface=vethext\n\n# The above can also be specified as follows:\n#control[01:03]     ansible_user=kolla\n\n# The network nodes are where your l3-agent and loadbalancers will run\n# This can be the same as a host in the control group\n[network]\ncontroller01 ansible_connection=local neutron_external_interface=vethext network_interface=br0\n\n[compute]\ncompute01 neutron_external_interface=enp2s0 network_interface=enp1s0\n<strong>compute02 neutron_external_interface=enp2s0 network_interface=enp1s0<\/strong>\n\n[monitoring]\ncontroller01 ansible_connection=local neutron_external_interface=vethext\n\n# When compute nodes and control nodes use different interfaces,\n# you need to comment out \"api_interface\" and other interfaces from the globals.yml\n# and specify like below:\n#compute01 neutron_external_interface=eth0 api_interface=em1 tunnel_interface=em1\n\n[storage]\nstorage01 neutron_external_interface=enp10s0 network_interface=enp1s0\n\n[deployment]\nlocalhost       ansible_connection=local\n\n[baremetal:children]\ncontrol\nnetwork\ncompute\nstorage\nmonitoring\n\n[tls-backend:children]\ncontrol\n\n# You can explicitly specify which hosts run each project by updating the\n# groups in the sections below. Common services are grouped together.\n\n[common:children]\ncontrol\nnetwork\ncompute\nstorage\nmonitoring\n...\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"activate-kolla-ansible-virtual-environment\">Activate Kolla-Ansible Virtual Environment<\/h3>\n\n\n\n<p>Activate your respective virtual environment;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>source ~\/kolla-ansible\/bin\/activate<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"test-connectivity-to-the-node\">Test Connectivity to the Node<\/h3>\n\n\n\n<p>Execute the Ansible command below to check the reachability of node in your inventory using the Ansible <code>ping<\/code> module.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible -i multinode -m ping compute02<\/code><\/pre>\n\n\n\n<p>Sample output;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>compute02 | SUCCESS => {\n    \"ansible_facts\": {\n        \"discovered_interpreter_python\": \"\/usr\/bin\/python3\"\n    },\n    \"changed\": false,\n    \"ping\": \"pong\"\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"bootstrap-the-new-compute-node\">Bootstrap the new compute node<\/h3>\n\n\n\n<p>You need to bootstrap your server with kolla deploy dependencies by running the command below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kolla-ansible -i &lt;inventory&gt; bootstrap-servers &#91; --limit &lt;limit&gt; ]<\/code><\/pre>\n\n\n\n<p>Replace the <strong><code>&lt;inventory&gt;<\/code><\/strong> with your inventory file and <strong><code>&lt;limit&gt;<\/code><\/strong> with the compute node hostname defined in the inventory.<\/p>\n\n\n\n<p>Be cautious about re-bootstrapping a cloud that has already been boostrapped. See some <a href=\"https:\/\/docs.openstack.org\/kolla-ansible\/latest\/reference\/deployment-and-bootstrapping\/bootstrap-servers.html#rebootstrapping\" target=\"_blank\" rel=\"noreferrer noopener\">considerations for reboostrapping<\/a>.<\/p>\n\n\n\n<p>Thus, our command will look like;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kolla-ansible -i multinode bootstrap-servers --limit compute02<\/code><\/pre>\n\n\n\n<p>If you are adding multiple compute nodes;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kolla-ansible -i multinode bootstrap-servers --limit compute02,compute03,compute0N<\/code><\/pre>\n\n\n\n<p>Sample output;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>Bootstrapping servers : ansible-playbook -e @\/etc\/kolla\/globals.yml  -e @\/etc\/kolla\/passwords.yml -e CONFIG_DIR=\/etc\/kolla  --limit compute02 -e kolla_action=bootstrap-servers \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/kolla-host.yml  --inventory multinode\n[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details\n\nPLAY [Gather facts for all hosts] *******************************************************************************************************************************************\n\nTASK [Gather facts] *********************************************************************************************************************************************************\nok: [compute02]\n\nTASK [Gather package facts] *************************************************************************************************************************************************\nskipping: [compute02]\n\nTASK [Group hosts to determine when using --limit] **************************************************************************************************************************\nok: [compute02]\n\nPLAY [Gather facts for all hosts (if using --limit)] ************************************************************************************************************************\n\nTASK [Gather facts] *********************************************************************************************************************************************************\nskipping: [compute02] => (item=compute02) \nok: [compute02 -> controller01] => (item=controller01)\nok: [compute02 -> compute01] => (item=compute01)\nok: [compute02 -> storage01] => (item=storage01)\nok: [compute02 -> localhost] => (item=localhost)\n\nTASK [Gather package facts] *************************************************************************************************************************************************\nskipping: [compute02] => (item=compute02) \nskipping: [compute02] => (item=controller01) \nskipping: [compute02] => (item=compute01) \nskipping: [compute02] => (item=storage01) \nskipping: [compute02] => (item=localhost) \nskipping: [compute02]\n\nPLAY [Apply role baremetal] *************************************************************************************************************************************************\n\nTASK [openstack.kolla.etc_hosts : Include etc-hosts.yml] ********************************************************************************************************************\nincluded: \/home\/kifarunix\/.ansible\/collections\/ansible_collections\/openstack\/kolla\/roles\/etc_hosts\/tasks\/etc-hosts.yml for compute02\n\nTASK [openstack.kolla.etc_hosts : Ensure localhost in \/etc\/hosts] ***********************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.etc_hosts : Ensure hostname does not point to 127.0.1.1 in \/etc\/hosts] ********************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.etc_hosts : Generate \/etc\/hosts for all of the nodes] *************************************************************************************************\n[WARNING]: Module remote_tmp \/root\/.ansible\/tmp did not exist and was created with a mode of 0700, this may cause issues when running as another user. To avoid this, create\nthe remote_tmp dir with the correct permissions manually\nchanged: [compute02]\n\nTASK [openstack.kolla.etc_hosts : Check whether \/etc\/cloud\/cloud.cfg exists] ************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.etc_hosts : Disable cloud-init manage_etc_hosts] ******************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.baremetal : Ensure unprivileged users can use ping] ***************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.baremetal : Set firewall default policy] **************************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.baremetal : Check if firewalld is installed] **********************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.baremetal : Disable firewalld] ************************************************************************************************************************\nskipping: [compute02] => (item=firewalld) \nskipping: [compute02]\n\nTASK [openstack.kolla.packages : Install packages] **************************************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.packages : Remove packages] ***************************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : include_tasks] *******************************************************************************************************************************\nincluded: \/home\/kifarunix\/.ansible\/collections\/ansible_collections\/openstack\/kolla\/roles\/docker\/tasks\/repo-Debian.yml for compute02\n\nTASK [openstack.kolla.docker : Install CA certificates and gnupg packages] **************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.docker : Ensure apt sources list directory exists] ****************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.docker : Ensure apt keyrings directory exists] ********************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.docker : Install docker apt gpg key] ******************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Install docker apt pin] **********************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Enable docker apt repository] ****************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Check which containers are running] **********************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.docker : Check if docker systemd unit exists] *********************************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.docker : Mask the docker systemd unit on Debian\/Ubuntu] ***********************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Install packages] ****************************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Start docker] ********************************************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.docker : Wait for Docker to start] ********************************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.docker : Ensure containers are running after Docker upgrade] ******************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.docker : Ensure docker config directory exists] *******************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Write docker config] *************************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Remove old docker options file] **************************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.docker : Ensure docker service directory exists] ******************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Configure docker service] ********************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Ensure the path for CA file for private registry exists] *************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.docker : Ensure the CA file for private registry exists] **********************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.docker : Flush handlers] ******************************************************************************************************************************\n\nRUNNING HANDLER [openstack.kolla.docker : Reload docker service file] *******************************************************************************************************\nok: [compute02]\n\nRUNNING HANDLER [openstack.kolla.docker : Restart docker] *******************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Start and enable docker] *********************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : include_tasks] *******************************************************************************************************************************\nincluded: \/home\/kifarunix\/.ansible\/collections\/ansible_collections\/openstack\/kolla\/roles\/docker\/tasks\/configure-containerd-for-zun.yml for compute02\n\nTASK [openstack.kolla.docker : Ensuring CNI config directory exist] *********************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Copying CNI config file] *********************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Ensuring CNI bin directory exist] ************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Copy zun-cni script] *************************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker : Copying over containerd config] **************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.kolla_user : Ensure groups are present] ***************************************************************************************************************\nskipping: [compute02] => (item=docker) \nskipping: [compute02] => (item=sudo) \nskipping: [compute02] => (item=kolla) \nskipping: [compute02]\n\nTASK [openstack.kolla.kolla_user : Create kolla user] ***********************************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.kolla_user : Add public key to kolla user authorized keys] ********************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.kolla_user : Grant kolla user passwordless sudo] ******************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.docker_sdk : Install packages] ************************************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.docker_sdk : Install latest pip in the virtualenv] ****************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.docker_sdk : Install docker SDK for python] ***********************************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.baremetal : Ensure node_config_directory directory exists] ********************************************************************************************\nchanged: [compute02]\n\nTASK [openstack.kolla.apparmor_libvirt : include_tasks] *********************************************************************************************************************\nincluded: \/home\/kifarunix\/.ansible\/collections\/ansible_collections\/openstack\/kolla\/roles\/apparmor_libvirt\/tasks\/remove-profile.yml for compute02\n\nTASK [openstack.kolla.apparmor_libvirt : Get stat of libvirtd apparmor profile] *********************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.apparmor_libvirt : Get stat of libvirtd apparmor disable profile] *************************************************************************************\nok: [compute02]\n\nTASK [openstack.kolla.apparmor_libvirt : Remove apparmor profile for libvirt] ***********************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.baremetal : Change state of selinux] ******************************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.baremetal : Set https proxy for git] ******************************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.baremetal : Set http proxy for git] *******************************************************************************************************************\nskipping: [compute02]\n\nTASK [openstack.kolla.baremetal : Configure ceph for zun] *******************************************************************************************************************\nskipping: [compute02]\n\nRUNNING HANDLER [openstack.kolla.docker : Restart containerd] ***************************************************************************************************************\nchanged: [compute02]\n\nPLAY RECAP ******************************************************************************************************************************************************************\ncompute02                  : ok=43   changed=23   unreachable=0    failed=0    skipped=21   rescued=0    ignored=0\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"run-pre-deployment-checks-on-the-host\">Run Pre-Deployment Checks on the Host<\/h3>\n\n\n\n<p>Next, run pre-deployment checks for node;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kolla-ansible -i multinode prechecks --limit compute02<\/code><\/pre>\n\n\n\n<p>Sample output;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>Pre-deployment checking : ansible-playbook -e @\/etc\/kolla\/globals.yml  -e @\/etc\/kolla\/passwords.yml -e CONFIG_DIR=\/etc\/kolla  --limit compute02 -e kolla_action=precheck \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/site.yml  --inventory multinode\n[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details\n\nPLAY [Gather facts for all hosts] *******************************************************************************************************************************************\n\nTASK [Gather facts] *********************************************************************************************************************************************************\nok: [compute02]\n\nTASK [Gather package facts] *************************************************************************************************************************************************\nok: [compute02]\n\nTASK [Group hosts to determine when using --limit] **************************************************************************************************************************\nok: [compute02]\n\nPLAY [Gather facts for all hosts (if using --limit)] ************************************************************************************************************************\n\nTASK [Gather facts] *********************************************************************************************************************************************************\nskipping: [compute02] => (item=compute02) \nok: [compute02 -> controller01] => (item=controller01)\nok: [compute02 -> compute01] => (item=compute01)\nok: [compute02 -> storage01] => (item=storage01)\nok: [compute02 -> localhost] => (item=localhost)\n\nTASK [Gather package facts] *************************************************************************************************************************************************\nskipping: [compute02] => (item=compute02) \nok: [compute02 -> controller01] => (item=controller01)\nok: [compute02 -> compute01] => (item=compute01)\nok: [compute02 -> storage01] => (item=storage01)\nok: [compute02 -> localhost] => (item=localhost)\n\nPLAY [Group hosts based on configuration] ***********************************************************************************************************************************\n\nTASK [Group hosts based on Kolla action] ************************************************************************************************************************************\nok: [compute02]\n\nTASK [Group hosts based on enabled services] ********************************************************************************************************************************\nok: [compute02] => (item=enable_aodh_True)\nok: [compute02] => (item=enable_barbican_False)\nok: [compute02] => (item=enable_blazar_False)\nok: [compute02] => (item=enable_ceilometer_True)\nok: [compute02] => (item=enable_ceph_rgw_False)\nok: [compute02] => (item=enable_cinder_True)\nok: [compute02] => (item=enable_cloudkitty_False)\nok: [compute02] => (item=enable_collectd_False)\nok: [compute02] => (item=enable_cyborg_False)\nok: [compute02] => (item=enable_designate_False)\nok: [compute02] => (item=enable_etcd_True)\nok: [compute02] => (item=enable_freezer_False)\nok: [compute02] => (item=enable_glance_True)\nok: [compute02] => (item=enable_gnocchi_True)\nok: [compute02] => (item=enable_grafana_True)\nok: [compute02] => (item=enable_hacluster_False)\nok: [compute02] => (item=enable_heat_True)\nok: [compute02] => (item=enable_horizon_True)\nok: [compute02] => (item=enable_influxdb_False)\nok: [compute02] => (item=enable_ironic_False)\nok: [compute02] => (item=enable_iscsid_True)\nok: [compute02] => (item=enable_keystone_True)\nok: [compute02] => (item=enable_kuryr_True)\nok: [compute02] => (item=enable_loadbalancer_True)\nok: [compute02] => (item=enable_magnum_False)\nok: [compute02] => (item=enable_manila_False)\nok: [compute02] => (item=enable_mariadb_True)\nok: [compute02] => (item=enable_masakari_False)\nok: [compute02] => (item=enable_memcached_True)\nok: [compute02] => (item=enable_mistral_False)\nok: [compute02] => (item=enable_multipathd_False)\nok: [compute02] => (item=enable_murano_False)\nok: [compute02] => (item=enable_neutron_True)\nok: [compute02] => (item=enable_nova_True)\nok: [compute02] => (item=enable_octavia_False)\nok: [compute02] => (item=enable_opensearch_False)\nok: [compute02] => (item=enable_opensearch_dashboards_False)\nok: [compute02] => (item=enable_openvswitch_True_enable_ovs_dpdk_False)\nok: [compute02] => (item=enable_outward_rabbitmq_False)\nok: [compute02] => (item=enable_ovn_False)\nok: [compute02] => (item=enable_placement_True)\nok: [compute02] => (item=enable_prometheus_True)\nok: [compute02] => (item=enable_rabbitmq_True)\nok: [compute02] => (item=enable_redis_False)\nok: [compute02] => (item=enable_sahara_False)\nok: [compute02] => (item=enable_senlin_False)\nok: [compute02] => (item=enable_skyline_False)\nok: [compute02] => (item=enable_solum_False)\nok: [compute02] => (item=enable_swift_False)\nok: [compute02] => (item=enable_tacker_False)\nok: [compute02] => (item=enable_telegraf_False)\nok: [compute02] => (item=enable_trove_False)\nok: [compute02] => (item=enable_venus_False)\nok: [compute02] => (item=enable_vitrage_False)\nok: [compute02] => (item=enable_watcher_False)\nok: [compute02] => (item=enable_zun_True)\n\nPLAY [Apply role prechecks] *************************************************************************************************************************************************\n\nTASK [prechecks : Checking loadbalancer group] ******************************************************************************************************************************\nok: [compute02] => {\n    \"changed\": false,\n    \"msg\": \"All assertions passed\"\n}\n\nTASK [prechecks : include_tasks] ********************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/prechecks\/tasks\/host_os_checks.yml for compute02\n\nTASK [prechecks : Checking host OS distribution] ****************************************************************************************************************************\nok: [compute02] => {\n    \"changed\": false,\n    \"msg\": \"All assertions passed\"\n}\n\nTASK [prechecks : Checking host OS release or version] **********************************************************************************************************************\nok: [compute02] => {\n    \"changed\": false,\n    \"msg\": \"All assertions passed\"\n}\n\nTASK [prechecks : Checking if CentOS is Stream] *****************************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Fail if not running on CentOS Stream] *********************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : include_tasks] ********************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/prechecks\/tasks\/timesync_checks.yml for compute02\n\nTASK [prechecks : Check for a running host NTP daemon] **********************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Fail if a host NTP daemon is not running] *****************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Checking timedatectl status] ******************************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Fail if the clock is not synchronized] ********************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Ensure \/etc\/localtime exist] ******************************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Fail if \/etc\/localtime is absent] *************************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Ensure \/etc\/timezone exist] *******************************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Fail if \/etc\/timezone is absent] **************************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : include_tasks] ********************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/prechecks\/tasks\/port_checks.yml for compute02\n\nTASK [prechecks : Checking the api_interface is present] ********************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Checking the api_interface is active] *********************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Checking the api_interface ip address configuration] ******************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Checking if system uses systemd] **************************************************************************************************************************\nok: [compute02] => {\n    \"changed\": false,\n    \"msg\": \"All assertions passed\"\n}\n\nTASK [prechecks : Checking Docker version] **********************************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Checking empty passwords in passwords.yml. Run kolla-genpwd if this task fails] ***************************************************************************\nok: [compute02 -> localhost]\n\nTASK [prechecks : Check if nscd is running] *********************************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Fail if nscd is running] **********************************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Validate that internal and external vip address are different when TLS is enabled only on either the internal and external network] ***********************\nskipping: [compute02]\n\nTASK [prechecks : Validate that enable_ceph is disabled] ********************************************************************************************************************\nskipping: [compute02]\n\nTASK [prechecks : Checking docker SDK version] ******************************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Checking dbus-python package] *****************************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Checking Ansible version] *********************************************************************************************************************************\nok: [compute02] => {\n    \"changed\": false,\n    \"msg\": \"All assertions passed\"\n}\n\nTASK [prechecks : Check if config_owner_user existed] ***********************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Check if config_owner_group existed] **********************************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Check if ansible user can do passwordless sudo] ***********************************************************************************************************\nok: [compute02]\n\nTASK [prechecks : Check if external mariadb hosts are reachable from the load balancer] *************************************************************************************\nskipping: [compute02] => (item=controller01) \nskipping: [compute02]\n\nTASK [prechecks : Check if external database address is reachable from all hosts] *******************************************************************************************\nskipping: [compute02]\n\nPLAY [Apply role common] ****************************************************************************************************************************************************\n\nTASK [common : include_tasks] ***********************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/common\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : common | Validate inventory groups] ****************************************************************************************************************\nskipping: [compute02] => (item=fluentd) \nskipping: [compute02] => (item=kolla-toolbox) \nskipping: [compute02] => (item=cron) \nskipping: [compute02]\n\nPLAY [Apply role loadbalancer] **********************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_collectd_True\n\nPLAY [Apply role collectd] **************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_influxdb_True\n\nPLAY [Apply role influxdb] **************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_telegraf_True\n\nPLAY [Apply role telegraf] **************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_redis_True\n\nPLAY [Apply role redis] *****************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role mariadb] ***************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: mariadb_restart\n\nPLAY [Restart mariadb services] *********************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: mariadb_start\n\nPLAY [Start mariadb services] ***********************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: mariadb_bootstrap_restart\n\nPLAY [Restart bootstrap mariadb service] ************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply mariadb post-configuration] *************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role memcached] *************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role prometheus] ************************************************************************************************************************************************\n\nTASK [prometheus : include_tasks] *******************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/prometheus\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : prometheus | Validate inventory groups] ************************************************************************************************************\nskipping: [compute02] => (item=prometheus-server) \nskipping: [compute02] => (item=prometheus-node-exporter) \nskipping: [compute02] => (item=prometheus-mysqld-exporter) \nskipping: [compute02] => (item=prometheus-haproxy-exporter) \nskipping: [compute02] => (item=prometheus-memcached-exporter) \nskipping: [compute02] => (item=prometheus-cadvisor) \nskipping: [compute02] => (item=prometheus-alertmanager) \nskipping: [compute02] => (item=prometheus-openstack-exporter) \nskipping: [compute02] => (item=prometheus-elasticsearch-exporter) \nskipping: [compute02] => (item=prometheus-blackbox-exporter) \nskipping: [compute02] => (item=prometheus-libvirt-exporter) \nskipping: [compute02] => (item=prometheus-msteams) \nskipping: [compute02]\n\nTASK [prometheus : Get container facts] *************************************************************************************************************************************\nok: [compute02]\n\nTASK [prometheus : Checking free port for Prometheus server] ****************************************************************************************************************\nskipping: [compute02]\n\nTASK [prometheus : Checking free port for Prometheus node_exporter] *********************************************************************************************************\nok: [compute02]\n\nTASK [prometheus : Checking free port for Prometheus mysqld_exporter] *******************************************************************************************************\nskipping: [compute02]\n\nTASK [prometheus : Checking free port for Prometheus haproxy_exporter] ******************************************************************************************************\nskipping: [compute02]\n\nTASK [prometheus : Checking free port for Prometheus memcached_exporter] ****************************************************************************************************\nskipping: [compute02]\n\nTASK [prometheus : Checking free port for Prometheus cAdvisor] **************************************************************************************************************\nok: [compute02]\n\nTASK [prometheus : Checking free ports for Prometheus Alertmanager] *********************************************************************************************************\nskipping: [compute02] => (item=9093) \nskipping: [compute02] => (item=9094) \nskipping: [compute02]\n\nTASK [prometheus : Checking free ports for Prometheus openstack-exporter] ***************************************************************************************************\nskipping: [compute02] => (item=9198) \nskipping: [compute02]\n\nTASK [prometheus : Checking free ports for Prometheus elasticsearch-exporter] ***********************************************************************************************\nskipping: [compute02] => (item=9108) \nskipping: [compute02]\n\nTASK [prometheus : Checking free ports for Prometheus blackbox-exporter] ****************************************************************************************************\nskipping: [compute02] => (item=9115) \nskipping: [compute02]\n\nTASK [prometheus : Checking free ports for Prometheus libvirt-exporter] *****************************************************************************************************\nok: [compute02] => (item=9177)\n\nTASK [prometheus : Checking free ports for Prometheus msteams] **************************************************************************************************************\nskipping: [compute02] => (item=9095) \nskipping: [compute02]\n\nPLAY [Apply role iscsi] *****************************************************************************************************************************************************\n\nTASK [iscsi : include_tasks] ************************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/iscsi\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : iscsi | Validate inventory groups] *****************************************************************************************************************\nskipping: [compute02] => (item=iscsid) \nskipping: [compute02] => (item=tgtd) \nskipping: [compute02]\n\nTASK [iscsi : Get container facts] ******************************************************************************************************************************************\nok: [compute02]\n\nTASK [iscsi : Checking free port for iscsi] *********************************************************************************************************************************\nok: [compute02]\n\nTASK [iscsi : Check supported platforms for tgtd] ***************************************************************************************************************************\nok: [compute02] => {\n    \"changed\": false,\n    \"msg\": \"All assertions passed\"\n}\n[WARNING]: Could not match supplied host pattern, ignoring: enable_multipathd_True\n\nPLAY [Apply role multipathd] ************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role rabbitmq] **************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: rabbitmq_restart\n\nPLAY [Restart rabbitmq services] ********************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply rabbitmq post-configuration] ************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_outward_rabbitmq_True\n\nPLAY [Apply role rabbitmq (outward)] ****************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: outward_rabbitmq_restart\n\nPLAY [Restart rabbitmq (outward) services] **********************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply rabbitmq (outward) post-configuration] **************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role etcd] ******************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role keystone] **************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_opensearch_True\n\nPLAY [Apply role opensearch] ************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_swift_True\n\nPLAY [Apply role swift] *****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_ceph_rgw_True\n\nPLAY [Apply role ceph-rgw] **************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role glance] ****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_ironic_True\n\nPLAY [Apply role ironic] ****************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role cinder] ****************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role placement] *************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Bootstrap nova API databases] *****************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Bootstrap nova cell databases] ****************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role nova] ******************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role nova-cell] *************************************************************************************************************************************************\n\nTASK [nova-cell : include_tasks] ********************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/nova-cell\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : nova | Validate inventory groups] ******************************************************************************************************************\nskipping: [compute02] => (item=nova-libvirt) \nskipping: [compute02] => (item=nova-ssh) \nskipping: [compute02] => (item=nova-novncproxy) \nskipping: [compute02] => (item=nova-spicehtml5proxy) \nskipping: [compute02] => (item=nova-serialproxy) \nskipping: [compute02] => (item=nova-conductor) \nskipping: [compute02] => (item=nova-compute) \nskipping: [compute02] => (item=nova-compute-ironic) \nskipping: [compute02]\n\nTASK [nova-cell : Get container facts] **************************************************************************************************************************************\nok: [compute02]\n\nTASK [nova-cell : Checking available compute nodes in inventory] ************************************************************************************************************\nskipping: [compute02]\n\nTASK [nova-cell : Checking free port for Nova NoVNC Proxy] ******************************************************************************************************************\nskipping: [compute02]\n\nTASK [nova-cell : Checking free port for Nova Serial Proxy] *****************************************************************************************************************\nskipping: [compute02]\n\nTASK [nova-cell : Checking free port for Nova Spice HTML5 Proxy] ************************************************************************************************************\nskipping: [compute02]\n\nTASK [nova-cell : Checking free port for Nova SSH (API interface)] **********************************************************************************************************\nok: [compute02]\n\nTASK [nova-cell : Checking free port for Nova SSH (migration interface)] ****************************************************************************************************\nskipping: [compute02]\n\nTASK [nova-cell : Checking free port for Nova Libvirt] **********************************************************************************************************************\nok: [compute02]\n\nTASK [nova-cell : Checking that host libvirt is not running] ****************************************************************************************************************\nok: [compute02]\n\nTASK [nova-cell : Checking that nova_libvirt container is not running] ******************************************************************************************************\nskipping: [compute02]\n\nPLAY [Refresh nova scheduler cell cache] ************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Reload global Nova super conductor services] **************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Reload Nova cell services] ********************************************************************************************************************************************\n\nTASK [nova-cell : Reload nova cell services to remove RPC version cap] ******************************************************************************************************\nskipping: [compute02] => (item=nova-conductor) \nskipping: [compute02] => (item=nova-compute) \nskipping: [compute02] => (item=nova-compute-ironic) \nskipping: [compute02] => (item=nova-novncproxy) \nskipping: [compute02] => (item=nova-serialproxy) \nskipping: [compute02] => (item=nova-spicehtml5proxy) \nskipping: [compute02]\n\nPLAY [Reload global Nova API services] **************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Run Nova API online data migrations] **********************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Run Nova cell online data migrations] *********************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role openvswitch] ***********************************************************************************************************************************************\n\nTASK [openvswitch : include_tasks] ******************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/openvswitch\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : openvswitch | Validate inventory groups] ***********************************************************************************************************\nskipping: [compute02] => (item=openvswitch-db-server) \nskipping: [compute02] => (item=openvswitch-vswitchd) \nskipping: [compute02]\n\nTASK [openvswitch : Get container facts] ************************************************************************************************************************************\nok: [compute02]\n\nTASK [openvswitch : Checking free port for OVSDB] ***************************************************************************************************************************\nok: [compute02]\n[WARNING]: Could not match supplied host pattern, ignoring: enable_openvswitch_True_enable_ovs_dpdk_True\n\nPLAY [Apply role ovs-dpdk] **************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_ovn_True\n\nPLAY [Apply role ovn-controller] ********************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role ovn-db] ****************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role neutron] ***************************************************************************************************************************************************\n\nTASK [neutron : include_tasks] **********************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/neutron\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : neutron | Validate inventory groups] ***************************************************************************************************************\nskipping: [compute02] => (item=neutron-server) \nskipping: [compute02] => (item=neutron-openvswitch-agent) \nskipping: [compute02] => (item=neutron-linuxbridge-agent) \nskipping: [compute02] => (item=neutron-dhcp-agent) \nskipping: [compute02] => (item=neutron-l3-agent) \nskipping: [compute02] => (item=neutron-sriov-agent) \nskipping: [compute02] => (item=neutron-mlnx-agent) \nskipping: [compute02] => (item=neutron-eswitchd) \nskipping: [compute02] => (item=neutron-metadata-agent) \nskipping: [compute02] => (item=neutron-ovn-metadata-agent) \nskipping: [compute02] => (item=neutron-bgp-dragent) \nskipping: [compute02] => (item=neutron-infoblox-ipam-agent) \nskipping: [compute02] => (item=neutron-metering-agent) \nskipping: [compute02] => (item=ironic-neutron-agent) \nskipping: [compute02] => (item=neutron-tls-proxy) \nskipping: [compute02] => (item=neutron-ovn-agent) \nskipping: [compute02]\n\nTASK [neutron : Get container facts] ****************************************************************************************************************************************\nok: [compute02]\n\nTASK [neutron : Checking free port for Neutron Server] **********************************************************************************************************************\nskipping: [compute02]\n\nTASK [neutron : Checking number of network agents] **************************************************************************************************************************\nskipping: [compute02]\n\nTASK [neutron : Checking tenant network types] ******************************************************************************************************************************\nok: [compute02] => (item=vxlan) => {\n    \"ansible_loop_var\": \"item\",\n    \"changed\": false,\n    \"item\": \"vxlan\",\n    \"msg\": \"All assertions passed\"\n}\n\nTASK [neutron : Checking whether Ironic enabled] ****************************************************************************************************************************\nskipping: [compute02]\n\nTASK [neutron : Get container facts] ****************************************************************************************************************************************\nok: [compute02]\n\nTASK [neutron : Get container volume facts] *********************************************************************************************************************************\nok: [compute02]\n\nTASK [neutron : Check for ML2\/OVN presence] *********************************************************************************************************************************\nskipping: [compute02]\n\nTASK [neutron : Check for ML2\/OVS presence] *********************************************************************************************************************************\nskipping: [compute02]\n\nPLAY [Apply role kuryr] *****************************************************************************************************************************************************\n\nTASK [kuryr : include_tasks] ************************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/kuryr\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : kuryr | Validate inventory groups] *****************************************************************************************************************\nskipping: [compute02] => (item=kuryr) \nskipping: [compute02]\n\nTASK [kuryr : Get container facts] ******************************************************************************************************************************************\nok: [compute02]\n\nTASK [kuryr : Checking free port for Kuryr] *********************************************************************************************************************************\nok: [compute02]\n[WARNING]: Could not match supplied host pattern, ignoring: enable_hacluster_True\n\nPLAY [Apply role hacluster] *************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role heat] ******************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role horizon] ***************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_murano_True\n\nPLAY [Apply role murano] ****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_solum_True\n\nPLAY [Apply role solum] *****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_magnum_True\n\nPLAY [Apply role magnum] ****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_mistral_True\n\nPLAY [Apply role mistral] ***************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_sahara_True\n\nPLAY [Apply role sahara] ****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_manila_True\n\nPLAY [Apply role manila] ****************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role gnocchi] ***************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role ceilometer] ************************************************************************************************************************************************\n\nTASK [ceilometer : include_tasks] *******************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/ceilometer\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : ceilometer | Validate inventory groups] ************************************************************************************************************\nskipping: [compute02] => (item=ceilometer-notification) \nskipping: [compute02] => (item=ceilometer-central) \nskipping: [compute02] => (item=ceilometer-compute) \nskipping: [compute02] => (item=ceilometer-ipmi) \nskipping: [compute02]\n\nTASK [ceilometer : Checking gnocchi backend for ceilometer] *****************************************************************************************************************\nskipping: [compute02]\n\nPLAY [Apply role aodh] ******************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_barbican_True\n\nPLAY [Apply role barbican] **************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_cyborg_True\n\nPLAY [Apply role cyborg] ****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_designate_True\n\nPLAY [Apply role designate] *************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_trove_True\n\nPLAY [Apply role trove] *****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_watcher_True\n\nPLAY [Apply role watcher] ***************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role grafana] ***************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_cloudkitty_True\n\nPLAY [Apply role cloudkitty] ************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_freezer_True\n\nPLAY [Apply role freezer] ***************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_senlin_True\n\nPLAY [Apply role senlin] ****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_tacker_True\n\nPLAY [Apply role tacker] ****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_octavia_True\n\nPLAY [Apply role octavia] ***************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY [Apply role zun] *******************************************************************************************************************************************************\n\nTASK [zun : include_tasks] **************************************************************************************************************************************************\nincluded: \/home\/kifarunix\/kolla-ansible\/share\/kolla-ansible\/ansible\/roles\/zun\/tasks\/precheck.yml for compute02\n\nTASK [service-precheck : zun | Validate inventory groups] *******************************************************************************************************************\nskipping: [compute02] => (item=zun-api) \nskipping: [compute02] => (item=zun-wsproxy) \nskipping: [compute02] => (item=zun-compute) \nskipping: [compute02] => (item=zun-cni-daemon) \nskipping: [compute02]\n\nTASK [zun : Get container facts] ********************************************************************************************************************************************\nok: [compute02]\n\nTASK [zun : Checking free port for Zun API] *********************************************************************************************************************************\nskipping: [compute02]\n\nTASK [zun : Checking free port for Zun WSproxy] *****************************************************************************************************************************\nskipping: [compute02]\n\nTASK [zun : Checking free port for zun-cni-daemon] **************************************************************************************************************************\nok: [compute02]\n\nTASK [zun : Ensure kuryr enabled for zun] ***********************************************************************************************************************************\nok: [compute02] => {\n    \"changed\": false,\n    \"msg\": \"All assertions passed\"\n}\n[WARNING]: Could not match supplied host pattern, ignoring: enable_vitrage_True\n\nPLAY [Apply role vitrage] ***************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_blazar_True\n\nPLAY [Apply role blazar] ****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_masakari_True\n\nPLAY [Apply role masakari] **************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_venus_True\n\nPLAY [Apply role venus] *****************************************************************************************************************************************************\nskipping: no hosts matched\n[WARNING]: Could not match supplied host pattern, ignoring: enable_skyline_True\n\nPLAY [Apply role skyline] ***************************************************************************************************************************************************\nskipping: no hosts matched\n\nPLAY RECAP ******************************************************************************************************************************************************************\ncompute02                  : ok=58   changed=0    unreachable=0    failed=0    skipped=47   rescued=0    ignored=0\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deploy-docker-containers-for-required-services-on-the-new-node\">Deploy Docker Containers for Required Services on the new Node<\/h3>\n\n\n\n<p>Next, deploy Docker containers for the required services on the new hosts.<\/p>\n\n\n\n<p>To begin with, download the container images into the host<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kolla-ansible -i multinode pull --limit compute02<\/code><\/pre>\n\n\n\n<p>When the command completes, you can list the container images on the node.<\/p>\n\n\n\n<p>You can login to the node and check list images;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker images<\/code><\/pre>\n\n\n\n<p>or just list them using ansible from the control node;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible -i multinode -m raw -a \"docker images\" compute02<\/code><\/pre>\n\n\n\n<p>Sample output;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>compute02 | CHANGED | rc=0 >>\nREPOSITORY                                            TAG                   IMAGE ID       CREATED        SIZE\nquay.io\/openstack.kolla\/nova-compute                  2023.1-ubuntu-jammy   2db6f9a37454   12 hours ago   1.47GB\nquay.io\/openstack.kolla\/zun-compute                   2023.1-ubuntu-jammy   430fc0a3c19a   12 hours ago   1.18GB\nquay.io\/openstack.kolla\/zun-cni-daemon                2023.1-ubuntu-jammy   ca8af14052bb   12 hours ago   1.03GB\nquay.io\/openstack.kolla\/neutron-openvswitch-agent     2023.1-ubuntu-jammy   af133962e664   12 hours ago   1.04GB\nquay.io\/openstack.kolla\/nova-ssh                      2023.1-ubuntu-jammy   82fc2363a0de   12 hours ago   1.11GB\nquay.io\/openstack.kolla\/ceilometer-compute            2023.1-ubuntu-jammy   3abd229b37d0   12 hours ago   902MB\nquay.io\/openstack.kolla\/kuryr-libnetwork              2023.1-ubuntu-jammy   338e95d01488   12 hours ago   933MB\nquay.io\/openstack.kolla\/prometheus-libvirt-exporter   2023.1-ubuntu-jammy   36f33bbe9afb   12 hours ago   999MB\nquay.io\/openstack.kolla\/kolla-toolbox                 2023.1-ubuntu-jammy   6ea36670c23a   12 hours ago   817MB\nquay.io\/openstack.kolla\/openvswitch-vswitchd          2023.1-ubuntu-jammy   182b7e1ae59c   12 hours ago   273MB\nquay.io\/openstack.kolla\/prometheus-cadvisor           2023.1-ubuntu-jammy   7d405d5952e0   12 hours ago   293MB\nquay.io\/openstack.kolla\/openvswitch-db-server         2023.1-ubuntu-jammy   95806e1d30c6   12 hours ago   273MB\nquay.io\/openstack.kolla\/prometheus-node-exporter      2023.1-ubuntu-jammy   ce3c047a3119   12 hours ago   275MB\nquay.io\/openstack.kolla\/nova-libvirt                  2023.1-ubuntu-jammy   4ada490f2236   12 hours ago   997MB\nquay.io\/openstack.kolla\/fluentd                       2023.1-ubuntu-jammy   f0478768afd5   12 hours ago   527MB\nquay.io\/openstack.kolla\/cron                          2023.1-ubuntu-jammy   13984cac2ba7   12 hours ago   257MB\nquay.io\/openstack.kolla\/iscsid                        2023.1-ubuntu-jammy   bd501a059b27   12 hours ago   266MB\nShared connection to compute02 closed.\n<\/code><\/pre>\n\n\n\n<p>Deploy containers on the new node.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kolla-ansible -i multinode deploy --limit compute02<\/code><\/pre>\n\n\n\n<p>Ensure there is no error. if any fix it and proceed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"verify-new-node-addition-to-open-stack\">Verify New Node Addition to OpenStack<\/h3>\n\n\n\n<p>You can now verify if the new compute node has been successfully added into OpenStack.<\/p>\n\n\n\n<p>To begin with, you can list Docker containers running on the node (the command below is executed from the control node);<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible -i multinode -m raw -a \"docker ps\" compute02<\/code><\/pre>\n\n\n\n<p>sample output;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>compute02 | CHANGED | rc=0 >>\nCONTAINER ID   IMAGE                                                                     COMMAND                  CREATED          STATUS                     PORTS     NAMES\nefe871ef9fbf   quay.io\/openstack.kolla\/zun-cni-daemon:2023.1-ubuntu-jammy                \"dumb-init --single-\u2026\"   7 minutes ago    Up 7 minutes (healthy)               zun_cni_daemon\nf6155141547b   quay.io\/openstack.kolla\/zun-compute:2023.1-ubuntu-jammy                   \"dumb-init --single-\u2026\"   7 minutes ago    Up 7 minutes (healthy)               zun_compute\n143e53a3b9de   quay.io\/openstack.kolla\/ceilometer-compute:2023.1-ubuntu-jammy            \"dumb-init --single-\u2026\"   8 minutes ago    Up 8 minutes (unhealthy)             ceilometer_compute\nda3bb6f8f71b   quay.io\/openstack.kolla\/kuryr-libnetwork:2023.1-ubuntu-jammy              \"dumb-init --single-\u2026\"   8 minutes ago    Up 8 minutes (healthy)               kuryr\n7fa1016b0acf   quay.io\/openstack.kolla\/neutron-openvswitch-agent:2023.1-ubuntu-jammy     \"dumb-init --single-\u2026\"   9 minutes ago    Up 8 minutes (healthy)               neutron_openvswitch_agent\n98016d47c4d6   quay.io\/openstack.kolla\/openvswitch-vswitchd:2023.1-ubuntu-jammy          \"dumb-init --single-\u2026\"   10 minutes ago   Up 9 minutes (healthy)               openvswitch_vswitchd\n2676319cfbdc   quay.io\/openstack.kolla\/openvswitch-db-server:2023.1-ubuntu-jammy         \"dumb-init --single-\u2026\"   10 minutes ago   Up 10 minutes (healthy)              openvswitch_db\n8b750f8dc593   quay.io\/openstack.kolla\/nova-compute:2023.1-ubuntu-jammy                  \"dumb-init --single-\u2026\"   10 minutes ago   Up 10 minutes (healthy)              nova_compute\n84397013842c   quay.io\/openstack.kolla\/nova-libvirt:2023.1-ubuntu-jammy                  \"dumb-init --single-\u2026\"   11 minutes ago   Up 10 minutes (healthy)              nova_libvirt\n3768d9da5ab7   quay.io\/openstack.kolla\/nova-ssh:2023.1-ubuntu-jammy                      \"dumb-init --single-\u2026\"   11 minutes ago   Up 11 minutes (healthy)              nova_ssh\nec5a5dd65cb4   quay.io\/openstack.kolla\/iscsid:2023.1-ubuntu-jammy                        \"dumb-init --single-\u2026\"   11 minutes ago   Up 11 minutes                        iscsid\nf4185c0884ae   quay.io\/openstack.kolla\/prometheus-libvirt-exporter:2023.1-ubuntu-jammy   \"dumb-init --single-\u2026\"   11 minutes ago   Up 11 minutes                        prometheus_libvirt_exporter\nd9942be630fa   quay.io\/openstack.kolla\/prometheus-cadvisor:2023.1-ubuntu-jammy           \"dumb-init --single-\u2026\"   11 minutes ago   Up 11 minutes                        prometheus_cadvisor\n04fec61c5671   quay.io\/openstack.kolla\/prometheus-node-exporter:2023.1-ubuntu-jammy      \"dumb-init --single-\u2026\"   11 minutes ago   Up 11 minutes                        prometheus_node_exporter\n221098bf97e7   quay.io\/openstack.kolla\/cron:2023.1-ubuntu-jammy                          \"dumb-init --single-\u2026\"   11 minutes ago   Up 11 minutes                        cron\n36fc2702d398   quay.io\/openstack.kolla\/kolla-toolbox:2023.1-ubuntu-jammy                 \"dumb-init --single-\u2026\"   11 minutes ago   Up 11 minutes                        kolla_toolbox\n80f42d83c6f7   quay.io\/openstack.kolla\/fluentd:2023.1-ubuntu-jammy                       \"dumb-init --single-\u2026\"   11 minutes ago   Up 11 minutes                        fluentd\n<\/code><\/pre>\n\n\n\n<p>Next, list OpenStack hypervisors;<\/p>\n\n\n\n<p>Load the credentials;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>source $HOME\/kolla-ansible\/bin\/activate<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>source \/etc\/kolla\/admin-openrc.sh<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>openstack hypervisor list<\/code><\/pre>\n\n\n\n<p>Output;<\/p>\n\n\n\n<pre class=\"scroll-sz\"><code>+--------------------------------------+---------------------+-----------------+-----------------+-------+\n| ID                                   | Hypervisor Hostname | Hypervisor Type | Host IP         | State |\n+--------------------------------------+---------------------+-----------------+-----------------+-------+\n| 6aa76044-d456-4c3b-8f28-fcfc7e79b658 | compute01           | QEMU            | 192.168.200.202 | up    |\n| 7365f5eb-62e1-477e-bf45-8f77ea98802a | compute02           | QEMU            | 192.168.200.203 | up    |\n+--------------------------------------+---------------------+-----------------+-----------------+-------+\n<\/code><\/pre>\n\n\n\n<p>The node is up!<\/p>\n\n\n\n<p>You can also confirm from the horizon under <strong>Admin &gt; Hypervisors<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1897\" height=\"680\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/openstack-compute-nodes.png\" alt=\"\" class=\"wp-image-19125\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/openstack-compute-nodes.png?v=1699201744 1897w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/openstack-compute-nodes-768x275.png?v=1699201744 768w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/openstack-compute-nodes-1536x551.png?v=1699201744 1536w\" sizes=\"(max-width: 1897px) 100vw, 1897px\" \/><\/figure>\n\n\n\n<p>Confirm OpenStack services running on the new node;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openstack compute service list --host compute02<\/code><\/pre>\n\n\n\n<pre class=\"scroll-sz\"><code>+--------------------------------------+--------------+-----------+------+---------+-------+----------------------------+\n| ID                                   | Binary       | Host      | Zone | Status  | State | Updated At                 |\n+--------------------------------------+--------------+-----------+------+---------+-------+----------------------------+\n| 464698d3-0da5-44cb-ba91-7d6782b2cff9 | nova-compute | compute02 | nova | enabled | up    | 2023-11-05T17:02:23.000000 |\n+--------------------------------------+--------------+-----------+------+---------+-------+----------------------------+\n<\/code><\/pre>\n\n\n\n<p>Nova-compute service is running.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"launch-an-instance-to-check-if-it-boots-on-new-compute-node\">Launch An Instance to Check if it boots on New Compute Node<\/h3>\n\n\n\n<p>You can launch an instance just to check if it is going to boot from the new compute node. As you can see above, the new node has no instances running on it at them moment.<\/p>\n\n\n\n<p>Kindly note that compute nodes use the&nbsp;<code><strong>nova-scheduler<\/strong><\/code>&nbsp;service to determine how to dispatch compute requests. For example, the&nbsp;<code>nova-scheduler<\/code>&nbsp;service determines on which host or node a VM should launch. So sometimes, unless you specify the respective node you want to boot an instance from, the vm will be booted from the random nodes as long as they have resources to support those instances.<\/p>\n\n\n\n<p>So, let&#8217;s try to randomly boot an instance from the command line;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>source $HOME\/kolla-ansible\/bin\/activate<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>source \/etc\/kolla\/admin-openrc.sh<\/code><\/pre>\n\n\n\n<p>Get the images;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openstack image list<\/code><\/pre>\n\n\n\n<pre class=\"scroll-sz\"><code>+--------------------------------------+------------------+--------+\n| ID                                   | Name             | Status |\n+--------------------------------------+------------------+--------+\n| 25dead1a-874c-4f19-b0b5-8ea739a15796 |                  | active |\n| 14f3410f-a63c-4b99-8941-c44f4b40bb90 | jammy            | active |\n| 88e386fa-29f9-4fb1-868b-6723cc804b14 | ubuntu22-minimal | active |\n+--------------------------------------+------------------+--------+\n<\/code><\/pre>\n\n\n\n<p>Check flavors;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openstack flavor list<\/code><\/pre>\n\n\n\n<pre class=\"scroll-sz\"><code>+--------------------------------------+---------+------+------+-----------+-------+-----------+\n| ID                                   | Name    |  RAM | Disk | Ephemeral | VCPUs | Is Public |\n+--------------------------------------+---------+------+------+-----------+-------+-----------+\n| 60a3dea9-81a5-4e83-9164-08ee992862de | custom1 | 1024 |    3 |         0 |     1 | True      |\n| b2f23a43-de35-4971-97de-36fc53adb9a2 | custom2 | 1024 |   10 |         0 |     1 | True      |\n| c92170b6-95a0-4fdf-9f61-dc002a87c9ae | mini    | 1024 |    5 |         0 |     1 | True      |\n+--------------------------------------+---------+------+------+-----------+-------+-----------+\n<\/code><\/pre>\n\n\n\n<p>List the networks available;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openstack network list<\/code><\/pre>\n\n\n\n<pre class=\"scroll-sz\"><code>+--------------------------------------+----------+--------------------------------------+\n| ID                                   | Name     | Subnets                              |\n+--------------------------------------+----------+--------------------------------------+\n| 58cd571f-4b2e-41ca-a836-8708c19a6d47 | DEMO_NET | 568de42e-89ab-40df-86f4-5b99fd95014a |\n| 6c6bc33b-73ba-4d6f-af80-e8ae6bafcb41 | EXT_NET  | f28bf31f-65d4-4ba0-b933-aa6e48366fb0 |\n+--------------------------------------+----------+--------------------------------------+\n<\/code><\/pre>\n\n\n\n<p>Launch an instance (<strong><em>You can also launch an instance from horizon if you prefer<\/em><\/strong>);<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>openstack server create \\\n\t--image jammy \\\n\t--flavor mini \\\n\t--availability-zone nova \\\n\t--nic net-id=`openstack network list | grep -i demo_net | awk '{print $2}'` \\\n\t--wait \\\n\tcurious_lewin\n<\/code><\/pre>\n\n\n\n<p>This command creates a new server with the specified image, hardware configuration, availability zone, network interface, and name. It waits for the server creation process to finish before returning control to the user.<\/p>\n\n\n\n<p>Here&#8217;s a breakdown of the command and what it does:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>--image jammy<\/code>: Specifies the image (virtual machine template) to be used for the new server. In this case, it&#8217;s using an image named &#8220;jammy.&#8221;<\/li>\n\n\n\n<li><code>--flavor mini<\/code>: Specifies the flavor (hardware configuration) for the new server. The &#8220;mini&#8221; flavor likely represents a predefined set of CPU, memory, and storage resources.<\/li>\n\n\n\n<li><code>--availability-zone nova<\/code>: Explicitly specifies the availability zone in which the new server will be placed. The availability zone is named &#8220;nova&#8221; in this case. If you dont specify, <strong>nova<\/strong>, which is always the default will be used.<\/li>\n\n\n\n<li><code>--nic net-id=&lt;network-id&gt;<\/code>: Configures the network interface of the new server. It connects the server to a specific network identified by its network ID. The <code>net-id<\/code> parameter is obtained using a combination of commands, where <code>openstack network list<\/code> lists the available networks, <code>grep -i demo_net<\/code> searches for a network named &#8220;demo_net,&#8221; and <code>awk '{print $2}'<\/code> extracts the network ID.<\/li>\n\n\n\n<li><code>--wait<\/code>: Instructs OpenStack to wait for the server creation process to complete and the server to be in a running state before returning.<\/li>\n\n\n\n<li><code>curious_lewin<\/code>: Specifies the name to assign to the new server. In this case, the server is given the name &#8220;curious_lewin.&#8221;<\/li>\n<\/ul>\n\n\n\n<p>Sample output of the command;<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>+-------------------------------------+----------------------------------------------------------+\n| Field                               | Value                                                    |\n+-------------------------------------+----------------------------------------------------------+\n| OS-DCF:diskConfig                   | MANUAL                                                   |\n| OS-EXT-AZ:availability_zone         | nova                                                     |\n| <strong>OS-EXT-SRV-ATTR:host                | compute02                                                |\n| OS-EXT-SRV-ATTR:hypervisor_hostname | compute02<\/strong>                                                |\n| OS-EXT-SRV-ATTR:instance_name       | instance-0000000a                                        |\n| OS-EXT-STS:power_state              | Running                                                  |\n| OS-EXT-STS:task_state               | None                                                     |\n| OS-EXT-STS:vm_state                 | active                                                   |\n| OS-SRV-USG:launched_at              | 2023-11-05T16:53:04.000000                               |\n| OS-SRV-USG:terminated_at            | None                                                     |\n| accessIPv4                          |                                                          |\n| accessIPv6                          |                                                          |\n| addresses                           | DEMO_NET=192.168.50.186                                  |\n| adminPass                           | gJw4aJV8WcXG                                             |\n| config_drive                        |                                                          |\n| created                             | 2023-11-05T16:52:22Z                                     |\n| flavor                              | mini (c92170b6-95a0-4fdf-9f61-dc002a87c9ae)              |\n| hostId                              | 8eaf83b82aa79e3c66d64ed2b68b44bb11b94115a54a436acc1b6d22 |\n| id                                  | 24d7504b-c4a3-49d3-bea3-704707e55e1e                     |\n| image                               | jammy (14f3410f-a63c-4b99-8941-c44f4b40bb90)             |\n| key_name                            | None                                                     |\n| name                                | curious_lewin                                            |\n| progress                            | 0                                                        |\n| project_id                          | b06556ca186746ff97b6b51faf83129b                         |\n| properties                          |                                                          |\n| security_groups                     | name='default'                                           |\n| status                              | ACTIVE                                                   |\n| updated                             | 2023-11-05T16:53:04Z                                     |\n| user_id                             | 4aa2123561a740f398310d048dbb6301                         |\n| volumes_attached                    |                                                          |\n+-------------------------------------+----------------------------------------------------------+\n<\/code><\/pre>\n\n\n\n<p>Perfect! it is booted on new compute node;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>| OS-EXT-SRV-ATTR:host                | compute02                                                |\n| OS-EXT-SRV-ATTR:hypervisor_hostname | compute02<\/code><\/pre>\n\n\n\n<p>Check from horizon;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1897\" height=\"577\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/boot-instance-from-cli.png\" alt=\"\" class=\"wp-image-19128\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/boot-instance-from-cli.png?v=1699204533 1897w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/boot-instance-from-cli-768x234.png?v=1699204533 768w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/boot-instance-from-cli-1536x467.png?v=1699204533 1536w\" sizes=\"(max-width: 1897px) 100vw, 1897px\" \/><\/figure>\n\n\n\n<p>host details (host is compute02);<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1895\" height=\"816\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/instance-host-details.png\" alt=\"\" class=\"wp-image-19129\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/instance-host-details.png?v=1699204549 1895w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/instance-host-details-768x331.png?v=1699204549 768w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/instance-host-details-1536x661.png?v=1699204549 1536w\" sizes=\"(max-width: 1895px) 100vw, 1895px\" \/><\/figure>\n\n\n\n<p>And that is it!<\/p>\n\n\n\n<p>Want to remove a compute node from openstack?<\/p>\n\n\n\n<p><a href=\"https:\/\/kifarunix.com\/safely-remove-compute-node-from-openstack-deployment\/\">Safely Remove <\/a><a href=\"https:\/\/kifarunix.com\/safely-remove-compute-node-from-openstack-deployment\/\" target=\"_blank\" rel=\"noreferrer noopener\">Compute<\/a><a href=\"https:\/\/kifarunix.com\/safely-remove-compute-node-from-openstack-deployment\/\"> Node from OpenStack Deployment<\/a><\/p>\n\n\n\n<p>You have successfully added a new compute node into OpenStack cloud!<\/p>\n\n\n\n<p>That brings us to the close of our tutorial on how to use Kolla-Ansible to add compute nodes into OpenStack.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Is it possible to add compute nodes into OpenStack using Kolla-Ansible? Yes, definitely. In this step-by-step guide, you will learn how to add compute nodes<\/p>\n","protected":false},"author":10,"featured_media":19132,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_lock_modified_date":false,"footnotes":""},"categories":[121,1885,1886],"tags":[7281,7282,7283],"class_list":["post-19120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-howtos","category-cloud-compute","category-openstack","tag-add-openstack-compute-nodes","tag-kolla-ansible-add-compute-nodes","tag-openstack-compute-nodes","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-50","resize-featured-image"],"_links":{"self":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/19120"}],"collection":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/comments?post=19120"}],"version-history":[{"count":13,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/19120\/revisions"}],"predecessor-version":[{"id":20889,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/19120\/revisions\/20889"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/media\/19132"}],"wp:attachment":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/media?parent=19120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/categories?post=19120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/tags?post=19120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}