Copyright 2019 Nokia
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- Author
Chandra Shekar Rangavajjula (chandra.s.rangavajjula@nokia.com) Janne Suominen (janne.suominen@nokia.com)
- Version
1.0 2019.05
- Copyright
2019 Nokia. All rights reserved.
This project contains Ironic drivers for baremetal provisioning using Virtual media for Quanta Hardware and Virtual environment. The main motivation for writing own drivers is to avoid L2 Network dependency and to support L3 based deployment.
These drivers are implimented inline with new specification "hardware types"
Ref: "https://docs.openstack.org/ironic/latest/install/enabling-drivers.html"
Effort was to reuse existing hardware interfaces to the maximum, and impliment only those which specific/different in case of Quanta hardware. Below is a breif listing/description on needed interfaces.
Management:- Boot order settings etc. We use existing hardware interfaces ipmi/ssh.
enabled_management_interfaces = ipmitool, ssh
enabled_hardware_types = ipmi_virtmedia, ssh_virtmedia
Power:- For power managment. We use existing hardware interfaces ipmi/ssh.
enabled_power_interfaces = ipmitool, ssh
enabled_hardware_types = ipmi_virtmedia, ssh_virtmedia
Deploy:- Defines how the image gets transferred to the target disk. We use existing hardware interface Agent/direct mode to deploy. This reduces load on ironic coductor and scales better with larger number of nodes parallely provisioning.
enabled_deploy_interfaces = direct
enabled_hardware_types = ipmi_virtmedia, ssh_virtmedia
Console:- Manages access to the console of a baremetal target node. We use existing interface ipmitool-shellinabox/ssh-shellinabox. At the moment only ipmitool-shellinabox is confiured and used on real environments. This redirects the console to a webpage.
enabled_console_interfaces = ipmitool-shellinabox, ssh-shellinabox
enabled_hardware_types = ipmi_virtmedia, ssh_virtmedia
Ref: "https://docs.openstack.org/ironic/latest/admin/console.html"
Boot:- Manages booting of the deploy ramdisk on the baremetal node. We have in house developed hardware interfaces virtmedia_ipmi_boot/virtmedia_ssh_boot for booting baremetal nodes for deployment. This expects an iso containing ironic-pyton-agent Ramdisk and a kernel.
Ref: "https://gerrit.akraino.org/r/#/admin/projects/ta/ipa-deployer/tree/master" to check ironic-deploy.iso creation procedure. This driver creates a floppy image per baremetal node with config-data (IP, Interface, GW etc,.). Quanta hardware does not support attaching 2 Virtual media devices over NFS using IPMI. Hence this floppy image is appended to the end of node iso to make it a single iso image. The consolidated image is then attached to the target. When the target is booted from ISO it first configures its IP using "virtmedia-netconfig.service"
Below is the example output of the driver info:
# ironic driver-list
Supported driver(s) | Active host(s) |
ipmi_virtmedia | controller-1 |
ssh_virtmedia | controller-1 |
# ironic driver-properties ipmi_virtmedia
Property | Description |
deploy_forces_oob_reboot | Whether Ironic should force a reboot of the Node via the out-of-band channel after deployment is complete. Provides compatibility with older deploy ramdisks. Defaults to False. Optional. |
deploy_kernel | UUID (from Glance) of the deployment kernel. Required. |
deploy_ramdisk | UUID (from Glance) of the ramdisk with agent that is used at deploy time. Required. |
image_http_proxy | URL of a proxy server for HTTP connections. Optional. |
image_https_proxy | URL of a proxy server for HTTPS connections. Optional. |
image_no_proxy | A comma-separated list of host names, IP addresses and domain names (with optional :port) that will be excluded from proxying. To denote a doman name, use a dot to prefix the domain name. This value will be ignored if image_http_proxy and image_https_proxy are not specified. Optional. |
ipmi_address | IP address or hostname of the node. Required. |
ipmi_bridging | bridging_type; default is "no". One of "single", "dual", "no". Optional. |
ipmi_force_boot_device | Whether Ironic should specify the boot device to the BMC each time the server is turned on, eg. because the BMC is not capable of remembering the selected boot device across power cycles; default value is False Optional. |
ipmi_local_address | local IPMB address for bridged requests. Used only if ipmi_bridging is set to "single" or "dual". Optional |
ipmi_password | password. Optional. |
ipmi_port | remote IPMI RMCP port. Optional. |
ipmi_priv_level | privilege level; default is ADMINISTRATOR. One of ADMINISTRATOR, CALLBACK, OPERATOR, USER. Optional. |
ipmi_protocol_version | the version of the IPMI protocol; default is "2.0". One of "1.5", "2.0". Optional. |
ipmi_target_address | destination address for bridged request. Required only if ipmi_bridging is set to "single" or "dual". |
ipmi_target_channel | destination channel for bridged request. Required only if ipmi_bridging is set to "single" or "dual". |
ipmi_terminal_port | node's UDP port to connect to. Only required for console access. |
ipmi_transit_address | transit address for bridged request. Required only if ipmi_bridging is set to "dual". |
ipmi_transit_channel | transit channel for bridged request. Required only if ipmi_bridging is set to "dual". |
ipmi_username | username; default is NULL user. Optional. |
virtmedia_deploy_iso | Deployment ISO image file name. Required. |
nfs_server | NFS server IP hosting deployment ISO and metadata Floppy images. Required. |