.. _dev-quickstart: ===================== Developer Quick-Start ===================== This is a quick walkthrough to get you started developing code for Ironic. This assumes you are already familiar with submitting code reviews to an OpenStack project. .. seealso:: https://wiki.openstack.org/wiki/GerritWorkflow Ironic source code should be pulled directly from git:: cd <your source dir> git clone https://github.com/openstack/ironic cd ironic Install prerequisites:: # Ubuntu/Debian: sudo apt-get install python-dev swig libssl-dev python-pip libmysqlclient-dev libxml2-dev libxslt-dev libpq-dev git # Fedora/RHEL: sudo yum install python-devel swig openssl-devel python-pip mysql-devel libxml2-devel libxslt-devel postgresql-devel git sudo easy_install nose sudo pip install virtualenv setuptools-git flake8 tox Setting up a local environment for development can be done with tox:: # create virtualenv tox -evenv -- echo 'done' # activate the virtualenv source .tox/venv/bin/activate # install requirements within the virtualenv pip install -U -r requirements.txt test-requirements.txt # initialize testr testr init To run the pep8/flake8 syntax and style checks:: # run pep8/flake8 checks flake8 To run Ironic's unit test suite:: # run all the unit tests testr run # to run specific tests only, specify the file, module or test name, eg: testr run test_conductor When you're done:: # deactivate the virtualenv deactivate =============================== Exercising the Services Locally =============================== If you would like to exercise the Ironic services in isolation within a local virtual environment, you can do this without starting any other OpenStack services. For example, this is useful for rapidly prototyping and debugging interactions over the RPC channel, testing database migrations, and so forth. First, install prerequisites:: # install rabbit message broker # Ubuntu/Debian: sudo apt-get install rabbitmq-server # Fedora/RHEL: sudo yum install rabbitmq-server # install ironic CLI sudo pip install python-ironicclient Then, activate the virtual environment created in the previous section, and run everything else within that:: # enter the ironic directory cd <your source dir> cd ironic # activate the virtualenv source .tox/venv/bin/activate # install ironic within the virtualenv python setup.py develop # initialize the ironic database; this defaults to storing data in # ./ironic/openstack/common/db/ironic.sqlite ironic-dbsync # copy sample config and modify it as necessary cp etc/ironic/ironic.conf.sample etc/ironic/ironic.conf.local cat >> etc/ironic/ironic.conf.local <<EOL host = test-host auth_strategy = noauth EOL # start services and observe their output # for each service, open a separate window and active the virtualenv in it ironic-api -v -d --config-file etc/ironic/ironic.conf.local ironic-conductor -v -d --config-file etc/ironic/ironic.conf.local # export ENV vars so ironic client connects to the local services export OS_AUTH_TOKEN=fake-token export IRONIC_URL=http://localhost:6385/ # you should now be able to query the Ironic API # and see a list of supported drivers on "test-host" ironic driver-list # enroll nodes with the "fake" driver, eg: ironic node-create -d fake # if you make some code changes and want to test their effects, # install again with "python setup.py develop", stop the services # with Ctrl-C, and restart them. ================================ Building developer documentation ================================ If you would like to build the documentation locally, eg. to test your documentation changes before uploading them for review, you should install and configure Apache to serve the output. Below are some basic instructions. This guide does not cover the many ways one can configure Apache, nor does it address security issues with running a web server on your laptop. (In other words, you might want to do this in a VM.) :: # Install Apache on Ubuntu/Debian sudo apt-get install apache2 # Install Apache on Fedora/RHEL sudo yum install httpd sudo systemctl start httpd # Add symlink to build output. For this example, let's assume your # Apache DocumentRoot is /var/www and ironic source is at /opt/stack/ironic cd /var/www sudo ln -s /opt/stack/ironic/doc/build/html ironic cd /opt/stack/ironic # build the documentation source .tox/venv/bin/activate python setup.py build_sphinx # open a web browser pointed to http://localhost/ironic/index.html