Ironic
Source code |
Code review board |
Bug tracker |
Blueprints |
Developer docs |
Weekly meetings |
Contents
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 add 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 </Directory> </VirtualHost> # 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
deactivate
restart apache
sudo service apache2 restart
on your host:
add ironic.localhost to /etc/hosts with: sudo sed -i 's/\(127.0.0.1\s*localhost\)/\1 ironic.localhost/' /etc/hosts
point your browser to http://ironic.localhost:4567
You should be reading your newly build 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 # You can replace "password" with your own one. ADMIN_PASSWORD=password MYSQL_PASSWORD=password RABBIT_PASSWORD=password SERVICE_PASSWORD=password
3. Run installation of Devstack:
./stack.sh
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 heat templates are under rapid development and may invalidate this walk thru.
- Element and Ironic yaml used in this walk may be found HERE.
If you are not familiar with TripleO and / or have not used the DiskImage-Builder (DIB) tool before, please read and familiarize yourself with the TripleO story. These are some good starting points:
- Note: if you are using a fresh install for your enviroment, please run the "install-dependencies" script called for in Devtest-Doc, step #10 first. To do this, you will need to "apt-get install git" and "git clone https://github.com/openstack/tripleo-incubator.git".
Please follow TripleO's Devtest-Doc up to step 24 ("Create your undercloud image").
In order to add Ironic to the undercloud image, you will need the element and Ironic yaml from HERE:
cd $TRIPLEO_ROOT/tripleo-image-elements/elements git clone https://github.com/NoBodyCam/ironic-element ironic cd ironic/yaml cp ironic.yaml $TRIPLEO_ROOT/tripleo-heat-templates
Add Ironic to the undercloud image, like this:
$TRIPLEO_ROOT/diskimage-builder/bin/disk-image-create $NODE_DIST \ -a $NODE_ARCH -o $TRIPLEO_ROOT/undercloud \ boot-stack nova-baremetal os-collect-config stackuser $DHCP_DRIVER ironic
- Note: This will install Ironic on the undercloud image. It will configure ironic.conf to use the undercloud's services. At this point it will NOT configure the undercloud to use Ironic's services.
Load the undercloud image containing Ironic you created above into glance:
load-image $TRIPLEO_ROOT/undercloud.qcow2
At this point we need to merge the Ironic template with the undercloud template. To merge the two templates we can use TripleO's merge.py script. However, before we can merge the two templates we will need to add a hack into TripleO's undercloud-vm.yaml file.
sed -i 's/OpenStack::Heat::Stack: {}/OpenStack::Role: notcomputeConfig\n OpenStack::Heat::Stack: {}/' $TRIPLEO_ROOT/tripleo-heat-templates/undercloud-vm.yaml
- Note: TripleO is working hard to define a proper procedure for this.
python $TRIPLEO_ROOT/tripleo-heat-templates/merge.py $TRIPLEO_ROOT/tripleo-heat-templates/undercloud-vm.yaml $TRIPLEO_ROOT/tripleo-heat-templates/ironic.yaml > $TRIPLEO_ROOT/UndercloudAndIronic.yaml
- Note: this will create a merged yaml file in the $TRIPLEO_ROOT directory.
We will need to create the required passwords for the undercloud.
export UNDERCLOUD_ADMIN_TOKEN=$(os-make-password) export UNDERCLOUD_ADMIN_PASSWORD=$(os-make-password) export UNDERCLOUD_GLANCE_PASSWORD=$(os-make-password) export UNDERCLOUD_HEAT_PASSWORD=$(os-make-password) export UNDERCLOUD_NEUTRON_PASSWORD=$(os-make-password) export UNDERCLOUD_NOVA_PASSWORD=$(os-make-password)
Now spin up the undercloud!
heat stack-create -f $TRIPLEO_ROOT/UndercloudAndIronic.yaml \ -P "PowerUserName=$(whoami);AdminToken=${UNDERCLOUD_ADMIN_TOKEN};AdminPassword=${UNDERCLOUD_ADMIN_PASSWORD};GlancePassword=${UNDERCLOUD_GLANCE_PASSWORD};HeatPassword=${UNDERCLOUD_HEAT_PASSWORD};NeutronPassword=${UNDERCLOUD_NEUTRON_PASSWORD};NovaPassword=${UNDERCLOUD_NOVA_PASSWORD};BaremetalArch=${NODE_ARCH}" \ undercloud
After HEAT has finished its magic, "nova list" should show something like this:
+----------------------+------------------------------------+--------+------------+-------------+--------------------+ | ID | Name | Status | Task State | Power State | Networks | +----------------------+------------------------------------+--------+------------+-------------+--------------------+ | <UUID> | undercloud-notcompute-bo7jyyewi3on | ACTIVE | None | Running | ctlplane=192.0.2.2 | +----------------------+------------------------------------+--------+------------+-------------+--------------------+
To login to the undercloud node with ssh, use a command like this
ssh heat-admin@192.0.2.2
- Note: 192.0.2.2 is retrieved from the above nova list example.
We included the stackuser element when we built our image so if you have console access you may also login on the console with " stack " as both username and password. Both users, "heat-admin" and "stack", have full sudo access.
Setup keystone on the undercloud.
- Note: we are skipping TripleO's "setup-baremetal $NODE_CPU $NODE_MEM $NODE_DISK $NODE_ARCH undercloud" step, as this would register the vm with nova and not ironic.
export UNDERCLOUD_IP=$(nova list | grep ctlplane | sed -e "s/.*=\\([0-9.]*\\).*/\1/") source $TRIPLEO_ROOT/tripleo-incubator/undercloudrc init-keystone -p $UNDERCLOUD_ADMIN_PASSWORD $UNDERCLOUD_ADMIN_TOKEN $UNDERCLOUD_IP admin@example.com heat-admin@$UNDERCLOUD_IP setup-endpoints $UNDERCLOUD_IP --glance-password $UNDERCLOUD_GLANCE_PASSWORD --heat-password $UNDERCLOUD_HEAT_PASSWORD --neutron-password $UNDERCLOUD_NEUTRON_PASSWORD --nova-password $UNDERCLOUD_NOVA_PASSWORD PASSWORD=$UNDERCLOUD_IRONIC_PASSWORD register-endpoint -r "regionOne" -d "Ironic Service" ironic baremetal http://$UNDERCLOUD_IP:6385
Test it.
ssh heat-admin@192.0.2.2 sudo su - source stackrc ironic chassis-add --description MyFirstTestChassis ironic chassis-list