summaryrefslogtreecommitdiff
path: root/doc/source/deploy/install-guide.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/deploy/install-guide.rst')
-rw-r--r--doc/source/deploy/install-guide.rst2529
1 files changed, 77 insertions, 2452 deletions
diff --git a/doc/source/deploy/install-guide.rst b/doc/source/deploy/install-guide.rst
index 6b1d10d95..648f3bfad 100644
--- a/doc/source/deploy/install-guide.rst
+++ b/doc/source/deploy/install-guide.rst
@@ -4,699 +4,65 @@
Installation Guide
==================
-This document is continually updated and reflects the latest
-available code of the Bare Metal service (ironic).
-Users of releases may encounter differences and are encouraged
-to look at earlier versions of this document for guidance.
+.. warning:: This installation guide has moved to the `Bare Metal
+ service installation guide`_. This page will not be
+ updated.
+
+.. _`Bare Metal service installation guide`: http://docs.openstack.org/project-install-guide/baremetal/newton/
Service overview
================
-The Bare Metal service is a collection of components that provides support to
-manage and provision physical machines.
-
-Also known as the ``ironic`` project, the Bare Metal service may, depending
-upon configuration, interact with several other OpenStack services. This
-includes:
-
-- the OpenStack Telemetry module (ceilometer) for consuming the IPMI metrics
-- the OpenStack Identity service (keystone) for request authentication and to
- locate other OpenStack services
-- the OpenStack Image service (glance) from which to retrieve images and image meta-data
-- the OpenStack Networking service (neutron) for DHCP and network configuration
-- the OpenStack Compute service (nova) works with the Bare Metal service and acts as
- a user-facing API for instance management, while the Bare Metal service
- provides the admin/operator API for hardware management. The OpenStack
- Compute service also provides scheduling facilities (matching flavors <->
- images <-> hardware), tenant quotas, IP assignment, and other services which
- the Bare Metal service does not, in and of itself, provide.
-
-- the OpenStack Block Storage (cinder) provides volumes, but this aspect is not
- yet available.
-
-The Bare Metal service includes the following components:
-
-- ironic-api: A RESTful API that processes application requests by sending
- them to the ironic-conductor over RPC.
-- ironic-conductor: Adds/edits/deletes nodes; powers on/off nodes with
- ipmi or ssh; provisions/deploys/decommissions bare metal nodes.
-- ironic-python-agent: A python service which is run in a temporary ramdisk to
- provide ironic-conductor service(s) with remote access and in-band hardware
- control.
-- python-ironicclient: A command-line interface (CLI) for interacting with
- the Bare Metal service.
-
-Additionally, the Bare Metal service has certain external dependencies, which are
-very similar to other OpenStack services:
-
-- A database to store hardware information and state. You can set the database
- back-end type and location. A simple approach is to use the same database
- back end as the Compute service. Another approach is to use a separate
- database back-end to further isolate bare metal resources (and associated
- metadata) from users.
-- A queue. A central hub for passing messages, such as RabbitMQ.
- It should use the same implementation as that of the Compute service.
-
-Optionally, one may wish to utilize the following associated projects for
-additional functionality:
-
-- ironic-inspector_; An associated service which performs in-band hardware
- introspection by PXE booting unregistered hardware into a "discovery ramdisk".
-- diskimage-builder_; May be used to customize machine images, create and
- discovery deploy ramdisks, if necessary.
-- bifrost_; a set of Ansible playbooks that automates the task of deploying a
- base image onto a set of known hardware using ironic.
-
-.. _ironic-inspector: http://docs.openstack.org/developer/ironic-inspector/
-.. _diskimage-builder: http://docs.openstack.org/developer/diskimage-builder/
-.. _bifrost: http://docs.openstack.org/developer/bifrost/
-
-
-.. todo: include coreos-image-builder reference here, once the split is done
+See the `service overview`_ section in the installation guide for the Bare
+Metal service.
+.. _`service overview`: http://docs.openstack.org/project-install-guide/baremetal/newton/get_started.html
Install and configure prerequisites
===================================
-The Bare Metal service is a collection of components that provides support to
-manage and provision physical machines. You can configure these components to
-run on separate nodes or the same node. In this guide, the components run on
-one node, typically the Compute Service's compute node.
-
-This section shows you how to install and configure the components.
-
-It assumes that the Identity, Image, Compute, and Networking services
-have already been set up.
-
-Configure the Identity service for the Bare Metal service
----------------------------------------------------------
-
-#. Create the Bare Metal service user (for example, ``ironic``).
- The service uses this to authenticate with the Identity service.
- Use the ``service`` tenant and give the user the ``admin`` role::
-
- openstack user create --password IRONIC_PASSWORD \
- --email ironic@example.com ironic
- openstack role add --project service --user ironic admin
-
-#. You must register the Bare Metal service with the Identity service so that
- other OpenStack services can locate it. To register the service::
-
- openstack service create --name ironic --description \
- "Ironic baremetal provisioning service" baremetal
-
-#. Use the ``id`` property that is returned from the Identity service when
- registering the service (above), to create the endpoint,
- and replace IRONIC_NODE with your Bare Metal service's API node::
-
- openstack endpoint create --region RegionOne \
- baremetal admin http://IRONIC_NODE:6385
- openstack endpoint create --region RegionOne \
- baremetal public http://IRONIC_NODE:6385
- openstack endpoint create --region RegionOne \
- baremetal internal http://IRONIC_NODE:6385
-
- If only keystone v2 API is available, use this command instead::
-
- openstack endpoint create --region RegionOne \
- --publicurl http://IRONIC_NODE:6385 \
- --internalurl http://IRONIC_NODE:6385 \
- --adminurl http://IRONIC_NODE:6385 \
- baremetal
-
-#. You may delegate limited privileges related to the Bare Metal service
- to your Users by creating Roles with the OpenStack Identity service. By
- default, the Bare Metal service expects the "baremetal_admin" and
- "baremetal_observer" Roles to exist, in addition to the default "admin"
- Role. There is no negative consequence if you choose not to create these
- Roles. They can be created with the following commands::
-
- openstack role create baremetal_admin
- openstack role create baremetal_observer
-
- If you choose to customize the names of Roles used with the Bare Metal
- service, do so by changing the "is_member", "is_observer", and "is_admin"
- policy settings in ``/etc/ironic/policy.json``.
-
- More complete documentation on managing Users and Roles within your
- OpenStack deployment are outside the scope of this document, but may be
- found here_.
-
-#. You can further restrict access to the Bare Metal service by creating a
- separate "baremetal" Project, so that Bare Metal resources (Nodes, Ports,
- etc) are only accessible to members of this Project::
+See the `prerequisites`_ section in the installation guide for the Bare Metal
+service.
- openstack project create baremetal
-
- At this point, you may grant read-only access to the Bare Metal service API
- without granting any other access by issuing the following commands::
-
- openstack user create \
- --domain default --project-domain default --project baremetal \
- --password PASSWORD USERNAME
- openstack role add \
- --user-domain default --project-domain default --project baremetal\
- --user USERNAME baremetal_observer
-
-#. Further documentation is available elsewhere for the ``openstack``
- `command-line client`_ and the Identity_ service. A policy.json.sample_
- file, which enumerates the service's default policies, is provided for
- your convenience with the Bare Metal Service.
-
-.. _Identity: http://docs.openstack.org/admin-guide/identity-management.html
-.. _`command-line client`: http://docs.openstack.org/admin-guide/cli-manage-projects-users-and-roles.html
-.. _here: http://docs.openstack.org/admin-guide/identity-concepts.html#user-management
-.. _policy.json.sample: https://github.com/openstack/ironic/blob/master/etc/ironic/policy.json.sample
-
-
-Set up the database for Bare Metal
-----------------------------------
-
-The Bare Metal service stores information in a database. This guide uses the
-MySQL database that is used by other OpenStack services.
-
-#. In MySQL, create an ``ironic`` database that is accessible by the
- ``ironic`` user. Replace IRONIC_DBPASSWORD
- with a suitable password::
-
- # mysql -u root -p
- mysql> CREATE DATABASE ironic CHARACTER SET utf8;
- mysql> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' \
- IDENTIFIED BY 'IRONIC_DBPASSWORD';
- mysql> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' \
- IDENTIFIED BY 'IRONIC_DBPASSWORD';
+.. _`prerequisites`: http://docs.openstack.org/project-install-guide/baremetal/newton/install-ubuntu.html#prerequisites
Install the Bare Metal service
-------------------------------
+==============================
-#. Install from packages and configure services::
+See the `Install and configure components`_ section in the installation guide
+for the Bare Metal service.
- Ubuntu 14.04 (trusty) or higher:
- sudo apt-get install ironic-api ironic-conductor python-ironicclient
-
- Fedora 21/RHEL7/CentOS7:
- sudo yum install openstack-ironic-api openstack-ironic-conductor \
- python-ironicclient
- sudo systemctl enable openstack-ironic-api openstack-ironic-conductor
- sudo systemctl start openstack-ironic-api openstack-ironic-conductor
-
- Fedora 22 or higher:
- sudo dnf install openstack-ironic-api openstack-ironic-conductor \
- python-ironicclient
- sudo systemctl enable openstack-ironic-api openstack-ironic-conductor
- sudo systemctl start openstack-ironic-api openstack-ironic-conductor
+.. _`Install and configure components`: http://docs.openstack.org/project-install-guide/baremetal/newton/install-ubuntu.html#install-and-configure-components
Configure the Bare Metal service
================================
-The Bare Metal service is configured via its configuration file. This file
-is typically located at ``/etc/ironic/ironic.conf``.
-
-Although some configuration options are mentioned here, it is recommended that
-you review all the `available options <https://git.openstack.org/cgit/openstack/ironic/tree/etc/ironic/ironic.conf.sample>`_
-so that the Bare Metal service is configured for your needs.
-
-It is possible to set up an ironic-api and an ironic-conductor services on the
-same host or different hosts. Users also can add new ironic-conductor hosts
-to deal with an increasing number of bare metal nodes. But the additional ironic-conductor
-services should be at the same version as that of existing ironic-conductor services.
-
-Configuring ironic-api service
-------------------------------
-
-#. The Bare Metal service stores information in a database. This guide uses the
- MySQL database that is used by other OpenStack services.
-
- Configure the location of the database via the ``connection`` option. In the
- following, replace IRONIC_DBPASSWORD with the password of your ``ironic``
- user, and replace DB_IP with the IP address where the DB server is located::
-
- [database]
- ...
- # The SQLAlchemy connection string used to connect to the
- # database (string value)
- connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic?charset=utf8
-
-#. Configure the ironic-api service to use the RabbitMQ message broker by
- setting one or more of these options. Replace RABBIT_HOST with the
- address of the RabbitMQ server::
-
- [DEFAULT]
- ...
- # The messaging driver to use, defaults to rabbit. Other
- # drivers include qpid and zmq. (string value)
- #rpc_backend=rabbit
-
- [oslo_messaging_rabbit]
- ...
- # The RabbitMQ broker address where a single node is used
- # (string value)
- rabbit_host=RABBIT_HOST
-
- # The RabbitMQ userid (string value)
- #rabbit_userid=guest
-
- # The RabbitMQ password (string value)
- #rabbit_password=guest
-
-#. Configure the ironic-api service to use these credentials with the Identity
- service. Replace IDENTITY_IP with the IP of the Identity server, and
- replace IRONIC_PASSWORD with the password you chose for the ``ironic``
- user in the Identity service::
-
- [DEFAULT]
- ...
- # Authentication strategy used by ironic-api: one of
- # "keystone" or "noauth". "noauth" should not be used in a
- # production environment because all authentication will be
- # disabled. (string value)
- auth_strategy=keystone
-
- [keystone_authtoken]
- ...
- # Authentication type to load (string value)
- auth_type = v3password
-
- # Complete public Identity API endpoint (string value)
- auth_uri=http://PUBLIC_IDENTITY_IP:5000/v3/
-
- # Complete admin Identity API endpoint. (string value)
- auth_url=http://PRIVATE_IDENTITY_IP:35357/v3/
-
- # Service username. (string value)
- admin_user=ironic
-
- # Service account password. (string value)
- admin_password=IRONIC_PASSWORD
-
- # Service tenant name. (string value)
- admin_tenant_name=service
-
-#. Create the Bare Metal service database tables::
-
- ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema
-
-#. Restart the ironic-api service::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl restart openstack-ironic-api
-
- Ubuntu:
- sudo service ironic-api restart
-
-
-Configuring ironic-conductor service
-------------------------------------
-
-#. Replace HOST_IP with IP of the conductor host, and replace DRIVERS with a
- comma-separated list of drivers you chose for the conductor service as
- follows::
-
- [DEFAULT]
- ...
- # IP address of this host. If unset, will determine the IP
- # programmatically. If unable to do so, will use "127.0.0.1".
- # (string value)
- my_ip = HOST_IP
-
- # Specify the list of drivers to load during service
- # initialization. Missing drivers, or drivers which fail to
- # initialize, will prevent the conductor service from
- # starting. The option default is a recommended set of
- # production-oriented drivers. A complete list of drivers
- # present on your system may be found by enumerating the
- # "ironic.drivers" entrypoint. An example may be found in the
- # developer documentation online. (list value)
- enabled_drivers=DRIVERS
-
- .. note::
- If a conductor host has multiple IPs, ``my_ip`` should
- be set to the IP which is on the same network as the bare metal nodes.
-
-#. Configure the ironic-api service URL. Replace IRONIC_API_IP with IP of
- ironic-api service as follows::
-
- [conductor]
- ...
- # URL of Ironic API service. If not set ironic can get the
- # current value from the keystone service catalog. (string
- # value)
- api_url=http://IRONIC_API_IP:6385
-
-#. Configure the location of the database. Ironic-conductor should use the same
- configuration as ironic-api. Replace IRONIC_DBPASSWORD with the password of
- your ``ironic`` user, and replace DB_IP with the IP address where the DB server
- is located::
-
- [database]
- ...
- # The SQLAlchemy connection string to use to connect to the
- # database. (string value)
- connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic?charset=utf8
-
-#. Configure the ironic-conductor service to use the RabbitMQ message broker by
- setting one or more of these options. Ironic-conductor should use the same
- configuration as ironic-api. Replace RABBIT_HOST with the address of the RabbitMQ
- server::
-
- [DEFAULT]
- ...
- # The messaging driver to use, defaults to rabbit. Other
- # drivers include qpid and zmq. (string value)
- #rpc_backend=rabbit
-
- [oslo_messaging_rabbit]
- ...
- # The RabbitMQ broker address where a single node is used.
- # (string value)
- rabbit_host=RABBIT_HOST
-
- # The RabbitMQ userid. (string value)
- #rabbit_userid=guest
-
- # The RabbitMQ password. (string value)
- #rabbit_password=guest
-
-#. Configure the ironic-conductor service so that it can communicate with the
- Image service. Replace GLANCE_IP with the hostname or IP address of
- the Image service::
-
- [glance]
- ...
- # Default glance hostname or IP address. (string value)
- glance_host=GLANCE_IP
-
- .. note::
- Swift backend for the Image service should be installed and configured
- for ``agent_*`` drivers. Starting with Mitaka the Bare Metal service also
- supports Ceph Object Gateway (RADOS Gateway) as the Image service's backend
- (:ref:`radosgw support`).
-
-#. Set the URL (replace NEUTRON_IP) for connecting to the Networking service,
- to be the Networking service endpoint::
-
- [neutron]
- ...
- # URL for connecting to neutron. (string value)
- url=http://NEUTRON_IP:9696
-
- To configure the network for ironic-conductor service to perform node cleaning, see
- `CleaningNetworkSetup`_.
-
-#. Configure the ironic-conductor service to use these credentials with the Identity
- service. Ironic-conductor should use the same configuration as ironic-api.
- Replace IDENTITY_IP with the IP of the Identity server, and replace IRONIC_PASSWORD
- with the password you chose for the ``ironic`` user in the Identity service::
-
- [keystone_authtoken]
- ...
- # Complete public Identity API endpoint (string value)
- auth_uri=http://IDENTITY_IP:5000/
-
- # Complete admin Identity API endpoint. This should specify
- # the unversioned root endpoint e.g. https://localhost:35357/
- # (string value)
- identity_uri=http://IDENTITY_IP:35357/
-
- # Service username. (string value)
- admin_user=ironic
-
- # Service account password. (string value)
- admin_password=IRONIC_PASSWORD
-
- # Service tenant name. (string value)
- admin_tenant_name=service
-
-#. Make sure that ``qemu-img`` and ``iscsiadm`` (in the case of using iscsi-deploy driver)
- binaries are installed and prepare the host system as described at
- `Setup the drivers for the Bare Metal service`_
-
-#. Restart the ironic-conductor service::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl restart openstack-ironic-conductor
-
- Ubuntu:
- sudo service ironic-conductor restart
-
-
-Configuring ironic-api behind mod_wsgi
---------------------------------------
-
-Bare Metal service comes with an example file for configuring the
-``ironic-api`` service to run behind Apache with mod_wsgi.
-
-1. Install the apache service::
-
- Fedora 21/RHEL7/CentOS7:
- sudo yum install httpd
-
- Fedora 22 (or higher):
- sudo dnf install httpd
+See the `Install and configure components`_ section in the installation guide
+for the Bare Metal service.
- Debian/Ubuntu:
- apt-get install apache2
-
-
-2. Copy the ``etc/apache2/ironic`` file under the apache sites::
-
- Fedora/RHEL7/CentOS7:
- sudo cp etc/apache2/ironic /etc/httpd/conf.d/ironic.conf
-
- Debian/Ubuntu:
- sudo cp etc/apache2/ironic /etc/apache2/sites-available/ironic.conf
-
-
-3. Edit the recently copied ``<apache-configuration-dir>/ironic.conf``:
-
- - Modify the ``WSGIDaemonProcess``, ``APACHE_RUN_USER`` and
- ``APACHE_RUN_GROUP`` directives to set the user and group values to
- an appropriate user on your server.
-
- - Modify the ``WSGIScriptAlias`` directive to point to the
- *ironic/api/app.wsgi* script.
-
- - Modify the ``Directory`` directive to set the path to the Ironic API code.
-
- - Modify the ``ErrorLog`` and ``CustomLog`` to redirect the logs
- to the right directory (on Red Hat systems this is usually under
- /var/log/httpd).
-
-4. Enable the apache ``ironic`` in site and reload::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl reload httpd
-
- Debian/Ubuntu:
- sudo a2ensite ironic
- sudo service apache2 reload
-
-
-.. note::
- The file ironic/api/app.wsgi is installed with the rest of the Bare Metal
- service application code, and should not need to be modified.
+.. _`Install and configure components`: http://docs.openstack.org/project-install-guide/baremetal/newton/install-ubuntu.html#install-and-configure-components
Configure Compute to use the Bare Metal service
===============================================
-The Compute service needs to be configured to use the Bare Metal service's
-driver. The configuration file for the Compute service is typically located at
-``/etc/nova/nova.conf``. *This configuration file must be modified on the
-Compute service's controller nodes and compute nodes.*
-
-1. Change these configuration options in the ``default`` section, as follows::
-
- [default]
-
- # Driver to use for controlling virtualization. Options
- # include: libvirt.LibvirtDriver, xenapi.XenAPIDriver,
- # fake.FakeDriver, baremetal.BareMetalDriver,
- # vmwareapi.VMwareESXDriver, vmwareapi.VMwareVCDriver (string
- # value)
- #compute_driver=<None>
- compute_driver=ironic.IronicDriver
-
- # Firewall driver (defaults to hypervisor specific iptables
- # driver) (string value)
- #firewall_driver=<None>
- firewall_driver=nova.virt.firewall.NoopFirewallDriver
-
- # The scheduler host manager class to use (string value)
- #scheduler_host_manager=host_manager
- scheduler_host_manager=ironic_host_manager
-
- # Virtual ram to physical ram allocation ratio which affects
- # all ram filters. This configuration specifies a global ratio
- # for RamFilter. For AggregateRamFilter, it will fall back to
- # this configuration value if no per-aggregate setting found.
- # (floating point value)
- #ram_allocation_ratio=1.5
- ram_allocation_ratio=1.0
-
- # Amount of disk in MB to reserve for the host (integer value)
- #reserved_host_disk_mb=0
- reserved_host_memory_mb=0
-
- # Flag to decide whether to use baremetal_scheduler_default_filters or not.
- # (boolean value)
- #scheduler_use_baremetal_filters=False
- scheduler_use_baremetal_filters=True
-
- # Determines if the Scheduler tracks changes to instances to help with
- # its filtering decisions (boolean value)
- #scheduler_tracks_instance_changes=True
- scheduler_tracks_instance_changes=False
-
- # New instances will be scheduled on a host chosen randomly from a subset
- # of the N best hosts, where N is the value set by this option. Valid
- # values are 1 or greater. Any value less than one will be treated as 1.
- # For ironic, this should be set to a number >= the number of ironic nodes
- # to more evenly distribute instances across the nodes.
- #scheduler_host_subset_size=1
- scheduler_host_subset_size=9999999
-
-2. Change these configuration options in the ``ironic`` section.
- Replace:
-
- - IRONIC_PASSWORD with the password you chose for the ``ironic``
- user in the Identity Service
- - IRONIC_NODE with the hostname or IP address of the ironic-api node
- - IDENTITY_IP with the IP of the Identity server
-
- ::
-
- [ironic]
-
- # Ironic keystone admin name
- admin_username=ironic
-
- #Ironic keystone admin password.
- admin_password=IRONIC_PASSWORD
-
- # keystone API endpoint
- admin_url=http://IDENTITY_IP:35357/v2.0
-
- # Ironic keystone tenant name.
- admin_tenant_name=service
-
- # URL for Ironic API endpoint.
- api_endpoint=http://IRONIC_NODE:6385/v1
+See the `Configure Compute to use the Bare Metal service`_ section in the
+installation guide for the Bare Metal service.
-3. On the Compute service's controller nodes, restart the ``nova-scheduler`` process::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl restart openstack-nova-scheduler
-
- Ubuntu:
- sudo service nova-scheduler restart
-
-4. On the Compute service's compute nodes, restart the ``nova-compute`` process::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl restart openstack-nova-compute
-
- Ubuntu:
- sudo service nova-compute restart
+.. _`Configure Compute to use the Bare Metal service`: http://docs.openstack.org/project-install-guide/baremetal/newton/configure-integration.html#configure-compute-to-use-the-bare-metal-service
.. _NeutronFlatNetworking:
Configure Networking to communicate with the bare metal server
==============================================================
-You need to configure Networking so that the bare metal server can communicate
-with the Networking service for DHCP, PXE boot and other requirements.
-This section covers configuring Networking for a single flat
-network for bare metal provisioning.
-
-You will also need to provide Bare Metal service with the MAC address(es) of
-each node that it is provisioning; Bare Metal service in turn will pass this
-information to Networking service for DHCP and PXE boot configuration.
-An example of this is shown in the `Enrollment`_ section.
-
-#. Edit ``/etc/neutron/plugins/ml2/ml2_conf.ini`` and modify these::
-
- [ml2]
- type_drivers = flat
- tenant_network_types = flat
- mechanism_drivers = openvswitch
-
- [ml2_type_flat]
- flat_networks = physnet1
-
- [securitygroup]
- firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
- enable_security_group = True
-
- [ovs]
- bridge_mappings = physnet1:br-eth2
- # Replace eth2 with the interface on the neutron node which you
- # are using to connect to the bare metal server
-
-#. If neutron-openvswitch-agent runs with ``ovs_neutron_plugin.ini`` as the input
- config-file, edit ``ovs_neutron_plugin.ini`` to configure the bridge mappings
- by adding the [ovs] section described in the previous step, and restart the
- neutron-openvswitch-agent.
-
-#. Add the integration bridge to Open vSwitch::
-
- ovs-vsctl add-br br-int
-
-#. Create the br-eth2 network bridge to handle communication between the
- OpenStack services (and the Bare Metal services) and the bare metal nodes
- using eth2.
- Replace eth2 with the interface on the network node which you are
- using to connect to the Bare Metal service::
-
- ovs-vsctl add-br br-eth2
- ovs-vsctl add-port br-eth2 eth2
-
-#. Restart the Open vSwitch agent::
+See the `Configure Networking to communicate with the bare metal server`_
+section in the installation guide for the Bare Metal service.
- service neutron-plugin-openvswitch-agent restart
+.. _`Configure Networking to communicate with the bare metal server`: http://docs.openstack.org/project-install-guide/baremetal/newton/configure-integration.html#configure-networking-to-communicate-with-the-bare-metal-server
-#. On restarting the Networking service Open vSwitch agent, the veth pair
- between the bridges br-int and br-eth2 is automatically created.
-
- Your Open vSwitch bridges should look something like this after
- following the above steps::
-
- ovs-vsctl show
-
- Bridge br-int
- fail_mode: secure
- Port "int-br-eth2"
- Interface "int-br-eth2"
- type: patch
- options: {peer="phy-br-eth2"}
- Port br-int
- Interface br-int
- type: internal
- Bridge "br-eth2"
- Port "phy-br-eth2"
- Interface "phy-br-eth2"
- type: patch
- options: {peer="int-br-eth2"}
- Port "eth2"
- Interface "eth2"
- Port "br-eth2"
- Interface "br-eth2"
- type: internal
- ovs_version: "2.3.0"
-
-#. Create the flat network on which you are going to launch the
- instances::
-
- neutron net-create --tenant-id $TENANT_ID sharednet1 --shared \
- --provider:network_type flat --provider:physical_network physnet1
-
-#. Create the subnet on the newly created network::
-
- neutron subnet-create sharednet1 $NETWORK_CIDR --name $SUBNET_NAME \
- --ip-version=4 --gateway=$GATEWAY_IP --allocation-pool \
- start=$START_IP,end=$END_IP --enable-dhcp
Configuring Tenant Networks
===========================
@@ -708,1175 +74,62 @@ See :ref:`multitenancy`
Configure the Bare Metal service for cleaning
=============================================
-#. If you configure Bare Metal service to use :ref:`cleaning` (which is enabled by
- default), you will need to set the ``cleaning_network_uuid`` configuration
- option. Note the network UUID (the `id` field) of the network you created in
- :ref:`NeutronFlatNetworking` or another network you created for cleaning::
-
- neutron net-list
+See the `Configure the Bare Metal service for cleaning`_ section in the
+installation guide for the Bare Metal service.
-#. Configure the cleaning network UUID via the ``cleaning_network_uuid``
- option in the Bare Metal service configuration file (/etc/ironic/ironic.conf).
- In the following, replace NETWORK_UUID with the UUID you noted in the
- previous step::
-
- [neutron]
- ...
-
- cleaning_network_uuid = NETWORK_UUID
-
-#. Restart the Bare Metal service's ironic-conductor::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl restart openstack-ironic-conductor
-
- Ubuntu:
- sudo service ironic-conductor restart
+.. _`Configure the Bare Metal service for cleaning`: http://docs.openstack.org/project-install-guide/baremetal/newton/configure-cleaning.html
.. _ImageRequirement:
Image requirements
==================
-Bare Metal provisioning requires two sets of images: the deploy images
-and the user images. The deploy images are used by the Bare Metal service
-to prepare the bare metal server for actual OS deployment. Whereas the
-user images are installed on the bare metal server to be used by the
-end user. Below are the steps to create the required images and add
-them to the Image service:
-
-1. The `disk-image-builder`_ can be used to create images required for
- deployment and the actual OS which the user is going to run.
-
-.. _disk-image-builder: http://docs.openstack.org/developer/diskimage-builder/
-
- - Install diskimage-builder package (use virtualenv, if you don't
- want to install anything globally)::
+See the `Image requirements`_ section in the installation guide for the Bare
+Metal service.
- sudo pip install diskimage-builder
-
- - Build the image your users will run (Ubuntu image has been taken as
- an example)::
-
- Partition images:
- disk-image-create ubuntu baremetal dhcp-all-interfaces grub2 -o my-image
-
- Whole disk images:
- disk-image-create ubuntu vm dhcp-all-interfaces -o my-image
-
- The partition image command creates *my-image.qcow2*, *my-image.vmlinuz* and
- *my-image.initrd* files. The *grub2* element in the partition image creation
- command is only needed if local boot will be used to deploy *my-image.qcow2*,
- otherwise the images *my-image.vmlinuz* and *my-image.initrd* will be used for
- PXE booting after deploying the bare metal with *my-image.qcow2*.
-
- If you want to use Fedora image, replace *ubuntu* with *fedora* in the chosen
- command.
-
- - To build the deploy image take a look at the `Building or
- downloading a deploy ramdisk image`_ section.
-
-2. Add the user images to the Image service
-
- Load all the images created in the below steps into the Image service,
- and note the image UUIDs in the Image service for each one as it is
- generated.
-
- - Add the kernel and ramdisk images to the Image service::
-
- glance image-create --name my-kernel --visibility public \
- --disk-format aki --container-format aki < my-image.vmlinuz
-
- Store the image uuid obtained from the above step as
- *$MY_VMLINUZ_UUID*.
-
- ::
-
- glance image-create --name my-image.initrd --visibility public \
- --disk-format ari --container-format ari < my-image.initrd
-
- Store the image UUID obtained from the above step as
- *$MY_INITRD_UUID*.
-
- - Add the *my-image* to the Image service which is going to be the OS
- that the user is going to run. Also associate the above created
- images with this OS image. These two operations can be done by
- executing the following command::
-
- glance image-create --name my-image --visibility public \
- --disk-format qcow2 --container-format bare --property \
- kernel_id=$MY_VMLINUZ_UUID --property \
- ramdisk_id=$MY_INITRD_UUID < my-image.qcow2
-
- - *Note:* To deploy a whole disk image, a kernel_id and a ramdisk_id
- shouldn't be associated with the image. An example is as follows::
-
- glance image-create --name my-whole-disk-image --visibility public \
- --disk-format qcow2 \
- --container-format bare < my-whole-disk-image.qcow2
-
-3. Add the deploy images to the Image service
-
- Add the *my-deploy-ramdisk.kernel* and
- *my-deploy-ramdisk.initramfs* images to the Image service::
-
- glance image-create --name deploy-vmlinuz --visibility public \
- --disk-format aki --container-format aki < my-deploy-ramdisk.kernel
-
- Store the image UUID obtained from the above step as
- *$DEPLOY_VMLINUZ_UUID*.
-
- ::
-
- glance image-create --name deploy-initrd --visibility public \
- --disk-format ari --container-format ari < my-deploy-ramdisk.initramfs
-
- Store the image UUID obtained from the above step as
- *$DEPLOY_INITRD_UUID*.
+.. _`Image requirements`: http://docs.openstack.org/project-install-guide/baremetal/newton/configure-integration.html#configure-the-image-service
Flavor creation
===============
-You'll need to create a special bare metal flavor in the Compute service.
-The flavor is mapped to the bare metal node through the hardware specifications.
-
-#. Change these to match your hardware::
-
- RAM_MB=1024
- CPU=2
- DISK_GB=100
- ARCH={i686|x86_64}
-
-#. Create the bare metal flavor by executing the following command::
-
- nova flavor-create my-baremetal-flavor auto $RAM_MB $DISK_GB $CPU
-
- *Note: You can replace auto with your own flavor id.*
-
-#. Set the architecture as extra_specs information of the flavor. This
- will be used to match against the properties of bare metal nodes::
-
- nova flavor-key my-baremetal-flavor set cpu_arch=$ARCH
-
-#. Associate the deploy ramdisk and kernel images with the ironic node::
-
- ironic node-update $NODE_UUID add \
- driver_info/deploy_kernel=$DEPLOY_VMLINUZ_UUID \
- driver_info/deploy_ramdisk=$DEPLOY_INITRD_UUID
+See the `Flavor creation`_ section in the installation guide for the Bare Metal
+service.
+.. _`Flavor creation`: http://docs.openstack.org/project-install-guide/baremetal/newton/configure-integration.html#configure-compute-flavors-for-use-with-the-bare-metal-service
Setup the drivers for the Bare Metal service
============================================
-PXE setup
----------
-
-If you will be using PXE, it needs to be set up on the Bare Metal service
-node(s) where ``ironic-conductor`` is running.
-
-#. Make sure the tftp root directory exist and can be written to by the
- user the ``ironic-conductor`` is running as. For example::
-
- sudo mkdir -p /tftpboot
- sudo chown -R ironic /tftpboot
-
-#. Install tftp server and the syslinux package with the PXE boot images::
-
- Ubuntu: (Up to and including 14.04)
- sudo apt-get install xinetd tftpd-hpa syslinux-common syslinux
-
- Ubuntu: (14.10 and after)
- sudo apt-get install xinetd tftpd-hpa syslinux-common pxelinux
-
- Fedora 21/RHEL7/CentOS7:
- sudo yum install tftp-server syslinux-tftpboot xinetd
-
- Fedora 22 or higher:
- sudo dnf install tftp-server syslinux-tftpboot xinetd
-
-#. Using xinetd to provide a tftp server setup to serve ``/tftpboot``.
- Create or edit ``/etc/xinetd.d/tftp`` as below::
-
- service tftp
- {
- protocol = udp
- port = 69
- socket_type = dgram
- wait = yes
- user = root
- server = /usr/sbin/in.tftpd
- server_args = -v -v -v -v -v --map-file /tftpboot/map-file /tftpboot
- disable = no
- # This is a workaround for Fedora, where TFTP will listen only on
- # IPv6 endpoint, if IPv4 flag is not used.
- flags = IPv4
- }
-
- and restart xinetd service::
-
- Ubuntu:
- sudo service xinetd restart
-
- Fedora:
- sudo systemctl restart xinetd
-
-#. Copy the PXE image to ``/tftpboot``. The PXE image might be found at [1]_::
-
- Ubuntu (Up to and including 14.04):
- sudo cp /usr/lib/syslinux/pxelinux.0 /tftpboot
-
- Ubuntu (14.10 and after):
- sudo cp /usr/lib/PXELINUX/pxelinux.0 /tftpboot
-
-#. If whole disk images need to be deployed via PXE-netboot, copy the
- chain.c32 image to ``/tftpboot`` to support it. The chain.c32 image
- might be found at::
-
- Ubuntu (Up to and including 14.04):
- sudo cp /usr/lib/syslinux/chain.c32 /tftpboot
-
- Ubuntu (14.10 and after):
- sudo cp /usr/lib/syslinux/modules/bios/chain.c32 /tftpboot
-
- Fedora/RHEL7/CentOS7:
- sudo cp /boot/extlinux/chain.c32 /tftpboot
-
-#. If the version of syslinux is **greater than** 4 we also need to make sure
- that we copy the library modules into the ``/tftpboot`` directory [2]_
- [1]_::
-
- Ubuntu:
- sudo cp /usr/lib/syslinux/modules/*/ldlinux.* /tftpboot
-
-#. Create a map file in the tftp boot directory (``/tftpboot``)::
-
- echo 're ^(/tftpboot/) /tftpboot/\2' > /tftpboot/map-file
- echo 're ^/tftpboot/ /tftpboot/' >> /tftpboot/map-file
- echo 're ^(^/) /tftpboot/\1' >> /tftpboot/map-file
- echo 're ^([^/]) /tftpboot/\1' >> /tftpboot/map-file
-
-.. [1] On **Fedora/RHEL** the ``syslinux-tftpboot`` package already install
- the library modules and PXE image at ``/tftpboot``. If the TFTP server
- is configured to listen to a different directory you should copy the
- contents of ``/tftpboot`` to the configured directory
-.. [2] http://www.syslinux.org/wiki/index.php/Library_modules
-
-
-PXE UEFI setup
---------------
-
-If you want to deploy on a UEFI supported bare metal, perform these additional
-steps on the ironic conductor node to configure the PXE UEFI environment.
-
-#. Install Grub2 and shim packages::
-
- Ubuntu: (14.04LTS and later)
- sudo apt-get install grub-efi-amd64-signed shim-signed
-
- Fedora 21/RHEL7/CentOS7:
- sudo yum install grub2-efi shim
-
- Fedora 22 or higher:
- sudo dnf install grub2-efi shim
-
-#. Copy grub and shim boot loader images to ``/tftpboot`` directory::
-
- Ubuntu: (14.04LTS and later)
- sudo cp /usr/lib/shim/shim.efi.signed /tftpboot/bootx64.efi
- sudo cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed \
- /tftpboot/grubx64.efi
-
- Fedora: (21 and later)
- sudo cp /boot/efi/EFI/fedora/shim.efi /tftpboot/bootx64.efi
- sudo cp /boot/efi/EFI/fedora/grubx64.efi /tftpboot/grubx64.efi
-
- CentOS: (7 and later)
- sudo cp /boot/efi/EFI/centos/shim.efi /tftpboot/bootx64.efi
- sudo cp /boot/efi/EFI/centos/grubx64.efi /tftpboot/grubx64.efi
-
-#. Create master grub.cfg::
-
- Ubuntu: Create grub.cfg under ``/tftpboot/grub`` directory.
- GRUB_DIR=/tftpboot/grub
-
- Fedora: Create grub.cfg under ``/tftpboot/EFI/fedora`` directory.
- GRUB_DIR=/tftpboot/EFI/fedora
-
- CentOS: Create grub.cfg under ``/tftpboot/EFI/centos`` directory.
- GRUB_DIR=/tftpboot/EFI/centos
-
- Create directory GRUB_DIR
- sudo mkdir -p $GRUB_DIR
-
- This file is used to redirect grub to baremetal node specific config file.
- It redirects it to specific grub config file based on DHCP IP assigned to
- baremetal node.
-
- .. literalinclude:: ../../../ironic/drivers/modules/master_grub_cfg.txt
-
- Change the permission of grub.cfg::
-
- sudo chmod 644 $GRUB_DIR/grub.cfg
-
-#. Update the bare metal node with ``boot_mode`` capability in node's properties
- field::
-
- ironic node-update <node-uuid> add properties/capabilities='boot_mode:uefi'
-
-#. Make sure that bare metal node is configured to boot in UEFI boot mode and
- boot device is set to network/pxe.
-
- NOTE: ``pxe_ilo`` driver supports automatic setting of UEFI boot mode and
- boot device on the bare metal node. So this step is not required for
- ``pxe_ilo`` driver.
-
-.. note::
- For more information on configuring boot modes, see boot_mode_support_.
-
-
-Elilo: an alternative to Grub2
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Elilo is a UEFI bootloader. It is an alternative to Grub2, although it
-isn't recommended since it is not being supported.
-
-#. Download and untar the elilo bootloader version >= 3.16 from
- http://sourceforge.net/projects/elilo/::
-
- sudo tar zxvf elilo-3.16-all.tar.gz
-
-#. Copy the elilo boot loader image to ``/tftpboot`` directory::
-
- sudo cp ./elilo-3.16-x86_64.efi /tftpboot/elilo.efi
-
-#. Update bootfile and template file configuration parameters for UEFI
- PXE boot in the Bare Metal Service's configuration file
- (/etc/ironic/ironic.conf)::
-
- [pxe]
-
- # Bootfile DHCP parameter for UEFI boot mode. (string value)
- uefi_pxe_bootfile_name=elilo.efi
-
- # Template file for PXE configuration for UEFI boot loader.
- # (string value)
- uefi_pxe_config_template=$pybasedir/drivers/modules/elilo_efi_pxe_config.template
-
-
-iPXE setup
-----------
-
-An alternative to PXE boot, iPXE was introduced in the Juno release
-(2014.2.0) of Bare Metal service.
-
-If you will be using iPXE to boot instead of PXE, iPXE needs to be set up
-on the Bare Metal service node(s) where ``ironic-conductor`` is running.
-
-#. Make sure these directories exist and can be written to by the user
- the ``ironic-conductor`` is running as. For example::
-
- sudo mkdir -p /tftpboot
- sudo mkdir -p /httpboot
- sudo chown -R ironic /tftpboot
- sudo chown -R ironic /httpboot
-
-#. Create a map file in the tftp boot directory (``/tftpboot``)::
-
- echo 'r ^([^/]) /tftpboot/\1' > /tftpboot/map-file
- echo 'r ^(/tftpboot/) /tftpboot/\2' >> /tftpboot/map-file
-
-#. Set up TFTP and HTTP servers.
-
- These servers should be running and configured to use the local
- /tftpboot and /httpboot directories respectively, as their root
- directories. (Setting up these servers is outside the scope of this
- install guide.)
-
- These root directories need to be mounted locally to the
- ``ironic-conductor`` services, so that the services can access them.
-
- The Bare Metal service's configuration file (/etc/ironic/ironic.conf)
- should be edited accordingly to specify the TFTP and HTTP root
- directories and server addresses. For example::
-
- [pxe]
-
- # Ironic compute node's tftp root path. (string value)
- tftp_root=/tftpboot
-
- # IP address of Ironic compute node's tftp server. (string
- # value)
- tftp_server=192.168.0.2
-
- [deploy]
- # Ironic compute node's http root path. (string value)
- http_root=/httpboot
-
- # Ironic compute node's HTTP server URL. Example:
- # http://192.1.2.3:8080 (string value)
- http_url=http://192.168.0.2:8080
-
-#. Install the iPXE package with the boot images::
-
- Ubuntu:
- apt-get install ipxe
-
- Fedora 21/RHEL7/CentOS7:
- yum install ipxe-bootimgs
-
- Fedora 22 or higher:
- dnf install ipxe-bootimgs
-
-#. Copy the iPXE boot image (``undionly.kpxe`` for **BIOS** and
- ``ipxe.efi`` for **UEFI**) to ``/tftpboot``. The binary might
- be found at::
-
- Ubuntu:
- cp /usr/lib/ipxe/{undionly.kpxe,ipxe.efi} /tftpboot
-
- Fedora/RHEL7/CentOS7:
- cp /usr/share/ipxe/{undionly.kpxe,ipxe.efi} /tftpboot
-
- .. note::
- If the packaged version of the iPXE boot image doesn't work, you can
- download a prebuilt one from http://boot.ipxe.org or build one image
- from source, see http://ipxe.org/download for more information.
-
-#. Enable/Configure iPXE in the Bare Metal Service's configuration file
- (/etc/ironic/ironic.conf)::
-
- [pxe]
-
- # Enable iPXE boot. (boolean value)
- ipxe_enabled=True
-
- # Neutron bootfile DHCP parameter. (string value)
- pxe_bootfile_name=undionly.kpxe
-
- # Bootfile DHCP parameter for UEFI boot mode. (string value)
- uefi_pxe_bootfile_name=ipxe.efi
-
- # Template file for PXE configuration. (string value)
- pxe_config_template=$pybasedir/drivers/modules/ipxe_config.template
-
- # Template file for PXE configuration for UEFI boot loader.
- # (string value)
- uefi_pxe_config_template=$pybasedir/drivers/modules/ipxe_config.template
-
-#. Restart the ``ironic-conductor`` process::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl restart openstack-ironic-conductor
-
- Ubuntu:
- sudo service ironic-conductor restart
-
-
-Networking service 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).
-The Networking service needs to be configured to create this DHCP tag,
-since it isn't created by default.
+See the `Setup the drivers for the Bare Metal service`_ section in the
+installation guide for the Bare Metal service.
-#. 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 Networking service 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
-------------
-
-If using the IPMITool driver, the ``ipmitool`` command must be present on the
-service node(s) where ``ironic-conductor`` is running. On most distros, this
-is provided as part of the ``ipmitool`` package. Source code is available at
-http://ipmitool.sourceforge.net/
-
-Note that certain distros, notably Mac OS X and SLES, install ``openipmi``
-instead of ``ipmitool`` by default. THIS DRIVER IS NOT COMPATIBLE WITH
-``openipmi`` AS IT RELIES ON ERROR HANDLING OPTIONS NOT PROVIDED BY THIS TOOL.
-
-Check that you can connect to and authenticate with the IPMI
-controller in your bare metal server by using ``ipmitool``::
-
- ipmitool -I lanplus -H <ip-address> -U <username> -P <password> chassis power status
-
-<ip-address> = The IP of the IPMI controller you want to access
-
-*Note:*
-
-#. This is not the bare metal node's main IP. The IPMI controller
- should have its own unique IP.
-
-#. In case the above command doesn't return the power status of the
- bare metal server, check for these:
-
- - ``ipmitool`` is installed.
- - The IPMI controller on your bare metal server is turned on.
- - The IPMI controller credentials passed in the command are right.
- - The conductor node has a route to the IPMI controller. This can be
- checked by just pinging the IPMI controller IP from the conductor
- node.
-
-.. note::
- If there are slow or unresponsive BMCs in the environment, the retry_timeout
- configuration option in the [ipmi] section may need to be lowered. The
- default is fairly conservative, as setting this timeout too low can cause
- older BMCs to crash and require a hard-reset.
-
-Bare Metal service supports sending IPMI sensor data to Telemetry with pxe_ipmitool,
-pxe_ipminative, agent_ipmitool, agent_pyghmi, agent_ilo, iscsi_ilo, pxe_ilo,
-and with pxe_irmc driver starting from Kilo release. By default, support for
-sending IPMI sensor data to Telemetry is disabled. If you want to enable it,
-you should make the following two changes in ``ironic.conf``:
-
-* ``notification_driver = messaging`` in the ``DEFAULT`` section
-* ``send_sensor_data = true`` in the ``conductor`` section
-
-If you want to customize the sensor types which will be sent to Telemetry,
-change the ``send_sensor_data_types`` option. For example, the below
-settings will send temperature, fan, voltage and these three sensor types
-of data to Telemetry:
-
-* send_sensor_data_types=Temperature,Fan,Voltage
-
-If we use default value 'All' for all the sensor types which are supported by
-Telemetry, they are:
-
-* Temperature, Fan, Voltage, Current
-
-
-Configure node web console
---------------------------
-
-See :ref:`console`.
-
-.. _boot_mode_support:
-
-Boot mode support
------------------
-
-The following drivers support setting of boot mode (Legacy BIOS or UEFI).
-
-* ``pxe_ipmitool``
-
-The boot modes can be configured in Bare Metal service in the following way:
-
-* When no boot mode setting is provided, these drivers default the boot_mode
- to Legacy BIOS.
-
-* Only one boot mode (either ``uefi`` or ``bios``) can be configured for
- the node.
-
-* If the operator wants a node to boot always in ``uefi`` mode or ``bios``
- mode, then they may use ``capabilities`` parameter within ``properties``
- field of an bare metal node. The operator must manually set the appropriate
- boot mode on the bare metal node.
-
- To configure a node in ``uefi`` mode, then set ``capabilities`` as below::
-
- ironic node-update <node-uuid> add properties/capabilities='boot_mode:uefi'
-
- Nodes having ``boot_mode`` set to ``uefi`` may be requested by adding an
- ``extra_spec`` to the Compute service flavor::
-
- nova flavor-key ironic-test-3 set capabilities:boot_mode="uefi"
- nova boot --flavor ironic-test-3 --image test-image instance-1
-
- If ``capabilities`` is used in ``extra_spec`` as above, nova scheduler
- (``ComputeCapabilitiesFilter``) will match only bare metal nodes which have
- the ``boot_mode`` set appropriately in ``properties/capabilities``. It will
- filter out rest of the nodes.
-
- The above facility for matching in the Compute service can be used in
- heterogeneous environments where there is a mix of ``uefi`` and ``bios``
- machines, and operator wants to provide a choice to the user regarding
- boot modes. If the flavor doesn't contain ``boot_mode`` and ``boot_mode``
- is configured for bare metal nodes, then nova scheduler will consider all
- nodes and user may get either ``bios`` or ``uefi`` machine.
-
-.. _choosing_the_disk_label:
-
-Choosing the disk label
------------------------
-
-.. note::
- The term ``disk label`` is historically used in Ironic and was taken
- from `parted <https://www.gnu.org/software/parted>`_. Apparently
- everyone seems to have a different word for ``disk label`` - these
- are all the same thing: disk type, partition table, partition map
- and so on...
-
-Ironic allows operators to choose which disk label they want their
-bare metal node to be deployed with when Ironic is responsible for
-partitioning the disk; therefore choosing the disk label does not apply
-when the image being deployed is a ``whole disk image``.
-
-There are some edge cases where someone may want to choose a specific
-disk label for the images being deployed, including but not limited to:
-
-* For machines in ``bios`` boot mode with disks larger than 2 terabytes
- it's recommended to use a ``gpt`` disk label. That's because
- a capacity beyond 2 terabytes is not addressable by using the
- MBR partitioning type. But, although GPT claims to be backward
- compatible with legacy BIOS systems `that's not always the case
- <http://www.rodsbooks.com/gdisk/bios.html>`_.
-
-* Operators may want to force the partitioning to be always MBR (even
- if the machine is deployed with boot mode ``uefi``) to avoid breakage
- of applications and tools running on those instances.
-
-The disk label can be configured in two ways; when Ironic is used with
-the Compute service or in standalone mode. The following bullet points
-and sections will describe both methods:
-
-* When no disk label is provided Ironic will configure it according
- to the `boot mode <boot_mode_support_>`_; ``bios`` boot mode will use
- ``msdos`` and ``uefi`` boot mode will use ``gpt``.
-
-* Only one disk label - either ``msdos`` or ``gpt`` - can be configured
- for the node.
-
-When used with Compute service
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-When Ironic is used with the Compute service the disk label should be
-set to node's ``properties/capabilities`` field and also to the flavor
-which will request such capability, for example::
-
- ironic node-update <node-uuid> add properties/capabilities='disk_label:gpt'
-
-As for the flavor::
-
- nova flavor-key baremetal set capabilities:disk_label="gpt"
-
-When used in standalone mode
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-When used without the Compute service, the disk label should be set
-directly to the node's ``instance_info`` field, as below::
-
- ironic node-update <node-uuid> add instance_info/capabilities='{"disk_label": "gpt"}'
+.. _`Setup the drivers for the Bare Metal service`: http://docs.openstack.org/project-install-guide/baremetal/newton/setup-drivers.html
Local boot with partition images
================================
-Starting with the Kilo release, Bare Metal service supports local boot with
-partition images, meaning that after the deployment the node's subsequent
-reboots won't happen via PXE or Virtual Media. Instead, it will boot from a
-local boot loader installed on the disk.
-
-It's important to note that in order for this to work the image being
-deployed with Bare Metal service **must** contain ``grub2`` installed within it.
-
-Enabling the local boot is different when Bare Metal service is used with
-Compute service and without it.
-The following sections will describe both methods.
-
-.. note::
- The local boot feature is dependent upon a updated deploy ramdisk built
- with diskimage-builder_ **version >= 0.1.42** or ironic-python-agent_
- in the kilo-era.
-
-Enabling local boot with Compute service
-----------------------------------------
-
-To enable local boot we need to set a capability on the bare metal node,
-for example::
-
- ironic node-update <node-uuid> add properties/capabilities="boot_option:local"
-
+See the `Local boot with partition images`_ section in the installation guide
+for the Bare Metal service.
-Nodes having ``boot_option`` set to ``local`` may be requested by adding
-an ``extra_spec`` to the Compute service flavor, for example::
-
- nova flavor-key baremetal set capabilities:boot_option="local"
-
-
-.. note::
- If the node is configured to use ``UEFI``, Bare Metal service will create
- an ``EFI partition`` on the disk and switch the partition table format to
- ``gpt``. The ``EFI partition`` will be used later by the boot loader
- (which is installed from the deploy ramdisk).
-
-
-Enabling local boot without Compute
------------------------------------
-
-Since adding ``capabilities`` to the node's properties is only used by
-the nova scheduler to perform more advanced scheduling of instances,
-we need a way to enable local boot when Compute is not present. To do that
-we can simply specify the capability via the ``instance_info`` attribute
-of the node, for example::
-
- ironic node-update <node-uuid> add instance_info/capabilities='{"boot_option": "local"}'
+.. _`Local boot with partition images`: http://docs.openstack.org/project-install-guide/baremetal/newton/advanced.html#local-boot-with-partition-images
Enrollment
==========
-After all the services have been properly configured, you should enroll your
-hardware with the Bare Metal service, and confirm that the Compute service sees
-the available hardware. The nodes will be visible to the Compute service once
-they are in the ``available`` provision state.
-
-.. note::
- After enrolling nodes with the Bare Metal service, the Compute service
- will not be immediately notified of the new resources. The Compute service's
- resource tracker syncs periodically, and so any changes made directly to the
- Bare Metal service's resources will become visible in the Compute service
- only after the next run of that periodic task.
- More information is in the `Troubleshooting`_ section below.
-
-.. note::
- Any bare metal node that is visible to the Compute service may have a
- workload scheduled to it, if both the ``power`` and ``deploy`` interfaces
- pass the ``validate`` check.
- If you wish to exclude a node from the Compute service's scheduler, for
- instance so that you can perform maintenance on it, you can set the node to
- "maintenance" mode.
- For more information see the `Maintenance Mode`_ section below.
-
-Enrollment process
-------------------
-
-This section describes the main steps to enroll a node and make it available
-for provisioning. Some steps are shown separately for illustration purposes,
-and may be combined if desired.
-
-#. Create a node in the Bare Metal service. At a minimum, you must
- specify the driver name (for example, "pxe_ipmitool").
- This will return the node UUID along with other information
- about the node. The node's provision state will be ``available``. (The
- example assumes that the client is using the default API version.)::
-
- ironic node-create -d pxe_ipmitool
- +--------------+--------------------------------------+
- | Property | Value |
- +--------------+--------------------------------------+
- | uuid | dfc6189f-ad83-4261-9bda-b27258eb1987 |
- | driver_info | {} |
- | extra | {} |
- | driver | pxe_ipmitool |
- | chassis_uuid | |
- | properties | {} |
- | name | None |
- +--------------+--------------------------------------+
-
- ironic node-show dfc6189f-ad83-4261-9bda-b27258eb1987
- +------------------------+--------------------------------------+
- | Property | Value |
- +------------------------+--------------------------------------+
- | target_power_state | None |
- | extra | {} |
- | last_error | None |
- | maintenance_reason | None |
- | provision_state | available |
- | uuid | dfc6189f-ad83-4261-9bda-b27258eb1987 |
- | console_enabled | False |
- | target_provision_state | None |
- | provision_updated_at | None |
- | maintenance | False |
- | power_state | None |
- | driver | pxe_ipmitool |
- | properties | {} |
- | instance_uuid | None |
- | name | None |
- | driver_info | {} |
- | ... | ... |
- +------------------------+--------------------------------------+
-
- Beginning with the Kilo release a node may also be referred to by a logical
- name as well as its UUID. To utilize this new feature a name must be
- assigned to the node. This can be done when the node is created by
- adding the ``-n`` option to the ``node-create`` command or by updating an
- existing node with the ``node-update`` command. See `Logical Names`_ for
- examples.
-
- Beginning with the Liberty release, with API version 1.11 and above, a newly
- created node will have an initial provision state of ``enroll`` as opposed to
- ``available``. See `Enrolling a node`_ for more details.
-
-#. Update the node ``driver_info`` so that Bare Metal service can manage the
- node. Different drivers may require different information about the node.
- You can determine this with the ``driver-properties`` command, as follows::
-
- ironic driver-properties pxe_ipmitool
- +----------------------+-------------------------------------------------------------------------------------------------------------+
- | Property | Description |
- +----------------------+-------------------------------------------------------------------------------------------------------------+
- | ipmi_address | IP address or hostname of the node. Required. |
- | ipmi_password | password. Optional. |
- | ipmi_username | username; default is NULL user. Optional. |
- | ... | ... |
- | deploy_kernel | UUID (from Glance) of the deployment kernel. Required. |
- | deploy_ramdisk | UUID (from Glance) of the ramdisk that is mounted at boot time. Required. |
- +----------------------+-------------------------------------------------------------------------------------------------------------+
-
- ironic node-update $NODE_UUID add \
- driver_info/ipmi_username=$USER \
- driver_info/ipmi_password=$PASS \
- driver_info/ipmi_address=$ADDRESS
-
- .. note::
- If IPMI is running on a port other than 623 (the default). The port must
- be added to ``driver_info`` by specifying the ``ipmi_port`` value.
- Example::
-
- ironic node-update $NODE_UUID add driver_info/ipmi_port=$PORT_NUMBER
-
- Note that you may also specify all ``driver_info`` parameters during
- ``node-create`` by passing the **-i** option multiple times.
-
-#. Update the node's properties to match the bare metal flavor you created
- earlier::
-
- ironic node-update $NODE_UUID add \
- properties/cpus=$CPU \
- properties/memory_mb=$RAM_MB \
- properties/local_gb=$DISK_GB \
- properties/cpu_arch=$ARCH
-
- As above, these can also be specified at node creation by passing the **-p**
- option to ``node-create`` multiple times.
-
-#. If you wish to perform more advanced scheduling of the instances based on
- hardware capabilities, you may add metadata to each node that will be
- exposed to the nova scheduler (see: `ComputeCapabilitiesFilter`_). A full
- explanation of this is outside of the scope of this document. It can be done
- through the special ``capabilities`` member of node properties::
-
- ironic node-update $NODE_UUID add \
- properties/capabilities=key1:val1,key2:val2
-
-#. As mentioned in the `Flavor Creation`_ section, if using the Kilo or later
- release of Bare Metal service, you should specify a deploy kernel and
- ramdisk which correspond to the node's driver, for example::
-
- ironic node-update $NODE_UUID add \
- driver_info/deploy_kernel=$DEPLOY_VMLINUZ_UUID \
- driver_info/deploy_ramdisk=$DEPLOY_INITRD_UUID
-
-#. You must also inform Bare Metal service of the network interface cards which
- are part of the node by creating a port with each NIC's MAC address.
- These MAC addresses are passed to the Networking service during instance
- provisioning and used to configure the network appropriately::
-
- ironic port-create -n $NODE_UUID -a $MAC_ADDRESS
-
-#. To check if Bare Metal service has the minimum information necessary for
- a node's driver to function, you may ``validate`` it::
-
- ironic node-validate $NODE_UUID
-
- +------------+--------+--------+
- | Interface | Result | Reason |
- +------------+--------+--------+
- | console | True | |
- | deploy | True | |
- | management | True | |
- | power | True | |
- +------------+--------+--------+
-
- If the node fails validation, each driver will return information as to why
- it failed::
-
- ironic node-validate $NODE_UUID
-
- +------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+
- | Interface | Result | Reason |
- +------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+
- | console | None | not supported |
- | deploy | False | Cannot validate iSCSI deploy. Some parameters were missing in node's instance_info. Missing are: ['root_gb', 'image_source'] |
- | management | False | Missing the following IPMI credentials in node's driver_info: ['ipmi_address']. |
- | power | False | Missing the following IPMI credentials in node's driver_info: ['ipmi_address']. |
- +------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+
-
-#. If using API version 1.11 or above, the node was created in the ``enroll``
- provision state. In order for the node to be available for deploying a
- workload (for example, by the Compute service), it needs to be in the
- ``available`` provision state. To do this, it must be moved into the
- ``manageable`` state and then moved into the ``available`` state. The
- `API version 1.11 and above`_ section describes the commands for this.
-
-.. _ComputeCapabilitiesFilter: http://docs.openstack.org/developer/nova/devref/filter_scheduler.html?highlight=computecapabilitiesfilter
-
-
-Enrolling a node
-----------------
-In the Liberty cycle, starting with API version 1.11, the Bare Metal service
-added a new initial provision state of ``enroll`` to its state machine.
-
-Existing automation tooling that use an API version lower than 1.11 are not
-affected, since the initial provision state is still ``available``.
-However, using API version 1.11 or above may break existing automation tooling
-with respect to node creation.
-
-The default API version used by (the most recent) python-ironicclient is 1.9.
-
-The examples below set the API version for each command. To set the
-API version for all commands, you can set the environment variable
-``IRONIC_API_VERSION``.
-
-API version 1.10 and below
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Below is an example of creating a node with API version 1.10. After creation,
-the node will be in the ``available`` provision state.
-Other API versions below 1.10 may be substituted in place of 1.10.
-
-::
-
- ironic --ironic-api-version 1.10 node-create -d agent_ilo -n pre11
-
- +--------------+--------------------------------------+
- | Property | Value |
- +--------------+--------------------------------------+
- | uuid | cc4998a0-f726-4927-9473-0582458c6789 |
- | driver_info | {} |
- | extra | {} |
- | driver | agent_ilo |
- | chassis_uuid | |
- | properties | {} |
- | name | pre11 |
- +--------------+--------------------------------------+
-
-
- ironic --ironic-api-version 1.10 node-list
-
- +--------------------------------------+-------+---------------+-------------+--------------------+-------------+
- | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance |
- +--------------------------------------+-------+---------------+-------------+--------------------+-------------+
- | cc4998a0-f726-4927-9473-0582458c6789 | pre11 | None | None | available | False |
- +--------------------------------------+-------+---------------+-------------+--------------------+-------------+
-
-API version 1.11 and above
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Beginning with API version 1.11, the initial provision state for newly created
-nodes is ``enroll``. In the examples below, other API versions above 1.11 may be
-substituted in place of 1.11.
-::
-
- ironic --ironic-api-version 1.11 node-create -d agent_ilo -n post11
-
- +--------------+--------------------------------------+
- | Property | Value |
- +--------------+--------------------------------------+
- | uuid | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 |
- | driver_info | {} |
- | extra | {} |
- | driver | agent_ilo |
- | chassis_uuid | |
- | properties | {} |
- | name | post11 |
- +--------------+--------------------------------------+
-
-
- ironic --ironic-api-version 1.11 node-list
-
- +--------------------------------------+--------+---------------+-------------+--------------------+-------------+
- | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance |
- +--------------------------------------+--------+---------------+-------------+--------------------+-------------+
- | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 | post11 | None | None | enroll | False |
- +--------------------------------------+--------+---------------+-------------+--------------------+-------------+
-
-In order for nodes to be available for deploying workloads on them, nodes
-must be in the ``available`` provision state. To do this, nodes
-created with API version 1.11 and above must be moved from the ``enroll`` state
-to the ``manageable`` state and then to the ``available`` state.
-
-To move a node to a different provision state, use the
-``node-set-provision-state`` command.
-
-.. note:: Since it is an asychronous call, the response for
- ``ironic node-set-provision-state`` will not indicate whether the
- transition succeeded or not. You can check the status of the
- operation via ``ironic node-show``. If it was successful,
- ``provision_state`` will be in the desired state. If it failed,
- there will be information in the node's ``last_error``.
-
-After creating a node and before moving it from its initial provision state of
-``enroll``, basic power and port information needs to be configured on the node.
-The Bare Metal service needs this information because it verifies that it is
-capable of controlling the node when transitioning the node from ``enroll`` to
-``manageable`` state.
-
-To move a node from ``enroll`` to ``manageable`` provision state::
-
- ironic --ironic-api-version 1.11 node-set-provision-state $NODE_UUID manage
-
- ironic node-show $NODE_UUID
-
- +------------------------+--------------------------------------------------------------------+
- | Property | Value |
- +------------------------+--------------------------------------------------------------------+
- | ... | ... |
- | provision_state | manageable | <- verify correct state
- | uuid | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 |
- | ... | ... |
- +------------------------+--------------------------------------------------------------------+
-
-When a node is moved from the ``manageable`` to ``available`` provision
-state, the node will go through automated cleaning if configured to do so (see
-:ref:`CleaningNetworkSetup`).
-To move a node from ``manageable`` to ``available`` provision state::
-
- ironic --ironic-api-version 1.11 node-set-provision-state $NODE_UUID provide
-
- ironic node-show $NODE_UUID
-
- +------------------------+--------------------------------------------------------------------+
- | Property | Value |
- +------------------------+--------------------------------------------------------------------+
- | ... | ... |
- | provision_state | available | < - verify correct state
- | uuid | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 |
- | ... | ... |
- +------------------------+--------------------------------------------------------------------+
-
-
-For more details on the Bare Metal service's state machine, see the
-`state machine <http://docs.openstack.org/developer/ironic/dev/states.html>`_
-documentation.
-
-
-Logical names
--------------
-Beginning with the Kilo release a Node may also be referred to by a
-logical name as well as its UUID. Names can be assigned either when
-creating the node by adding the ``-n`` option to the ``node-create`` command or
-by updating an existing node with the ``node-update`` command.
-
-Node names must be unique, and conform to:
-
-- rfc952_
-- rfc1123_
-- wiki_hostname_
-
-The node is named 'example' in the following examples:
-::
-
- ironic node-create -d agent_ipmitool -n example
-
-or::
-
- ironic node-update $NODE_UUID add name=example
+See the `Enrollment`_ section in the installation guide for the Bare Metal
+service.
-
-Once assigned a logical name, a node can then be referred to by name or
-UUID interchangeably.
-::
-
- ironic node-create -d agent_ipmitool -n example
-
- +--------------+--------------------------------------+
- | Property | Value |
- +--------------+--------------------------------------+
- | uuid | 71e01002-8662-434d-aafd-f068f69bb85e |
- | driver_info | {} |
- | extra | {} |
- | driver | agent_ipmitool |
- | chassis_uuid | |
- | properties | {} |
- | name | example |
- +--------------+--------------------------------------+
-
-
- ironic node-show example
-
- +------------------------+--------------------------------------+
- | Property | Value |
- +------------------------+--------------------------------------+
- | target_power_state | None |
- | extra | {} |
- | last_error | None |
- | updated_at | 2015-04-24T16:23:46+00:00 |
- | ... | ... |
- | instance_info | {} |
- +------------------------+--------------------------------------+
-
-.. _rfc952: http://tools.ietf.org/html/rfc952
-.. _rfc1123: http://tools.ietf.org/html/rfc1123
-.. _wiki_hostname: http://en.wikipedia.org/wiki/Hostname
-
-
-Hardware Inspection
--------------------
-
-Starting with the Kilo release, Bare Metal service supports hardware inspection
-that simplifies enrolling nodes - please see :ref:`inspection` for details.
+.. _`Enrollment`: http://docs.openstack.org/project-install-guide/baremetal/newton/enrollment.html
Specifying the disk for deployment
==================================
-Starting with the Kilo release, Bare Metal service supports passing
-hints to the deploy ramdisk about which disk it should pick for the
-deployment. The list of support hints is:
-
-* model (STRING): device identifier
-* vendor (STRING): device vendor
-* serial (STRING): disk serial number
-* size (INT): size of the device in GiB
-
- .. note::
- A node's 'local_gb' property is often set to a value 1 GiB less than the
- actual disk size to account for partitioning (this is how DevStack, TripleO
- and Ironic Inspector work, to name a few). However, in this case ``size``
- should be the actual size. For example, for a 128 GiB disk ``local_gb``
- will be 127, but size hint will be 128.
-
-* wwn (STRING): unique storage identifier
-* wwn_with_extension (STRING): unique storage identifier with the vendor extension appended
-* wwn_vendor_extension (STRING): unique vendor storage identifier
-* rotational (BOOLEAN): whether it's a rotational device or not. This
- hint makes it easier to distinguish HDDs (rotational) and SSDs (not
- rotational) when choosing which disk Ironic should deploy the image onto.
-* name (STRING): the device name, e.g /dev/md0
-
-
- .. warning::
- The root device hint name should only be used for devices with
- constant names (e.g RAID volumes). For SATA, SCSI and IDE disk
- controllers this hint is not recommended because the order in which
- the device nodes are added in Linux is arbitrary, resulting in
- devices like /dev/sda and /dev/sdb `switching around at boot time
- <https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Storage_Administration_Guide/persistent_naming.html>`_.
-
-
-To associate one or more hints with a node, update the node's properties
-with a ``root_device`` key, for example::
+See the `Specifying the disk for deployment`_ section in the installation guide
+for the Bare Metal service.
- ironic node-update <node-uuid> add properties/root_device='{"wwn": "0x4000cca77fc4dba1"}'
-
-
-That will guarantee that Bare Metal service will pick the disk device that
-has the ``wwn`` equal to the specified wwn value, or fail the deployment if it
-can not be found.
-
-.. note::
- If multiple hints are specified, a device must satisfy all the hints.
+.. _`Specifying the disk for deployment`: http://docs.openstack.org/project-install-guide/baremetal/newton/advanced.html#specifying-the-disk-for-deployment-root-device-hints
.. _EnableHTTPSinSwift:
@@ -1884,433 +137,69 @@ can not be found.
Enabling HTTPS in Swift
=======================
-The drivers using virtual media use swift for storing boot images
-and node configuration information (contains sensitive information for Ironic
-conductor to provision bare metal hardware). By default, HTTPS is not enabled
-in swift. HTTPS is required to encrypt all communication between swift and Ironic
-conductor and swift and bare metal (via virtual media). It can be enabled in one
-of the following ways:
+See the `Enabling HTTPS in Swift`_ section in the installation guide for the
+Bare Metal service.
-* `Using an SSL termination proxy
- <http://docs.openstack.org/security-guide/secure-communication/tls-proxies-and-http-services.html>`_
+.. _`Enabling HTTPS in Swift`: http://docs.openstack.org/project-install-guide/baremetal/newton/enabling-https.html#enabling-https-in-swift
-* `Using native SSL support in swift
- <http://docs.openstack.org/developer/swift/deployment_guide.html>`_
- (recommended only for testing purpose by swift).
.. _EnableHTTPSinGlance:
Enabling HTTPS in Image service
===============================
-Ironic drivers usually use Image service during node provisioning. By default,
-image service does not use HTTPS, but it is required for secure communication.
-It can be enabled by making the following changes to ``/etc/glance/glance-api.conf``:
-
-#. `Configuring SSL support
- <http://docs.openstack.org/developer/glance/configuring.html#configuring-ssl-support>`_
+See the `Enabling HTTPS in Image service`_ section in the installation guide
+for the Bare Metal service.
-#. Restart the glance-api service::
+.. _`Enabling HTTPS in Image service`: http://docs.openstack.org/project-install-guide/baremetal/newton/enabling-https.html#enabling-https-in-image-service
- Fedora/RHEL7/CentOS7:
- sudo systemctl restart openstack-glance-api
-
- Debian/Ubuntu:
- sudo service glance-api restart
-
-See the `Glance <http://docs.openstack.org/developer/glance/>`_ documentation,
-for more details on the Image service.
Enabling HTTPS communication between Image service and Object storage
=====================================================================
-This section describes the steps needed to enable secure HTTPS communication between
-Image service and Object storage when Object storage is used as the Backend.
-
-To enable secure HTTPS communication between Image service and Object storage follow these steps:
-
-#. :ref:`EnableHTTPSinSwift`.
+See the `Enabling HTTPS communication between Image service and Object
+storage`_ section in the installation guide for the Bare Metal service.
-#. `Configure Swift Storage Backend
- <http://docs.openstack.org/developer/glance/configuring.html#configuring-the-swift-storage-backend>`_
+.. _`Enabling HTTPS communication between Image service and Object storage`: http://docs.openstack.org/project-install-guide/baremetal/newton/enabling-https.html#enabling-https-communication-between-image-service-and-object-storage
-#. :ref:`EnableHTTPSinGlance`
Enabling HTTPS communication between Image service and Bare Metal service
=========================================================================
-This section describes the steps needed to enable secure HTTPS communication between
-Image service and Bare Metal service.
+See the `Enabling HTTPS communication between Image service and Bare Metal
+service`_ section in the installation guide for the Bare Metal service.
-To enable secure HTTPS communication between Bare Metal service and Image service follow these steps:
+.. _`Enabling HTTPS communication between Image service and Bare Metal service`: http://docs.openstack.org/project-install-guide/baremetal/newton/enabling-https.html#enabling-https-communication-between-image-service-and-bare-metal-service
-#. Edit ``/etc/ironic/ironic.conf``::
-
- [glance]
- ...
- glance_cafile=/path/to/certfile
- glance_protocol=https
- glance_api_insecure=False
-
- .. note::
- 'glance_cafile' is a optional path to a CA certificate bundle to be used to validate the SSL certificate
- served by Image service.
-
-#. Restart ironic-conductor service::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl restart openstack-ironic-conductor
-
- Debian/Ubuntu:
- sudo service ironic-conductor restart
Using Bare Metal service as a standalone service
================================================
-Starting with the Kilo release, it's possible to use Bare Metal service without
-other OpenStack services.
-
-You should make the following changes to ``/etc/ironic/ironic.conf``:
-
-#. To disable usage of Identity service tokens::
-
- [DEFAULT]
- ...
- auth_strategy=none
-
-#. If you want to disable the Networking service, you should have your network
- pre-configured to serve DHCP and TFTP for machines that you're deploying.
- To disable it, change the following lines::
-
- [dhcp]
- ...
- dhcp_provider=none
-
- .. note::
- If you disabled the Networking service and the driver that you use is
- supported by at most one conductor, PXE boot will still work for your
- nodes without any manual config editing. This is because you know all
- the DHCP options that will be used for deployment and can set up your
- DHCP server appropriately.
-
- If you have multiple conductors per driver, it would be better to use
- Networking since it will do all the dynamically changing configurations
- for you.
-
-If you don't use Image service, it's possible to provide images to Bare Metal
-service via hrefs.
-
-.. note::
- At the moment, only two types of hrefs are acceptable instead of Image
- service UUIDs: HTTP(S) hrefs (for example, "http://my.server.net/images/img")
- and file hrefs (file:///images/img).
-There are however some limitations for different drivers:
+See the `Using Bare Metal service as a standalone service`_ section in the
+installation guide for the Bare Metal service.
-* If you're using one of the drivers that use agent deploy method (namely,
- ``agent_ilo``, ``agent_ipmitool``, ``agent_pyghmi``, ``agent_ssh`` or
- ``agent_vbox``) you have to know MD5 checksum for your instance image. To
- compute it, you can use the following command::
+.. _`Using Bare Metal service as a standalone service`: http://docs.openstack.org/project-install-guide/baremetal/newton/standalone.html
- md5sum image.qcow2
- ed82def8730f394fb85aef8a208635f6 image.qcow2
-
- Apart from that, because of the way the agent deploy method works, image
- hrefs can use only HTTP(S) protocol.
-
-* If you're using ``iscsi_ilo`` or ``agent_ilo`` driver, Object Storage service
- is required, as these drivers need to store floppy image that is used to pass
- parameters to deployment iso. For this method also only HTTP(S) hrefs are
- acceptable, as HP iLO servers cannot attach other types of hrefs as virtual
- media.
-
-* Other drivers use PXE deploy method and there are no special requirements
- in this case.
-
-Steps to start a deployment are pretty similar to those when using Compute:
-
-#. To use the `ironic CLI <http://docs.openstack.org/developer/python-ironicclient/cli.html>`_,
- set up these environment variables. Since no authentication strategy is
- being used, the value can be any string for OS_AUTH_TOKEN. IRONIC_URL is
- the URL of the ironic-api process.
- For example::
-
- export OS_AUTH_TOKEN=fake-token
- export IRONIC_URL=http://localhost:6385/
-
-#. Create a node in Bare Metal service. At minimum, you must specify the driver
- name (for example, "pxe_ipmitool"). You can also specify all the required
- driver parameters in one command. This will return the node UUID::
-
- ironic node-create -d pxe_ipmitool -i ipmi_address=ipmi.server.net \
- -i ipmi_username=user -i ipmi_password=pass \
- -i deploy_kernel=file:///images/deploy.vmlinuz \
- -i deploy_ramdisk=http://my.server.net/images/deploy.ramdisk
-
- +--------------+--------------------------------------------------------------------------+
- | Property | Value |
- +--------------+--------------------------------------------------------------------------+
- | uuid | be94df40-b80a-4f63-b92b-e9368ee8d14c |
- | driver_info | {u'deploy_ramdisk': u'http://my.server.net/images/deploy.ramdisk', |
- | | u'deploy_kernel': u'file:///images/deploy.vmlinuz', u'ipmi_address': |
- | | u'ipmi.server.net', u'ipmi_username': u'user', u'ipmi_password': |
- | | u'******'} |
- | extra | {} |
- | driver | pxe_ipmitool |
- | chassis_uuid | |
- | properties | {} |
- +--------------+--------------------------------------------------------------------------+
-
- Note that here deploy_kernel and deploy_ramdisk contain links to
- images instead of Image service UUIDs.
-
-#. As in case of Compute service, you can also provide ``capabilities`` to node
- properties, but they will be used only by Bare Metal service (for example,
- boot mode). Although you don't need to add properties like ``memory_mb``,
- ``cpus`` etc. as Bare Metal service will require UUID of a node you're
- going to deploy.
-
-#. Then create a port to inform Bare Metal service of the network interface
- cards which are part of the node by creating a port with each NIC's MAC
- address. In this case, they're used for naming of PXE configs for a node::
-
- ironic port-create -n $NODE_UUID -a $MAC_ADDRESS
-
-#. As there is no Compute service flavor and instance image is not provided with
- nova boot command, you also need to specify some fields in ``instance_info``.
- For PXE deployment, they are ``image_source``, ``kernel``, ``ramdisk``,
- ``root_gb``::
-
- ironic node-update $NODE_UUID add instance_info/image_source=$IMG \
- instance_info/kernel=$KERNEL instance_info/ramdisk=$RAMDISK \
- instance_info/root_gb=10
-
- Here $IMG, $KERNEL, $RAMDISK can also be HTTP(S) or file hrefs. For agent
- drivers, you don't need to specify kernel and ramdisk, but MD5 checksum of
- instance image is required::
-
- ironic node-update $NODE_UUID add instance_info/image_checksum=$MD5HASH
-
-#. Validate that all parameters are correct::
-
- ironic node-validate $NODE_UUID
-
- +------------+--------+----------------------------------------------------------------+
- | Interface | Result | Reason |
- +------------+--------+----------------------------------------------------------------+
- | console | False | Missing 'ipmi_terminal_port' parameter in node's driver_info. |
- | deploy | True | |
- | management | True | |
- | power | True | |
- +------------+--------+----------------------------------------------------------------+
-
-#. Now you can start the deployment, run::
-
- ironic node-set-provision-state $NODE_UUID active
-
- You can manage provisioning by issuing this command. Valid provision states
- are ``active``, ``rebuild`` and ``deleted``.
-
-For iLO drivers, fields that should be provided are:
-
-* ``ilo_deploy_iso`` under ``driver_info``;
-
-* ``ilo_boot_iso``, ``image_source``, ``root_gb`` under ``instance_info``.
-
-.. note::
- Before Liberty release Ironic was not able to track non-Glance images'
- content changes. Starting with Liberty, it is possible to do so using image
- modification date. For example, for HTTP image, if 'Last-Modified' header
- value from response to a HEAD request to
- "http://my.server.net/images/deploy.ramdisk" is greater than cached image
- modification time, Ironic will re-download the content. For "file://"
- images, the file system modification time is used.
-
-
-Other references
-----------------
-
-* `Enabling local boot without Compute`_
+.. _`Enabling local boot without Compute`: http://docs.openstack.org/project-install-guide/baremetal/newton/local-boot-partition-images.html#enabling-local-boot-without-compute
Enabling the configuration drive (configdrive)
==============================================
-Starting with the Kilo release, the Bare Metal service supports exposing
-a configuration drive image to the instances.
-
-The configuration drive is used to store instance-specific metadata and is present to
-the instance as a disk partition labeled ``config-2``. The configuration drive has
-a maximum size of 64MB. One use case for using the configuration drive is to
-expose a networking configuration when you do not use DHCP to assign IP
-addresses to instances.
-
-The configuration drive is usually used in conjunction with the Compute
-service, but the Bare Metal service also offers a standalone way of using it.
-The following sections will describe both methods.
-
-
-When used with Compute service
-------------------------------
+See the `Enabling the configuration drive (configdrive)`_ section in the
+installation guide for the Bare Metal service.
-To enable the configuration drive for a specific request, pass
-``--config-drive true`` parameter to the ``nova boot`` command, for example::
-
- nova boot --config-drive true --flavor baremetal --image test-image instance-1
-
-It's also possible to enable the configuration drive automatically on
-all instances by configuring the ``OpenStack Compute service`` to always
-create a configuration drive by setting the following option in the
-``/etc/nova/nova.conf`` file, for example::
-
- [DEFAULT]
- ...
-
- force_config_drive=True
-
-In some cases, you may wish to pass a user customized script when deploying an instance.
-To do this, pass ``--user-data /path/to/file`` to the ``nova boot`` command.
-More information can be found at `Provide user data to instances <http://docs.openstack.org/user-guide/cli_provide_user_data_to_instances.html>`_
-
-
-When used standalone
---------------------
-
-When used without the Compute service, the operator needs to create a configuration drive
-and provide the file or HTTP URL to the Bare Metal service.
-
-For the format of the configuration drive, Bare Metal service expects a
-``gzipped`` and ``base64`` encoded ISO 9660 [*]_ file with a ``config-2``
-label. The
-`ironic client <http://docs.openstack.org/developer/python-ironicclient/>`_
-can generate a configuration drive in the `expected format`_. Just pass a
-directory path containing the files that will be injected into it via the
-``--config-drive`` parameter of the ``node-set-provision-state`` command,
-for example::
-
- ironic node-set-provision-state --config-drive /dir/configdrive_files $node_identifier active
-
-
-Accessing the configuration drive data
---------------------------------------
-
-When the configuration drive is enabled, the Bare Metal service will create a partition on the
-instance disk and write the configuration drive image onto it. The
-configuration drive must be mounted before use. This is performed
-automatically by many tools, such as cloud-init and cloudbase-init. To mount
-it manually on a Linux distribution that supports accessing devices by labels,
-simply run the following::
-
- mkdir -p /mnt/config
- mount /dev/disk/by-label/config-2 /mnt/config
-
-
-If the guest OS doesn't support accessing devices by labels, you can use
-other tools such as ``blkid`` to identify which device corresponds to
-the configuration drive and mount it, for example::
-
- CONFIG_DEV=$(blkid -t LABEL="config-2" -odevice)
- mkdir -p /mnt/config
- mount $CONFIG_DEV /mnt/config
-
-
-.. [*] A config drive could also be a data block with a VFAT filesystem
- on it instead of ISO 9660. But it's unlikely that it would be needed
- since ISO 9660 is widely supported across operating systems.
-
-
-Cloud-init integration
-----------------------
-
-The configuration drive can be
-especially useful when used with `cloud-init
-<http://cloudinit.readthedocs.org/en/latest/topics/datasources.html#config-drive>`_,
-but in order to use it we should follow some rules:
-
-* ``Cloud-init`` data should be organized in the `expected format`_.
-
-
-* Since the Bare Metal service uses a disk partition as the configuration drive,
- it will only work with
- `cloud-init version >= 0.7.5 <http://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/view/head:/ChangeLog>`_.
-
-
-* ``Cloud-init`` has a collection of data source modules, so when
- building the image with `disk-image-builder`_ we have to define
- ``DIB_CLOUD_INIT_DATASOURCES`` environment variable and set the
- appropriate sources to enable the configuration drive, for example::
-
- DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack" disk-image-create -o fedora-cloud-image fedora baremetal
-
- For more information see `how to configure cloud-init data sources
- <http://docs.openstack.org/developer/diskimage-builder/elements/cloud-init-datasources/README.html>`_.
-
-.. _`expected format`: http://docs.openstack.org/user-guide/cli_config_drive.html#openstack-metadata-format
+.. _`Enabling the configuration drive (configdrive)`: http://docs.openstack.org/project-install-guide/baremetal/newton/configdrive.html
Appending kernel parameters to boot instances
=============================================
-The Bare Metal service supports passing custom kernel parameters to boot instances to fit
-users' requirements. The way to append the kernel parameters is depending on how to boot instances.
-
-Network boot
-------------
-Currently, the Bare Metal service supports assigning unified kernel parameters to PXE
-booted instances by:
-
-* Modifying the ``[pxe]/pxe_append_params`` configuration option, for example::
-
- [pxe]
+See the `Appending kernel parameters to boot instances`_ section in the
+installation guide for the Bare Metal service.
- pxe_append_params = quiet splash
-
-* Copying a template from shipped templates to another place, for example::
-
- https://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/pxe_config.template
-
- Making the modifications and pointing to the custom template via the configuration
- options: ``[pxe]/pxe_config_template`` and ``[pxe]/uefi_pxe_config_template``.
-
-Local boot
-----------
-For local boot instances, users can make use of configuration drive
-(see `Enabling the configuration drive (configdrive)`_) to pass a custom
-script to append kernel parameters when creating an instance. This is more
-flexible and can vary per instance.
-Here is an example for grub2 with ubuntu, users can customize it
-to fit their use case:
-
- .. code:: python
-
- #!/usr/bin/env python
- import os
-
- # Default grub2 config file in Ubuntu
- grub_file = '/etc/default/grub'
- # Add parameters here to pass to instance.
- kernel_parameters = ['quiet', 'splash']
- grub_cmd = 'GRUB_CMDLINE_LINUX'
- old_grub_file = grub_file+'~'
- os.rename(grub_file, old_grub_file)
- cmdline_existed = False
- with open(grub_file, 'w') as writer, \
- open(old_grub_file, 'r') as reader:
- for line in reader:
- key = line.split('=')[0]
- if key == grub_cmd:
- #If there is already some value:
- if line.strip()[-1] == '"':
- line = line.strip()[:-1] + ' ' + ' '.join(kernel_parameters) + '"'
- cmdline_existed = True
- writer.write(line)
- if not cmdline_existed:
- line = grub_cmd + '=' + '"' + ' '.join(kernel_parameters) + '"'
- writer.write(line)
-
- os.remove(old_grub_file)
- os.system('update-grub')
- os.system('reboot')
+.. _`Appending kernel parameters to boot instances`: http://docs.openstack.org/project-install-guide/baremetal/newton/advanced.html#appending-kernel-parameters-to-boot-instances
.. _BuildingDeployRamdisk:
@@ -2318,289 +207,25 @@ to fit their use case:
Building or downloading a deploy ramdisk image
==============================================
-Ironic depends on having an image with the ironic-python-agent_ (IPA)
-service running on it for controlling and deploying bare metal nodes.
-
-You can download a pre-built version of the deploy ramdisk built with
-the `CoreOS tools`_ at:
-
-* `CoreOS deploy kernel <http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe.vmlinuz>`_
-* `CoreOS deploy ramdisk <http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe_image-oem.cpio.gz>`_
-
-Building from source
---------------------
-
-There are two known methods for creating the deployment image with the
-IPA service:
-
-.. _BuildingCoreOSDeployRamdisk:
-
-CoreOS tools
-~~~~~~~~~~~~
-
-#. Clone the ironic-python-agent_ project::
-
- git clone https://git.openstack.org/openstack/ironic-python-agent
-
-#. Install the requirements::
-
- Fedora 21/RHEL7/CentOS7:
- sudo yum install docker gzip util-linux cpio findutils grep gpg
-
- Fedora 22 or higher:
- sudo dnf install docker gzip util-linux cpio findutils grep gpg
-
- Ubuntu 14.04 (trusty) or higher:
- sudo apt-get install docker.io gzip uuid-runtime cpio findutils grep gnupg
-
-#. Change directory to ``imagebuild/coreos``::
-
- cd ironic-python-agent/imagebuild/coreos
-
-#. Start the docker daemon::
-
- Fedora/RHEL7/CentOS7:
- sudo systemctl start docker
-
- Ubuntu:
- sudo service docker start
-
-#. Create the image::
-
- sudo make
-
-#. Or, create an ISO image to boot with virtual media::
-
- sudo make iso
-
-
-.. note::
- Once built the deploy ramdisk and kernel will appear inside of a
- directory called ``UPLOAD``.
-
-
-.. _BuildingDibBasedDeployRamdisk:
+See the `Building or downloading a deploy ramdisk image`_ section in the
+installation guide for the Bare Metal service.
-disk-image-builder
-~~~~~~~~~~~~~~~~~~
-
-#. Install disk-image-builder_ from pip or from your distro's packages::
-
- sudo pip install diskimage-builder
-
-#. Create the image::
-
- disk-image-create ironic-agent fedora -o ironic-deploy
-
- The above command creates the deploy ramdisk and kernel named
- ``ironic-deploy.vmlinuz`` and ``ironic-deploy.initramfs`` in your
- current directory.
-
-#. Or, create an ISO image to boot with virtual media::
-
- disk-image-create ironic-agent fedora iso -o ironic-deploy
-
- The above command creates the deploy ISO named ``ironic-deploy.iso``
- in your current directory.
-
-.. note::
- Fedora was used as an example for the base operational system. Please
- check the `diskimage-builder documentation`_ for other supported
- operational systems.
-
-.. _`diskimage-builder documentation`: http://docs.openstack.org/developer/diskimage-builder
+.. _`Building or downloading a deploy ramdisk image`: http://docs.openstack.org/project-install-guide/baremetal/newton/deploy-ramdisk.html
Trusted boot with partition image
=================================
-Starting with the Liberty release, Ironic supports trusted boot with partition
-image. This means at the end of the deployment process, when the node is
-rebooted with the new user image, ``trusted boot`` will be performed. It will
-measure the node's BIOS, boot loader, Option ROM and the Kernel/Ramdisk, to
-determine whether a bare metal node deployed by Ironic should be trusted.
-
-It's important to note that in order for this to work the node being deployed
-**must** have Intel `TXT`_ hardware support. The image being deployed with
-Ironic must have ``oat-client`` installed within it.
-
-The following will describe how to enable ``trusted boot`` and boot
-with PXE and Nova:
-
-#. Create a customized user image with ``oat-client`` installed::
-
- disk-image-create -u fedora baremetal oat-client -o $TRUST_IMG
-
- For more information on creating customized images, see `ImageRequirement`_.
-
-#. Enable VT-x, VT-d, TXT and TPM on the node. This can be done manually through
- the BIOS. Depending on the platform, several reboots may be needed.
-
-#. Enroll the node and update the node capability value::
- ironic node-create -d pxe_ipmitool
-
- ironic node-update $NODE_UUID add properties/capabilities={'trusted_boot':true}
-
-#. Create a special flavor::
-
- nova flavor-key $TRUST_FLAVOR_UUID set 'capabilities:trusted_boot'=true
-
-#. Prepare `tboot`_ and mboot.c32 and put them into tftp_root or http_root
- directory on all nodes with the ironic-conductor processes::
-
- Ubuntu:
- cp /usr/lib/syslinux/mboot.c32 /tftpboot/
-
- Fedora:
- cp /usr/share/syslinux/mboot.c32 /tftpboot/
-
- *Note: The actual location of mboot.c32 varies among different distribution versions.*
-
- tboot can be downloaded from
- https://sourceforge.net/projects/tboot/files/latest/download
-
-#. Install an OAT Server. An `OAT Server`_ should be running and configured correctly.
-
-#. Boot an instance with Nova::
-
- nova boot --flavor $TRUST_FLAVOR_UUID --image $TRUST_IMG --user-data $TRUST_SCRIPT trusted_instance
-
- *Note* that the node will be measured during ``trusted boot`` and the hash values saved
- into `TPM`_. An example of TRUST_SCRIPT can be found in `trust script example`_.
-
-#. Verify the result via OAT Server.
-
- This is outside the scope of Ironic. At the moment, users can manually verify the result
- by following the `manual verify steps`_.
-
-.. _`TXT`: http://en.wikipedia.org/wiki/Trusted_Execution_Technology
-.. _`tboot`: https://sourceforge.net/projects/tboot
-.. _`TPM`: http://en.wikipedia.org/wiki/Trusted_Platform_Module
-.. _`OAT Server`: https://github.com/OpenAttestation/OpenAttestation/wiki
-.. _`trust script example`: https://wiki.openstack.org/wiki/Bare-metal-trust#Trust_Script_Example
-.. _`manual verify steps`: https://wiki.openstack.org/wiki/Bare-metal-trust#Manual_verify_result
+See the `Trusted boot with partition image`_ section in the installation guide
+for the Bare Metal service.
+.. _`Trusted boot with partition image`: http://docs.openstack.org/project-install-guide/baremetal/newton/advanced.html#trusted-boot-with-partition-image
Troubleshooting
===============
-Once all the services are running and configured properly, and a node has been
-enrolled with the Bare Metal service and is in the ``available`` provision
-state, the Compute service should detect the node
-as an available resource and expose it to the scheduler.
-
-.. note::
- There is a delay, and it may take up to a minute (one periodic task cycle)
- for the Compute service to recognize any changes in the Bare Metal service's
- resources (both additions and deletions).
-
-In addition to watching ``nova-compute`` log files, you can see the available
-resources by looking at the list of Compute hypervisors. The resources reported
-therein should match the bare metal node properties, and the Compute service flavor.
-
-Here is an example set of commands to compare the resources in Compute
-service and Bare Metal service::
-
- $ ironic node-list
- +--------------------------------------+---------------+-------------+--------------------+-------------+
- | UUID | Instance UUID | Power State | Provisioning State | Maintenance |
- +--------------------------------------+---------------+-------------+--------------------+-------------+
- | 86a2b1bb-8b29-4964-a817-f90031debddb | None | power off | available | False |
- +--------------------------------------+---------------+-------------+--------------------+-------------+
-
- $ ironic node-show 86a2b1bb-8b29-4964-a817-f90031debddb
- +------------------------+----------------------------------------------------------------------+
- | Property | Value |
- +------------------------+----------------------------------------------------------------------+
- | instance_uuid | None |
- | properties | {u'memory_mb': u'1024', u'cpu_arch': u'x86_64', u'local_gb': u'10', |
- | | u'cpus': u'1'} |
- | maintenance | False |
- | driver_info | { [SNIP] } |
- | extra | {} |
- | last_error | None |
- | created_at | 2014-11-20T23:57:03+00:00 |
- | target_provision_state | None |
- | driver | pxe_ipmitool |
- | updated_at | 2014-11-21T00:47:34+00:00 |
- | instance_info | {} |
- | chassis_uuid | 7b49bbc5-2eb7-4269-b6ea-3f1a51448a59 |
- | provision_state | available |
- | reservation | None |
- | power_state | power off |
- | console_enabled | False |
- | uuid | 86a2b1bb-8b29-4964-a817-f90031debddb |
- +------------------------+----------------------------------------------------------------------+
-
- $ nova hypervisor-show 1
- +-------------------------+--------------------------------------+
- | Property | Value |
- +-------------------------+--------------------------------------+
- | cpu_info | baremetal cpu |
- | current_workload | 0 |
- | disk_available_least | - |
- | free_disk_gb | 10 |
- | free_ram_mb | 1024 |
- | host_ip | [ SNIP ] |
- | hypervisor_hostname | 86a2b1bb-8b29-4964-a817-f90031debddb |
- | hypervisor_type | ironic |
- | hypervisor_version | 1 |
- | id | 1 |
- | local_gb | 10 |
- | local_gb_used | 0 |
- | memory_mb | 1024 |
- | memory_mb_used | 0 |
- | running_vms | 0 |
- | service_disabled_reason | - |
- | service_host | my-test-host |
- | service_id | 6 |
- | state | up |
- | status | enabled |
- | vcpus | 1 |
- | vcpus_used | 0 |
- +-------------------------+--------------------------------------+
-
-
-Maintenance mode
-----------------
-Maintenance mode may be used if you need to take a node out of the resource
-pool. Putting a node in maintenance mode will prevent Bare Metal service from
-executing periodic tasks associated with the node. This will also prevent
-Compute service from placing a tenant instance on the node by not exposing
-the node to the nova scheduler. Nodes can be placed into maintenance mode
-with the following command.
-::
-
- $ ironic node-set-maintenance $NODE_UUID on
-
-As of the Kilo release, a maintenance reason may be included with the optional
-``--reason`` command line option. This is a free form text field that will be
-displayed in the ``maintenance_reason`` section of the ``node-show`` command.
-::
-
- $ ironic node-set-maintenance $UUID on --reason "Need to add ram."
-
- $ ironic node-show $UUID
-
- +------------------------+--------------------------------------+
- | Property | Value |
- +------------------------+--------------------------------------+
- | target_power_state | None |
- | extra | {} |
- | last_error | None |
- | updated_at | 2015-04-27T15:43:58+00:00 |
- | maintenance_reason | Need to add ram. |
- | ... | ... |
- | maintenance | True |
- | ... | ... |
- +------------------------+--------------------------------------+
-
-To remove maintenance mode and clear any ``maintenance_reason`` use the
-following command.
-::
-
- $ ironic node-set-maintenance $NODE_UUID off
-
-
-.. _ironic-python-agent: http://docs.openstack.org/developer/ironic-python-agent/
+See the `Troubleshooting`_ section in the installation guide for the Bare Metal
+service.
+
+.. _`Troubleshooting`: http://docs.openstack.org/project-install-guide/baremetal/newton/troubleshooting.html