{"id":78,"date":"2023-11-28T13:53:44","date_gmt":"2023-11-28T18:53:44","guid":{"rendered":"https:\/\/chrisj.cloud\/?p=78"},"modified":"2023-11-28T13:53:45","modified_gmt":"2023-11-28T18:53:45","slug":"bmaas-part-4-routed-networks-bears-at-the-edge","status":"publish","type":"post","link":"https:\/\/chrisj.cloud\/index.php\/2023\/11\/28\/bmaas-part-4-routed-networks-bears-at-the-edge\/","title":{"rendered":"BMaaS Part 4 &#8211; Routed Networks \/ Bears at the edge"},"content":{"rendered":"\n<p>This is part 4 in the series of BareMetal-as-a-Service with Ironic. In this article I will focus on highly distributed architectures. Baremetal cloud as a service for the edge and large environments.<\/p>\n\n\n\n<p>What would be a good use of this architecture? I can think of few examples:<\/p>\n\n\n\n<p>&#8211; managing lifecycle of hundreds of individual x86 servers monitoring production of the goods in manufacturing industry&nbsp;<\/p>\n\n\n\n<p>&#8211; almost any x86 based IOT use case<\/p>\n\n\n\n<p>&#8211; managing highly distributed infrastructure sitting in stores for the large retailers<\/p>\n\n\n\n<p>&#8211; managing unreleased server equipment directly at the desks of the engineers &lt;wink&gt;<\/p>\n\n\n\n<p>&#8211; running distributed kubernetes clusters<\/p>\n\n\n\n<p>I have meant to document this use case long time ago, since I had it working since OpenStack Queens (OSP13) but I didn&#8217;t get to it until now (Train &#8211; OSP16.1). This is probably the least documented functionality of Ironic\/Neutron. At the same time solves problems of managing any workload on baremetal at the edge (or just distributed over multiple L3 networks for better resiliency).<\/p>\n\n\n\n<p>Here is a quick demo on how it works in practice: https:\/\/www.youtube.com\/embed\/yM8P5TOr1hE<\/p>\n\n\n\n<p>The diagram above describes a high level architecture of my lab, but here are 2 more pieces of information that might be helpful to understand the configs listed below:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Network Name<\/strong><\/td><td><strong>IP Address<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><tr><td>Provisioning<\/td><td>10.10.0.0\/24<\/td><td>Used to deploy control plane.&nbsp;Can be flat or with multiple segment in case you want to mix OpenStack hypervisors with the baremetal assets<\/td><\/tr><tr><td>Oc-provisioning<\/td><td>10.60.0.0\/24 (seg0) 10.60.1.0\/24 (seg1) 10.60.2.0\/24 (seg2)<\/td><td>Used to deploy Baremetal Assets.&nbsp;This one should definitely be segmented, but it\u2019s also easy to add new segments<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>I. Overcloud Deployment<\/strong><\/h1>\n\n\n\n<p>Deploy script (highlighted use case specific files and changes):<\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$ <strong>cat deploy-central.sh&nbsp;<\/strong><\/p>\n\n\n\n<p>source ~\/stackrc<\/p>\n\n\n\n<p>cd ~\/<\/p>\n\n\n\n<p>time openstack overcloud deploy &#8211;templates &#8211;stack chrisj-bmaas \\<\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-n templates\/network_data_spine_leaf.yaml \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-r templates\/central_roles.yaml \\<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e \/usr\/share\/openstack-tripleo-heat-templates\/environments\/network-isolation.yaml \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e \/usr\/share\/openstack-tripleo-heat-templates\/environments\/network-environment.yaml \\<\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e \/usr\/share\/openstack-tripleo-heat-templates\/environments\/services\/ironic.yaml \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e \/usr\/share\/openstack-tripleo-heat-templates\/environments\/services\/ironic-inspector.yaml \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e \/usr\/share\/openstack-tripleo-heat-templates\/environments\/services\/neutron-ovs.yaml \\<\/strong><\/p>\n\n\n\n<p>&nbsp;<strong>&nbsp;&nbsp;&nbsp;&nbsp;-e templates\/node-info.yaml \\<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e templates\/network-environment.yaml \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e templates\/host-memory.yaml \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e templates\/inject-trust-anchor-hiera.yaml \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e templates\/containers-prepare-parameter.yaml \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e templates\/spine-leaf-ctlplane.yaml \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e templates\/spine-leaf-vips.yaml \\<\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-e templates\/ironic.yaml \\<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211;log-file chrisj-bmaas_deployment.log \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211;ntp-server 10.10.0.10<\/p>\n\n\n\n<p>To <strong>network_data_spine_leaf.yaml<\/strong> I have added following section for ironic:<\/p>\n\n\n\n<p># custom network for overcloud provisioning<\/p>\n\n\n\n<p>&#8211; name: OcProvisioning<\/p>\n\n\n\n<p>&nbsp;&nbsp;name_lower: oc_provisioning<\/p>\n\n\n\n<p>&nbsp;&nbsp;vip: true<\/p>\n\n\n\n<p>&nbsp;&nbsp;ip_subnet: &#8216;10.60.0.0\/24&#8217;<\/p>\n\n\n\n<p>&nbsp;&nbsp;allocation_pools: [{&#8216;start&#8217;: &#8216;10.60.0.10&#8217;, &#8216;end&#8217;: &#8216;10.60.0.19&#8217;}]<\/p>\n\n\n\n<p>&nbsp;&nbsp;gateway_ip: &#8216;10.60.0.1&#8217;<\/p>\n\n\n\n<p>&nbsp;&nbsp;subnets:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;oc_provisioning_leaf1:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip_subnet: &#8216;10.60.1.0\/24&#8217;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allocation_pools: [{&#8216;start&#8217;: &#8216;10.60.1.20&#8217;, &#8216;end&#8217;: &#8216;10.60.1.30&#8217;}]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gateway_ip: &#8216;10.60.1.1&#8217;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;oc_provisioning_leaf2:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip_subnet: &#8216;10.60.2.0\/24&#8217;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allocation_pools: [{&#8216;start&#8217;: &#8216;10.60.2.20&#8217;, &#8216;end&#8217;: &#8216;10.60.2.30&#8217;}]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gateway_ip: &#8216;10.60.2.1&#8217;<\/p>\n\n\n\n<p>To <strong>central_roles.yaml<\/strong> I have added following for controller nodes:<\/p>\n\n\n\n<p>&#8211; name: Controller<\/p>\n\n\n\n<p>&nbsp;&nbsp;description: |<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Controller role that has all the controler services loaded and handles<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Database, Messaging and Network functions.<\/p>\n\n\n\n<p>&nbsp;&nbsp;CountDefault: 1<\/p>\n\n\n\n<p>&nbsp;&nbsp;tags:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&#8211; primary<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&#8211; controller<\/p>\n\n\n\n<p>&nbsp;&nbsp;networks:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;External:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subnet: external_subnet<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;InternalApi:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subnet: internal_api_subnet<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Storage:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subnet: storage_subnet<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;StorageMgmt:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subnet: storage_mgmt_subnet<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;Tenant:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subnet: tenant_subnet<\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;OcProvisioning:<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subnet: oc_provisioning_subnet<\/strong><\/p>\n\n\n\n<p>In <strong>node_info.yaml <\/strong>(we are only deploying control plane):<\/p>\n\n\n\n<p>parameter_defaults:<\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;OvercloudControllerFlavor: control<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;OvercloudComputeFlavor: compute<\/p>\n\n\n\n<p>&nbsp;&nbsp;OvercloudComputeLeaf1Flavor: compute-leaf1<\/p>\n\n\n\n<p>&nbsp;&nbsp;OvercloudComputeLeaf2Flavor: compute-leaf2<\/p>\n\n\n\n<p>&nbsp;&nbsp;ComputeLeaf1Count: 0<\/p>\n\n\n\n<p>&nbsp;&nbsp;ComputeLeaf2Count: 0<\/p>\n\n\n\n<p>&nbsp;&nbsp;#OvercloudCephStorageFlavor: ceph-storage<\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;ControllerCount: 3<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp;ComputeCount: 0<\/p>\n\n\n\n<p>&nbsp;&nbsp;#CephStorageCount: 0<\/p>\n\n\n\n<p><strong>Ironic.yaml<\/strong> has all the remaining variables:<\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$<strong> cat templates\/ironic.yaml&nbsp;<\/strong><\/p>\n\n\n\n<p>parameter_defaults:<\/p>\n\n\n\n<p>&nbsp;&nbsp;SkipRhelEnforcement: true<\/p>\n\n\n\n<p>&nbsp;&nbsp;AdminPassword: &lt;secret&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;NetworkDeploymentActions: [&#8216;CREATE&#8217;,&#8217;UPDATE&#8217;]<\/p>\n\n\n\n<p>&nbsp;&nbsp;IronicCleaningDiskErase: metadata<\/p>\n\n\n\n<p>&nbsp;&nbsp;IronicIPXEEnabled: true<\/p>\n\n\n\n<p>&nbsp;&nbsp;IronicCleaningNetwork: oc_provisioning<\/p>\n\n\n\n<p>&nbsp;&nbsp;IronicProvisioningNetwork: oc_provisioning<\/p>\n\n\n\n<p>&nbsp;&nbsp;IronicInspectorSubnets:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; ip_range: 10.60.0.100,10.60.0.129<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag: segment0<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netmask: 255.255.255.0<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gateway: 10.60.0.1<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; ip_range: 10.60.1.100,10.60.1.129<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag: segment1<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netmask: 255.255.255.0<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gateway: 10.60.1.1<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; ip_range: 10.60.2.100,10.60.2.129<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag: segment2<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netmask: 255.255.255.0<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gateway: 10.60.2.1<\/p>\n\n\n\n<p>&nbsp;&nbsp;IPAImageURLs: &#8216;[&#8220;http:\/\/10.10.0.10:8088\/agent.kernel&#8221;, &#8220;http:\/\/10.10.0.10:8088\/agent.ramdisk&#8221;]&#8217;<\/p>\n\n\n\n<p>&nbsp;&nbsp;IronicInspectorInterface: br-baremetal<\/p>\n\n\n\n<p>&nbsp;&nbsp;IronicInspectorEnableNodeDiscovery: true<\/p>\n\n\n\n<p>&nbsp;&nbsp;IronicInspectorCollectors: default,extra-hardware,numa-topology,logs<\/p>\n\n\n\n<p>&nbsp;&nbsp;ServiceNetMap:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;IronicApiNetwork: oc_provisioning<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;IronicNetwork: oc_provisioning<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;IronicInspectorNetwork: oc_provisioning<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;IronicProvisioningNetwork: oc_provisioning<\/p>\n\n\n\n<p>&nbsp;&nbsp;ControllerExtraConfig:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;ironic::inspector::add_ports: all<\/p>\n\n\n\n<p>&nbsp;&nbsp;NeutronMechanismDrivers: [&#8216;openvswitch&#8217;, &#8216;baremetal&#8217;]<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>II. Post Deploy work and validations<\/strong><\/h1>\n\n\n\n<p>After successful overcloud deployment I have executed following post-deploy.sh script:<\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$<strong> cat post-deploy.sh<\/strong>&nbsp;<\/p>\n\n\n\n<p>source ~\/chrisj-bmaasrc<\/p>\n\n\n\n<p>openstack aggregate create &#8211;property baremetal=true baremetal-hosts<\/p>\n\n\n\n<p>for i in chrisj-bmaas-controller-0.localdomain chrisj-bmaas-controller-1.localdomain chrisj-bmaas-controller-2.localdomain ; do openstack aggregate add host baremetal-hosts $i ; done<\/p>\n\n\n\n<p>openstack flavor create &nbsp; &#8211;id auto &#8211;ram 4096 &nbsp; &#8211;vcpus 1 &#8211;disk 8 &nbsp; &#8211;property baremetal=true &#8211;property resources:CUSTOM_BAREMETAL=1 &#8211;property resources:VCPU=0 &#8211;property resources:MEMORY_MB=0 &#8211;property resources:DISK_GB=0&nbsp; &#8211;public baremetal<\/p>\n\n\n\n<p>openstack keypair create &#8211;public-key ~\/.ssh\/id_rsa.pub stack<\/p>\n\n\n\n<p>cd ~<\/p>\n\n\n\n<p>mkdir images<\/p>\n\n\n\n<p>tar -xvf \/usr\/share\/rhosp-director-images\/ironic-python-agent-latest.tar -C images\/<\/p>\n\n\n\n<p>cd images<\/p>\n\n\n\n<p>openstack image create \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;container-format aki \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;disk-format aki \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;public \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;file .\/ironic-python-agent.kernel bm-deploy-kernel<\/p>\n\n\n\n<p>openstack image create \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;container-format ari \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;disk-format ari \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;public \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;file .\/ironic-python-agent.initramfs bm-deploy-ramdisk<\/p>\n\n\n\n<p>cd ~<\/p>\n\n\n\n<p>mkdir images2<\/p>\n\n\n\n<p>tar -xvf \/usr\/share\/rhosp-director-images\/overcloud-full-latest.tar -C images2\/<\/p>\n\n\n\n<p>cd images2<\/p>\n\n\n\n<p>virt-customize -a overcloud-full.qcow2 &#8211;root-password password:Passw0rd<\/p>\n\n\n\n<p>KERNEL_ID=$(openstack image create \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;file overcloud-full.vmlinuz &#8211;public \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;container-format aki &#8211;disk-format aki \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;-f value -c id overcloud-full.vmlinuz)<\/p>\n\n\n\n<p>RAMDISK_ID=$(openstack image create \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;file overcloud-full.initrd &#8211;public \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211;container-format ari &#8211;disk-format ari \\<\/p>\n\n\n\n<p>&nbsp;&nbsp;-f value -c id overcloud-full.initrd)<\/p>\n\n\n\n<p>openstack image create &nbsp; &#8211;file overcloud-full.qcow2 &nbsp; &#8211;public &nbsp; &#8211;container-format bare &nbsp; &#8211;disk-format qcow2 &nbsp; &#8211;property kernel_id=$KERNEL_ID &nbsp; &#8211;property ramdisk_id=$RAMDISK_ID &nbsp; rhel8-bm<\/p>\n\n\n\n<p>cd ~<\/p>\n\n\n\n<p>openstack network create oc_provisioning &#8211;provider-network-type flat &#8211;provider-physical-network baremetal &#8211;share &#8211;mtu 1500<\/p>\n\n\n\n<p>SID=$(openstack network segment list &#8211;network oc_provisioning -c ID -f value)<\/p>\n\n\n\n<p>openstack network segment set &#8211;name segment0 $SID<\/p>\n\n\n\n<p>openstack network segment create &#8211;network oc_provisioning &#8211;physical-network segment1 &#8211;network-type flat segment1<\/p>\n\n\n\n<p>openstack network segment create &#8211;network oc_provisioning &#8211;physical-network segment2 &#8211;network-type flat segment2<\/p>\n\n\n\n<p>openstack subnet create &#8211;network-segment segment0 &#8211;network oc_provisioning &#8211;subnet-range 10.60.0.0\/24 &#8211;dhcp &#8211;allocation-pool start=10.60.0.150,end=10.60.0.199 &#8211;gateway 10.60.0.1 oc_provisioning-seg0<\/p>\n\n\n\n<p>openstack subnet create &#8211;network-segment segment1 &#8211;network oc_provisioning &#8211;subnet-range 10.60.1.0\/24 &#8211;dhcp &#8211;allocation-pool start=10.60.1.150,end=10.60.1.199 &#8211;gateway 10.60.1.1 oc_provisioning-seg1<\/p>\n\n\n\n<p>openstack subnet create &#8211;network-segment segment2 &#8211;network oc_provisioning &#8211;subnet-range 10.60.2.0\/24 &#8211;dhcp &#8211;allocation-pool start=10.60.2.150,end=10.60.2.199 &#8211;gateway 10.60.2.1 oc_provisioning-seg2<\/p>\n\n\n\n<p>openstack port list &#8211;network oc_provisioning &#8211;device-owner network:dhcp -c &#8220;Fixed IP Addresses&#8221;<\/p>\n\n\n\n<p>Added new ironic nodes manually with following <strong>bm_nodes.yaml<\/strong> file:<\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$ <strong>cat bm_nodes.yaml<\/strong><\/p>\n\n\n\n<p>nodes:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; ports:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; address: &#8220;fa:16:3e:5e:f5:57&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;physical_network: &#8220;segment2&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;name: &#8220;overcloud_bm2_leaf2&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;properties:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu_arch: &#8220;x86_64&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu: 4<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memory_mb: 12288<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local_gb: 60<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver_info:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_address: &#8220;10.70.0.161&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_username: &#8220;chrisj-bmaas&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_password: &#8220;Passw0rd&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver: ipmi<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;resource_class: baremetal<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; ports:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; address: &#8220;fa:16:3e:f1:2a:f0&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;physical_network: &#8220;segment2&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;name: &#8220;overcloud_bm1_leaf2&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;properties:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu_arch: &#8220;x86_64&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu: 4<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memory_mb: 12288<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local_gb: 60<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver_info:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_address: &#8220;10.70.0.52&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_username: &#8220;chrisj-bmaas&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_password: &#8220;Passw0rd&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver: ipmi<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;resource_class: baremetal<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; ports:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; address: &#8220;fa:16:3e:14:e9:49&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;physical_network: &#8220;segment1&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;name: &#8220;overcloud_bm2_leaf1&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;properties:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu_arch: &#8220;x86_64&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu: 4<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memory_mb: 12288<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local_gb: 60<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver_info:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_address: &#8220;10.70.0.250&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_username: &#8220;chrisj-bmaas&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_password: &#8220;Passw0rd&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver: ipmi<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;resource_class: baremetal<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; ports:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; address: &#8220;fa:16:3e:0c:1a:33&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;physical_network: &#8220;segment1&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;name: &#8220;overcloud_bm1_leaf1&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;properties:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu_arch: &#8220;x86_64&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu: 4<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memory_mb: 12288<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local_gb: 60<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver_info:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_address: &#8220;10.70.0.130&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_username: &#8220;chrisj-bmaas&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_password: &#8220;Passw0rd&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver: ipmi<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;resource_class: baremetal<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; ports:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; address: &#8220;fa:16:3e:34:fa:bb&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;physical_network: &#8220;baremetal&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;name: &#8220;overcloud_bm2_leaf0&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;properties:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu_arch: &#8220;x86_64&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu: 4<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memory_mb: 12288<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local_gb: 60<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver_info:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_address: &#8220;10.70.0.145&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_username: &#8220;chrisj-bmaas&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_password: &#8220;Passw0rd&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver: ipmi<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;resource_class: baremetal<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; ports:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; address: &#8220;fa:16:3e:0e:0b:31&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;physical_network: &#8220;baremetal&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;name: &#8220;overcloud_bm1_leaf0&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;properties:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu_arch: &#8220;x86_64&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu: 4<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memory_mb: 12288<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local_gb: 60<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver_info:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_address: &#8220;10.70.0.88&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_username: &#8220;chrisj-bmaas&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipmi_password: &#8220;Passw0rd&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;driver: ipmi<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;resource_class: baremetal<\/p>\n\n\n\n<p>Finally I have assigned kernel and ramdisk to newly created BM nodes with the command:<\/p>\n\n\n\n<p><strong>KERNEL_UUID=$(openstack image show bm-deploy-kernel -f value -c id)<\/strong><\/p>\n\n\n\n<p><strong>INITRAMFS_UUID=$( openstack image show bm-deploy-ramdisk -f value -c id)<\/strong><\/p>\n\n\n\n<p><strong>for i in `openstack baremetal node list | awk &#8216;\/enroll\/ { print $2 }&#8217;`; do openstack baremetal node set $i &#8211;driver-info deploy_kernel=$KERNEL_UUID &nbsp; &#8211;driver-info deploy_ramdisk=$INITRAMFS_UUID; done<\/strong><\/p>\n\n\n\n<p>Now my BM cloud is ready and I can test it with following:<\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$ <strong>openstack baremetal node list<\/strong><\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>| UUID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | Name&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | Instance UUID | Power State | Provisioning State | Maintenance |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>| 3963901f-fe91-4402-bb14-aed6f2163d4f | overcloud_bm2_leaf2 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | None&nbsp; &nbsp; &nbsp; &nbsp; | enroll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>| 9e776aee-7829-4a37-bb8a-955e61f96c4e | overcloud_bm1_leaf2 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | None&nbsp; &nbsp; &nbsp; &nbsp; | enroll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>| 7b8635ab-3c3e-40a2-9e9b-4983f1447082 | overcloud_bm2_leaf1 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | None&nbsp; &nbsp; &nbsp; &nbsp; | enroll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>| 697ac471-8b8b-4156-8a31-95493bc5c226 | overcloud_bm1_leaf1 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | None&nbsp; &nbsp; &nbsp; &nbsp; | enroll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>| d3fbc4f2-5c3e-426b-8b73-69b45b2dafa3 | overcloud_bm2_leaf0 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | None&nbsp; &nbsp; &nbsp; &nbsp; | enroll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>| 04b2fd43-133c-44e0-a471-789fbda637ce | overcloud_bm1_leaf0 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | None&nbsp; &nbsp; &nbsp; &nbsp; | enroll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$<strong> for i in $(openstack baremetal node list | awk &#8216;\/enroll\/ {print $2}&#8217;); do openstack baremetal node manage $i; done&nbsp;&nbsp;<\/strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$ <strong>openstack baremetal node list<\/strong><\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+<\/p>\n\n\n\n<p>| UUID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | Name&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | Instance UUID | Power State | Provisioning State | Maintenance |<\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+<\/p>\n\n\n\n<p>| 3963901f-fe91-4402-bb14-aed6f2163d4f | overcloud_bm2_leaf2 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | manageable &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| 9e776aee-7829-4a37-bb8a-955e61f96c4e | overcloud_bm1_leaf2 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | manageable &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| 7b8635ab-3c3e-40a2-9e9b-4983f1447082 | overcloud_bm2_leaf1 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | manageable &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| 697ac471-8b8b-4156-8a31-95493bc5c226 | overcloud_bm1_leaf1 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | manageable &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| d3fbc4f2-5c3e-426b-8b73-69b45b2dafa3 | overcloud_bm2_leaf0 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | manageable &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| 04b2fd43-133c-44e0-a471-789fbda637ce | overcloud_bm1_leaf0 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | manageable &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+<\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$ <strong>for i in $(openstack baremetal node list | awk &#8216;\/manageable\/ {print $2}&#8217;); do openstack baremetal node provide $i; done<\/strong><\/p>\n\n\n\n<p>(chrisj-bmaas) [stack@chrisj-bmaas-undercloud ~]$ <strong>openstack baremetal node list<\/strong><\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+<\/p>\n\n\n\n<p>| UUID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | Name&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | Instance UUID | Power State | Provisioning State | Maintenance |<\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+<\/p>\n\n\n\n<p>| 3963901f-fe91-4402-bb14-aed6f2163d4f | overcloud_bm2_leaf2 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | available&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| 9e776aee-7829-4a37-bb8a-955e61f96c4e | overcloud_bm1_leaf2 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | available&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| 7b8635ab-3c3e-40a2-9e9b-4983f1447082 | overcloud_bm2_leaf1 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | available&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| 697ac471-8b8b-4156-8a31-95493bc5c226 | overcloud_bm1_leaf1 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | available&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| d3fbc4f2-5c3e-426b-8b73-69b45b2dafa3 | overcloud_bm2_leaf0 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | available&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>| 04b2fd43-133c-44e0-a471-789fbda637ce | overcloud_bm1_leaf0 | None&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | power off &nbsp; | available&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | False &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+<\/p>\n\n\n\n<p>I have skipped inspection, but that functionality is also available with the current configuration as long as the proper DHCP relays are being configured.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is part 4 in the series of BareMetal-as-a-Service with Ironic. In this article I will focus on highly distributed architectures. Baremetal cloud as a service for the edge and large environment","protected":false},"author":1,"featured_media":79,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/posts\/78"}],"collection":[{"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":1,"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/posts\/78\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/posts\/78\/revisions\/80"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/media\/79"}],"wp:attachment":[{"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/media?parent=78"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/categories?post=78"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chrisj.cloud\/index.php\/wp-json\/wp\/v2\/tags?post=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}