OpenStack¶
This datasource supports reading data from the OpenStack Instance Metadata Service.
Discovery¶
To determine whether a platform looks like it may be OpenStack, cloud-init
checks the following environment attributes as a potential OpenStack platform:
- May be OpenStack if: - non-x86 cpu architecture: because DMI data is buggy on some arches.
 
- Is OpenStack if x86 architecture and ANY of the following: - /proc/1/environ:- Nova-lxdcontains- product_name=OpenStack Nova.
- DMI product_name: Either- Openstack Novaor- OpenStack Compute.
- DMI chassis_asset_tagis- HUAWEICLOUD,- OpenTelekomCloud,- SAP CCloud VM,- Samsung Cloud Platform,- OpenStack Nova(since 19.2) or- OpenStack Compute(since 19.2).
 
Configuration¶
The following configuration can be set for the datasource in system
configuration (in /etc/cloud/cloud.cfg or
/etc/cloud/cloud.cfg.d/).
The settings that may be configured are as follows:
metadata_urls¶
This list of URLs will be searched for an OpenStack IMDS (instance
metadata service). The first entry that successfully returns a 200 response
for <url>/openstack will be selected.
Default: [’http://169.254.169.254’])
max_wait¶
The maximum amount of clock time (in seconds) that should be spent searching
metadata_urls. A value less than zero will result in only one request
being made, to the first in the list.
Default: -1
timeout¶
The timeout value provided to urlopen for each individual http request.
This is used both when selecting a metadata_url and when crawling the
instance metadata service.
Default: 10
retries¶
The number of retries that should be attempted for an http request. This
value is used only after metadata_url is selected.
Default: 5
apply_network_config¶
A boolean specifying whether to configure the network for the instance based
on network_data.json provided by the IMDS. When False,
only configure DHCP on the primary NIC for this instance.
Default: True
Example configuration¶
An example configuration with the default values is provided below:
datasource:
  OpenStack:
    metadata_urls: ["http://169.254.169.254"]
    max_wait: -1
    timeout: 10
    retries: 5
    apply_network_config: True
Vendor-data¶
The OpenStack IMDS can be configured to serve up vendor-data, which is available to all instances for consumption. OpenStack vendor-data is generally a JSON object.
Cloud-init will look for configuration in the cloud-init attribute
of the vendor-data JSON object. Cloud-init processes this configuration
using the same handlers as user-data, so any formats that work for user-data
should work for vendor-data.
For example, configuring the following as vendor-data in OpenStack would
upgrade packages and install htop on all instances:
{"cloud-init": "#cloud-config\npackage_upgrade: True\npackages:\n - htop"}
For more general information about how cloud-init handles vendor-data,
including how it can be disabled by users on instances, see our
explanation topic.
OpenStack can also be configured to provide “dynamic vendor-data”
which is provided by the DynamicJSON provider and appears under a
different IMDS path, /vendor_data2.json.
Cloud-init will look for a cloud-init at the vendor_data2
path; if found, settings are applied after (and, hence, overriding) the
settings from static vendor-data. Both sets of vendor-data can be overridden
by user-data.
OpenStack Ironic Bare Metal¶
During boot, cloud-init typically has to identify which platform it is running on. Since OpenStack Ironic Bare Metal doesn’t provide a method for cloud-init to discover that it is running on Ironic, extra user configuration is required.
Cloud-init provides two methods to do this:
Method 1: Configuration file¶
Explicitly set datasource_list to only openstack, such as:
datasource_list: ["openstack"]
Method 2: Kernel command line¶
Set the kernel command line to configure datasource override.
Example using Ubuntu + GRUB2:
$ echo 'ds=openstack' >> /etc/default/grub
$ grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg