nova metadata REST API

The nova service includes a metadata server where information about an instance is made available to that instance (for use during cloud-init, for example). This includes common things like the hostname, root password, ssh keypairs, etc.

A relatively new feature in Newton adds dynamic providers. When a request is made for metadata nova will contact the configured providers using a REST API and include the returned values in the metadata.

To enable dynamic metadata, add “DynamicJSON” to the vendordata_providers configuration option. This can also include “StaticJSON”

The vendordata_dynamic_targets configuration option specifies the URLs to be retrieved when metadata is requested.tance.

The format for an entry in vendordata_dynamic_targets is: @

Name is a string to distinguish this dynamic metadata from other dynamic providers. This will used as the key to the metadata returned to the instance.

Where name is a short string not including the ‘@’ character, and where the
URL can include a port number if so required. An example would be::

For example: test@http://127.0.0.1:8090

This dynamic metadata is available in a new file, openstack/2016-10-06/vendor_data2.json

It can be retrieved as an URL from within an instance using:

$ curl http://169.254.169.254/openstack/2016-10-06/vendor_data2.json

The output will look something like:

{
    "test": {
        "key1": "somedata",
        "key2": "something else",
    }
}

The following is passed to the dynamic REST server when nova receives a metadata request:

KeyDescription
project-idThe UUID of the project that owns this instance.
instance-idThe UUID of this instance.
image-idThe UUID of the image used to boot this instance.
user-dataAs specified by the user at boot time.
hostnameThe hostname of the instance.
metadataAs specified by the user at boot time (aka properties)

Leave a Reply