Jump to: navigation, search


Revision as of 00:11, 12 February 2014 by Devananda (talk | contribs) (Using Disk Image Builder)
Source code
Code review board
Bug tracker
Developer docs
Weekly meetings

Ironic: Bare Metal provisioning for OpenStack

Ironic is under rapid initial development, forked from Nova's Baremetal driver. If you're looking for something that works today, go there :)

If you'd like to join the development, start by reading the developer docs here, and then join us in the #openstack-ironic on irc.freenode.net!

Building Documentation Locally

If you want to build the ironic docs for yourself locally, follow these steps:

create a vm

 #using vagrant 1.2.2 with a virtualbox backend
 vagrant init precise32
 #enable networking with the host
   vi Vagrantfile
     config.vm.network :forwarded_port, guest: 80, host: 4567
 vagrant up

shell into the vm

 vagrant ssh

install dependencies

 sudo apt-get update
 sudo apt-get install -y git apache2 python-dev swig libssl-dev python-pip libmysqlclient-dev libxml2-dev libxslt-dev libxslt1-dev python-mysqldb libpq-dev
 sudo pip install virtualenv setuptools-git flake8 tox
 sudo easy_install nose

get the ironic repo

 cd ~
 git clone git://github.com/openstack/ironic.git

create a file enabling ironic.localhost in apache

 sudo vi /etc/apache2/sites-enabled/100-ironic
 # contents
 <VirtualHost *:80>
     ServerName ironic.localhost
     DocumentRoot /opt/source/ironic/doc/build/html
         <Directory /opt/source/ironic/doc/build/html>
                 Options Indexes FollowSymLinks MultiViews
                 AllowOverride None
                 Order allow,deny
                 allow from all
 # change the DocumentRoot and the Directory to point the the ironic repo, if you are using
 # vagrant and the ironic repo is the the vagrant user's home directory the code is fine

create a venv inside the ironic repo

 cd ironic
 tox -evenv -- echo 'done'

activate the newly created venv

 source .tox/venv/bin/activate

from inside the venv

 python setup.py build_sphinx
 # as I run this I get 20 warnings, ignore the warnings

exit the venv


restart apache

 sudo service apache2 restart

on your host:

 add ironic.localhost to /etc/hosts with:
 sudo sed -i 's/\(\s*localhost\)/\1 ironic.localhost/' /etc/hosts

point your browser to http://ironic.localhost:4567

You should be reading your newly built documentation.

Try it on Devstack

To install Ironic using Devstack follow the following steps:

1. Obtain the latest copy of Devstack:

 git clone git://github.com/openstack-dev/devstack.git

2. Go to the Devstack source tree and create a localrc file with at least the following options:

 # Enable Ironic API and Ironic Conductor
 enable_service ir-api
 enable_service ir-cond
 # Enable Neutron which is required by Ironic and disable nova-network.
 disable_service n-net
 enable_service q-svc
 enable_service q-agt
 enable_service q-dhcp
 enable_service q-l3
 enable_service q-meta
 enable_service neutron
 enable_service q-lbaas
 # You can replace "password" with your own one.

3. Run installation of Devstack:


4. Wait until everything gets installed.

5. Ironic API service is listening on http://YOUR_IP:6385

Using Disk Image Builder

In this section, we will go over how to set up Ironic within the TripleO enviroment.

Note: TripleO is under rapid development and may invalidate this walk thru.

If not familiar with TripleO and / or have not used the DiskImage-Builder (DIB) tool before, please read and familiarize yourself with the TripleO story. Here are some good starting points:

Please follow TripleO's Devtest-Doc up to the devtest_undercloud section.

Build undercloud containing Ironic

We need to modify step #1 of devtest_undercloud-walkthru to include the Ironic services, and to switch Nova from using the nova.virt.baremetal driver to instead use the nova.virt.ironic driver.

# Note that rev 21 was current at the time of this writing. You may need to update this revision number
export UNDERCLOUD_DIB_EXTRA_ARGS="nova-ironic"
export DIB_REPOLOCATION_nova=https://review.openstack.org/openstack/nova
export DIB_REPOREF_nova=refs/changes/28/51328/$NOVA_PATCH_REV

Proceed until step #3 of devtest_undercloud-walkthru.

Heat template

Instead of building the undercloud-vm.yaml file, we want to build the undercloud-vm-ironic.yaml file:

make -C $TRIPLEO_ROOT/tripleo-heat-templates undercloud-vm-ironic.yaml

This template requires slightly different parameters, so use this command to deploy your undercloud:

heat stack-create -f $TRIPLEO_ROOT/tripleo-heat-templates/undercloud-vm-ironic.yaml \

Continue devtest_undercloud-walkthru

Continue to follow the devtest_undercloud-walkthru up through step #9.

Register the Ironic service

After step #9, register the Ironic service with keystone.

PASSWORD=$UNDERCLOUD_IRONIC_PASSWORD register-endpoint -r "regionOne" -d "Ironic Service" ironic baremetal http://$UNDERCLOUD_IP:6385

In devtest_undercloud-walkthru's step #10, nodes are registered to the undercloud's nova-baremetal and not Ironic. Instead of that, we'll create a 'baremetal' node and register it with ironic, via the undercloud.

Allow Ironic's SSH driver to connect to your local machine:

ssh heat-admin@$UNDERCLOUD_IP "cat /opt/stack/boot-stack/ironic-ssh-power-key.pub" >> ~/.ssh/authorized_keys

Copy the Ironic API credentials to your local machine:

ssh heat-admin@$UNDERCLOUD_IP -- 'sudo cat /root/stackrc' > $TRIPLEO_ROOT/tripleo-incubator/ironicrc
sed -i "s/localhost/$UNDERCLOUD_IP/" $TRIPLEO_ROOT/tripleo-incubator/ironicrc
source $TRIPLEO_ROOT/tripleo-incubator/ironicrc

Create an emulated baremetal node

This will create a 'baremetal' node:


Use the ironic client to enroll the baremetal node:

HOST_IP=$(ip addr show virbr0 | grep inet | awk '{print $2}' | sed 's/\/[0-9]*//')
CHASSIS=$(ironic chassis-create -d TestChassis | grep uuid | awk '{print $4}')
NODE=$(ironic node-create -c $CHASSIS -d pxe_ssh | grep ' uuid ' | awk '{print $4}')
ironic port-create -n $NODE -a $UNDERCLOUD_MAC 
ironic node-update $NODE add \
 driver_info/ssh_virt_type=virsh \
 driver_info/ssh_address=$HOST_IP \
 driver_info/ssh_key_filename=/opt/stack/boot-stack/ironic-ssh-power-key \

Confirm everything is enrolled and correct:

ironic node-show $NODE

You can now control the power state of this node with this command:

ironic node-set-power-state $NODE [on|off|reboot]