Hardware introspection daemon for OpenStack Ironic
Go to file
Dmitry Tantsur aa4b90b471 Enhanced README, added installation guide 2014-10-10 14:24:11 +02:00
ironic_discoverd Switch to setuptools entry points 2014-10-09 17:14:46 +02:00
.gitignore New structure, getting ready for PyPI 2014-10-02 18:17:38 +02:00
.travis.yml Enable Travis and make test 2014-10-02 18:37:01 +02:00
LICENSE Apache license 2014-10-03 17:15:55 +02:00
MANIFEST.in Include man page into manifest 2014-10-08 12:28:28 +02:00
Makefile Makefile: .PHONY 2014-10-09 17:21:06 +02:00
README.rst Enhanced README, added installation guide 2014-10-10 14:24:11 +02:00
example.conf Implement authentication via Keystone 2014-10-09 16:48:10 +02:00
ironic-discoverd.8 Simple man page 2014-10-08 12:16:28 +02:00
requirements.txt Implement authentication via Keystone 2014-10-09 16:48:10 +02:00
setup.py Switch to setuptools entry points 2014-10-09 17:14:46 +02:00

README.rst

Hardware properties discovery for OpenStack Ironic

image

This is an auxiliary service for discovering basic hardware properties for a node managed by OpenStack Ironic. It fulfills the following tasks:

  • Initiating discovery for given nodes.
  • Managing iptables settings to allow/deny access to PXE boot server (usually dnsmasq) for nodes under discovery.
  • Receiving and processing data from discovery ramdisk booted on a node.

Starting dnsmasq and configuring PXE boot environment is not part of this package and should be done separately.

Installation

Package

Install package from PyPI (you may want to use virtualenv to isolate your environment):

pip install ironic-discoverd

Copy example.conf to some permanent place (/etc/ironic-discoverd/discoverd.conf is what we usually use). You have to fill in configuration values with names starting with os_. They configure how ironic-discoverd authenticates with Keystone.

Note

Configuration file contains a password and thus should be owned by root and should have access rights like 0600.

PXE Setup

  • You need TFTP server running and accessible.

  • Build and put into your TFTP directory kernel and ramdisk from the diskimage-builder discovery-ironic element.

  • You need PXE boot server (e.g. dnsmasq) running on the same machine as ironic-discoverd. Don't do any firewall configuration: ironic-discoverd will handle it for you. In ironic-discoverd configuration file set dnsmasq_interface to the interface your PXE boot server listens on.

  • Configure your $TFTPROOT/pxelinux.cfg/default with something like:

    default discover
    
    label discover
    kernel discovery.kernel
    append initrd=discovery.ramdisk
    ironic_callback_url=http://{IP}:5050/v1/continue
    
    ipappend 3

    Replace {IP} with IP of the machine (do not use loopback interface, it will be accessed by ramdisk on a booting machine).

Use ironic-discoverd element as an example for this configuration.

Running

Run as root:

ironic-discoverd /etc/ironic-discoverd/discoverd.conf

Developing

Checkout and create an environment:

git clone https://github.com/Divius/ironic-discoverd.git
cd ironic-discoverd
make test_env

Run test suite:

make test

Install and run:

source .env/bin/activate
python setup.py develop
ironic-discoverd example.conf

Of course you may have to modify example.conf to match your OpenStack environment.

API

By default ironic-discoverd listens on 0.0.0.0:5050, this can be changed in configuration. Protocol is JSON over HTTP;

HTTP API consist of 2 endpoints:

  • POST /v1/discover initiate hardware discovery. Request body: JSON - list of UUID's of nodes to discover. All power management configuration for these nodes needs to be done prior to calling the endpoint. Requires X-Auth-Token header with Keystone token for authentication.

    Note

    Before version 0.2.0 this endpoint was not authenticated. Now it is, but check for admin role is not implemented yet.

    Response: always HTTP 202.

  • POST /v1/continue internal endpoint for the discovery ramdisk to post back discovered data. Should not be used for anything other than implementing the ramdisk. Request body: JSON dictionary with keys:

    • cpus number of CPU
    • cpu_arch architecture of the CPU
    • memory_mb RAM in MiB
    • local_gb hard drive size in GiB
    • macs list of MAC addresses for all NIC's

    Response: always HTTP 202.

ChangeLog

v0.2.0

  • Authentication via Keystone.
  • Switch to setuptools entry points.
  • Enhanced documentation.

v0.1.1

  • Added simple man page.
  • Make interface configurable.

v0.1.0

  • First stable release.