diff --git a/api/aether-2.1.0-openapi3.yaml b/api/aether-2.1.0-openapi3.yaml index 3dcde6f..e93fb74 100644 --- a/api/aether-2.1.0-openapi3.yaml +++ b/api/aether-2.1.0-openapi3.yaml @@ -49,6 +49,11 @@ components: application/json: schema: $ref: '#/components/schemas/Site_Connectivity-service_Core-5g' + RequestBody_Site_Connectivity-service_Ran-5g-service: + content: + application/json: + schema: + $ref: '#/components/schemas/Site_Connectivity-service_Ran-5g-service' RequestBody_Site_Device: content: application/json: @@ -124,6 +129,21 @@ components: application/json: schema: $ref: '#/components/schemas/Site_Slice_Priority-traffic-rule' + RequestBody_Site_Slice_Priority-traffic-rule_Gbr: + content: + application/json: + schema: + $ref: '#/components/schemas/Site_Slice_Priority-traffic-rule_Gbr' + RequestBody_Site_Slice_Priority-traffic-rule_Mbr: + content: + application/json: + schema: + $ref: '#/components/schemas/Site_Slice_Priority-traffic-rule_Mbr' + RequestBody_Site_Slice_Xapp: + content: + application/json: + schema: + $ref: '#/components/schemas/Site_Slice_Xapp' RequestBody_Site_Small-cell: content: application/json: @@ -185,7 +205,7 @@ components: type: object Application: additionalProperties: - $ref: '#/components/schemas/AdditionalPropertiesUnchTarget' + $ref: '#/components/schemas/AdditionalPropertyUnchanged' description: List of applications (single) properties: address: @@ -201,12 +221,14 @@ components: title: application-id type: string x-go-type: ListKey + x-yang-type: application-id description: description: long description field maxLength: 1024 minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -232,6 +254,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -246,6 +269,7 @@ components: title: endpoint-id type: string x-go-type: ListKey + x-yang-type: aether-identifier mbr: $ref: '#/components/schemas/Application_Endpoint_Mbr' port-end: @@ -268,6 +292,7 @@ components: pattern: TCP|UDP title: protocol type: string + x-yang-type: protocol traffic-class: description: Link to traffic class title: traffic-class @@ -288,6 +313,7 @@ components: description: list for endpoint (list) items: $ref: '#/components/schemas/Application_Endpoint' + title: Application_Endpoint_List type: array uniqueItems: true x-keys: @@ -314,6 +340,7 @@ components: description: List of applications (list) items: $ref: '#/components/schemas/Application' + title: Application_List type: array uniqueItems: true x-keys: @@ -350,6 +377,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description device: $ref: '#/components/schemas/Site_Device_List' device-group: @@ -376,6 +404,7 @@ components: title: site-id type: string x-go-type: ListKey + x-yang-type: site-id slice: $ref: '#/components/schemas/Site_Slice_List' small-cell: @@ -399,6 +428,8 @@ components: $ref: '#/components/schemas/Site_Connectivity-service_Core-4g' core-5g: $ref: '#/components/schemas/Site_Connectivity-service_Core-5g' + ran-5g-service: + $ref: '#/components/schemas/Site_Connectivity-service_Ran-5g-service' title: Site_Connectivity-service type: object Site_Connectivity-service_Core-4g: @@ -408,10 +439,12 @@ components: description: URL of ACC prometheus title: acc-prometheus-url type: string + x-yang-type: uri endpoint: description: Endpoint URL title: endpoint type: string + x-yang-type: uri title: Site_Connectivity-service_Core-4g type: object Site_Connectivity-service_Core-5g: @@ -421,12 +454,24 @@ components: description: URL of ACC prometheus title: acc-prometheus-url type: string + x-yang-type: uri endpoint: description: Endpoint URL title: endpoint type: string + x-yang-type: uri title: Site_Connectivity-service_Core-5g type: object + Site_Connectivity-service_Ran-5g-service: + description: Connectivity to the xApp + properties: + xapp-endpoint: + description: xApp Endpoint URL + title: xapp-endpoint + type: string + x-yang-type: uri + title: Site_Connectivity-service_Ran-5g-service + type: object Site_Device: description: List of devices (single) properties: @@ -436,6 +481,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description device-id: description: ID for this device. maxLength: 63 @@ -444,6 +490,7 @@ components: title: device-id type: string x-go-type: ListKey + x-yang-type: device-id display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -457,6 +504,7 @@ components: pattern: '[0-9]{14,16}' title: imei type: string + x-yang-type: imei sim-card: description: Link to simcard title: sim-card @@ -482,6 +530,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description device: $ref: '#/components/schemas/Site_Device-group_Device_List' device-group-id: @@ -492,6 +541,7 @@ components: title: device-group-id type: string x-go-type: ListKey + x-yang-type: device-group-id display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -544,6 +594,7 @@ components: description: list of devices in this device-group (list) items: $ref: '#/components/schemas/Site_Device-group_Device' + title: Site_Device-group_Device_List type: array uniqueItems: true x-keys: @@ -553,6 +604,7 @@ components: description: List of device groups (list) items: $ref: '#/components/schemas/Site_Device-group' + title: Site_Device-group_List type: array uniqueItems: true x-keys: @@ -584,6 +636,7 @@ components: description: List of devices (list) items: $ref: '#/components/schemas/Site_Device' + title: Site_Device_List type: array uniqueItems: true x-keys: @@ -635,11 +688,13 @@ components: pattern: '[0-9]{3}' title: mcc type: string + x-yang-type: mcc mnc: description: mobile network code pattern: '[0-9]{2,3}' title: mnc type: string + x-yang-type: mnc required: - enterprise - format @@ -659,12 +714,14 @@ components: pattern: ENABLE|MAINTENANCE|DISABLE title: admin-status type: string + x-yang-type: admin-status description: description: long description field maxLength: 1024 minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -677,6 +734,7 @@ components: minLength: 1 title: dnn type: string + x-yang-type: dnn dns-primary: description: primary dns server name title: dns-primary @@ -693,6 +751,7 @@ components: title: ip-domain-id type: string x-go-type: ListKey + x-yang-type: ip-domain-id mtu: default: 1492 description: maximum transmission unit @@ -705,6 +764,7 @@ components: pattern: (([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2])) title: subnet type: string + x-yang-type: ipv4-prefix required: - dnn - ip-domain-id @@ -716,6 +776,7 @@ components: description: List of ip domains (list) items: $ref: '#/components/schemas/Site_Ip-domain' + title: Site_Ip-domain_List type: array uniqueItems: true x-keys: @@ -725,6 +786,7 @@ components: description: List of site (list) items: $ref: '#/components/schemas/Site' + title: Site_List type: array uniqueItems: true x-keys: @@ -737,12 +799,14 @@ components: description: URL of edge cluster prometheus title: edge-cluster-prometheus-url type: string + x-yang-type: uri edge-device: $ref: '#/components/schemas/Site_Monitoring_Edge-device_List' edge-monitoring-prometheus-url: description: URL of monitoring prometheus title: edge-monitoring-prometheus-url type: string + x-yang-type: uri title: Site_Monitoring type: object Site_Monitoring_Edge-device: @@ -754,6 +818,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -768,6 +833,7 @@ components: title: edge-device-id type: string x-go-type: ListKey + x-yang-type: aether-identifier required: - edge-device-id title: Site_Monitoring_Edge-device @@ -777,6 +843,7 @@ components: description: List of edge monitoring devices (list) items: $ref: '#/components/schemas/Site_Monitoring_Edge-device' + title: Site_Monitoring_Edge-device_List type: array uniqueItems: true x-keys: @@ -791,6 +858,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -810,6 +878,7 @@ components: pattern: '[0-9]{18,21}[0-9A-F]' title: iccid type: string + x-yang-type: iccid imsi: description: IMSI for this sim card maxLength: 15 @@ -817,6 +886,7 @@ components: pattern: '[0-9]{14,15}' title: imsi type: string + x-yang-type: imsi sim-id: description: ID for this sim card. maxLength: 63 @@ -825,6 +895,7 @@ components: title: sim-id type: string x-go-type: ListKey + x-yang-type: sim-card-id required: - sim-id title: Site_Sim-card @@ -835,6 +906,7 @@ components: description: List of sim cards (list) items: $ref: '#/components/schemas/Site_Sim-card' + title: Site_Sim-card_List type: array uniqueItems: true x-keys: @@ -858,12 +930,14 @@ components: pattern: DENY-ALL|ALLOW-ALL|ALLOW-PUBLIC title: default-behavior type: string + x-yang-type: behavior description: description: long description field maxLength: 1024 minLength: 1 title: description type: string + x-yang-type: description device-group: $ref: '#/components/schemas/Site_Slice_Device-group_List' display-name: @@ -885,6 +959,7 @@ components: pattern: '[0-9A-F\.]{1,6}' title: sd type: string + x-yang-type: sd slice-id: description: ID for this slice. maxLength: 63 @@ -893,6 +968,7 @@ components: title: slice-id type: string x-go-type: ListKey + x-yang-type: slice-id sst: description: Slice/Service type. Immutable. maxLength: 2 @@ -900,12 +976,15 @@ components: pattern: '[0-9A-F\.]{1,2}' title: sst type: string + x-yang-type: sst upf: description: Link to user plane that implements this vcf title: upf type: string x-leafref: ../../upf/upf-id x-leafref-resolver: /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/upf/values + xapp: + $ref: '#/components/schemas/Site_Slice_Xapp' required: - default-behavior - sd @@ -942,6 +1021,7 @@ components: the Slice if the enable field is set to True (list) items: $ref: '#/components/schemas/Site_Slice_Device-group' + title: Site_Slice_Device-group_List type: array uniqueItems: true x-keys: @@ -983,6 +1063,7 @@ components: of the packet. (list) items: $ref: '#/components/schemas/Site_Slice_Filter' + title: Site_Slice_Filter_List type: array uniqueItems: true x-keys: @@ -992,6 +1073,7 @@ components: description: List of Slices (list) items: $ref: '#/components/schemas/Site_Slice' + title: Site_Slice_List type: array uniqueItems: true x-keys: @@ -1045,6 +1127,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description device: description: Link to device title: device @@ -1075,6 +1158,7 @@ components: title: priority-traffic-rule-id type: string x-go-type: ListKey + x-yang-type: priority-traffic-rule-id traffic-class: description: Link to traffic class title: traffic-class @@ -1091,7 +1175,7 @@ components: x-list-multiple: true x-must: [] Site_Slice_Priority-traffic-rule_Gbr: - description: For choice bitrate:gbr-case + description: Per-Device per-Application GBR (Guaranteed BitRate) in bps properties: downlink: description: Per-Device per application downlink data rate in bps @@ -1111,13 +1195,14 @@ components: description: List of priority traffic rules (list) items: $ref: '#/components/schemas/Site_Slice_Priority-traffic-rule' + title: Site_Slice_Priority-traffic-rule_List type: array uniqueItems: true x-keys: - priority-traffic-rule-id x-list-multiple: true Site_Slice_Priority-traffic-rule_Mbr: - description: For choice bitrate:mbr-case + description: Per-Device per-Application MBR (Maximum BitRate) in bps properties: downlink: description: Per-Device per application downlink data rate in bps @@ -1133,6 +1218,29 @@ components: type: integer title: Site_Slice_Priority-traffic-rule_Mbr type: object + Site_Slice_Xapp: + description: Params related to xApp + properties: + rrm-dedicated: + description: rRMPolicyDedicatedRatio + maximum: 100 + minimum: 0 + title: rrm-dedicated + type: integer + rrm-max: + description: rRMPolicyMaxRatio + maximum: 100 + minimum: 0 + title: rrm-max + type: integer + rrm-min: + description: rRMPolicyMinRatio + maximum: 100 + minimum: 0 + title: rrm-min + type: integer + title: Site_Slice_Xapp + type: object Site_Small-cell: additionalProperties: $ref: '#/components/schemas/AdditionalPropertyUnchanged' @@ -1148,6 +1256,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -1167,6 +1276,7 @@ components: title: small-cell-id type: string x-go-type: ListKey + x-yang-type: aether-identifier tac: description: Type Allocation Code maxLength: 6 @@ -1174,6 +1284,7 @@ components: pattern: '[0-9A-F\.]{1,6}' title: tac type: string + x-yang-type: tac required: - small-cell-id - tac @@ -1184,6 +1295,7 @@ components: description: List of small cell addresses (list) items: $ref: '#/components/schemas/Site_Small-cell' + title: Site_Small-cell_List type: array uniqueItems: true x-keys: @@ -1202,12 +1314,14 @@ components: description: url for configuring the UPF title: config-endpoint type: string + x-yang-type: uri description: description: long description field maxLength: 1024 minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -1228,6 +1342,7 @@ components: title: upf-id type: string x-go-type: ListKey + x-yang-type: upf-id required: - address - port @@ -1239,6 +1354,7 @@ components: description: A list of named upfs. (list) items: $ref: '#/components/schemas/Site_Upf' + title: Site_Upf_List type: array uniqueItems: true x-keys: @@ -1246,7 +1362,7 @@ components: x-list-multiple: true Template: additionalProperties: - $ref: '#/components/schemas/AdditionalPropertiesUnchTarget' + $ref: '#/components/schemas/AdditionalPropertyUnchanged' description: List of slice templates (single) properties: default-behavior: @@ -1255,12 +1371,14 @@ components: pattern: DENY-ALL|ALLOW-ALL|ALLOW-PUBLIC title: default-behavior type: string + x-yang-type: behavior description: description: long description field maxLength: 1024 minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -1276,6 +1394,7 @@ components: pattern: '[0-9A-F\.]{1,6}' title: sd type: string + x-yang-type: sd sst: description: Slice/Service type maxLength: 2 @@ -1283,6 +1402,7 @@ components: pattern: '[0-9A-F\.]{1,2}' title: sst type: string + x-yang-type: sst template-id: description: ID for this slice template. maxLength: 63 @@ -1291,6 +1411,7 @@ components: title: template-id type: string x-go-type: ListKey + x-yang-type: template-id required: - default-behavior - template-id @@ -1301,6 +1422,7 @@ components: description: List of slice templates (list) items: $ref: '#/components/schemas/Template' + title: Template_List type: array uniqueItems: true x-keys: @@ -1355,6 +1477,7 @@ components: minLength: 1 title: description type: string + x-yang-type: description display-name: description: display name to use in GUI or CLI maxLength: 80 @@ -1387,6 +1510,7 @@ components: title: traffic-class-id type: string x-go-type: ListKey + x-yang-type: traffic-class-id required: - traffic-class-id title: Traffic-class @@ -1396,6 +1520,7 @@ components: description: List of traffic class (list) items: $ref: '#/components/schemas/Traffic-class' + title: Traffic-class_List type: array uniqueItems: true x-keys: @@ -1814,6 +1939,48 @@ paths: summary: POST /site/{site-id}/connectivity-service/core-5g tags: - Site_Connectivity-service + /aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service: + delete: + operationId: deleteSite_Connectivity-service_Ran-5g-service + responses: + "200": + description: DELETE 200 OK + summary: DELETE /site/{site-id}/connectivity-service/ran-5g-service + tags: + - Site_Connectivity-service + description: Connectivity to the xApp + get: + operationId: getSite_Connectivity-service_Ran-5g-service + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/Site_Connectivity-service_Ran-5g-service' + description: GET OK 200 + summary: GET /site/{site-id}/connectivity-service/ran-5g-service Container + tags: + - Site_Connectivity-service + parameters: + - $ref: '#/components/parameters/enterprise-id' + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {site-id} + in: path + name: site-id + required: true + post: + operationId: postSite_Connectivity-service_Ran-5g-service + requestBody: + $ref: '#/components/requestBodies/RequestBody_Site_Connectivity-service_Ran-5g-service' + responses: + "201": + description: created + summary: POST /site/{site-id}/connectivity-service/ran-5g-service + tags: + - Site_Connectivity-service /aether/v2.1.x/{enterprise-id}/site/{site-id}/device: description: List of devices get: @@ -3190,6 +3357,124 @@ paths: in: path name: priority-traffic-rule-id required: true + /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr: + delete: + operationId: deleteSite_Slice_Priority-traffic-rule_Gbr + responses: + "200": + description: DELETE 200 OK + summary: DELETE /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr + tags: + - Site_Slice_Priority-traffic-rule + description: Per-Device per-Application GBR (Guaranteed BitRate) in bps + get: + operationId: getSite_Slice_Priority-traffic-rule_Gbr + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/Site_Slice_Priority-traffic-rule_Gbr' + description: GET OK 200 + summary: GET /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr + Container + tags: + - Site_Slice_Priority-traffic-rule + parameters: + - $ref: '#/components/parameters/enterprise-id' + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {site-id} + in: path + name: site-id + required: true + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {slice-id} + in: path + name: slice-id + required: true + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {priority-traffic-rule-id} + in: path + name: priority-traffic-rule-id + required: true + post: + operationId: postSite_Slice_Priority-traffic-rule_Gbr + requestBody: + $ref: '#/components/requestBodies/RequestBody_Site_Slice_Priority-traffic-rule_Gbr' + responses: + "201": + description: created + summary: POST /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr + tags: + - Site_Slice_Priority-traffic-rule + /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr: + delete: + operationId: deleteSite_Slice_Priority-traffic-rule_Mbr + responses: + "200": + description: DELETE 200 OK + summary: DELETE /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr + tags: + - Site_Slice_Priority-traffic-rule + description: Per-Device per-Application MBR (Maximum BitRate) in bps + get: + operationId: getSite_Slice_Priority-traffic-rule_Mbr + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/Site_Slice_Priority-traffic-rule_Mbr' + description: GET OK 200 + summary: GET /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr + Container + tags: + - Site_Slice_Priority-traffic-rule + parameters: + - $ref: '#/components/parameters/enterprise-id' + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {site-id} + in: path + name: site-id + required: true + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {slice-id} + in: path + name: slice-id + required: true + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {priority-traffic-rule-id} + in: path + name: priority-traffic-rule-id + required: true + post: + operationId: postSite_Slice_Priority-traffic-rule_Mbr + requestBody: + $ref: '#/components/requestBodies/RequestBody_Site_Slice_Priority-traffic-rule_Mbr' + responses: + "201": + description: created + summary: POST /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr + tags: + - Site_Slice_Priority-traffic-rule ? /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/traffic-class/values : description: Link to traffic class get: @@ -3263,6 +3548,56 @@ paths: in: path name: slice-id required: true + /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp: + delete: + operationId: deleteSite_Slice_Xapp + responses: + "200": + description: DELETE 200 OK + summary: DELETE /site/{site-id}/slice/{slice-id}/xapp + tags: + - Site_Slice + description: Params related to xApp + get: + operationId: getSite_Slice_Xapp + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/Site_Slice_Xapp' + description: GET OK 200 + summary: GET /site/{site-id}/slice/{slice-id}/xapp Container + tags: + - Site_Slice + parameters: + - $ref: '#/components/parameters/enterprise-id' + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {site-id} + in: path + name: site-id + required: true + - content: + text/plain; charset=utf-8: + schema: + type: string + description: key {slice-id} + in: path + name: slice-id + required: true + post: + operationId: postSite_Slice_Xapp + requestBody: + $ref: '#/components/requestBodies/RequestBody_Site_Slice_Xapp' + responses: + "201": + description: created + summary: POST /site/{site-id}/slice/{slice-id}/xapp + tags: + - Site_Slice /aether/v2.1.x/{enterprise-id}/site/{site-id}/small-cell: description: List of small cell addresses get: diff --git a/pkg/aether_2_1_0/server/aether-2.1.0-convert-gnmi-oapi.go b/pkg/aether_2_1_0/server/aether-2.1.0-convert-gnmi-oapi.go index 57b1ea9..85008b9 100644 --- a/pkg/aether_2_1_0/server/aether-2.1.0-convert-gnmi-oapi.go +++ b/pkg/aether_2_1_0/server/aether-2.1.0-convert-gnmi-oapi.go @@ -29,48 +29,6 @@ type ModelPluginDevice struct { device externalRef0.Device } -// ToAdditionalPropertiesUnchTarget converts gNMI to OAPI from the top level device. -func (d *ModelPluginDevice) ToAdditionalPropertiesUnchTarget(params ...string) (*types.AdditionalPropertiesUnchTarget, error) { - resource := new(types.AdditionalPropertiesUnchTarget) - - reflectAdditionalPropertiesUnchTarget, err := utils.FindModelPluginObject(d.device, "AdditionalPropertiesUnchTarget", params...) - if err != nil { - return nil, err - } - resource, err = ToAdditionalPropertiesUnchTarget(reflectAdditionalPropertiesUnchTarget, params...) - return resource, err - -} - -// ToAdditionalPropertiesUnchTarget converts gNMI to OAPI relative to a node in the tree. -func ToAdditionalPropertiesUnchTarget(ygotObjValue *reflect.Value, params ...string) (*types.AdditionalPropertiesUnchTarget, error) { - resource := new(types.AdditionalPropertiesUnchTarget) - - // Property: enterprise-id string - //encoding gNMI attribute to OAPI - reflectEnterpriseId, err := utils.FindModelPluginObject(ygotObjValue.Interface(), "EnterpriseId") - if err != nil { - return nil, err - } - if reflectEnterpriseId != nil { - attrEnterpriseId := fmt.Sprintf("%s", reflectEnterpriseId.Interface()) - resource.EnterpriseId = &attrEnterpriseId - } - - // Property: unchanged string - //encoding gNMI attribute to OAPI - reflectUnchanged, err := utils.FindModelPluginObject(ygotObjValue.Interface(), "Unchanged") - if err != nil { - return nil, err - } - if reflectUnchanged != nil { - attrUnchanged := fmt.Sprintf("%s", reflectUnchanged.Interface()) - resource.Unchanged = &attrUnchanged - } - - return resource, nil -} - // ToAdditionalPropertyEnterpriseId converts gNMI to OAPI from the top level device. func (d *ModelPluginDevice) ToAdditionalPropertyEnterpriseId(params ...string) (*types.AdditionalPropertyEnterpriseId, error) { resource := new(types.AdditionalPropertyEnterpriseId) @@ -690,6 +648,20 @@ func ToSiteConnectivityService(ygotObjValue *reflect.Value, params ...string) (* resource.Core5g = attrCore5g } + // Property: ran-5g-service SiteConnectivityServiceRan5gService + // Handle object + reflectRan5gService, err := utils.FindModelPluginObject(ygotObjValue.Interface(), "Ran5gService") + if err != nil { + return nil, err + } + if reflectRan5gService != nil { + attrRan5gService, err := ToSiteConnectivityServiceRan5gService(reflectRan5gService, params...) + if err != nil { + return nil, err + } + resource.Ran5gService = attrRan5gService + } + return resource, nil } @@ -777,6 +749,37 @@ func ToSiteConnectivityServiceCore5g(ygotObjValue *reflect.Value, params ...stri return resource, nil } +// ToSiteConnectivityServiceRan5gService converts gNMI to OAPI from the top level device. +func (d *ModelPluginDevice) ToSiteConnectivityServiceRan5gService(params ...string) (*types.SiteConnectivityServiceRan5gService, error) { + resource := new(types.SiteConnectivityServiceRan5gService) + + reflectSiteConnectivityServiceRan5gService, err := utils.FindModelPluginObject(d.device, "SiteConnectivityServiceRan5gService", params...) + if err != nil { + return nil, err + } + resource, err = ToSiteConnectivityServiceRan5gService(reflectSiteConnectivityServiceRan5gService, params...) + return resource, err + +} + +// ToSiteConnectivityServiceRan5gService converts gNMI to OAPI relative to a node in the tree. +func ToSiteConnectivityServiceRan5gService(ygotObjValue *reflect.Value, params ...string) (*types.SiteConnectivityServiceRan5gService, error) { + resource := new(types.SiteConnectivityServiceRan5gService) + + // Property: xapp-endpoint string + //encoding gNMI attribute to OAPI + reflectXappEndpoint, err := utils.FindModelPluginObject(ygotObjValue.Interface(), "XappEndpoint") + if err != nil { + return nil, err + } + if reflectXappEndpoint != nil { + attrXappEndpoint := fmt.Sprintf("%s", reflectXappEndpoint.Interface()) + resource.XappEndpoint = &attrXappEndpoint + } + + return resource, nil +} + // ToSiteDevice converts gNMI to OAPI from the top level device. func (d *ModelPluginDevice) ToSiteDevice(params ...string) (*types.SiteDevice, error) { resource := new(types.SiteDevice) @@ -1923,6 +1926,20 @@ func ToSiteSlice(ygotObjValue *reflect.Value, params ...string) (*types.SiteSlic resource.Upf = &attrUpf } + // Property: xapp SiteSliceXapp + // Handle object + reflectXapp, err := utils.FindModelPluginObject(ygotObjValue.Interface(), "Xapp") + if err != nil { + return nil, err + } + if reflectXapp != nil { + attrXapp, err := ToSiteSliceXapp(reflectXapp, params...) + if err != nil { + return nil, err + } + resource.Xapp = attrXapp + } + return resource, nil } @@ -2484,6 +2501,65 @@ func ToSiteSlicePriorityTrafficRuleMbr(ygotObjValue *reflect.Value, params ...st return resource, nil } +// ToSiteSliceXapp converts gNMI to OAPI from the top level device. +func (d *ModelPluginDevice) ToSiteSliceXapp(params ...string) (*types.SiteSliceXapp, error) { + resource := new(types.SiteSliceXapp) + + reflectSiteSliceXapp, err := utils.FindModelPluginObject(d.device, "SiteSliceXapp", params...) + if err != nil { + return nil, err + } + resource, err = ToSiteSliceXapp(reflectSiteSliceXapp, params...) + return resource, err + +} + +// ToSiteSliceXapp converts gNMI to OAPI relative to a node in the tree. +func ToSiteSliceXapp(ygotObjValue *reflect.Value, params ...string) (*types.SiteSliceXapp, error) { + resource := new(types.SiteSliceXapp) + + // Property: rrm-dedicated int + //encoding gNMI attribute to OAPI + reflectRrmDedicated, err := utils.FindModelPluginObject(ygotObjValue.Interface(), "RrmDedicated") + if err != nil { + return nil, err + } + if reflectRrmDedicated != nil { + //OpenAPI does not have unsigned numbers. + if resource.RrmDedicated, err = utils.ToIntPtr(reflectRrmDedicated); err != nil { + return nil, err + } + } + + // Property: rrm-max int + //encoding gNMI attribute to OAPI + reflectRrmMax, err := utils.FindModelPluginObject(ygotObjValue.Interface(), "RrmMax") + if err != nil { + return nil, err + } + if reflectRrmMax != nil { + //OpenAPI does not have unsigned numbers. + if resource.RrmMax, err = utils.ToIntPtr(reflectRrmMax); err != nil { + return nil, err + } + } + + // Property: rrm-min int + //encoding gNMI attribute to OAPI + reflectRrmMin, err := utils.FindModelPluginObject(ygotObjValue.Interface(), "RrmMin") + if err != nil { + return nil, err + } + if reflectRrmMin != nil { + //OpenAPI does not have unsigned numbers. + if resource.RrmMin, err = utils.ToIntPtr(reflectRrmMin); err != nil { + return nil, err + } + } + + return resource, nil +} + // ToSiteSmallCell converts gNMI to OAPI from the top level device. func (d *ModelPluginDevice) ToSiteSmallCell(params ...string) (*types.SiteSmallCell, error) { resource := new(types.SiteSmallCell) @@ -3114,6 +3190,7 @@ func ToEnterpriseId(ygotObjValue *reflect.Value, params ...string) (*types.Enter //Ignoring RequestBodySiteConnectivityService //Ignoring RequestBodySiteConnectivityServiceCore4g //Ignoring RequestBodySiteConnectivityServiceCore5g +//Ignoring RequestBodySiteConnectivityServiceRan5gService //Ignoring RequestBodySiteDevice //Ignoring RequestBodySiteDeviceGroup //Ignoring RequestBodySiteDeviceGroupDevice @@ -3128,6 +3205,9 @@ func ToEnterpriseId(ygotObjValue *reflect.Value, params ...string) (*types.Enter //Ignoring RequestBodySiteSliceFilter //Ignoring RequestBodySiteSliceMbr //Ignoring RequestBodySiteSlicePriorityTrafficRule +//Ignoring RequestBodySiteSlicePriorityTrafficRuleGbr +//Ignoring RequestBodySiteSlicePriorityTrafficRuleMbr +//Ignoring RequestBodySiteSliceXapp //Ignoring RequestBodySiteSmallCell //Ignoring RequestBodySiteUpf //Ignoring RequestBodyTemplate diff --git a/pkg/aether_2_1_0/server/aether-2.1.0-convert-oapi-gnmi.go b/pkg/aether_2_1_0/server/aether-2.1.0-convert-oapi-gnmi.go index c1bcdda..844b2d2 100644 --- a/pkg/aether_2_1_0/server/aether-2.1.0-convert-oapi-gnmi.go +++ b/pkg/aether_2_1_0/server/aether-2.1.0-convert-oapi-gnmi.go @@ -35,8 +35,6 @@ import ( var re *regexp.Regexp = regexp.MustCompile(`[A-Z][^A-Z]*`) -//Ignoring AdditionalPropertiesUnchTarget - //Ignoring AdditionalPropertyEnterpriseId //Ignoring AdditionalPropertyUnchanged @@ -856,6 +854,17 @@ func EncodeToGnmiSiteConnectivityService( } updates = append(updates, update...) } + // Property: ran-5g-service SiteConnectivityServiceRan5gService + if jsonObj.Ran5gService != nil { // Optional leaf + + update, err := EncodeToGnmiSiteConnectivityServiceRan5gService( + jsonObj.Ran5gService, false, removeIndex, enterpriseId, + fmt.Sprintf("%s/%s", parentPath, "ran-5g-service"), params...) + if err != nil { + return nil, err + } + updates = append(updates, update...) + } if needKey || removeIndex { reflectKey, err := utils.FindModelPluginObject(mp, "SiteConnectivityService", params...) @@ -1103,6 +1112,87 @@ func EncodeToGnmiSiteConnectivityServiceCore5g( return updates, nil } +// EncodeToGnmiSiteConnectivityServiceRan5gService converts OAPI to gNMI. +func EncodeToGnmiSiteConnectivityServiceRan5gService( + jsonObj *types.SiteConnectivityServiceRan5gService, needKey bool, removeIndex bool, enterpriseId types.EnterpriseId, parentPath string, params ...string) ( + []*gnmi.Update, error) { + + unchangedAttrs, tgt := utils.CheckForAdditionalProps(jsonObj) + if tgt != nil { + enterpriseId = types.EnterpriseId(*tgt) + } + _ = len(unchangedAttrs) + + updates := make([]*gnmi.Update, 0) + mp := externalRef0.Device{} + // For when the encode is called on the top level object + if len(params) == 1 && strings.HasSuffix(parentPath, params[0]) { + parentPath = strings.Replace(parentPath, params[0], fmt.Sprintf("{%s}", params[0]), 1) + } + + // Property: xapp-endpoint string + if jsonObj.XappEndpoint != nil { // Optional leaf + + paramsXappEndpoint := make([]string, len(params)) + copy(paramsXappEndpoint, params) + stringValXappEndpoint := fmt.Sprintf("%v", *jsonObj.XappEndpoint) + + paramsXappEndpoint = append(paramsXappEndpoint, stringValXappEndpoint) + mpField, err := utils.CreateModelPluginObject(&mp, "SiteConnectivityServiceRan5gServiceXappEndpoint", paramsXappEndpoint...) + if err != nil { + return nil, err + } + update, err := utils.UpdateForElement(mpField, fmt.Sprintf("%s%s", parentPath, "/xapp-endpoint"), paramsXappEndpoint...) + if err != nil { + return nil, err + } + if enterpriseId != "" { + update.Path.Target = string(enterpriseId) + } + updates = append(updates, update) + + } + + if needKey || removeIndex { + reflectKey, err := utils.FindModelPluginObject(mp, "SiteConnectivityServiceRan5gService", params...) + if err != nil { + return nil, err + } + if reflectKey == nil { + return updates, nil + } + reflectType := reflectKey.Type() + reflect2 := reflect.New(reflectType) // Needed so the type can be read to extract list + reflect2.Elem().Set(*reflectKey) + keyMap, err := utils.ExtractGnmiListKeyMap(reflect2.Interface()) + if err != nil { + return nil, err + } + indices := make([]int, 0) + for k, v := range keyMap { + // parentPath = fmt.Sprintf("%s/{%s}", parentPath, k) + for i, u := range updates { + if needKey { + if err := utils.ReplaceUnknownKey(u, k, v, utils.UnknownKey, keyMap); err != nil { + return nil, err + } + } + if removeIndex { + lastElem := u.Path.Elem[len(u.Path.Elem)-1] + if k == lastElem.Name { + indices = append(indices, i) + } + } + } + } + // Only remove the index field if it's not the only field + if removeIndex && len(indices) > 0 && len(updates) > 1 { + updates = utils.RemoveIndexAttributes(updates, indices) + } + } + return updates, nil +} + // EncodeToGnmiSiteDevice converts OAPI to gNMI. func EncodeToGnmiSiteDevice( jsonObj *types.SiteDevice, needKey bool, removeIndex bool, enterpriseId types.EnterpriseId, parentPath string, params ...string) ( @@ -3067,6 +3157,17 @@ func EncodeToGnmiSiteSlice( updates = append(updates, update) } + // Property: xapp SiteSliceXapp + if jsonObj.Xapp != nil { // Optional leaf + + update, err := EncodeToGnmiSiteSliceXapp( + jsonObj.Xapp, false, removeIndex, enterpriseId, + fmt.Sprintf("%s/%s", parentPath, "xapp"), params...) + if err != nil { + return nil, err + } + updates = append(updates, update...) + } if needKey || removeIndex { reflectKey, err := utils.FindModelPluginObject(mp, "SiteSlice", params...) @@ -4065,6 +4166,131 @@ func EncodeToGnmiSiteSlicePriorityTrafficRuleMbr( return updates, nil } +// EncodeToGnmiSiteSliceXapp converts OAPI to gNMI. +func EncodeToGnmiSiteSliceXapp( + jsonObj *types.SiteSliceXapp, needKey bool, removeIndex bool, enterpriseId types.EnterpriseId, parentPath string, params ...string) ( + []*gnmi.Update, error) { + + unchangedAttrs, tgt := utils.CheckForAdditionalProps(jsonObj) + if tgt != nil { + enterpriseId = types.EnterpriseId(*tgt) + } + _ = len(unchangedAttrs) + + updates := make([]*gnmi.Update, 0) + mp := externalRef0.Device{} + // For when the encode is called on the top level object + if len(params) == 1 && strings.HasSuffix(parentPath, params[0]) { + parentPath = strings.Replace(parentPath, params[0], fmt.Sprintf("{%s}", params[0]), 1) + } + + // Property: rrm-dedicated int + if jsonObj.RrmDedicated != nil { // Optional leaf + + paramsRrmDedicated := make([]string, len(params)) + copy(paramsRrmDedicated, params) + stringValRrmDedicated := fmt.Sprintf("%v", *jsonObj.RrmDedicated) + + paramsRrmDedicated = append(paramsRrmDedicated, stringValRrmDedicated) + mpField, err := utils.CreateModelPluginObject(&mp, "SiteSliceXappRrmDedicated", paramsRrmDedicated...) + if err != nil { + return nil, err + } + update, err := utils.UpdateForElement(mpField, fmt.Sprintf("%s%s", parentPath, "/rrm-dedicated"), paramsRrmDedicated...) + if err != nil { + return nil, err + } + if enterpriseId != "" { + update.Path.Target = string(enterpriseId) + } + updates = append(updates, update) + + } + // Property: rrm-max int + if jsonObj.RrmMax != nil { // Optional leaf + + paramsRrmMax := make([]string, len(params)) + copy(paramsRrmMax, params) + stringValRrmMax := fmt.Sprintf("%v", *jsonObj.RrmMax) + + paramsRrmMax = append(paramsRrmMax, stringValRrmMax) + mpField, err := utils.CreateModelPluginObject(&mp, "SiteSliceXappRrmMax", paramsRrmMax...) + if err != nil { + return nil, err + } + update, err := utils.UpdateForElement(mpField, fmt.Sprintf("%s%s", parentPath, "/rrm-max"), paramsRrmMax...) + if err != nil { + return nil, err + } + if enterpriseId != "" { + update.Path.Target = string(enterpriseId) + } + updates = append(updates, update) + + } + // Property: rrm-min int + if jsonObj.RrmMin != nil { // Optional leaf + + paramsRrmMin := make([]string, len(params)) + copy(paramsRrmMin, params) + stringValRrmMin := fmt.Sprintf("%v", *jsonObj.RrmMin) + + paramsRrmMin = append(paramsRrmMin, stringValRrmMin) + mpField, err := utils.CreateModelPluginObject(&mp, "SiteSliceXappRrmMin", paramsRrmMin...) + if err != nil { + return nil, err + } + update, err := utils.UpdateForElement(mpField, fmt.Sprintf("%s%s", parentPath, "/rrm-min"), paramsRrmMin...) + if err != nil { + return nil, err + } + if enterpriseId != "" { + update.Path.Target = string(enterpriseId) + } + updates = append(updates, update) + + } + + if needKey || removeIndex { + reflectKey, err := utils.FindModelPluginObject(mp, "SiteSliceXapp", params...) + if err != nil { + return nil, err + } + if reflectKey == nil { + return updates, nil + } + reflectType := reflectKey.Type() + reflect2 := reflect.New(reflectType) // Needed so the type can be read to extract list + reflect2.Elem().Set(*reflectKey) + keyMap, err := utils.ExtractGnmiListKeyMap(reflect2.Interface()) + if err != nil { + return nil, err + } + indices := make([]int, 0) + for k, v := range keyMap { + // parentPath = fmt.Sprintf("%s/{%s}", parentPath, k) + for i, u := range updates { + if needKey { + if err := utils.ReplaceUnknownKey(u, k, v, utils.UnknownKey, keyMap); err != nil { + return nil, err + } + } + if removeIndex { + lastElem := u.Path.Elem[len(u.Path.Elem)-1] + if k == lastElem.Name { + indices = append(indices, i) + } + } + } + } + // Only remove the index field if it's not the only field + if removeIndex && len(indices) > 0 && len(updates) > 1 { + updates = utils.RemoveIndexAttributes(updates, indices) + } + } + return updates, nil +} + // EncodeToGnmiSiteSmallCell converts OAPI to gNMI. func EncodeToGnmiSiteSmallCell( jsonObj *types.SiteSmallCell, needKey bool, removeIndex bool, enterpriseId types.EnterpriseId, parentPath string, params ...string) ( @@ -5166,6 +5392,8 @@ func EncodeToGnmiEnterpriseId( //Ignoring RequestBodySiteConnectivityServiceCore5g +//Ignoring RequestBodySiteConnectivityServiceRan5gService + //Ignoring RequestBodySiteDevice //Ignoring RequestBodySiteDeviceGroup @@ -5194,6 +5422,12 @@ func EncodeToGnmiEnterpriseId( //Ignoring RequestBodySiteSlicePriorityTrafficRule +//Ignoring RequestBodySiteSlicePriorityTrafficRuleGbr + +//Ignoring RequestBodySiteSlicePriorityTrafficRuleMbr + +//Ignoring RequestBodySiteSliceXapp + //Ignoring RequestBodySiteSmallCell //Ignoring RequestBodySiteUpf diff --git a/pkg/aether_2_1_0/server/aether-2.1.0-impl.go b/pkg/aether_2_1_0/server/aether-2.1.0-impl.go index 0ecdbeb..6249fca 100644 --- a/pkg/aether_2_1_0/server/aether-2.1.0-impl.go +++ b/pkg/aether_2_1_0/server/aether-2.1.0-impl.go @@ -42,8 +42,6 @@ const ( // // SPDX-License-Identifier: Apache-2.0 -//Ignoring AdditionalPropertiesUnchTarget - //Ignoring AdditionalPropertyEnterpriseId //Ignoring AdditionalPropertyUnchanged @@ -781,6 +779,87 @@ func (i *ServerImpl) GnmiPostSiteConnectivityServiceCore5g(ctx context.Context, return utils.ExtractResponseID(gnmiSetResponse) } +// GnmiDeleteSiteConnectivityServiceRan5gService deletes an instance of Site_Connectivity-service_Ran-5g-service. +func (i *ServerImpl) GnmiDeleteSiteConnectivityServiceRan5gService(ctx context.Context, + openApiPath string, enterpriseId externalRef1.EnterpriseId, args ...string) (*string, error) { + + // check to see if the item exists before deleting it + response, err := i.GnmiGetSiteConnectivityServiceRan5gService(ctx, openApiPath, enterpriseId, args...) + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + log.Infof("Item at path %s with args %v not found", openApiPath, args) + return nil, echo.NewHTTPError(http.StatusNotFound, fmt.Sprintf("item at path %s with args %v does not exists", openApiPath, args)) + } + + gnmiSet, err := utils.NewGnmiSetDeleteRequest(openApiPath, string(enterpriseId), args...) + if err != nil { + return nil, err + } + log.Infof("gnmiSetRequest %s", gnmiSet.String()) + gnmiSetResponse, err := i.GnmiClient.Set(ctx, gnmiSet) + if err != nil { + return nil, err + } + + return utils.ExtractResponseID(gnmiSetResponse) +} + +// GnmiGetSiteConnectivityServiceRan5gService returns an instance of Site_Connectivity-service_Ran-5g-service. +func (i *ServerImpl) GnmiGetSiteConnectivityServiceRan5gService(ctx context.Context, + openApiPath string, enterpriseId externalRef1.EnterpriseId, args ...string) (*externalRef1.SiteConnectivityServiceRan5gService, error) { + + gnmiGet, err := utils.NewGnmiGetRequest(openApiPath, string(enterpriseId), args...) + if err != nil { + return nil, err + } + log.Infof("gnmiGetRequest %s", gnmiGet.String()) + gnmiVal, err := utils.GetResponseUpdate(i.GnmiClient.Get(ctx, gnmiGet)) + if err != nil { + return nil, err + } + if gnmiVal == nil { + return nil, nil + } + gnmiJsonVal, ok := gnmiVal.Value.(*gnmi.TypedValue_JsonVal) + if !ok { + return nil, fmt.Errorf("unexpected type of reply from server %v", gnmiVal.Value) + } + + log.Debugf("gNMI Json %s", string(gnmiJsonVal.JsonVal)) + var gnmiResponse externalRef0.Device + if err = externalRef0.Unmarshal(gnmiJsonVal.JsonVal, &gnmiResponse); err != nil { + return nil, fmt.Errorf("error unmarshalling gnmiResponse %v", err) + } + mpd := ModelPluginDevice{ + device: gnmiResponse, + } + + return mpd.ToSiteConnectivityServiceRan5gService(args...) +} + +// GnmiPostSiteConnectivityServiceRan5gService adds an instance of Site_Connectivity-service_Ran-5g-service. +func (i *ServerImpl) GnmiPostSiteConnectivityServiceRan5gService(ctx context.Context, body []byte, + openApiPath string, enterpriseId externalRef1.EnterpriseId, args ...string) (*string, error) { + + jsonObj := new(externalRef1.SiteConnectivityServiceRan5gService) + if err := json.Unmarshal(body, jsonObj); err != nil { + return nil, fmt.Errorf("unable to unmarshal JSON as externalRef1.Site_Connectivity-service_Ran-5g-service %v", err) + } + gnmiUpdates, err := EncodeToGnmiSiteConnectivityServiceRan5gService(jsonObj, false, false, enterpriseId, "", args...) + if err != nil { + return nil, fmt.Errorf("unable to convert externalRef1.SiteConnectivityServiceRan5gService to gNMI %v", err) + } + gnmiSet, err := utils.NewGnmiSetUpdateRequestUpdates(openApiPath, string(enterpriseId), gnmiUpdates, args...) + if err != nil { + return nil, err + } + log.Infof("gnmiSetRequest %s", gnmiSet.String()) + gnmiSetResponse, err := i.GnmiClient.Set(ctx, gnmiSet) + if err != nil { + return nil, err + } + return utils.ExtractResponseID(gnmiSetResponse) +} + // GnmiDeleteSiteDevice deletes an instance of Site_Device. func (i *ServerImpl) GnmiDeleteSiteDevice(ctx context.Context, openApiPath string, enterpriseId externalRef1.EnterpriseId, args ...string) (*string, error) { @@ -3130,6 +3209,87 @@ func (i *ServerImpl) GnmiPostSiteSlicePriorityTrafficRuleMbr(ctx context.Context return utils.ExtractResponseID(gnmiSetResponse) } +// GnmiDeleteSiteSliceXapp deletes an instance of Site_Slice_Xapp. +func (i *ServerImpl) GnmiDeleteSiteSliceXapp(ctx context.Context, + openApiPath string, enterpriseId externalRef1.EnterpriseId, args ...string) (*string, error) { + + // check to see if the item exists before deleting it + response, err := i.GnmiGetSiteSliceXapp(ctx, openApiPath, enterpriseId, args...) + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + log.Infof("Item at path %s with args %v not found", openApiPath, args) + return nil, echo.NewHTTPError(http.StatusNotFound, fmt.Sprintf("item at path %s with args %v does not exists", openApiPath, args)) + } + + gnmiSet, err := utils.NewGnmiSetDeleteRequest(openApiPath, string(enterpriseId), args...) + if err != nil { + return nil, err + } + log.Infof("gnmiSetRequest %s", gnmiSet.String()) + gnmiSetResponse, err := i.GnmiClient.Set(ctx, gnmiSet) + if err != nil { + return nil, err + } + + return utils.ExtractResponseID(gnmiSetResponse) +} + +// GnmiGetSiteSliceXapp returns an instance of Site_Slice_Xapp. +func (i *ServerImpl) GnmiGetSiteSliceXapp(ctx context.Context, + openApiPath string, enterpriseId externalRef1.EnterpriseId, args ...string) (*externalRef1.SiteSliceXapp, error) { + + gnmiGet, err := utils.NewGnmiGetRequest(openApiPath, string(enterpriseId), args...) + if err != nil { + return nil, err + } + log.Infof("gnmiGetRequest %s", gnmiGet.String()) + gnmiVal, err := utils.GetResponseUpdate(i.GnmiClient.Get(ctx, gnmiGet)) + if err != nil { + return nil, err + } + if gnmiVal == nil { + return nil, nil + } + gnmiJsonVal, ok := gnmiVal.Value.(*gnmi.TypedValue_JsonVal) + if !ok { + return nil, fmt.Errorf("unexpected type of reply from server %v", gnmiVal.Value) + } + + log.Debugf("gNMI Json %s", string(gnmiJsonVal.JsonVal)) + var gnmiResponse externalRef0.Device + if err = externalRef0.Unmarshal(gnmiJsonVal.JsonVal, &gnmiResponse); err != nil { + return nil, fmt.Errorf("error unmarshalling gnmiResponse %v", err) + } + mpd := ModelPluginDevice{ + device: gnmiResponse, + } + + return mpd.ToSiteSliceXapp(args...) +} + +// GnmiPostSiteSliceXapp adds an instance of Site_Slice_Xapp. +func (i *ServerImpl) GnmiPostSiteSliceXapp(ctx context.Context, body []byte, + openApiPath string, enterpriseId externalRef1.EnterpriseId, args ...string) (*string, error) { + + jsonObj := new(externalRef1.SiteSliceXapp) + if err := json.Unmarshal(body, jsonObj); err != nil { + return nil, fmt.Errorf("unable to unmarshal JSON as externalRef1.Site_Slice_Xapp %v", err) + } + gnmiUpdates, err := EncodeToGnmiSiteSliceXapp(jsonObj, false, false, enterpriseId, "", args...) + if err != nil { + return nil, fmt.Errorf("unable to convert externalRef1.SiteSliceXapp to gNMI %v", err) + } + gnmiSet, err := utils.NewGnmiSetUpdateRequestUpdates(openApiPath, string(enterpriseId), gnmiUpdates, args...) + if err != nil { + return nil, err + } + log.Infof("gnmiSetRequest %s", gnmiSet.String()) + gnmiSetResponse, err := i.GnmiClient.Set(ctx, gnmiSet) + if err != nil { + return nil, err + } + return utils.ExtractResponseID(gnmiSetResponse) +} + // GnmiDeleteSiteSmallCell deletes an instance of Site_Small-cell. func (i *ServerImpl) GnmiDeleteSiteSmallCell(ctx context.Context, openApiPath string, enterpriseId externalRef1.EnterpriseId, args ...string) (*string, error) { @@ -3875,6 +4035,8 @@ func (i *ServerImpl) GnmiPostTrafficClassList(ctx context.Context, body []byte, //Ignoring RequestBodySiteConnectivityServiceCore5g +//Ignoring RequestBodySiteConnectivityServiceRan5gService + //Ignoring RequestBodySiteDevice //Ignoring RequestBodySiteDeviceGroup @@ -3903,6 +4065,12 @@ func (i *ServerImpl) GnmiPostTrafficClassList(ctx context.Context, body []byte, //Ignoring RequestBodySiteSlicePriorityTrafficRule +//Ignoring RequestBodySiteSlicePriorityTrafficRuleGbr + +//Ignoring RequestBodySiteSlicePriorityTrafficRuleMbr + +//Ignoring RequestBodySiteSliceXapp + //Ignoring RequestBodySiteSmallCell //Ignoring RequestBodySiteUpf @@ -3914,7 +4082,6 @@ func (i *ServerImpl) GnmiPostTrafficClassList(ctx context.Context, body []byte, //Ignoring RequestBodyTrafficClass type Translator interface { - toAdditionalPropertiesUnchTarget(args ...string) (*externalRef1.AdditionalPropertiesUnchTarget, error) toAdditionalPropertyEnterpriseId(args ...string) (*externalRef1.AdditionalPropertyEnterpriseId, error) toAdditionalPropertyUnchanged(args ...string) (*externalRef1.AdditionalPropertyUnchanged, error) toApplication(args ...string) (*externalRef1.Application, error) @@ -3928,6 +4095,7 @@ type Translator interface { toSiteConnectivityService(args ...string) (*externalRef1.SiteConnectivityService, error) toSiteConnectivityServiceCore4g(args ...string) (*externalRef1.SiteConnectivityServiceCore4g, error) toSiteConnectivityServiceCore5g(args ...string) (*externalRef1.SiteConnectivityServiceCore5g, error) + toSiteConnectivityServiceRan5gService(args ...string) (*externalRef1.SiteConnectivityServiceRan5gService, error) toSiteDevice(args ...string) (*externalRef1.SiteDevice, error) toSiteDeviceGroup(args ...string) (*externalRef1.SiteDeviceGroup, error) toSiteDeviceGroupDevice(args ...string) (*externalRef1.SiteDeviceGroupDevice, error) @@ -3957,6 +4125,7 @@ type Translator interface { toSiteSlicePriorityTrafficRuleGbr(args ...string) (*externalRef1.SiteSlicePriorityTrafficRuleGbr, error) toSiteSlicePriorityTrafficRuleList(args ...string) (*externalRef1.SiteSlicePriorityTrafficRuleList, error) toSiteSlicePriorityTrafficRuleMbr(args ...string) (*externalRef1.SiteSlicePriorityTrafficRuleMbr, error) + toSiteSliceXapp(args ...string) (*externalRef1.SiteSliceXapp, error) toSiteSmallCell(args ...string) (*externalRef1.SiteSmallCell, error) toSiteSmallCellList(args ...string) (*externalRef1.SiteSmallCellList, error) toSiteUpf(args ...string) (*externalRef1.SiteUpf, error) @@ -4621,6 +4790,81 @@ func (i *ServerImpl) PostSiteConnectivityServiceCore5g(ctx echo.Context, enterpr return ctx.JSON(http.StatusOK, response) } +// DeleteSiteConnectivityServiceRan5gService impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service +func (i *ServerImpl) DeleteSiteConnectivityServiceRan5gService(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response DELETE 200 OK + extension100, err := i.GnmiDeleteSiteConnectivityServiceRan5gService(gnmiCtx, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service", enterpriseId, siteId) + if err == nil { + log.Infof("Delete succeded %s", *extension100) + return ctx.JSON(http.StatusOK, extension100) + } + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("DeleteSiteConnectivityServiceRan5gService") + return ctx.JSON(http.StatusOK, response) +} + +// GetSiteConnectivityServiceRan5gService impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service +func (i *ServerImpl) GetSiteConnectivityServiceRan5gService(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response GET OK 200 + response, err = i.GnmiGetSiteConnectivityServiceRan5gService(gnmiCtx, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service", enterpriseId, siteId) + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("GetSiteConnectivityServiceRan5gService") + return ctx.JSON(http.StatusOK, response) +} + +// PostSiteConnectivityServiceRan5gService impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service +func (i *ServerImpl) PostSiteConnectivityServiceRan5gService(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response created + body, err := utils.ReadRequestBody(ctx.Request().Body) + if err != nil { + return err + } + extension100, err := i.GnmiPostSiteConnectivityServiceRan5gService(gnmiCtx, body, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service", enterpriseId, siteId) + if err == nil { + log.Infof("Post succeded %s", *extension100) + return ctx.JSON(http.StatusCreated, extension100) + } + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("PostSiteConnectivityServiceRan5gService") + return ctx.JSON(http.StatusOK, response) +} + // GetSiteDeviceList impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/device func (i *ServerImpl) GetSiteDeviceList(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string) error { var response interface{} @@ -6091,6 +6335,156 @@ func (i *ServerImpl) GetSiteSlicePriorityTrafficRuleEndpointValuesLeafref(ctx ec return ctx.JSON(http.StatusOK, response) } +// DeleteSiteSlicePriorityTrafficRuleGbr impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr +func (i *ServerImpl) DeleteSiteSlicePriorityTrafficRuleGbr(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response DELETE 200 OK + extension100, err := i.GnmiDeleteSiteSlicePriorityTrafficRuleGbr(gnmiCtx, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr", enterpriseId, siteId, sliceId, priorityTrafficRuleId) + if err == nil { + log.Infof("Delete succeded %s", *extension100) + return ctx.JSON(http.StatusOK, extension100) + } + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("DeleteSiteSlicePriorityTrafficRuleGbr") + return ctx.JSON(http.StatusOK, response) +} + +// GetSiteSlicePriorityTrafficRuleGbr impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr +func (i *ServerImpl) GetSiteSlicePriorityTrafficRuleGbr(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response GET OK 200 + response, err = i.GnmiGetSiteSlicePriorityTrafficRuleGbr(gnmiCtx, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr", enterpriseId, siteId, sliceId, priorityTrafficRuleId) + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("GetSiteSlicePriorityTrafficRuleGbr") + return ctx.JSON(http.StatusOK, response) +} + +// PostSiteSlicePriorityTrafficRuleGbr impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr +func (i *ServerImpl) PostSiteSlicePriorityTrafficRuleGbr(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response created + body, err := utils.ReadRequestBody(ctx.Request().Body) + if err != nil { + return err + } + extension100, err := i.GnmiPostSiteSlicePriorityTrafficRuleGbr(gnmiCtx, body, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr", enterpriseId, siteId, sliceId, priorityTrafficRuleId) + if err == nil { + log.Infof("Post succeded %s", *extension100) + return ctx.JSON(http.StatusCreated, extension100) + } + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("PostSiteSlicePriorityTrafficRuleGbr") + return ctx.JSON(http.StatusOK, response) +} + +// DeleteSiteSlicePriorityTrafficRuleMbr impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr +func (i *ServerImpl) DeleteSiteSlicePriorityTrafficRuleMbr(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response DELETE 200 OK + extension100, err := i.GnmiDeleteSiteSlicePriorityTrafficRuleMbr(gnmiCtx, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr", enterpriseId, siteId, sliceId, priorityTrafficRuleId) + if err == nil { + log.Infof("Delete succeded %s", *extension100) + return ctx.JSON(http.StatusOK, extension100) + } + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("DeleteSiteSlicePriorityTrafficRuleMbr") + return ctx.JSON(http.StatusOK, response) +} + +// GetSiteSlicePriorityTrafficRuleMbr impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr +func (i *ServerImpl) GetSiteSlicePriorityTrafficRuleMbr(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response GET OK 200 + response, err = i.GnmiGetSiteSlicePriorityTrafficRuleMbr(gnmiCtx, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr", enterpriseId, siteId, sliceId, priorityTrafficRuleId) + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("GetSiteSlicePriorityTrafficRuleMbr") + return ctx.JSON(http.StatusOK, response) +} + +// PostSiteSlicePriorityTrafficRuleMbr impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr +func (i *ServerImpl) PostSiteSlicePriorityTrafficRuleMbr(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response created + body, err := utils.ReadRequestBody(ctx.Request().Body) + if err != nil { + return err + } + extension100, err := i.GnmiPostSiteSlicePriorityTrafficRuleMbr(gnmiCtx, body, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr", enterpriseId, siteId, sliceId, priorityTrafficRuleId) + if err == nil { + log.Infof("Post succeded %s", *extension100) + return ctx.JSON(http.StatusCreated, extension100) + } + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("PostSiteSlicePriorityTrafficRuleMbr") + return ctx.JSON(http.StatusOK, response) +} + // GetSiteSlicePriorityTrafficRuleTrafficClassValuesLeafref impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/traffic-class/values func (i *ServerImpl) GetSiteSlicePriorityTrafficRuleTrafficClassValuesLeafref(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error { var response interface{} @@ -6133,6 +6527,81 @@ func (i *ServerImpl) GetSiteSliceUpfValuesLeafref(ctx echo.Context, enterpriseId return ctx.JSON(http.StatusOK, response) } +// DeleteSiteSliceXapp impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp +func (i *ServerImpl) DeleteSiteSliceXapp(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response DELETE 200 OK + extension100, err := i.GnmiDeleteSiteSliceXapp(gnmiCtx, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp", enterpriseId, siteId, sliceId) + if err == nil { + log.Infof("Delete succeded %s", *extension100) + return ctx.JSON(http.StatusOK, extension100) + } + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("DeleteSiteSliceXapp") + return ctx.JSON(http.StatusOK, response) +} + +// GetSiteSliceXapp impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp +func (i *ServerImpl) GetSiteSliceXapp(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response GET OK 200 + response, err = i.GnmiGetSiteSliceXapp(gnmiCtx, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp", enterpriseId, siteId, sliceId) + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("GetSiteSliceXapp") + return ctx.JSON(http.StatusOK, response) +} + +// PostSiteSliceXapp impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp +func (i *ServerImpl) PostSiteSliceXapp(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string, sliceId string) error { + var response interface{} + var err error + + gnmiCtx, cancel := utils.NewGnmiContext(ctx, i.GnmiTimeout) + defer cancel() + // Response created + body, err := utils.ReadRequestBody(ctx.Request().Body) + if err != nil { + return err + } + extension100, err := i.GnmiPostSiteSliceXapp(gnmiCtx, body, "/aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp", enterpriseId, siteId, sliceId) + if err == nil { + log.Infof("Post succeded %s", *extension100) + return ctx.JSON(http.StatusCreated, extension100) + } + if err != nil { + return utils.ConvertGrpcError(err) + } + // It's not enough to check if response==nil - see https://medium.com/@glucn/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7 + if reflect.ValueOf(response).Kind() == reflect.Ptr && reflect.ValueOf(response).IsNil() { + return ctx.NoContent(http.StatusNotFound) + } + + log.Infof("PostSiteSliceXapp") + return ctx.JSON(http.StatusOK, response) +} + // GetSiteSmallCellList impl of gNMI access at /aether/v2.1.x/{enterprise-id}/site/{site-id}/small-cell func (i *ServerImpl) GetSiteSmallCellList(ctx echo.Context, enterpriseId externalRef1.EnterpriseId, siteId string) error { var response interface{} diff --git a/pkg/aether_2_1_0/server/aether-2.1.0-server.go b/pkg/aether_2_1_0/server/aether-2.1.0-server.go index 850c5e7..c6f3aee 100644 --- a/pkg/aether_2_1_0/server/aether-2.1.0-server.go +++ b/pkg/aether_2_1_0/server/aether-2.1.0-server.go @@ -92,6 +92,15 @@ type ServerInterface interface { // POST /site/{site-id}/connectivity-service/core-5g // (POST /aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/core-5g) PostSiteConnectivityServiceCore5g(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string) error + // DELETE /site/{site-id}/connectivity-service/ran-5g-service + // (DELETE /aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service) + DeleteSiteConnectivityServiceRan5gService(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string) error + // GET /site/{site-id}/connectivity-service/ran-5g-service Container + // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service) + GetSiteConnectivityServiceRan5gService(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string) error + // POST /site/{site-id}/connectivity-service/ran-5g-service + // (POST /aether/v2.1.x/{enterprise-id}/site/{site-id}/connectivity-service/ran-5g-service) + PostSiteConnectivityServiceRan5gService(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string) error // GET /site/{site-id}/device List // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/device) GetSiteDeviceList(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string) error @@ -278,12 +287,39 @@ type ServerInterface interface { // GET /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/endpoint/values Leafref // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/endpoint/values) GetSiteSlicePriorityTrafficRuleEndpointValuesLeafref(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error + // DELETE /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr + // (DELETE /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr) + DeleteSiteSlicePriorityTrafficRuleGbr(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error + // GET /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr Container + // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr) + GetSiteSlicePriorityTrafficRuleGbr(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error + // POST /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr + // (POST /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/gbr) + PostSiteSlicePriorityTrafficRuleGbr(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error + // DELETE /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr + // (DELETE /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr) + DeleteSiteSlicePriorityTrafficRuleMbr(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error + // GET /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr Container + // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr) + GetSiteSlicePriorityTrafficRuleMbr(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error + // POST /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr + // (POST /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/mbr) + PostSiteSlicePriorityTrafficRuleMbr(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error // GET /site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/traffic-class/values Leafref // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/priority-traffic-rule/{priority-traffic-rule-id}/traffic-class/values) GetSiteSlicePriorityTrafficRuleTrafficClassValuesLeafref(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string, priorityTrafficRuleId string) error // GET /site/{site-id}/slice/{slice-id}/upf/values Leafref // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/upf/values) GetSiteSliceUpfValuesLeafref(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string) error + // DELETE /site/{site-id}/slice/{slice-id}/xapp + // (DELETE /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp) + DeleteSiteSliceXapp(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string) error + // GET /site/{site-id}/slice/{slice-id}/xapp Container + // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp) + GetSiteSliceXapp(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string) error + // POST /site/{site-id}/slice/{slice-id}/xapp + // (POST /aether/v2.1.x/{enterprise-id}/site/{site-id}/slice/{slice-id}/xapp) + PostSiteSliceXapp(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string, sliceId string) error // GET /site/{site-id}/small-cell List // (GET /aether/v2.1.x/{enterprise-id}/site/{site-id}/small-cell) GetSiteSmallCellList(ctx echo.Context, enterpriseId externalRef0.EnterpriseId, siteId string) error @@ -693,6 +729,45 @@ func (w *serverInterfaceWrapper) PostSiteConnectivityServiceCore5g(ctx echo.Cont return w.handler.PostSiteConnectivityServiceCore5g(ctx, enterpriseId, siteId) } +// DeleteSiteConnectivityServiceRan5gService converts echo context to params. +func (w *serverInterfaceWrapper) DeleteSiteConnectivityServiceRan5gService(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.DeleteSiteConnectivityServiceRan5gService(ctx, enterpriseId, siteId) +} + +// GetSiteConnectivityServiceRan5gService converts echo context to params. +func (w *serverInterfaceWrapper) GetSiteConnectivityServiceRan5gService(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.GetSiteConnectivityServiceRan5gService(ctx, enterpriseId, siteId) +} + +// PostSiteConnectivityServiceRan5gService converts echo context to params. +func (w *serverInterfaceWrapper) PostSiteConnectivityServiceRan5gService(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.PostSiteConnectivityServiceRan5gService(ctx, enterpriseId, siteId) +} + // GetSiteDeviceList converts echo context to params. func (w *serverInterfaceWrapper) GetSiteDeviceList(ctx echo.Context) error { // ------------- Path parameter "enterprise-id" ------------- @@ -1703,6 +1778,120 @@ func (w *serverInterfaceWrapper) GetSiteSlicePriorityTrafficRuleEndpointValuesLe return w.handler.GetSiteSlicePriorityTrafficRuleEndpointValuesLeafref(ctx, enterpriseId, siteId, sliceId, priorityTrafficRuleId) } +// DeleteSiteSlicePriorityTrafficRuleGbr converts echo context to params. +func (w *serverInterfaceWrapper) DeleteSiteSlicePriorityTrafficRuleGbr(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + // ------------- Path parameter "priority-traffic-rule-id" ------------- + var priorityTrafficRuleId string + priorityTrafficRuleId = ctx.Param("priority-traffic-rule-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.DeleteSiteSlicePriorityTrafficRuleGbr(ctx, enterpriseId, siteId, sliceId, priorityTrafficRuleId) +} + +// GetSiteSlicePriorityTrafficRuleGbr converts echo context to params. +func (w *serverInterfaceWrapper) GetSiteSlicePriorityTrafficRuleGbr(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + // ------------- Path parameter "priority-traffic-rule-id" ------------- + var priorityTrafficRuleId string + priorityTrafficRuleId = ctx.Param("priority-traffic-rule-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.GetSiteSlicePriorityTrafficRuleGbr(ctx, enterpriseId, siteId, sliceId, priorityTrafficRuleId) +} + +// PostSiteSlicePriorityTrafficRuleGbr converts echo context to params. +func (w *serverInterfaceWrapper) PostSiteSlicePriorityTrafficRuleGbr(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + // ------------- Path parameter "priority-traffic-rule-id" ------------- + var priorityTrafficRuleId string + priorityTrafficRuleId = ctx.Param("priority-traffic-rule-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.PostSiteSlicePriorityTrafficRuleGbr(ctx, enterpriseId, siteId, sliceId, priorityTrafficRuleId) +} + +// DeleteSiteSlicePriorityTrafficRuleMbr converts echo context to params. +func (w *serverInterfaceWrapper) DeleteSiteSlicePriorityTrafficRuleMbr(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + // ------------- Path parameter "priority-traffic-rule-id" ------------- + var priorityTrafficRuleId string + priorityTrafficRuleId = ctx.Param("priority-traffic-rule-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.DeleteSiteSlicePriorityTrafficRuleMbr(ctx, enterpriseId, siteId, sliceId, priorityTrafficRuleId) +} + +// GetSiteSlicePriorityTrafficRuleMbr converts echo context to params. +func (w *serverInterfaceWrapper) GetSiteSlicePriorityTrafficRuleMbr(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + // ------------- Path parameter "priority-traffic-rule-id" ------------- + var priorityTrafficRuleId string + priorityTrafficRuleId = ctx.Param("priority-traffic-rule-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.GetSiteSlicePriorityTrafficRuleMbr(ctx, enterpriseId, siteId, sliceId, priorityTrafficRuleId) +} + +// PostSiteSlicePriorityTrafficRuleMbr converts echo context to params. +func (w *serverInterfaceWrapper) PostSiteSlicePriorityTrafficRuleMbr(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + // ------------- Path parameter "priority-traffic-rule-id" ------------- + var priorityTrafficRuleId string + priorityTrafficRuleId = ctx.Param("priority-traffic-rule-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.PostSiteSlicePriorityTrafficRuleMbr(ctx, enterpriseId, siteId, sliceId, priorityTrafficRuleId) +} + // GetSiteSlicePriorityTrafficRuleTrafficClassValuesLeafref converts echo context to params. func (w *serverInterfaceWrapper) GetSiteSlicePriorityTrafficRuleTrafficClassValuesLeafref(ctx echo.Context) error { // ------------- Path parameter "enterprise-id" ------------- @@ -1738,6 +1927,54 @@ func (w *serverInterfaceWrapper) GetSiteSliceUpfValuesLeafref(ctx echo.Context) return w.handler.GetSiteSliceUpfValuesLeafref(ctx, enterpriseId, siteId, sliceId) } +// DeleteSiteSliceXapp converts echo context to params. +func (w *serverInterfaceWrapper) DeleteSiteSliceXapp(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.DeleteSiteSliceXapp(ctx, enterpriseId, siteId, sliceId) +} + +// GetSiteSliceXapp converts echo context to params. +func (w *serverInterfaceWrapper) GetSiteSliceXapp(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.GetSiteSliceXapp(ctx, enterpriseId, siteId, sliceId) +} + +// PostSiteSliceXapp converts echo context to params. +func (w *serverInterfaceWrapper) PostSiteSliceXapp(ctx echo.Context) error { + // ------------- Path parameter "enterprise-id" ------------- + var enterpriseId externalRef0.EnterpriseId + enterpriseId = externalRef0.EnterpriseId(ctx.Param("enterprise-id")) + // ------------- Path parameter "site-id" ------------- + var siteId string + siteId = ctx.Param("site-id") + // ------------- Path parameter "slice-id" ------------- + var sliceId string + sliceId = ctx.Param("slice-id") + + // Invoke the callback with all the unmarshalled arguments + return w.handler.PostSiteSliceXapp(ctx, enterpriseId, siteId, sliceId) +} + // GetSiteSmallCellList converts echo context to params. func (w *serverInterfaceWrapper) GetSiteSmallCellList(ctx echo.Context) error { // ------------- Path parameter "enterprise-id" ------------- @@ -2052,6 +2289,9 @@ func RegisterHandlers(router EchoRouter, si ServerInterface, validateResponse bo router.DELETE("/aether/v2.1.x/:enterprise-id/site/:site-id/connectivity-service/core-5g", wrapper.DeleteSiteConnectivityServiceCore5g, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/connectivity-service/core-5g", wrapper.GetSiteConnectivityServiceCore5g, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.POST("/aether/v2.1.x/:enterprise-id/site/:site-id/connectivity-service/core-5g", wrapper.PostSiteConnectivityServiceCore5g, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.DELETE("/aether/v2.1.x/:enterprise-id/site/:site-id/connectivity-service/ran-5g-service", wrapper.DeleteSiteConnectivityServiceRan5gService, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/connectivity-service/ran-5g-service", wrapper.GetSiteConnectivityServiceRan5gService, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.POST("/aether/v2.1.x/:enterprise-id/site/:site-id/connectivity-service/ran-5g-service", wrapper.PostSiteConnectivityServiceRan5gService, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/device", wrapper.GetSiteDeviceList, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/device-group", wrapper.GetSiteDeviceGroupList, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.DELETE("/aether/v2.1.x/:enterprise-id/site/:site-id/device-group/:device-group-id", wrapper.DeleteSiteDeviceGroup, openapi3mw.ValidateOpenapi3(openApiDefinition)) @@ -2114,8 +2354,17 @@ func RegisterHandlers(router EchoRouter, si ServerInterface, validateResponse bo router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/application/values", wrapper.GetSiteSlicePriorityTrafficRuleApplicationValuesLeafref, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/device/values", wrapper.GetSiteSlicePriorityTrafficRuleDeviceValuesLeafref, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/endpoint/values", wrapper.GetSiteSlicePriorityTrafficRuleEndpointValuesLeafref, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.DELETE("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/gbr", wrapper.DeleteSiteSlicePriorityTrafficRuleGbr, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/gbr", wrapper.GetSiteSlicePriorityTrafficRuleGbr, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.POST("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/gbr", wrapper.PostSiteSlicePriorityTrafficRuleGbr, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.DELETE("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/mbr", wrapper.DeleteSiteSlicePriorityTrafficRuleMbr, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/mbr", wrapper.GetSiteSlicePriorityTrafficRuleMbr, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.POST("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/mbr", wrapper.PostSiteSlicePriorityTrafficRuleMbr, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/priority-traffic-rule/:priority-traffic-rule-id/traffic-class/values", wrapper.GetSiteSlicePriorityTrafficRuleTrafficClassValuesLeafref, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/upf/values", wrapper.GetSiteSliceUpfValuesLeafref, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.DELETE("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/xapp", wrapper.DeleteSiteSliceXapp, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/xapp", wrapper.GetSiteSliceXapp, openapi3mw.ValidateOpenapi3(openApiDefinition)) + router.POST("/aether/v2.1.x/:enterprise-id/site/:site-id/slice/:slice-id/xapp", wrapper.PostSiteSliceXapp, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/small-cell", wrapper.GetSiteSmallCellList, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.DELETE("/aether/v2.1.x/:enterprise-id/site/:site-id/small-cell/:small-cell-id", wrapper.DeleteSiteSmallCell, openapi3mw.ValidateOpenapi3(openApiDefinition)) router.GET("/aether/v2.1.x/:enterprise-id/site/:site-id/small-cell/:small-cell-id", wrapper.GetSiteSmallCell, openapi3mw.ValidateOpenapi3(openApiDefinition)) diff --git a/pkg/aether_2_1_0/server/aether-2.1.0-spec.go b/pkg/aether_2_1_0/server/aether-2.1.0-spec.go index 90307c7..d285ef9 100644 --- a/pkg/aether_2_1_0/server/aether-2.1.0-spec.go +++ b/pkg/aether_2_1_0/server/aether-2.1.0-spec.go @@ -19,141 +19,151 @@ import ( // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "DQAA//9McquGvFgBAA==", + "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", + "nby1IbWmbD89Pf1/AAAA//8IuOU2KnsBAA==", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/pkg/aether_2_1_0/types/aether-2.1.0-types.go b/pkg/aether_2_1_0/types/aether-2.1.0-types.go index c906e0b..9f9c96d 100644 --- a/pkg/aether_2_1_0/types/aether-2.1.0-types.go +++ b/pkg/aether_2_1_0/types/aether-2.1.0-types.go @@ -18,16 +18,6 @@ const ( SiteSliceConnectivityServiceG1 SiteSliceConnectivityService = "5g" ) -// both the additional property 'unchanged' and the 'enterprise-id' -type AdditionalPropertiesUnchTarget struct { - - // an override of the enterprise-id (target) - EnterpriseId *string `json:"enterprise-id,omitempty"` - - // A comma seperated list of unchanged mandatory attribute names - Unchanged *string `json:"unchanged,omitempty"` -} - // Optionally specify a enterprise-id other than the default (only on PATCH method) type AdditionalPropertyEnterpriseId struct { @@ -58,8 +48,8 @@ type Application struct { DisplayName *string `json:"display-name,omitempty"` // list for endpoint (list) - Endpoint *ApplicationEndpointList `json:"endpoint,omitempty"` - AdditionalProperties map[string]AdditionalPropertiesUnchTarget `json:"-"` + Endpoint *ApplicationEndpointList `json:"endpoint,omitempty"` + AdditionalProperties map[string]AdditionalPropertyUnchanged `json:"-"` } // list for endpoint (single) @@ -172,6 +162,9 @@ type SiteConnectivityService struct { // The 5g core endpoint Core5g *SiteConnectivityServiceCore5g `json:"core-5g,omitempty"` + + // Connectivity to the xApp + Ran5gService *SiteConnectivityServiceRan5gService `json:"ran-5g-service,omitempty"` } // The 4g core endpoint @@ -194,6 +187,13 @@ type SiteConnectivityServiceCore5g struct { Endpoint *string `json:"endpoint,omitempty"` } +// Connectivity to the xApp +type SiteConnectivityServiceRan5gService struct { + + // xApp Endpoint URL + XappEndpoint *string `json:"xapp-endpoint,omitempty"` +} + // List of devices (single) type SiteDevice struct { @@ -435,7 +435,10 @@ type SiteSlice struct { Sst string `json:"sst"` // Link to user plane that implements this vcf - Upf *string `json:"upf,omitempty"` + Upf *string `json:"upf,omitempty"` + + // Params related to xApp + Xapp *SiteSliceXapp `json:"xapp,omitempty"` AdditionalProperties map[string]AdditionalPropertyUnchanged `json:"-"` } @@ -514,10 +517,10 @@ type SiteSlicePriorityTrafficRule struct { // Link to endpoint in application Endpoint string `json:"endpoint"` - // For choice bitrate:gbr-case + // Per-Device per-Application GBR (Guaranteed BitRate) in bps Gbr *SiteSlicePriorityTrafficRuleGbr `json:"gbr,omitempty"` - // For choice bitrate:mbr-case + // Per-Device per-Application MBR (Maximum BitRate) in bps Mbr *SiteSlicePriorityTrafficRuleMbr `json:"mbr,omitempty"` // ID for this priority traffic class. @@ -528,7 +531,7 @@ type SiteSlicePriorityTrafficRule struct { AdditionalProperties map[string]AdditionalPropertyUnchanged `json:"-"` } -// For choice bitrate:gbr-case +// Per-Device per-Application GBR (Guaranteed BitRate) in bps type SiteSlicePriorityTrafficRuleGbr struct { // Per-Device per application downlink data rate in bps @@ -541,7 +544,7 @@ type SiteSlicePriorityTrafficRuleGbr struct { // List of priority traffic rules (list) type SiteSlicePriorityTrafficRuleList []SiteSlicePriorityTrafficRule -// For choice bitrate:mbr-case +// Per-Device per-Application MBR (Maximum BitRate) in bps type SiteSlicePriorityTrafficRuleMbr struct { // Per-Device per application downlink data rate in bps @@ -551,6 +554,19 @@ type SiteSlicePriorityTrafficRuleMbr struct { Uplink *int64 `json:"uplink,omitempty"` } +// Params related to xApp +type SiteSliceXapp struct { + + // rRMPolicyDedicatedRatio + RrmDedicated *int `json:"rrm-dedicated,omitempty"` + + // rRMPolicyMaxRatio + RrmMax *int `json:"rrm-max,omitempty"` + + // rRMPolicyMinRatio + RrmMin *int `json:"rrm-min,omitempty"` +} + // List of small cell addresses (single) type SiteSmallCell struct { @@ -625,8 +641,8 @@ type Template struct { Sst *string `json:"sst,omitempty"` // ID for this slice template. - TemplateId ListKey `json:"template-id"` - AdditionalProperties map[string]AdditionalPropertiesUnchTarget `json:"-"` + TemplateId ListKey `json:"template-id"` + AdditionalProperties map[string]AdditionalPropertyUnchanged `json:"-"` } // List of slice templates (list) @@ -701,6 +717,9 @@ type RequestBodySiteConnectivityServiceCore4g SiteConnectivityServiceCore4g // The 5g core endpoint type RequestBodySiteConnectivityServiceCore5g SiteConnectivityServiceCore5g +// Connectivity to the xApp +type RequestBodySiteConnectivityServiceRan5gService SiteConnectivityServiceRan5gService + // List of devices (single) type RequestBodySiteDevice SiteDevice @@ -746,6 +765,15 @@ type RequestBodySiteSliceMbr SiteSliceMbr // List of priority traffic rules (single) type RequestBodySiteSlicePriorityTrafficRule SiteSlicePriorityTrafficRule +// Per-Device per-Application GBR (Guaranteed BitRate) in bps +type RequestBodySiteSlicePriorityTrafficRuleGbr SiteSlicePriorityTrafficRuleGbr + +// Per-Device per-Application MBR (Maximum BitRate) in bps +type RequestBodySiteSlicePriorityTrafficRuleMbr SiteSlicePriorityTrafficRuleMbr + +// Params related to xApp +type RequestBodySiteSliceXapp SiteSliceXapp + // List of small cell addresses (single) type RequestBodySiteSmallCell SiteSmallCell @@ -782,6 +810,9 @@ type PostSiteConnectivityServiceCore4gJSONRequestBody RequestBodySiteConnectivit // PostSiteConnectivityServiceCore5gJSONRequestBody defines body for PostSiteConnectivityServiceCore5g for application/json ContentType. type PostSiteConnectivityServiceCore5gJSONRequestBody RequestBodySiteConnectivityServiceCore5g +// PostSiteConnectivityServiceRan5gServiceJSONRequestBody defines body for PostSiteConnectivityServiceRan5gService for application/json ContentType. +type PostSiteConnectivityServiceRan5gServiceJSONRequestBody RequestBodySiteConnectivityServiceRan5gService + // PostSiteDeviceGroupJSONRequestBody defines body for PostSiteDeviceGroup for application/json ContentType. type PostSiteDeviceGroupJSONRequestBody RequestBodySiteDeviceGroup @@ -824,6 +855,15 @@ type PostSiteSliceMbrJSONRequestBody RequestBodySiteSliceMbr // PostSiteSlicePriorityTrafficRuleJSONRequestBody defines body for PostSiteSlicePriorityTrafficRule for application/json ContentType. type PostSiteSlicePriorityTrafficRuleJSONRequestBody RequestBodySiteSlicePriorityTrafficRule +// PostSiteSlicePriorityTrafficRuleGbrJSONRequestBody defines body for PostSiteSlicePriorityTrafficRuleGbr for application/json ContentType. +type PostSiteSlicePriorityTrafficRuleGbrJSONRequestBody RequestBodySiteSlicePriorityTrafficRuleGbr + +// PostSiteSlicePriorityTrafficRuleMbrJSONRequestBody defines body for PostSiteSlicePriorityTrafficRuleMbr for application/json ContentType. +type PostSiteSlicePriorityTrafficRuleMbrJSONRequestBody RequestBodySiteSlicePriorityTrafficRuleMbr + +// PostSiteSliceXappJSONRequestBody defines body for PostSiteSliceXapp for application/json ContentType. +type PostSiteSliceXappJSONRequestBody RequestBodySiteSliceXapp + // PostSiteSmallCellJSONRequestBody defines body for PostSiteSmallCell for application/json ContentType. type PostSiteSmallCellJSONRequestBody RequestBodySiteSmallCell @@ -841,7 +881,7 @@ type PostTrafficClassJSONRequestBody RequestBodyTrafficClass // Getter for additional properties for Application. Returns the specified // element and whether it was found -func (a Application) Get(fieldName string) (value AdditionalPropertiesUnchTarget, found bool) { +func (a Application) Get(fieldName string) (value AdditionalPropertyUnchanged, found bool) { if a.AdditionalProperties != nil { value, found = a.AdditionalProperties[fieldName] } @@ -849,9 +889,9 @@ func (a Application) Get(fieldName string) (value AdditionalPropertiesUnchTarget } // Setter for additional properties for Application -func (a *Application) Set(fieldName string, value AdditionalPropertiesUnchTarget) { +func (a *Application) Set(fieldName string, value AdditionalPropertyUnchanged) { if a.AdditionalProperties == nil { - a.AdditionalProperties = make(map[string]AdditionalPropertiesUnchTarget) + a.AdditionalProperties = make(map[string]AdditionalPropertyUnchanged) } a.AdditionalProperties[fieldName] = value } @@ -905,9 +945,9 @@ func (a *Application) UnmarshalJSON(b []byte) error { } if len(object) != 0 { - a.AdditionalProperties = make(map[string]AdditionalPropertiesUnchTarget) + a.AdditionalProperties = make(map[string]AdditionalPropertyUnchanged) for fieldName, fieldBuf := range object { - var fieldVal AdditionalPropertiesUnchTarget + var fieldVal AdditionalPropertyUnchanged err := json.Unmarshal(fieldBuf, &fieldVal) if err != nil { return errors.Wrap(err, fmt.Sprintf("error unmarshaling field %s", fieldName)) @@ -2019,6 +2059,14 @@ func (a *SiteSlice) UnmarshalJSON(b []byte) error { delete(object, "upf") } + if raw, found := object["xapp"]; found { + err = json.Unmarshal(raw, &a.Xapp) + if err != nil { + return errors.Wrap(err, "error reading 'xapp'") + } + delete(object, "xapp") + } + if len(object) != 0 { a.AdditionalProperties = make(map[string]AdditionalPropertyUnchanged) for fieldName, fieldBuf := range object { @@ -2114,6 +2162,13 @@ func (a SiteSlice) MarshalJSON() ([]byte, error) { } } + if a.Xapp != nil { + object["xapp"], err = json.Marshal(a.Xapp) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("error marshaling 'xapp'")) + } + } + for fieldName, field := range a.AdditionalProperties { object[fieldName], err = json.Marshal(field) if err != nil { @@ -2581,7 +2636,7 @@ func (a SiteUpf) MarshalJSON() ([]byte, error) { // Getter for additional properties for Template. Returns the specified // element and whether it was found -func (a Template) Get(fieldName string) (value AdditionalPropertiesUnchTarget, found bool) { +func (a Template) Get(fieldName string) (value AdditionalPropertyUnchanged, found bool) { if a.AdditionalProperties != nil { value, found = a.AdditionalProperties[fieldName] } @@ -2589,9 +2644,9 @@ func (a Template) Get(fieldName string) (value AdditionalPropertiesUnchTarget, f } // Setter for additional properties for Template -func (a *Template) Set(fieldName string, value AdditionalPropertiesUnchTarget) { +func (a *Template) Set(fieldName string, value AdditionalPropertyUnchanged) { if a.AdditionalProperties == nil { - a.AdditionalProperties = make(map[string]AdditionalPropertiesUnchTarget) + a.AdditionalProperties = make(map[string]AdditionalPropertyUnchanged) } a.AdditionalProperties[fieldName] = value } @@ -2661,9 +2716,9 @@ func (a *Template) UnmarshalJSON(b []byte) error { } if len(object) != 0 { - a.AdditionalProperties = make(map[string]AdditionalPropertiesUnchTarget) + a.AdditionalProperties = make(map[string]AdditionalPropertyUnchanged) for fieldName, fieldBuf := range object { - var fieldVal AdditionalPropertiesUnchTarget + var fieldVal AdditionalPropertyUnchanged err := json.Unmarshal(fieldBuf, &fieldVal) if err != nil { return errors.Wrap(err, fmt.Sprintf("error unmarshaling field %s", fieldName)) diff --git a/pkg/toplevel/server/convert-oapi-gnmi_test.go b/pkg/toplevel/server/convert-oapi-gnmi_test.go index 0439e41..f78b540 100644 --- a/pkg/toplevel/server/convert-oapi-gnmi_test.go +++ b/pkg/toplevel/server/convert-oapi-gnmi_test.go @@ -145,8 +145,8 @@ func Test_encodeToGnmiPatchBody(t *testing.T) { assert.Equal(t, 4, len(pb.Deletes)) for _, del := range pb.Deletes { switch path := strings.ReplaceAll(del.String(), " ", " "); path { - case `elem:{name:"application" key:{key:"application-id" value:"app-10"}} elem:{name:"endpoint" key:{key:"endpoint-id" value:"ep-10"}} elem:{name:"endpoint-id"} target:"acme"`: - case `elem:{name:"application" key:{key:"application-id" value:"app-10"}} elem:{name:"endpoint" key:{key:"endpoint-id" value:"ep-11"}} elem:{name:"endpoint-id"} target:"acme"`: + case `elem:{name:"application" key:{key:"application-id" value:"app-10"}} elem:{name:"endpoint" key:{key:"endpoint-id" value:"ep-10"}} elem:{name:"endpoint-id"} target:"defaultent"`: + case `elem:{name:"application" key:{key:"application-id" value:"app-10"}} elem:{name:"endpoint" key:{key:"endpoint-id" value:"ep-11"}} elem:{name:"endpoint-id"} target:"defaultent"`: case `elem:{name:"traffic-class" key:{key:"traffic-class-id" value:"class-4"}} elem:{name:"traffic-class-id"} target:"acme"`: case `elem:{name:"traffic-class" key:{key:"traffic-class-id" value:"class-5"}} elem:{name:"traffic-class-id"} target:"acme"`: default: diff --git a/pkg/toplevel/server/validation_test.go b/pkg/toplevel/server/validation_test.go index 60cb145..6dfc17b 100644 --- a/pkg/toplevel/server/validation_test.go +++ b/pkg/toplevel/server/validation_test.go @@ -65,7 +65,8 @@ Schema: "maxLength": 1024, "minLength": 1, "title": "description", - "type": "string" + "type": "string", + "x-yang-type": "description" } Value: