Ironic
Source code |
Code review board |
Bug tracker |
Blueprints |
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 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 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. 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 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 NOVA_PATCH_REV=21 cd $TRIPLEO_ROOT 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 \ -P "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};\ IronicPassword=${UNDERCLOUD_IRONIC_PASSWORD}" \ undercloud
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:
export UNDERCLOUD_MAC=$(create-nodes $NODE_CPU $NODE_MEM $NODE_DISK $NODE_ARCH 1)
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 \ driver_info/ssh_username=$(whoami)
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]