...
HPA VF-C External API Interaction for Casablanca
SDC
Supported HPA Capability Requirements(DRAFT)#LogicalNodei/ORequirements is referred.
SDC will provide below HPA information to VF-C
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
{ "requestInfo": { "transactionId": "2441780a-2710-4169-91ee-a9f52a705bb3 //UUID", "requestId": "2441780a-2710-4169-91ee-a9f52a705bb3 //UUID", "callbackUrl": "<callback URL from VFC>", "sourceId": "vfc", "requestType": "create", "numSolutions": 1, "optimizers": [ "placement" ], "timeout": 600 }, "placementInfo": { "placementDemands": [ { "resourceModuleName": "vBRG //<VNF name from CSAR>", "serviceResourceId": "<vnfInstanceId used inside VFC>", "resourceModelInfo": { "modelInvariantId": "no-resourceModelInvariantId", "modelVersionId": "no-resourceModelVersionId" } } ] }, "serviceInfo": { "serviceInstanceId": "9fd24064-a335-478c-bbb0-3b71b7fbc55f", "serviceName": "vcpe", "modelInfo": { "modelInvariantId": "31390ef2-94a9-4cef-a09a-08f7d66540c9 //Id get from CSAR", "modelVersionId": "1a32426f-3616-47d0-96eb-b20cc7fff9be //Id get from CSAR" } } } |
OOF retrieve the requirements(policies) for that service/VNF inside Policy
Based on the request from VF-C, OOF need to retrieve policies for that VNF/service. Sample Policy schema will look like this:
Note: Since flavor_label and sriov_nic_label are not needed by VFC, the values inside directives will be leave as blank or default values.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
# #Example 1: vCPE, Basic Capability and pciePassthroughsriovNICNetwork #one VNFC(VFC) with one basic capability requirement and two pciePassthroughsriovNICNetwork requirements # { "service": "hpaPolicy", "policyName": "oofCasablanca.hpaPolicy_vFW", "description": "HPA policy for vFW", "templateVersion": "0.0.1", "version": "1.0", "priority": "3", "riskType": "test", "riskLevel": "2", "guard": "False", "content": { "resources": "vG", "identity": "hpaPolicy_vG", "policyScope": ["vCPE", "US", "INTERNATIONAL", "ip", "vG"], "policyType": "hpaPolicy", "flavorFeatures": [ { "id" : "<vdu.Name>", "type":"vnfc/tocsa.nodes.nfv.Vdu.Compute", "directives":[ { "directive_name":"flavor_directive", "attributes":[ { "attribute_name":"<Blank, or use Default value String 'flavor_name'>", "attribute_value": "<Blank>" } ] } ], "flavorProperties": [ { "hpa-feature": "basicCapabilities", "mandatory": "True", "architecture": "generic", "directives": [], "hpa-feature-attributes": [ { "hpa-attribute-key": "numVirtualCpu", "hpa-attribute-value": "6", "operator": "=", "unit": "" } ] }, { "hpa-feature": "basicCapabilities", "mandatory": "True", "architecture": "generic", "directives": [], "hpa-feature-attributes": [ { "hpa-attribute-key": "virtualMemSize", "hpa-attribute-value": "6", "operator": "=", "unit": "GB" }, ] }, { "hpa-feature": "pciePassthroughsriovNICNetwork", "mandatory": "True", "architecture": "generic", "directives" : [ { "directive_name": "pciePassthroughsriovNICNetwork_directive", "attributes": [ { "attribute_name": "<Blank>", "attribute_value": "<Blank>" }, { "attribute_name": "<Blank>", "attribute_value": "<Blank>" } ] } ], "hpa-feature-attributes": [ { "hpa-attribute-key": "pciVendorId", "hpa-attribute-value": "1234", "operator": "=", "unit": "" }, { "hpa-attribute-key": "pciDeviceId", "hpa-attribute-value": "5678", "operator": "=", "unit": "" }, { "hpa-attribute-key": "pciCount", "hpa-attribute-value": "1", "operator": ">=", "unit": "" } ] }, { "hpa-feature": "pciePassthroughsriovNICNetwork", "mandatory": "True", "architecture": "generic", "directives" : [ { "directive_name": "pciePassthroughsriovNICNetwork_directive", "attributes": [ { "attribute_name": "<Blank>", "attribute_value": "<Blank>" } { "attribute_name": "<Blank>", "attribute_value": "<Blank>" } ] } ], "hpa-feature-attributes": [ { "hpa-attribute-key": "pciVendorId", "hpa-attribute-value": "3333", "operator": "=", "unit": "" }, { "hpa-attribute-key": "pciDeviceId", "hpa-attribute-value": "7777", "operator": "=", "unit": "" }, { "hpa-attribute-key": "pciCount", "hpa-attribute-value": "1", "operator": ">=", "unit": "" } ] } ] } ] } } |
...
The data in AAI still follows the routine schema designed in HPA Policies and Mappings. The only part has been changed is inside pciePassthroughsriovNICNetwork. We added one 'directive' attributes to contain the 'vnic_type' and 'physicalNetwork' that needed by VF-C.
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
hpa-capability-id="b369fd3d-0b15-44e1-81b2-6210efc6dff9", hpa-feature= "basicCapabilities", architecture= "generic", version= "v1", hpa-attribute-key hpa-attribute-value numVirtualCpu {value:6} virtualMemSize {value:6, unit:"GB"} hpa-capability-id="f453fd3d-0b15-11w4-81b2-6210efc6dff9", hpa-feature= "pciePassthroughsriovNICNetwork", architecture= "intel64", version= "v1", hpa-attribute-key hpa-attribute-value pciCount {value: 1} pciVendorId {value: "8086"} pciDeviceId {value: "0443"} directive {value: "[{"attribute_name"="vnic_type", "attribute_value"="direct"}, {"attribute_name"="physical_network", "attribute_value"="physnet1"}]"} hpa-capability-id="f453fd3d-0b15-11w4-81b2-873hf8oo98s0", hpa-feature= "pciePassthroughsriovNICNetwork", architecture= "intel64", version= "v1", hpa-attribute-key hpa-attribute-value pciCount {value: 1} pciVendorId {value: "6808"} pciDeviceId {value: "3440"} directive {value: "[{"attribute_name"="vnic_type", "attribute_value"="direct"}, {"attribute_name"="physical_network", "attribute_value"="physnet2"}]"} |
...
|
OOF process homing allocation and return homing placement to VF-C
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
{ "requestId": "xxxx", "transactionId": " xxxx ", "statusMessage": " xxxx ", "requestStatus": "completed", "solutions": { "placementSolutions": [ [ { "resourceModuleName": " vG ", "serviceResourceId": " xxxx ", "solution": { "identifierType": "serviceInstanceId", "identifiers": [ " xxxx " ], "cloudOwner": " xxxx " }, "assignmentInfo": [ { "key":"isRehome", "value":"false" }, { "key":"locationId", "value":"DLLSTX1A" }, { "key":"locationType", "value":"openstack-cloud" }, { "key":"vimId", "value":"rackspace_DLLSTX1A" }, { "key":"physicalLocationId", "value":"DLLSTX1223" }, { "key":"oofDirectives", "value": { "directives":[ { "id":"<vdu.name>", "type":"vnfc", "directives":[ { "type":"flavor_directive", "attributes":[ { "attribute_name":"flavor_name", //just a string 'flavor_name' "attribute_value":"<flavor_name>" #VIM Flavor, which oof seleted. } ] }, { "type": "pciePassthroughsriovNICNetwork_directive", "attributes":[ {"attribute_name":"vnic_type", "attribute_value":"direct"}, {"attribute_name":"provider_network", "attribute_value":"physnet1"} ] }, { "type": "pciePassthroughsriovNICNetwork_directive", "attributes": [ {"attribute_name":"vnic_type", "attribute_value":"direct"}, {"attribute_name":"provider_network", "attribute_value":"physnet2"} ] } ] } ] } } ] } ] ], "licenseSoutions": [ { "resourceModuleName": "string", "serviceResourceId": "string", "entitlementPoolUUID": [ "string" ], "licenseKeyGroupUUID": [ "string" ], "entitlementPoolInvariantUUID": [ "string" ], "licenseKeyGroupInvariantUUID": [ "string" ] } ] } } |
...
As part of discovery, it populates the A&AI with two PCIe features for Flavor1.
hpa-feature=”pciePassthrough””sriovNICNetwork”,
architecture=”{hw_arch}",
...
Hpa-attribute-key | Hpa-attribute-value |
pciVendorId | 8086 |
pciDeviceId | 0443 |
pciCount | 1 |
directive | [ {"attribute_name": "vnic-type", "attribute_value": "direct"}, {"attribute_name": "physical-network", "attribute_value": "physnet1"}, ] |
hpa-feature=”pciePassthrough”,
architecture=”{hpa-feature=”sriovNICNetwork”,
architecture=”{hw_arch}",
version=”v1”,
Hpa-attribute-key | Hpa-attribute-value | ||
pciVendorId | 6808 | ||
pciDeviceId | 3440 | ||
pciCount | 1 | directive | [ {"attribute_name": "vnic-type", "attribute_value": "direct"}, {"attribute_name": "physical-network", "attribute_value": "physnet2"}, ] |
Multi-cloud API
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
Create Network Request { "tenant": "tenant1", "networkName": "ommnet", "shared": 1, "vlanTransparent": 1, "networkType": "vlan", "segmentationId": 202, "physicalNetwork": "ctrl", "routerExternal": 0 } Response { "returnCode": 0, "vimId": "11111", "vimName": "11111", "status": "ACTIVE", "id": "3c9eebdbbfd345658269340b9ea6fb73d32019d3-bc6e-4319-9c1d-6722fc136a22", "name": "net1", "tenant": "tenant1", "networkName": "ommnet", "shared": 1, "vlanTransparent": 1, "networkType": "vlan", "segmentationId": 202, "physicalNetwork": "physnet1", "routerExternal": 0 } |
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
Create Subnets Request { "tenant": "tenant1", "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22", "subnetName": "subnet1", "cidr": "10.43.35.0/24", "ipVersion": 4, "enableDhcp": 1, "gatewayIp": "10.43.35.1", "dnsNameservers": [], "allocationPools": [{ "start": "192.168.199.2", "end": "192.168.199.254" }], "hostRoutes": [] } Response { "returnCode": 0, "vimId": "11111", "vimName": "11111", "status": " ACTIVE", "id": " d62019d3-bc6e-4319-9c1d-6722fc136a23", "tenant": "tenant1", "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22", "name": "subnet1", "cidr": "10.43.35.0/24", "ipVersion": 4, "enableDhcp": 1, "gatewayIp": "10.43.35.1", "dnsNameservers": [], "allocationPools": [{ "start": "192.168.199.2", "end": "192.168.199.254" }], "hostRoutes": [] } |
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
| ||||||||
Create Virtual Port Request +------------------------+-----------------+-------------------+---------------+-------------------------------------------------------+ | **Parameter** { "networkId": "d32019d3-bc6e-4319-9c1d-6722fc136a22", "subnetId": "c17afb1c-ab84-11e8-bfaa-77f95f421148", "name": "port1", "macAddress": "d4:5d:df:09:9e:19", "ip": | **Qualifier**"192.168.199.3", "vnicType": "direct" | **Cardinality**} Response | **Content** | **Description**{ "returnCode": 1, "vimId": "11111", "vimName": "11111", | +========================+=================+===================+===============+=======================================================+ | networkId"cloud-owner": "cloudowner", "cloud-region-id": "cloudregion", "status": "success", | M "id": "393905cc-ab85-11e8-bb60-1f10d99adcef", "name": "port_a", | 1 "tenantId": "55ab62ae-ab85-11e8-ba44-03ef3e9bc9d6", | string"networkName": "ommnet", | Network UUID"networkId": "d32019d3-bc6e-4319-9c1d-6722fc136a22", "subnetName": "subnet1", "subnetId": "c17afb1c-ab84-11e8-bfaa-77f95f421148", "macAddress": "d4:5d:df:09:9e:19", "ip": "192.168.199.3", | +------------------------+-----------------+-------------------+---------------+-------------------------------------------------------+ | subnetId "vnicType": "direct", } |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
Create Server Request { | O "tenant": "tenant1", | 1 "name": "vm1", "availabilityZone": "az1", | string"flavorName": "vm_large", | Subnet UUID"boot": { "type": 1, " volumeName": "volume1" }, "flavorId": "vm_large_134213", | +------------------------+-----------------+-------------------+---------------+-------------------------------------------------------+ | name "contextArray": [{ | M "fileName": "test.yaml", "fileData": "…." }], | 1"volumeArray": [{ "volumeName": "vol1", | string }], | Port name"nicArray": [{ "portId": "port_a" }], "metada": [{ | +------------------------+-----------------+-------------------+---------------+-------------------------------------------------------+ | macAddress"keyName": "foo", "value": "foo |value" O }], | 1 "userdata": "abcdedf" } Response { | string "vimId": "11111", | Mac address "vimName": "11111", "cloud-owner": "cloudowner", "cloud-region-id": "cloudregion", "returnCode": "success", | +------------------------+-----------------+-------------------+---------------+-------------------------------------------------------+ | ip"id": "1234-23545", "name": "vm1", "tenantId": "tenant1", "boot": { | O"type": 1, " | 1volumeName": "volume1" }, | string"volumeArray": [{ | Ip address | +------------------------+-----------------+-------------------+---------------+-------------------------------------------------------+ | vnicType | O | 1 | string | Virtual network card type, | | | | | | | | | | | | the value of three kinds of normal/direct/macvtap | +------------------------+-----------------+-------------------+---------------+-------------------------------------------------------+ | \ **securityGroups** | **O** | **1** | **string** | **The IDs of security groups applied to the port.** | +------------------------+-----------------+-------------------+---------------+-------------------------------------------------------+ Response +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | **Parameter** | **Qualifier** | **Cardinality** | **Content** | **Description** | +======================+=================+===================+===============+=====================================================+ | returnCode | M | 1 | int | 0: Already exist 1: Newly created | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | vimId | M | 1 | String | vim id | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | vimName | O | 1 | string | vim name | +-------------------+-----------------+-------------------+---------------------------+--------------------------------------------+ | cloud-owner | M | 1 | String | cloud owner | +-------------------+-----------------+-------------------+---------------------------+--------------------------------------------+ | cloud-region-id | M | 1 | string | cloud region id | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | status | M | 1 | string | status | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | id | M | 1 | string | Port Id | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | name | M | 1 | string | Port name | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | tenantId | M | 1 | String | Tenant UUID | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | networkName | M | 1 | string | Network name | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | networkId | M | 1 | string | Network Id | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | subnetName | M | 1 | string | Subnet name | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | subnetId | M | 1 | string | SubnetId | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | macAddress | O | 1 | string | Mac address | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | ip | O | 1 | string | Ip address | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | vnicType | O | 1 | string | Virtual network card type, | | | | | | | | | | | | the value of three kinds of normal/direct/macvtap | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ | **securityGroups** | **O** | **1** | **string** | **List of security group names.** | +----------------------+-----------------+-------------------+---------------+-----------------------------------------------------+ Create Server Request { "tenant": "tenant1", "name": "vm1", "availabilityZone": "az1", "flavorName": "vm_large", "boot": { "type": 1, " volumeName": "volume1" }, "flavorId": "vm_large_134213", "contextArray": [{ "fileName": "test.yaml", "fileData": "…." }], "volumeArray": [{ "volumeName": "vol1", }], "nicArray": [{ "portId": "port_a" }], "metada": [{ "keyName": "foo", "value": "foo value" }], "userdata": "abcdedf" } Response +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **Parameter** | **Qualifier** | **Cardinality** | **Content** | **Description** | +======================+=================+===================+======================================+========================================================================================================================================================================================+ | vimId | M | 1 | String | vim id | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | vimName | O | 1 | string | vim name | +-------------------+-----------------+-------------------+---------------------------+--------------------------------------------------------+ | cloud-owner | M | 1 | String | cloud owner | +-------------------+-----------------+-------------------+---------------------------+--------------------------------------------------------+ | cloud-region-id | M | 1 | string | cloud region id | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | returnCode | | 1 | int | 0: Already exist 1: Newly created | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | id | M | 1 | string | server id | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | name | | 1 | string | server name | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tenantId | M | 1 | String | Tenant UUID | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | boot | M | 1 | String | Start parameters | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | nicArray | O | 1..n | List of nic | List of nic | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | volumeArray | O | 1..n | list of volume | list of volume | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | availabilityZone | O | 1 | string | Usable field | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | flavorId | M | 1 | String | server Flavor | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | metadata | O | 1 | List of metadata | Metadata key and value pairs. The maximum size of the metadata key and value is 255 bytes each. | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **securityGroups** | **O** | **1** | **List of name of security group** | **One or more security groups. Specify the name of the security group in the name attribute. If you omit this attribute, the API creates the server in the default security group.** | | | | | | | | | | | | **[TBD]** | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **serverGroup** | **O** | **1** | **string** | the ServerGroup for anti-affinity and affinity | | | | | | | | | | | | [TBD] | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **status** | **M** | **1** | **string** | Server status, 0:INACTIVE,1:ACTIVE,2:ERROR | +----------------------+-----------------+-------------------+--------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 202: accepted 500: failed :: { "id": "3c9eebdbbfd345658269340b9ea6fb73", "name": "vm1", "returnCode": 1, "volumeName": "vol1", }], "nicArray": [{ "portId": "port_a" }], "availabilityZone": "zone1", "flavorId": "tenant1", "metada": [{ "keyName": "foo", "value": "foo value" }], } |
HPA VF-C Casablanca Stories
...