API Attributes

Neutron’s resource attributes are defined in dictionaries in api/definitions.

The map containing all installed resources (for core and active extensions) is in api/attributes.py.

Attribute map structure

Example attribute definitions for dns_name:

'dns_name': {
    'allow_post': True,
    'allow_put': True,
    'default': '',
    'convert_to': convert_to_lowercase,
    'validate': {'type:dns_name': FQDN_MAX_LEN},
    'is_visible': True

The validate item specifies rules for validating the attribute.

The convert_to item specifies rules for converting the attribute.

Example attribute definitions for gateway_ip:

'gateway_ip': {
    'allow_post': True,
    'allow_put': True,
    'default': constants.ATTR_NOT_SPECIFIED,
    'validate': {'type:ip_address_or_none': None},
    'is_visible': True

Note: a default of ATTR_NOT_SPECIFIED indicates that an attribute is not required, but will be generated by the plugin if it is not specified. Particularly, a value of ATTR_NOT_SPECIFIED is different from an attribute that has been specified with a value of None. For example, if gateway_ip is omitted in a request to create a subnet, the plugin will receive ATTR_NOT_SPECIFIED and the default gateway IP will be generated. However, if gateway_ip is specified as None, this means that the subnet does not have a gateway IP.

The following are the defined keys for attribute maps:


default value of the attribute (if missing, the attribute becomes mandatory)


the attribute can be used on POST requests


the attribute can be used on PUT requests


specifies rules for validating data in the attribute


transformation to apply to the value before it is returned


if the value is a list, apply this transformation to the value before it is returned


the attribute can be used in GET requests as filter


the attribute can be used in GET requests as sort_key


the attribute is returned in GET responses


the attribute is required by the policy engine and should therefore be filled by the API layer even if not present in request body


the attribute is actively part of the policy enforcing mechanism, ie: there might be rules which refer to this attribute


Mark the attribute as a unique key.


if set, if the value passed is None, it will be replaced by the default value


if set, the default values of keys inside dict attributes, will be filled if not specified

When extending existing sub-resources, the sub-attribute map must define all extension attributes under the parameters object. This instructs the API internals to add the attributes to the existing sub-resource rather than overwrite its existing definition. For example:

    'existing_subresource_to_extend': {
        'parameters': {
            'new_attr1': {
                'allow_post': False,
                # etc..