diff options
-rw-r--r-- | doc/source/deploy/install-guide.rst | 32 | ||||
-rw-r--r-- | ironic/common/pxe_utils.py | 8 | ||||
-rw-r--r-- | ironic/tests/test_pxe_utils.py | 2 | ||||
-rw-r--r-- | requirements.txt | 50 | ||||
-rw-r--r-- | setup.cfg | 2 | ||||
-rw-r--r-- | setup.py | 1 | ||||
-rw-r--r-- | test-requirements.txt | 14 |
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 @@ -1,6 +1,6 @@ [metadata] name = ironic -version = 2015.1 +version = 2015.1.1 summary = OpenStack Bare Metal Provisioning description-file = README.rst @@ -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 |