From Fedora Project Wiki

On a CentOS7 system

[hamzy@oscloud5 ~]$ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.3.1611 (Core) 
Release:        7.3.1611
Codename:       Core
[stack@oscloud5 ~]$ uname -a
Linux oscloud5.stglabs.ibm.com 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Unfortunately, it seems that Environment setup for baremetal environment does not explain how to install the undercloud. So, following Undercloud installation, I perform the following:

[hamzy@oscloud5 ~]$ sudo useradd stack
[hamzy@oscloud5 ~]$ sudo passwd stack
[hamzy@oscloud5 ~]$ echo "stack ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/stack
[hamzy@oscloud5 ~]$ sudo chmod 0440 /etc/sudoers.d/stack
[hamzy@oscloud5 ~]$ sudo su - stack
[stack@oscloud5 ~]$ sudo hostnamectl set-hostname oscloud5.stglabs.ibm.com
[stack@oscloud5 ~]$ sudo hostnamectl set-hostname --transient oscloud5.stglabs.ibm.com
[stack@oscloud5 ~]$ sudo curl -L -o /etc/yum.repos.d/delorean.repo https://trunk.rdoproject.org/centos7-master/current-passed-ci/delorean.repo
[stack@oscloud5 ~]$ sudo curl -L -o /etc/yum.repos.d/delorean-deps.repo https://trunk.rdoproject.org/centos7/delorean-deps.repo
[stack@oscloud5 ~]$ sudo yum install -y python-tripleoclient
[stack@oscloud5 ~]$ cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf
[stack@oscloud5 ~]$ cat << '__EOF__' > instackenv.json
{
    "nodes": [
        {
            "pm_type":"pxe_ipmitool",
            "mac":[
                "6c:ae:8b:6a:74:14"
            ],
            "cpu":"16",
            "memory":"1048576",
            "disk":"1000",
            "arch":"ppc64le",
            "pm_password":"update",
            "pm_addr":"9.114.219.133"
        },
        {
            "pm_type":"pxe_ipmitool",
            "mac":[
                "00:90:fa:74:05:53"
            ],
            "cpu":"16",
            "memory":"1048576",
            "disk":"1000",
            "arch":"ppc64le",
            "pm_password":"update",
            "pm_addr":"9.114.118.155"
        }
    ]
}
__EOF__

I then modify undercloud.conf as follows:

[stack@oscloud5 ~]$ cat << __EOF__ | patch -p0
--- usr/share/instack-undercloud/undercloud.conf.sample        2017-06-15 17:18:17.000000000 +0000
+++ undercloud.conf 2017-08-17 23:19:46.809615405 +0000
@@ -17,21 +17,25 @@
 # defined by local_interface, with the netmask defined by the prefix
 # portion of the value. (string value)
 #local_ip = 192.168.24.1/24
+local_ip = 192.168.24.1/24

 # Network gateway for the Neutron-managed network for Overcloud
 # instances. This should match the local_ip above when using
 # masquerading. (string value)
 #network_gateway = 192.168.24.1
+network_gateway = 192.168.24.1

 # Virtual IP or DNS address to use for the public endpoints of
 # Undercloud services. Only used with SSL. (string value)
 # Deprecated group/name - [DEFAULT]/undercloud_public_vip
 #undercloud_public_host = 192.168.24.2
+undercloud_public_host = 192.168.24.2

 # Virtual IP or DNS address to use for the admin endpoints of
 # Undercloud services. Only used with SSL. (string value)
 # Deprecated group/name - [DEFAULT]/undercloud_admin_vip
 #undercloud_admin_host = 192.168.24.3
+undercloud_admin_host = 192.168.24.3

 # DNS nameserver(s) to use for the undercloud node. (list value)
 #undercloud_nameservers =
@@ -74,6 +78,7 @@
 # Network interface on the Undercloud that will be handling the PXE
 # boots and DHCP for Overcloud instances. (string value)
 #local_interface = eth1
+local_interface = eno4

 # MTU to use for the local_interface. (integer value)
 #local_mtu = 1500
@@ -82,18 +87,22 @@
 # instances. This should be the subnet used for PXE booting. (string
 # value)
 #network_cidr = 192.168.24.0/24
+network_cidr = 192.168.24.0/24

 # Network that will be masqueraded for external access, if required.
 # This should be the subnet used for PXE booting. (string value)
 #masquerade_network = 192.168.24.0/24
+masquerade_network = 192.168.24.0/24

 # Start of DHCP allocation range for PXE and DHCP of Overcloud
 # instances. (string value)
 #dhcp_start = 192.168.24.5
+dhcp_start = 192.168.24.5

 # End of DHCP allocation range for PXE and DHCP of Overcloud
 # instances. (string value)
 #dhcp_end = 192.168.24.24
+dhcp_end = 192.168.24.24

 # Path to hieradata override file. If set, the file will be copied
 # under /etc/puppet/hieradata and set as the first file in the hiera
__EOF__

And install the undercloud:

[stack@oscloud5 ~]$ time openstack undercloud install 2>&1 | tee output.undercloud.install
...
Undercloud install complete.
...

There is a bug for needing the userid for machines using ipmi that needs to be patched around.

[stack@oscloud5 ~]$ (cd /usr/lib/python2.7/site-packages/tripleo_common/utils/; cat << __EOF__ | sudo patch -p0)
--- nodes.py.orig       2017-08-24 15:54:07.614226329 +0000
+++ nodes.py    2017-08-24 15:54:29.699440619 +0000
@@ -105,7 +105,7 @@
             'pm_user': '%s_username' % prefix,
             'pm_password': '%s_password' % prefix,
         }
-        mandatory_fields = list(mapping)
+        mandatory_fields = ['pm_addr', 'pm_password'] # list(mapping)
 
         if has_port:
             mapping['pm_port'] = '%s_port' % prefix
__EOF__
[stack@undercloud ~]$ (for SERVICE in openstack-mistral-api.service openstack-mistral-engine.service openstack-mistral-executor.service; do sudo systemctl restart ${SERVICE}; done)

I then go through the process of installing the overcloud:

[stack@oscloud5 ~]$ source stackrc
(undercloud) [stack@oscloud5 ~]$ time openstack overcloud image upload
...
(undercloud) [stack@oscloud5 ~]$ time openstack overcloud node import --provide instackenv.json 2>&1 | tee output.overcloud.node.import
...
(undercloud) [stack@oscloud5 ~]$ openstack overcloud profiles list
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| Node UUID                            | Node Name | Provision State | Current Profile | Possible Profiles |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| 032a8e33-e371-44e3-8513-04028a4de95b |           | available       | None            |                   |
| 612b49a6-1407-42cd-bb41-d10bd5173712 |           | available       | None            |                   |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
(undercloud) [stack@oscloud5 ~]$ ironic node-update 032a8e33-e371-44e3-8513-04028a4de95b replace properties/capabilities=profile:compute,boot_option:local
(undercloud) [stack@oscloud5 ~]$ ironic node-update 612b49a6-1407-42cd-bb41-d10bd5173712 replace properties/capabilities=profile:control,boot_option:local

Before I deploy the overcloud I have to fix another bug.

(undercloud) [stack@oscloud5 ~]$ sudo cp /usr/share/openstack-tripleo-heat-templates/environments/external-loadbalancer-vip.yaml /usr/share/openstack-tripleo-heat-templates/environments/external-loadbalancer-vip.yaml.orig
[stack@oscloud5 ~]$ (cd /usr/share/openstack-tripleo-heat-templates/environments/; cat << __EOF__ | sudo patch -p0)
--- external-loadbalancer-vip.yaml.orig 2017-08-24 17:56:22.235066219 +0000
+++ external-loadbalancer-vip.yaml      2017-08-24 18:34:10.113724679 +0000
@@ -19,21 +19,21 @@
   #
   ControlFixedIPs: [{'ip_address':'192.168.24.251'}]
   PublicVirtualFixedIPs: [{'ip_address':'10.0.0.251'}]
-  InternalApiVirtualFixedIPs: [{'ip_address':'172.16.2.251'}]
-  StorageVirtualFixedIPs: [{'ip_address':'172.16.1.251'}]
-  StorageMgmtVirtualFixedIPs: [{'ip_address':'172.16.3.251'}]
-  RedisVirtualFixedIPs: [{'ip_address':'172.16.2.252'}]
+  InternalApiVirtualFixedIPs: [{'ip_address':'172.17.0.251'}]
+  StorageVirtualFixedIPs: [{'ip_address':'172.18.0.251'}]
+  StorageMgmtVirtualFixedIPs: [{'ip_address':'172.19.0.251'}]
+  RedisVirtualFixedIPs: [{'ip_address':'172.17.0.252'}]
   ControllerIPs:
     external:
     - 10.0.0.253
     internal_api:
-    - 172.16.2.253
+    - 172.17.0.253
     storage:
-    - 172.16.1.253
+    - 172.18.0.253
     storage_mgmt:
-    - 172.16.3.253
+    - 172.19.0.253
     tenant:
-    - 172.16.0.253
+    - 172.18.0.253
     #management:
     #- 172.16.4.253
   EnableLoadBalancer: false
__EOF__

And now do the deploy:

(undercloud) [stack@oscloud5 ~]$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml  -e /usr/share/openstack-tripleo-heat-templates/environments/external-loadbalancer-vip.yaml --control-scale 1 --compute-scale 1 --control-flavor control --compute-flavor compute 2>&1 | tee output.overcloud.deploy
...
2017-08-24 20:43:38Z [0.NovaCompute]: CREATE_FAILED  ResourceInError: resources.NovaCompute: Went to status ERROR due to "M[21/1854]
o valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:43:38Z [0.NovaCompute]: DELETE_IN_PROGRESS  state changed
2017-08-24 20:43:40Z [0.NovaCompute]: DELETE_COMPLETE  state changed
2017-08-24 20:43:43Z [0.NovaCompute]: CREATE_IN_PROGRESS  state changed
2017-08-24 20:43:46Z [0.NovaCompute]: CREATE_FAILED  ResourceInError: resources.NovaCompute: Went to status ERROR due to "Message: $
o valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:43:46Z [0.NovaCompute]: DELETE_IN_PROGRESS  state changed
2017-08-24 20:43:47Z [0.NovaCompute]: DELETE_COMPLETE  state changed
2017-08-24 20:43:52Z [0.NovaCompute]: CREATE_IN_PROGRESS  state changed
2017-08-24 20:43:54Z [0.NovaCompute]: CREATE_FAILED  ResourceInError: resources.NovaCompute: Went to status ERROR due to "Message: $
o valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:43:54Z [0.NovaCompute]: DELETE_IN_PROGRESS  state changed
2017-08-24 20:43:55Z [0.NovaCompute]: DELETE_COMPLETE  state changed
2017-08-24 20:44:05Z [0.NovaCompute]: CREATE_IN_PROGRESS  state changed
2017-08-24 20:44:07Z [0.NovaCompute]: CREATE_FAILED  ResourceInError: resources.NovaCompute: Went to status ERROR due to "Message: $
o valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:44:07Z [0.NovaCompute]: DELETE_IN_PROGRESS  state changed
2017-08-24 20:44:09Z [0.NovaCompute]: DELETE_COMPLETE  state changed
2017-08-24 20:44:26Z [0.NovaCompute]: CREATE_IN_PROGRESS  state changed
2017-08-24 20:44:31Z [0.NovaCompute]: CREATE_FAILED  ResourceInError: resources.NovaCompute: Went to status ERROR due to "Message: $
o valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:44:31Z [0.NovaCompute]: DELETE_IN_PROGRESS  state changed
2017-08-24 20:44:32Z [0.NovaCompute]: DELETE_COMPLETE  state changed
2017-08-24 20:45:05Z [0.NovaCompute]: CREATE_IN_PROGRESS  state changed
2017-08-24 20:45:07Z [0.NovaCompute]: CREATE_FAILED  ResourceInError: resources.NovaCompute: Went to status ERROR due to "Message: $
o valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:45:08Z [0]: CREATE_FAILED  Resource CREATE failed: ResourceInError: resources.NovaCompute: Went to status ERROR due t$
 "Message: No valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:45:09Z [0]: CREATE_FAILED  ResourceInError: resources[0].resources.NovaCompute: Went to status ERROR due to "Message: 
No valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:45:09Z [overcloud.Compute]: UPDATE_FAILED  ResourceInError: resources[0].resources.NovaCompute: Went to status ERROR $
ue to "Message: No valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:45:09Z [overcloud.Compute]: CREATE_FAILED  resources.Compute: ResourceInError: resources[0].resources.NovaCompute: We$
t to status ERROR due to "Message: No valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:45:09Z [overcloud.Controller]: CREATE_FAILED  CREATE aborted
2017-08-24 20:45:09Z [overcloud]: CREATE_FAILED  Resource CREATE failed: resources.Compute: ResourceInError: resources[0].resources.
NovaCompute: Went to status ERROR due to "Message: No valid host was found. There are not enough hosts available., Code: 500"
2017-08-24 20:45:10Z [overcloud.Controller.0]: CREATE_FAILED  CREATE aborted
2017-08-24 20:45:10Z [overcloud.Controller]: UPDATE_FAILED  Operation cancelled

 Stack overcloud CREATE_FAILED 
overcloud.Controller.0:
  resource_type: OS::TripleO::Controller
  physical_resource_id: 62b69aa6-9fb4-440c-8fd9-67f1d5e009ed
  status: CREATE_FAILED
  status_reason: |
    CREATE aborted
overcloud.Compute.0.NovaCompute:
  resource_type: OS::TripleO::ComputeServer
  Heat Stack create failed.
Heat Stack create failed.
physical_resource_id: 63c6aa47-3cbe-4304-9b49-1ad5a309742c
  status: CREATE_FAILED
  status_reason: |
    ResourceInError: resources.NovaCompute: Went to status ERROR due to "Message: No valid host was found. There are not enough host
s available., Code: 500"
...
(undercloud) [stack@oscloud5 ~]$ sudo cat /var/log/nova/nova-conductor.log
...
2017-08-24 20:43:37.307 30766 ERROR nova.scheduler.utils [req-0c938275-bdfc-4476-86f3-c4ff44f25884 a964a549d5994242ba7fa7c638b7516c 378a99af2c594019b921e3c97eb6b141 - default default] [instance: 3121bf05-95ba-4091-8401-49771b0cc288] Error from last host: oscloud5.stglabs.ibm.com (node 77040004-178b-4193-940f-984e5f8d810e): [u'Traceback (most recent call last):\n', u'  File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 1803, in _do_build_and_run_instance\n    filter_properties)\n', u'  File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 2033, in _build_and_run_instance\n    instance_uuid=instance.uuid, reason=six.text_type(e))\n', u'RescheduledException: Build of instance 3121bf05-95ba-4091-8401-49771b0cc288 was re-scheduled: Failed to provision instance 3121bf05-95ba-4091-8401-49771b0cc288: Timeout reached while waiting for callback for node 77040004-178b-4193-940f-984e5f8d810e\n']
...
(undercloud) [stack@oscloud5 ~]$ sudo cat /var/log/nova/nova-compute.log
...
2017-08-24 19:59:26.322 2969 ERROR nova.compute.manager [req-53618733-f437-4a8a-85fd-fa26b33d8d69 - - - - -] No compute node record for host oscloud5.stglabs.ibm.com: ComputeHostNotFound_Remote: Compute host oscloud5.stglabs.ibm.com could not be found.
...