This uses the map of iDRAC hostnames to IP addresses to generate an Ansible
inventory for the compute nodes. The nodes' power states and boot modes are
then set via IPMI.
Some Dell switch OSs (including Dell Network OS 9.10(0.1)) do not support
sending interface port description TLVs correctly. Instead of sending the
interface description, they send the interface name (e.g. TenGigabitEthernet
1/1/1). This breaks the discovery process which relies on Ironic node
introspection data containing the node's name in the interface port
description. We work around this here by creating an introspection rule for
each ironic node that matches against the switch system and the relevant
interface name, then sets the node's name appropriately.
For VLAN networks we need to use a tagged Linux bridge on the controller with a
veth pair to link it to the corresponding Neutron OVS bridge. This must be done
for the physical network(s) carrying the provisioning, tenant, and external
network traffic. We also need untagged VLAN subinterfaces on the tagged bridge
for the controller to communicate on these networks with.
The network interface role in use requires that we use two passes through
interface configuration to ensure that VLAN subinterfaces can be added to
bridge interfaces.
Finally, we must configure Ironic with the name of the Neutron network used
for provisioning.
There were some issues previously in the checking of the state of the nodes following
the provisioning operation. We now use the controllers in the ansible inventory which
requires more SSH connections to the seed but makes processing the results simpler.
For now the overcloud inventory should be fairly small. If that changes this should be
revisited.
The idrac-bootstrap.yml playbook is intended to bootstrap network configuration
of the iDRACs on a set of Dell servers. By default, iDRACs have a known static
IP address (192.168.0.120) and a set of default credentials configured. Since
all iDRACs have the same default IP address, we need a way to isolate a single
iDRAC while we set its network configuration. We do this using a temporary VLAN
accessible from one of the controllers.