From a4987c747c2171111a5abca11316832ade07a83b Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Thu, 17 Dec 2020 16:50:23 +0000 Subject: [PATCH] New api-def: port-device-profile New API definition: ``port-device-profile``. The new field added to ``ports`` API, ``device_profile``, represents a Cyborg device profile and is a named set of user requirements for one or more accelerators. Related-Bug: #1906602 Change-Id: Ia235fb60405cfba04114d6c825f430bf792b7533 --- api-ref/source/v2/parameters.yaml | 18 ++++++++ api-ref/source/v2/ports.inc | 9 ++++ neutron_lib/api/definitions/__init__.py | 2 + .../api/definitions/port_device_profile.py | 45 +++++++++++++++++++ .../definitions/test_port_device_profile.py | 22 +++++++++ .../port-device-profile-ffa9628ef6395c68.yaml | 6 +++ 6 files changed, 102 insertions(+) create mode 100644 neutron_lib/api/definitions/port_device_profile.py create mode 100644 neutron_lib/tests/unit/api/definitions/test_port_device_profile.py create mode 100644 releasenotes/notes/port-device-profile-ffa9628ef6395c68.yaml diff --git a/api-ref/source/v2/parameters.yaml b/api-ref/source/v2/parameters.yaml index 9b3ba961f..cde7c4af6 100644 --- a/api-ref/source/v2/parameters.yaml +++ b/api-ref/source/v2/parameters.yaml @@ -2286,6 +2286,24 @@ device_owner-request: in: body required: false type: string +device_profile: + description: | + A port device profile is a reference for Cyborg project and is a named + set of the user requirements for one or more acceletators. + https://docs.openstack.org/api-ref/accelerator/v2/index.html# + device-profiles + in: body + required: False + type: string +device_profile-request: + description: | + A port device profile is a reference for Cyborg project and is a named + set of the user requirements for one or more acceletators. + https://docs.openstack.org/api-ref/accelerator/v2/index.html# + device-profiles + in: body + required: False + type: string direction: description: | Ingress or egress, which is the direction in diff --git a/api-ref/source/v2/ports.inc b/api-ref/source/v2/ports.inc index 64b0b5f37..8aa5b15a3 100644 --- a/api-ref/source/v2/ports.inc +++ b/api-ref/source/v2/ports.inc @@ -54,6 +54,15 @@ extension must be used in conjunction with the ``dns-integration`` extension. When enabled and set, a port level ``dns_domain`` take precedence over a ``dns_domain`` specified in the port's network allowing per-port DNS domains. +Device profile +============== + +The port device profile extension (``port-device-profile``) defines a named set +of user requirements for one or more acceletators. This parameter is a +reference for Cyborg project, read by Nova when a port is requested. If this +parameter is populated, Nova makes a request to Cyborg. +https://docs.openstack.org/api-ref/accelerator/v2/index.html#device-profiles + Extra DHCP option (``extra_dhcp_opt``) extension ================================================ diff --git a/neutron_lib/api/definitions/__init__.py b/neutron_lib/api/definitions/__init__.py index c94f83436..c192599f8 100644 --- a/neutron_lib/api/definitions/__init__.py +++ b/neutron_lib/api/definitions/__init__.py @@ -72,6 +72,7 @@ from neutron_lib.api.definitions import network_mtu_writable from neutron_lib.api.definitions import network_segment_range from neutron_lib.api.definitions import pagination from neutron_lib.api.definitions import port +from neutron_lib.api.definitions import port_device_profile from neutron_lib.api.definitions import port_mac_address_regenerate from neutron_lib.api.definitions import port_numa_affinity_policy from neutron_lib.api.definitions import port_resource_request @@ -189,6 +190,7 @@ _ALL_API_DEFINITIONS = { network_segment_range, pagination, port, + port_device_profile, port_mac_address_regenerate, port_numa_affinity_policy, port_resource_request, diff --git a/neutron_lib/api/definitions/port_device_profile.py b/neutron_lib/api/definitions/port_device_profile.py new file mode 100644 index 000000000..5f82419d2 --- /dev/null +++ b/neutron_lib/api/definitions/port_device_profile.py @@ -0,0 +1,45 @@ +# Copyright (c) 2020 Red Hat, Inc. +# +# 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. + +from neutron_lib.api.definitions import port +from neutron_lib.db import constants + + +ALIAS = 'port-device-profile' +IS_SHIM_EXTENSION = False +IS_STANDARD_ATTR_EXTENSION = False +NAME = 'Port device profile' +DESCRIPTION = "Expose the port device profile (Cyborg)" +UPDATED_TIMESTAMP = "2020-12-17T10:00:00-00:00" +RESOURCE_NAME = port.RESOURCE_NAME +COLLECTION_NAME = port.COLLECTION_NAME +DEVICE_PROFILE = 'device_profile' + +RESOURCE_ATTRIBUTE_MAP = { + COLLECTION_NAME: { + DEVICE_PROFILE: { + 'allow_post': True, + 'allow_put': False, + 'validate': { + 'type:string_or_none': constants.DESCRIPTION_FIELD_SIZE}, + 'default': None, + 'is_visible': True} + }, +} + +SUB_RESOURCE_ATTRIBUTE_MAP = None +ACTION_MAP = {} +ACTION_STATUS = {} +REQUIRED_EXTENSIONS = [] +OPTIONAL_EXTENSIONS = [] diff --git a/neutron_lib/tests/unit/api/definitions/test_port_device_profile.py b/neutron_lib/tests/unit/api/definitions/test_port_device_profile.py new file mode 100644 index 000000000..7164cfbcf --- /dev/null +++ b/neutron_lib/tests/unit/api/definitions/test_port_device_profile.py @@ -0,0 +1,22 @@ +# Copyright 2020 Red Hat, Inc. +# +# 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. + +from neutron_lib.api.definitions import port_device_profile +from neutron_lib.tests.unit.api.definitions import base + + +class PortDeviceProfileDefinitionTestCase(base.DefinitionBaseTestCase): + extension_module = port_device_profile + extension_resources = (port_device_profile.COLLECTION_NAME,) + extension_attributes = (port_device_profile.DEVICE_PROFILE,) diff --git a/releasenotes/notes/port-device-profile-ffa9628ef6395c68.yaml b/releasenotes/notes/port-device-profile-ffa9628ef6395c68.yaml new file mode 100644 index 000000000..f4cc5e51d --- /dev/null +++ b/releasenotes/notes/port-device-profile-ffa9628ef6395c68.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + New API definition: ``port-device-profile``. The new field added to + ``ports`` API, ``device_profile``, represents a Cyborg device profile + and is a named set of user requirements for one or more accelerators.