IPMI Controller for OpenStack Instances

QuintupleO Network Topology

As discussed in my last update on QuintupleO, the biggest blocker for getting that working was a way to allow Ironic to control OpenStack instances. Since then I have been made aware of the pyghmi project, which provides a way to implement IPMI interfaces that do arbitrary things on the back end. It currently includes a couple of examples in its bin directory for noop and virsh implementations. I've written an OpenStack version.

So far it only implements the pieces I needed to do an Ironic deployment, and assumes the instance it's controlling was created with a PXE-bootable flavor as discussed in my previous QuintupleO update. With that and the small Nova and Neutron changes (also in the previous update) I was able to do a full baremetal-style deployment to OpenStack instances using Ironic. It actually imitates a real baremetal deploy better because you're using the regular ipmitool driver in Ironic instead of pxe_ssh.

Some Notes on my environment:

  • For each baremetal VM I wanted to deploy to, I created a matching "bmc" VM that was running the openstackbmc script (and nothing else, so these can be very small instances) pointed at the "baremetal" instance. There are other ways this could be done, but separate VMs seemed to map more closely to how BMCs would work in a real environment.
  • In addition to the usual public and private networks, I added a provisioning network called "undercloud" with DHCP disabled so the undercloud's Neutron could handle that. You can see the network topology in the attached image.
  • Note that the baremetal VMs had to have the "undercloud" network as their first network device. I ran into intermittent issues where they would only attempt to PXE boot off the first interface. I'm not sure what was going on there, but since it didn't particularly matter to me which interface came first that worked fine for me.
  • Example openstackbmc call (as root): openstackbmc --os-user admin --os-password password --os-tenant admin --os-auth-url http://11.1.1.12:5000/v2.0 --instance baremetal_0

While this should make QuintupleO a viable option for private clouds where you can hack up Nova and Neutron, we still need to get this functionality into the projects themselves in a way that integrates better. I would also like to look into automating the deployment of these environments - using Heat to deploy the baremetal/bmc pairs would be cool, and could make this much easier to scale.

So that's the state of the QuintupleO art today. I've had a few people contact me about it since my last update and hopefully this will be useful. If you want to chat more about it, my contact information is on the About page.

Edit: Here's my nodes json file for registering the Ironic nodes:

{
   "nodes":
   [
      {
         "pm_type": "pxe_ipmitool",
         "mac":
         [
            "fa:16:3e:2a:0e:36"
         ],
         "cpu": "2",
         "memory": "4096",
         "disk": "40",
         "arch": "x86_64",
         "pm_user": "admin",
         "pm_password": "password",
         "pm_addr": "10.0.0.8"
      },
      {
         "pm_type": "pxe_ipmitool",
         "mac":
         [
            "fa:16:3e:da:39:c9"
         ],
         "cpu": "2",
         "memory": "4096",
         "disk": "40",
         "arch": "x86_64",
         "pm_user": "admin",
         "pm_password": "password",
         "pm_addr": "10.0.0.15"
      },
      {
         "pm_type": "pxe_ipmitool",
         "mac":
         [
            "fa:16:3e:51:9b:68"
         ],
         "cpu": "2",
         "memory": "4096",
         "disk": "40",
         "arch": "x86_64",
         "pm_user": "admin",
         "pm_password": "password",
         "pm_addr": "10.0.0.16"
      }
   ]
}