A service for managing and provisioning Bare Metal servers.
Go to file
Devananda van der Veen 13af051a6d Bump version of PBR.
PBR had an issue building sphinx autodocs, which was fixed between
0.5.11 and 0.5.12. Let's bump the minimum version so that docs build
properly!

Fixes bug 1186834

Change-Id: I069dcc3d170eefadc90206be2b3c46d605917cbb
2013-06-08 12:54:36 -07:00
contrib Fix pep8 errors and make it pass Jenkins tests. 2013-05-16 18:40:38 -07:00
doc/source Fix one typo in index.rst. 2013-05-30 16:35:13 -07:00
etc/ironic Rename files and fix things. 2013-05-07 16:47:55 -07:00
ironic Merge "Port base object from Nova." 2013-06-06 14:43:53 +00:00
tools Copy the RHEL6 eventlet workaround from Oslo 2013-05-27 06:45:21 +01:00
.gitignore Add support for Sphinx Docs. 2013-05-25 08:03:45 +02:00
.gitreview Added project infrastructure needs. 2013-05-02 14:55:43 -04:00
.testr.conf Added .testr.conf. 2013-05-02 17:32:04 -04:00
CONTRIBUTING.rst Added project infrastructure needs. 2013-05-02 14:55:43 -04:00
LICENSE Added project infrastructure needs. 2013-05-02 14:55:43 -04:00
MANIFEST.in Added project infrastructure needs. 2013-05-02 14:55:43 -04:00
README.rst More updates to the README. 2013-05-23 09:08:02 -07:00
openstack-common.conf Copy the RHEL6 eventlet workaround from Oslo 2013-05-27 06:45:21 +01:00
requirements.txt Bump version of PBR. 2013-06-08 12:54:36 -07:00
setup.cfg Fix ironic-rootwrap capability. 2013-06-05 19:54:10 +02:00
setup.py Implement skeleton for a new DB backend. 2013-05-13 00:58:31 -07:00
test-requirements.txt Update the distribute dependency version. 2013-05-20 17:34:44 +01:00
tox.ini Fix pep8 errors and make it pass Jenkins tests. 2013-05-16 18:40:38 -07:00

README.rst

Ironic

Ironic is an Incubated OpenStack project which aims to provision bare metal machines instead of virtual machines, forked from the Nova Baremetal driver. It is best thought of as a bare metal hypervisor API and a set of plugins which interact with the bare metal hypervisors. By default, it will use PXE and IPMI in concert to provision and turn on/off machines, but Ironic also supports vendor-specific plugins which may implement additional functionality.

Project Resources

Project status, bugs, and blueprints are tracked on Launchpad:

http://launchpad.net/ironic

Additional resources are linked from the project wiki page:

https://wiki.openstack.org/wiki/Ironic

Developers wishing to contribute to an OpenStack project should find plenty of helpful resources here:

https://wiki.openstack.org/wiki/Getting_Started

All OpenStack projects use Gerrit for code reviews. A good reference for that is here:

https://wiki.openstack.org/wiki/GerritWorkflow

Project Architecture

An Ironic deployment will be composed of the following components:

  • A RESTful API service, by which operators and other services may interact with the managed bare metal servers.
  • A Manager service, which does the bulk of the work. Functionality is exposed via the API service. The Manager and API services communicate via RPC.
  • One or more Deployment Agents, which provide local control over the hardware which is not available remotely to the Manager. A ramdisk should be built which contains one of these agents, eg. with https://github.com/stackforge/diskimage-builder, and this ramdisk can be booted on-demand. The agent is never run inside a tenant instance.
  • A Database and a DB API for storing persistent state of the Manager and Drivers.

The internal driver API provides a consistent interface between the Manager service and the driver implementations. There are two types of drivers:

  • ControlDrivers manage the hardware, performing functions such as power on/off, toggle boot device, etc.
  • DeployDrivers handle the task of booting a temporary ramdisk, formatting drives, and putting a persistent image onto the hardware.
  • Driver implementations are loaded and instantiated via entrypoints when the ManagerService starts. Each Node record stored in the database indicates which drivers should manage it. When a task is started on that node, information about the node and task is passed to the corresponding driver. In this way, heterogeneous hardware deployments can be managed by a single Manager service.

In addition to the two types of drivers, there are three categories of driver functionality: core, common, and vendor:

  • "Core" functionality represents the minimal API for that driver type, eg. power on/off for a ControlDriver.
  • "Common" functionality represents an extended but supported API, and any driver which implements it must be consistent with all other driver implementations of that functionality. For example, if a driver supports enumerating PCI devices, it must return that list as well-structured JSON. In this case, Ironic may validate the API input's structure, but will pass it unaltered to the driver. This ensures compatibility for common features across drivers.
  • "Vendor" functionality allows an excemption to the API contract when a vendor wishes to expose unique functionality provided by their hardware and is unable to do so within the core or common APIs. In this case, Ironic will neither store nor introspect the messages passed between the API and the driver.

Development

Ironic source code should be pulled directly from git:

git clone https://github.com/openstack/ironic

Setting up a local environment for development can be done with tox:

cd <your_src_dir>/ironic

# install prerequisites
* Ubuntu/Debian:
sudo apt-get install python-dev swig libssl-dev python-pip libmysqlclient-dev libxml2-dev libxslt-dev
* Fedora/RHEL:
sudo yum install python-devel swig openssl-devel python-pip mysql-libs libxml2-devel libxslt-devel

sudo easy_install nose
sudo pip install virtualenv setuptools-git flake8 tox

# create virtualenv
tox -evenv -- echo 'done'

# activate the virtualenv
source .tox/venv/bin/activate

# run testr init
testr init

# run pep8/flake8 checks
flake8

# run unit tests
testr run

# deactivate the virtualenv
deactivate