diff --git a/QoDProvisioning/Documentation/Pictures/DummyOperatorService-CustomResource.png b/QoDProvisioning/Documentation/Pictures/DummyOperatorService-CustomResource.png new file mode 100644 index 0000000000000000000000000000000000000000..97b9452c42aba6ac7e5e726d99e176fdb7814786 Binary files /dev/null and b/QoDProvisioning/Documentation/Pictures/DummyOperatorService-CustomResource.png differ diff --git a/QoDProvisioning/Documentation/Pictures/DummyOperatorService-ResourceInventory.png b/QoDProvisioning/Documentation/Pictures/DummyOperatorService-ResourceInventory.png new file mode 100644 index 0000000000000000000000000000000000000000..7864d9534f868b101e55ff6d10d0298f443f61a3 Binary files /dev/null and b/QoDProvisioning/Documentation/Pictures/DummyOperatorService-ResourceInventory.png differ diff --git a/QoDProvisioning/Documentation/Pictures/DummyOperatorService-ServiceOrder.png b/QoDProvisioning/Documentation/Pictures/DummyOperatorService-ServiceOrder.png new file mode 100644 index 0000000000000000000000000000000000000000..e0054c319c533a78a906fe2222944bfd525b17ed Binary files /dev/null and b/QoDProvisioning/Documentation/Pictures/DummyOperatorService-ServiceOrder.png differ diff --git a/QoDProvisioning/DummyOperatorService/OSLArtifacts/DummyOperatorService-CFS-Specification.json b/QoDProvisioning/DummyOperatorService/OSLArtifacts/DummyOperatorService-CFS-Specification.json new file mode 100644 index 0000000000000000000000000000000000000000..1809856d347612527f7b64f42692dc8b1184388a --- /dev/null +++ b/QoDProvisioning/DummyOperatorService/OSLArtifacts/DummyOperatorService-CFS-Specification.json @@ -0,0 +1,205 @@ +{ + "name": "Dummy Operator Service - CFS", + "description": "Dummy Operator Service - CFS", + "lifecycleStatus": "In design", + "version": "0.1.0", + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + }, + "isBundle": null, + "serviceSpecCharacteristic": [ + { + "name": "qodProv.operation", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.provisioningId", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.qosProfile", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.device.phoneNumber", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.device.networkAccessIdentifier", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.device.ipv4Address.publicAddress", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": null, + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.device.ipv4Address.privateAddress", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.device.ipv4Address.publicPort", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "INTEGER", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.device.ipv6Address", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.sink", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "qodProv.sinkCredential.credentialType", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + }, + { + "name": "camaraResults", + "configurable": false, + "description": null, + "extensible": null, + "maxCardinality": 1, + "minCardinality": 0, + "regex": null, + "valueType": "TEXT", + "serviceSpecCharRelationship": [], + "serviceSpecCharacteristicValue": [], + "validFor": { + "endDateTime": "2043-12-31T23:59:59.999Z", + "startDateTime": "2024-01-01T00:00:00.001Z" + } + } + ] +} \ No newline at end of file diff --git a/QoDProvisioning/DummyOperatorService/OSLArtifacts/cr-template-pre-provision.yaml b/QoDProvisioning/DummyOperatorService/OSLArtifacts/cr-template-pre-provision.yaml new file mode 100644 index 0000000000000000000000000000000000000000..03fc05bc8ec0ddcb77a898e4253b43c0f8ac591a --- /dev/null +++ b/QoDProvisioning/DummyOperatorService/OSLArtifacts/cr-template-pre-provision.yaml @@ -0,0 +1,7 @@ +apiVersion: org.etsi.osl/v1 +kind: DummyOperatorService +metadata: + name: _to_be_replaced_by_osl + namespace: default +spec: + status: "%s" \ No newline at end of file diff --git a/QoDProvisioning/DummyOperatorService/OSLArtifacts/cr-template-supervision.yaml b/QoDProvisioning/DummyOperatorService/OSLArtifacts/cr-template-supervision.yaml new file mode 100644 index 0000000000000000000000000000000000000000..90b3c4696ca92f63c5338fd7356726c84aada5ff --- /dev/null +++ b/QoDProvisioning/DummyOperatorService/OSLArtifacts/cr-template-supervision.yaml @@ -0,0 +1,21 @@ +apiVersion: org.etsi.osl/v1 +kind: DummyOperatorService +metadata: + name: _to_be_replaced_by_osl + namespace: default +spec: + qodProv: + operation: "%s" + provisioningId: "%s" + device: + phoneNumber: "%s" + networkAccessIdentifier: "%s" + ipv4Address: + publicAddress: "%s" + privateAddress: "%s" + publicPort: %d + ipv6Address: "%s" + qosProfile: "%s" + sink: "%s" + sinkCredential: + credentialType: "%s" diff --git a/QoDProvisioning/DummyOperatorService/OSLArtifacts/pre_provision_rule.java b/QoDProvisioning/DummyOperatorService/OSLArtifacts/pre_provision_rule.java new file mode 100644 index 0000000000000000000000000000000000000000..529ab034cf6596cef74db2d750d0d571c76649a9 --- /dev/null +++ b/QoDProvisioning/DummyOperatorService/OSLArtifacts/pre_provision_rule.java @@ -0,0 +1,14 @@ +{ +java.util.HashMap<String,String> charvals = new java.util.HashMap<>(); +charvals.put("_CR_SPEC",String.format(""" +apiVersion: org.etsi.osl/v1 +kind: DummyOperatorService +metadata: + name: _to_be_replaced_by_osl + namespace: default +spec: + status: "%s" +""" +, "RUNNING")); +setServiceRefCharacteristicsValues("Dummy Operator Service - RFS", charvals); +} diff --git a/QoDProvisioning/DummyOperatorService/OSLArtifacts/supervision_rule.java b/QoDProvisioning/DummyOperatorService/OSLArtifacts/supervision_rule.java new file mode 100644 index 0000000000000000000000000000000000000000..cce5c806c83a7984eabddd5d05f09221bc713b61 --- /dev/null +++ b/QoDProvisioning/DummyOperatorService/OSLArtifacts/supervision_rule.java @@ -0,0 +1,28 @@ +{ +java.util.HashMap<String,String> charvals = new java.util.HashMap<>(); +charvals.put("_CR_SPEC",String.format(""" +apiVersion: org.etsi.osl/v1 +kind: DummyOperatorService +metadata: + name: _to_be_replaced_by_osl + namespace: default +spec: + qodProv: + operation: "%s" + provisioningId: "%s" + device: + phoneNumber: "%s" + networkAccessIdentifier: "%s" + ipv4Address: + publicAddress: "%s" + privateAddress: "%s" + publicPort: %d + ipv6Address: "%s" + qosProfile: "%s" + sink: "%s" + sinkCredential: + credentialType: "%s" +""" +, getCharValAsString("qodProv.operation"), getCharValAsString("qodProv.provisioningId"), getCharValAsString("qodProv.device.phoneNumber"), getCharValAsString("qodProv.device.networkAccessIdentifier"), getCharValAsString("qodProv.device.ipv4Address.publicAddress"), getCharValAsString("qodProv.device.ipv4Address.privateAddress"), getCharValNumber("qodProv.device.ipv4Address.publicPort"), getCharValAsString("qodProv.device.ipv6Address"), getCharValAsString("qodProv.qosProfile"), getCharValAsString("qodProv.sink"), getCharValAsString("qodProv.sinkCredential.credentialType"))); +setServiceRefCharacteristicsValues("Dummy Operator Service - RFS", charvals); +} \ No newline at end of file diff --git a/QoDProvisioning/DummyOperatorService/crd.yaml b/QoDProvisioning/DummyOperatorService/crd.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b6e663ff094d37f1f08d4c7d9434a0a66b4ba74c --- /dev/null +++ b/QoDProvisioning/DummyOperatorService/crd.yaml @@ -0,0 +1,70 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: dummy-operator-services.org.etsi.osl +spec: + group: org.etsi.osl + versions: + - name: v1 + served: true + storage: true + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + status: + type: string + default: NOT_RUNNING + enum: + - "RUNNING" + - "NOT_RUNNING" + qodProv: + type: object + properties: + operation: + type: string + provisioningId: + type: string + device: + type: object + properties: + phoneNumber: + type: string + pattern: '^\+[1-9][0-9]{4,14}$' + networkAccessIdentifier: + type: string + ipv4Address: + type: object + properties: + publicAddress: + type: string + privateAddress: + type: string + publicPort: + type: integer + ipv6Address: + type: string + qosProfile: + type: string + sink: + type: string + sinkCredential: + type: object + properties: + credentialType: + type: string + camaraResults: + type: string + default: "[]" + status: + type: object + scope: Namespaced + names: + plural: dummy-operator-services + singular: dummy-operator-service + kind: DummyOperatorService + shortNames: + - dos diff --git a/QoDProvisioning/DummyOperatorService/example-cr.yaml b/QoDProvisioning/DummyOperatorService/example-cr.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e3239f5813addf57e49f51d25bff5da85c2e98e8 --- /dev/null +++ b/QoDProvisioning/DummyOperatorService/example-cr.yaml @@ -0,0 +1,22 @@ +apiVersion: org.etsi.osl/v1 +kind: DummyOperatorService +metadata: + name: example-dummy-operator-service + namespace: default +spec: + status: RUNNING + qodProv: + operation: CREATE + provisioningId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + device: + phoneNumber: "+123456789" + networkAccessIdentifier: "123456789@domain.com" + ipv4Address: + publicAddress: "203.0.113.0" + privateAddress: "192.168.1.100" + publicPort: 5000 + ipv6Address: "2001:db8::ff00:42:8329" + qosProfile: "QOS_A" + sink: "https://endpoint.example.com/sink" + sinkCredential: + credentialType: "PLAIN" diff --git a/QoDProvisioning/Makefile b/QoDProvisioning/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0a1a348d81a307f83ddc798f2b5477552eae998c --- /dev/null +++ b/QoDProvisioning/Makefile @@ -0,0 +1,20 @@ + +# Dummy Operator Service +create-dummy-operator-crd: + kubectl apply -f ./DummyOperatorService/crd.yaml + +delete-dummy-operator-crd: + kubectl delete -f ./DummyOperatorService/crd.yaml || true + +create-dummy-operator-cr: + kubectl apply -f ./DummyOperatorService/example-cr.yaml + +delete-dummy-operator-cr: + kubectl delete -f ./DummyOperatorService/example-cr.yaml || true + +describe-dummy-operator-cr: + kubectl describe dos example-dummy-operator-service || true + + + +