summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/deploy/install-guide.rst32
-rw-r--r--ironic/common/pxe_utils.py8
-rw-r--r--ironic/tests/test_pxe_utils.py2
-rw-r--r--requirements.txt50
-rw-r--r--setup.cfg2
-rw-r--r--setup.py1
-rw-r--r--test-requirements.txt14
7 files changed, 70 insertions, 39 deletions
diff --git a/doc/source/deploy/install-guide.rst b/doc/source/deploy/install-guide.rst
index 9043ad69b..5da8880ba 100644
--- a/doc/source/deploy/install-guide.rst
+++ b/doc/source/deploy/install-guide.rst
@@ -802,6 +802,38 @@ on the Bare Metal Service node(s) where ``ironic-conductor`` is running.
service ironic-conductor restart
+
+Neutron configuration
+---------------------
+
+DHCP requests from iPXE need to have a DHCP tag called ``ipxe``, in order
+for the DHCP server to tell the client to get the boot.ipxe script via
+HTTP. Otherwise, if the tag isn't there, the DHCP server will tell the
+DHCP client to chainload the iPXE image (undionly.kpxe). Neutron needs to
+be configured to create this DHCP tag, since it isn't create by default.
+
+#. Create a custom ``dnsmasq.conf`` file with a setting for the ipxe tag. For
+ example, create the file ``/etc/dnsmasq-ironic.conf`` with the content::
+
+ # Create the "ipxe" tag if request comes from iPXE user class
+ dhcp-userclass=set:ipxe,iPXE
+
+ # Alternatively, create the "ipxe" tag if request comes from DHCP option 175
+ # dhcp-match=set:ipxe,175
+
+#. In the Neutron DHCP Agent configuration file (typically located at
+ /etc/neutron/dhcp_agent.ini), set the custom ``/etc/dnsmasq-ironic.conf``
+ file as the dnsmasq configuration file::
+
+ [DEFAULT]
+ dnsmasq_config_file = /etc/dnsmasq-ironic.conf
+
+
+#. Restart the ``neutron-dhcp-agent`` process::
+
+ service neutron-dhcp-agent restart
+
+
IPMI support
------------
diff --git a/ironic/common/pxe_utils.py b/ironic/common/pxe_utils.py
index 09528a218..fdd2c0d0f 100644
--- a/ironic/common/pxe_utils.py
+++ b/ironic/common/pxe_utils.py
@@ -260,15 +260,15 @@ def dhcp_options_for_instance(task):
# to neutron "dhcp-match=set:ipxe,175" and use below option
dhcp_opts.append({'opt_name': 'tag:!ipxe,bootfile-name',
'opt_value': CONF.pxe.pxe_bootfile_name})
+ dhcp_opts.append({'opt_name': 'tag:ipxe,bootfile-name',
+ 'opt_value': ipxe_script_url})
else:
# !175 == non-iPXE.
# http://ipxe.org/howto/dhcpd#ipxe-specific_options
dhcp_opts.append({'opt_name': '!175,bootfile-name',
'opt_value': CONF.pxe.pxe_bootfile_name})
- # If the request comes from iPXE, direct it to boot from the
- # iPXE script
- dhcp_opts.append({'opt_name': 'bootfile-name',
- 'opt_value': ipxe_script_url})
+ dhcp_opts.append({'opt_name': 'bootfile-name',
+ 'opt_value': ipxe_script_url})
else:
if deploy_utils.get_boot_mode_for_deploy(task.node) == 'uefi':
boot_file = CONF.pxe.uefi_pxe_bootfile_name
diff --git a/ironic/tests/test_pxe_utils.py b/ironic/tests/test_pxe_utils.py
index 1792d840a..cca824a33 100644
--- a/ironic/tests/test_pxe_utils.py
+++ b/ironic/tests/test_pxe_utils.py
@@ -357,7 +357,7 @@ class TestPXEUtils(db_base.DbTestCase):
'opt_value': '192.0.2.1'},
{'opt_name': 'tftp-server',
'opt_value': '192.0.2.1'},
- {'opt_name': 'bootfile-name',
+ {'opt_name': 'tag:ipxe,bootfile-name',
'opt_value': expected_boot_script_url}]
with task_manager.acquire(self.context, self.node.uuid) as task:
self.assertEqual(sorted(expected_info),
diff --git a/requirements.txt b/requirements.txt
index a5e537470..0dd15642d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,10 +1,10 @@
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
-pbr>=0.6,!=0.7,<1.0
-SQLAlchemy>=0.9.7,<=0.9.99
+pbr!=0.7,<1.0,>=0.6
+SQLAlchemy<=0.9.99,>=0.9.7
alembic>=0.7.2
-eventlet>=0.16.1,!=0.17.0
+eventlet!=0.17.0,>=0.16.1
lxml>=2.3
WebOb>=1.2.3
greenlet>=0.3.2
@@ -12,29 +12,29 @@ sqlalchemy-migrate>=0.9.5
netaddr>=0.7.12
paramiko>=1.13.0
iso8601>=0.1.9
-python-neutronclient>=2.3.11,<2.5.0
-python-glanceclient>=0.15.0,<0.18.0
-python-keystoneclient>=1.1.0,<1.4.0
-python-swiftclient>=2.2.0,<2.5.0
-stevedore>=1.3.0,<1.4.0 # Apache-2.0
+python-neutronclient<2.5.0,>=2.3.11
+python-glanceclient<0.18.0,>=0.15.0
+python-keystoneclient<1.4.0,>=1.2.0
+python-swiftclient<2.5.0,>=2.2.0
+stevedore<1.4.0,>=1.3.0 # Apache-2.0
pysendfile==2.0.0
-websockify>=0.6.0,<0.7
-oslo.concurrency>=1.8.0,<1.9.0 # Apache-2.0
-oslo.config>=1.9.3,<1.10.0 # Apache-2.0
-oslo.context>=0.2.0,<0.3.0 # Apache-2.0
-oslo.db>=1.7.0,<1.8.0 # Apache-2.0
-oslo.rootwrap>=1.6.0,<1.7.0 # Apache-2.0
-oslo.i18n>=1.5.0,<1.6.0 # Apache-2.0
-oslo.policy>=0.3.1,<0.4.0 # Apache-2.0
-oslo.serialization>=1.4.0,<1.5.0 # Apache-2.0
-oslo.utils>=1.4.0,<1.5.0 # Apache-2.0
+websockify<0.7,>=0.6.0
+oslo.concurrency<1.9.0,>=1.8.0 # Apache-2.0
+oslo.config<1.10.0,>=1.9.3 # Apache-2.0
+oslo.context<0.3.0,>=0.2.0 # Apache-2.0
+oslo.db<1.8.0,>=1.7.0 # Apache-2.0
+oslo.rootwrap<1.7.0,>=1.6.0 # Apache-2.0
+oslo.i18n<1.6.0,>=1.5.0 # Apache-2.0
+oslo.policy<0.4.0,>=0.3.1 # Apache-2.0
+oslo.serialization<1.5.0,>=1.4.0 # Apache-2.0
+oslo.utils<1.5.0,>=1.4.0 # Apache-2.0
pecan>=0.8.0
-requests>=2.2.0,!=2.4.0
+requests!=2.4.0,>=2.2.0
six>=1.9.0
jsonpatch>=1.1
-WSME>=0.6
-Jinja2>=2.6 # BSD License (3 clause)
-keystonemiddleware>=1.5.0,<1.6.0
-oslo.messaging>=1.8.0,<1.9.0 # Apache-2.0
-retrying>=1.2.3,!=1.3.0 # Apache-2.0
-posix_ipc
+WSME<0.7,>=0.6
+Jinja2>=2.6 # BSD License (3 clause)
+keystonemiddleware<1.6.0,>=1.5.0
+oslo.messaging<1.9.0,>=1.8.0 # Apache-2.0
+retrying!=1.3.0,>=1.2.3 # Apache-2.0
+posix-ipc
diff --git a/setup.cfg b/setup.cfg
index f1f7d703b..d6bb07fd7 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = ironic
-version = 2015.1
+version = 2015.1.1
summary = OpenStack Bare Metal Provisioning
description-file =
README.rst
diff --git a/setup.py b/setup.py
index 736375744..056c16c2b 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/test-requirements.txt b/test-requirements.txt
index 46ef6a56b..2436beda0 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,22 +1,22 @@
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
-hacking>=0.9.2,<0.10
+hacking<0.10,>=0.9.2
coverage>=3.6
discover
fixtures>=0.3.14
-mock>=1.0
+mock<1.1.0,>=1.0
Babel>=1.3
MySQL-python
-oslotest>=1.5.1,<1.6.0 # Apache-2.0
+oslotest<1.6.0,>=1.5.1 # Apache-2.0
psycopg2
-python-ironicclient>=0.2.1,<0.6.0
+python-ironicclient<0.6.0,>=0.4.1
python-subunit>=0.0.18
testrepository>=0.0.18
-testtools>=0.9.36,!=1.2.0
+testtools!=1.2.0,>=0.9.36
# Doc requirements
-sphinx>=1.1.2,!=1.2.0,!=1.3b1,<1.3
+sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2
sphinxcontrib-pecanwsme>=0.8
-oslosphinx>=2.5.0,<2.6.0 # Apache-2.0
+oslosphinx<2.6.0,>=2.5.0 # Apache-2.0