From 0551898080e85a2af6bb9442459ee548e58bd21b Mon Sep 17 00:00:00 2001 From: Rene_Robert Date: Thu, 28 Nov 2019 11:26:39 +0100 Subject: [PATCH] major update for simplest and working example Issue-ID: DOC-569 with Andreas remarks modify parameter mapping image rst correction Signed-off-by: Rene_Robert Change-Id: I852c75c6dd4619bb1c2e96ea9e257a5319917dad --- docs/guides/onap-user/design/media/mapping.png | Bin 0 -> 197346 bytes .../after_enrichment/CBA_freeradius.cba | Bin 16291 -> 0 bytes .../CBA_freeradius/Definitions/data_types.json | 669 ---------- .../CBA_freeradius/Definitions/freeradius.json | 224 ---- .../Definitions/resources_definition_types.json | 1385 -------------------- .../CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml | 27 - .../CBA_freeradius/Scripts/kotlin/kotlin.kt | 82 -- .../CBA_freeradius/Scripts/python/ConfigDeploy.py | 39 - .../CBA_freeradius/TOSCA-Metadata/TOSCA.meta | 6 - .../CBA_freeradius/Templates/radius-mapping.json | 613 --------- .../CBA_freeradius/Templates/radius-template.vtl | 211 --- .../Templates/userconfig-mapping.json | 112 -- .../Templates/userconfig-template.vtl | 1 - .../CBA_freeradius/Templates/vnf-mapping.json | 375 ------ .../CBA_freeradius/Templates/vnf-template.vtl | 166 --- .../after_enrichment/HEAT_freeradius.zip | Bin 2280 -> 0 bytes .../after_enrichment/HEAT_freeradius/MANIFEST.json | 17 - .../after_enrichment/HEAT_freeradius/radius.env | 17 - .../after_enrichment/HEAT_freeradius/radius.yaml | 163 --- .../before_enrichment/CBA_freeradius.cba | Bin 10020 -> 0 bytes .../CBA_freeradius/Definitions/freeradius.json | 224 ---- .../CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml | 27 - .../CBA_freeradius/Scripts/kotlin/kotlin.kt | 82 -- .../CBA_freeradius/Scripts/python/ConfigDeploy.py | 39 - .../CBA_freeradius/TOSCA-Metadata/TOSCA.meta | 6 - .../CBA_freeradius/Templates/radius-mapping.json | 613 --------- .../CBA_freeradius/Templates/radius-template.vtl | 211 --- .../Templates/userconfig-mapping.json | 112 -- .../Templates/userconfig-template.vtl | 1 - .../CBA_freeradius/Templates/vnf-mapping.json | 375 ------ .../CBA_freeradius/Templates/vnf-template.vtl | 166 --- .../before_enrichment/HEAT_freeradius.zip | Bin 2280 -> 0 bytes .../HEAT_freeradius/MANIFEST.json | 17 - .../before_enrichment/HEAT_freeradius/radius.env | 17 - .../before_enrichment/HEAT_freeradius/radius.yaml | 163 --- .../design/parameter_resolution/index.rst | 784 +++++------ .../Definitions/artifact_types.json | 0 .../Definitions/data_types.json | 116 ++ .../Definitions/node_types.json | 135 -- .../Definitions/policy_types.json | 0 .../Definitions/relationship_types.json | 0 .../Definitions/resources_definition_types.json | 283 ++++ .../Definitions/ubuntuCDS.json | 96 ++ .../cba-after-enrichment/TOSCA-Metadata/TOSCA.meta | 6 + .../Templates/base_ubuntuCDS-mapping.json | 185 +++ .../Templates/base_ubuntuCDS-template.vtl | 69 + .../Templates/ubuntuCDS-mapping.json | 65 + .../Templates/ubuntuCDS-template.vtl | 37 + .../cba-ubuntuCDS-enriched.zip | Bin 0 -> 7295 bytes .../Definitions/ubuntuCDS.json | 86 ++ .../TOSCA-Metadata/TOSCA.meta | 6 + .../Templates/base_ubuntuCDS-mapping.json | 185 +++ .../Templates/base_ubuntuCDS-template.vtl | 69 + .../Templates/ubuntuCDS-mapping.json | 65 + .../Templates/ubuntuCDS-template.vtl | 37 + .../cba-before-enrichment.zip | Bin 0 -> 3788 bytes .../ubuntu_example/curls_resource_dictionary.txt | 50 + .../ubuntuCDS_heat/base_ubuntuCDS.env | 14 + .../ubuntuCDS_heat/base_ubuntuCDS.yaml | 110 ++ .../ubuntuCDS_heat/ubuntuCDS_heat.zip | Bin 0 -> 1680 bytes 60 files changed, 1838 insertions(+), 6720 deletions(-) create mode 100755 docs/guides/onap-user/design/media/mapping.png delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius.cba delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/data_types.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/freeradius.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/resources_definition_types.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-mapping.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-template.vtl delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-mapping.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-template.vtl delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-mapping.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-template.vtl delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius.zip delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/MANIFEST.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.env delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.yaml delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius.cba delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Definitions/freeradius.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-mapping.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-template.vtl delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-mapping.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-template.vtl delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-mapping.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-template.vtl delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius.zip delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/MANIFEST.json delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.env delete mode 100755 docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.yaml rename docs/guides/onap-user/design/parameter_resolution/{freeradius_example/after_enrichment/CBA_freeradius => ubuntu_example/cba-after-enrichment}/Definitions/artifact_types.json (100%) create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/data_types.json rename docs/guides/onap-user/design/parameter_resolution/{freeradius_example/after_enrichment/CBA_freeradius => ubuntu_example/cba-after-enrichment}/Definitions/node_types.json (64%) rename docs/guides/onap-user/design/parameter_resolution/{freeradius_example/after_enrichment/CBA_freeradius => ubuntu_example/cba-after-enrichment}/Definitions/policy_types.json (100%) rename docs/guides/onap-user/design/parameter_resolution/{freeradius_example/after_enrichment/CBA_freeradius => ubuntu_example/cba-after-enrichment}/Definitions/relationship_types.json (100%) create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/resources_definition_types.json create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/ubuntuCDS.json create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/TOSCA-Metadata/TOSCA.meta create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/base_ubuntuCDS-mapping.json create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/base_ubuntuCDS-template.vtl create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/ubuntuCDS-mapping.json create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/ubuntuCDS-template.vtl create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/cba-ubuntuCDS-enriched.zip create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Definitions/ubuntuCDS.json create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/TOSCA-Metadata/TOSCA.meta create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/base_ubuntuCDS-mapping.json create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/base_ubuntuCDS-template.vtl create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/ubuntuCDS-mapping.json create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/ubuntuCDS-template.vtl create mode 100644 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/cba-before-enrichment.zip create mode 100644 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/curls_resource_dictionary.txt create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/base_ubuntuCDS.env create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/base_ubuntuCDS.yaml create mode 100755 docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/ubuntuCDS_heat.zip diff --git a/docs/guides/onap-user/design/media/mapping.png b/docs/guides/onap-user/design/media/mapping.png new file mode 100755 index 0000000000000000000000000000000000000000..ed1403557b35067c00a970d3dbd36f6208bb8083 GIT binary patch literal 197346 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

-+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 diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/data_types.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/data_types.json deleted file mode 100755 index 3d584007a..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/data_types.json +++ /dev/null @@ -1,669 +0,0 @@ -{ - "data_types": { - "dt-config-assign-properties": { - "description": "Dynamic DataType definition for workflow(config-assign).", - "version": "1.0.0", - "properties": { - "radius_test_user": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "radius_test_password": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vnf-id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "service-instance-id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - } - }, - "derived_from": "tosca.datatypes.Dynamic" - }, - "dt-config-deploy-properties": { - "description": "Dynamic DataType definition for workflow(config-deploy).", - "version": "1.0.0", - "properties": { - "vdns_int_private_ip_0": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vnf-id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vdns_vf_module_id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "service-instance-id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "freeradius_ip": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "ip": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - } - }, - "derived_from": "tosca.datatypes.Dynamic" - }, - "dt-resource-assignment-properties": { - "description": "Dynamic DataType definition for workflow(resource-assignment).", - "version": "1.0.0", - "properties": { - "vlb_int_pktgen_private_ip_0": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "freeradius_ip": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vm-type": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vnf-id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "public_net_id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vnf_name": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "keypair": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "default": "vlb_key", - "entry_schema": { - "type": "" - } - }, - "onap_private_subnet_id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "aic-cloud-region": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "sec_group": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "nfc-naming-code": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vnfc-model-invariant-uuid": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vf-module-model-customization-uuid": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vf_module_name": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "default": "${vf_module_name}", - "entry_schema": { - "type": "" - } - }, - "onap_private_net_cidr": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "nexus_artifact_repo": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "default": "https://nexus.onap.org", - "entry_schema": { - "type": "" - } - }, - "pg_int": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "default": "${pg_int}", - "entry_schema": { - "type": "" - } - }, - "vpg_onap_private_ip_0": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "image_name": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "flavor_name": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vpg_flavor_name": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vf-module-id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vf-module-label": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vpg_name_0": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "default": "${vpg_name_0}", - "entry_schema": { - "type": "" - } - }, - "vf-naming-policy": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vfccustomizationuuid": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "pktgen_private_net_cidr": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vpg_image_name": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "private2-prefix-id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "default": "", - "entry_schema": { - "type": "" - } - }, - "onap_private_net_id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vnfc-model-version": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "service-instance-id": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "demo_artifacts_version": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "nb_api_version": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "default": "1.2.0", - "entry_schema": { - "type": "" - } - }, - "vpg_int_pktgen_private_ip_0": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "pub_key": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vnf-model-customization-uuid": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "vf-module-type": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "key_name": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "install_script_version": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "radius_test_user": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "radius_test_password": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "entry_schema": { - "type": "" - } - }, - "cloud_env": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [{ - - }], - "default": "openstack", - "entry_schema": { - "type": "" - } - } - }, - "derived_from": "tosca.datatypes.Dynamic" - } - } -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/freeradius.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/freeradius.json deleted file mode 100755 index 76d8e74cd..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/freeradius.json +++ /dev/null @@ -1,224 +0,0 @@ -{ - "tosca_definitions_version": "controller_blueprint_1_0_0", - "metadata": { - "template_author": "Abdelmuhaimen Seaudi", - "author-email": "abdelmuhaimen.seaudi@orange.com", - "user-groups": "ADMIN, OPERATION", - "template_name": "freeradius", - "template_version": "1.0.0", - "template_tags": "test, freeradius, freeradius_cds" - }, - "imports": [{ - "file": "Definitions/data_types.json" - }, - { - "file": "Definitions/relationship_types.json" - }, - { - "file": "Definitions/artifact_types.json" - }, - { - "file": "Definitions/node_types.json" - }, - { - "file": "Definitions/policy_types.json" - }], - "dsl_definitions": { - "ipam-1": { - "type": "token-auth", - "url": "http://netbox-nginx:8080", - "token": "Token 0123456789abcdef0123456789abcdef01234567" - }, - "config-deploy-properties": { - "resolution-key": { - "get_input": "resolution-key" - }, - "freeradius_ip": { - "get_input": "freeradius_ip" - } - }, - "dynamic-db-source": { - "type": "maria-db", - "url": "jdbc:mysql://mariadb-galera:3306/sdnctl", - "username": "root", - "password": "secretpassword" - } - }, - "topology_template": { - "workflows": { - "resource-assignment": { - "steps": { - "resource-assignment": { - "description": "Resource Assign Workflow", - "target": "resource-assignment" - } - }, - "inputs": { - "template-prefix": { - "required": true, - "type": "list", - "entry_schema": { - "type": "string" - } - }, - "resource-assignment-properties": { - "description": "Dynamic PropertyDefinition for workflow(resource-assignment).", - "required": true, - "type": "dt-resource-assignment-properties" - } - }, - "outputs": { - "meshed-template": { - "type": "json", - "value": { - "get_attribute": ["resource-assignment", - "assignment-params"] - } - } - } - }, - "config-assign": { - "steps": { - "config-assign": { - "description": "Config Assign Workflow", - "target": "config-assign", - "activities": [{ - "call_operation": "" - }] - } - }, - "inputs": { - "resolution-key": { - "required": true, - "type": "string" - }, - "config-assign-properties": { - "description": "Dynamic PropertyDefinition for workflow(config-assign).", - "required": true, - "type": "dt-config-assign-properties" - } - }, - "outputs": { - "dry-run": { - "type": "json", - "value": { - "get_attribute": ["config-assign", - "assignment-params"] - } - } - } - }, - "config-deploy": { - "steps": { - "config-deploy": { - "description": "Resource Assign and Python Netconf Activation Workflow", - "target": "config-deploy-process", - "activities": [{ - "call_operation": "ComponentScriptExecutor.process" - }] - } - }, - "inputs": { - "resolution-key": { - "required": false, - "type": "string" - }, - "service-instance-id": { - "required": false, - "type": "string" - }, - "freeradius_ip": { - "required": false, - "type": "string" - }, - "config-deploy-properties": { - "description": "Dynamic PropertyDefinition for workflow(config-deploy).", - "required": true, - "type": "dt-config-deploy-properties" - } - } - } - }, - "node_templates": { - "resource-assignment": { - "type": "component-resource-resolution", - "interfaces": { - "ResourceResolutionComponent": { - "operations": { - "process": { - "inputs": { - "artifact-prefix-names": { - "get_input": "template-prefix" - } - } - } - } - } - }, - "artifacts": { - "vnf-template": { - "type": "artifact-template-velocity", - "file": "Templates/vnf-template.vtl" - }, - "vnf-mapping": { - "type": "artifact-mapping-resource", - "file": "Templates/vnf-mapping.json" - }, - "radius-template": { - "type": "artifact-template-velocity", - "file": "Templates/radius-template.vtl" - }, - "radius-mapping": { - "type": "artifact-mapping-resource", - "file": "Templates/radius-mapping.json" - } - } - }, - "config-assign": { - "type": "component-resource-resolution", - "interfaces": { - "ResourceResolutionComponent": { - "operations": { - "process": { - "inputs": { - "resolution-key": { - "get_input": "resolution-key" - }, - "store-result": true, - "artifact-prefix-names": ["userconfig"] - } - } - } - } - }, - "artifacts": { - "userconfig-template": { - "type": "artifact-template-velocity", - "file": "Templates/userconfig-template.vtl" - }, - "userconfig-mapping": { - "type": "artifact-mapping-resource", - "file": "Templates/userconfig-mapping.json" - } - } - }, - "config-deploy-process": { - "type": "component-script-executor", - "interfaces": { - "ComponentScriptExecutor": { - "operations": { - "process": { - "inputs": { - "script-type": "kotlin", - "script-class-reference": "org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts.SampleScriptComponent", - "instance-dependencies": [], - "dynamic-properties": "*config-deploy-properties" - } - } - } - } - } - } - } - } -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/resources_definition_types.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/resources_definition_types.json deleted file mode 100755 index 766d7be3e..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/resources_definition_types.json +++ /dev/null @@ -1,1385 +0,0 @@ -{ - "aic-cloud-region" : { - "tags" : "aic-cloud-region", - "name" : "aic-cloud-region", - "property" : { - "description" : "aic-cloud-region", - "type" : "string" - }, - "updated-by" : "Singal, Kapil ", - "sources" : { - "input" : { - "type" : "source-input", - "properties" : { } - } - } - }, - "radius_test_user" : { - "tags" : "radius_test_user", - "name" : "radius_test_user", - "property" : { - "description" : "radius_test_user", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/radius_test_user", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "radius_test_user" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "radius_test_password" : { - "tags" : "radius_test_password", - "name" : "radius_test_password", - "property" : { - "description" : "radius_test_password", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/radius_test_password", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "radius_test_password" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "freeradius_ip" : { - "tags" : "freeradius_ip", - "name" : "freeradius_ip", - "property" : { - "description" : "freeradius_ip", - "type" : "string" - }, - "updated-by" : "Singal, Kapil ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/freeradius_ip", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "freeradius_ip" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "cloud_env" : { - "tags" : "cloud_env", - "name" : "cloud_env", - "property" : { - "description" : "cloud_env", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/cloud_env", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "cloud_env" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "demo_artifacts_version" : { - "tags" : "demo_artifacts_version", - "name" : "demo_artifacts_version", - "property" : { - "description" : "demo_artifacts_version", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/demo_artifacts_version", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "demo_artifacts_version" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "flavor_name" : { - "tags" : "flavor_name", - "name" : "flavor_name", - "property" : { - "description" : "flavor_name", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/flavor_name", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "flavor_name" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "image_name" : { - "tags" : "image_name", - "name" : "image_name", - "property" : { - "description" : "image_name", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/image_name", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "image_name" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "install_script_version" : { - "tags" : "install_script_version", - "name" : "install_script_version", - "property" : { - "description" : "install_script_version", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/install_script_version", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "install_script_version" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "key_name" : { - "tags" : "key_name", - "name" : "key_name", - "property" : { - "description" : "key_name", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/key_name", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "key_name" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "keypair" : { - "tags" : "keypair", - "name" : "keypair", - "property" : { - "description" : "keypair", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/keypair", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "keypair" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "nb_api_version" : { - "tags" : "nb_api_version", - "name" : "nb_api_version", - "property" : { - "description" : "nb_api_version", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/nb_api_version", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "nb_api_version" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "nexus_artifact_repo" : { - "tags" : "nexus_artifact_repo", - "name" : "nexus_artifact_repo", - "property" : { - "description" : "nexus_artifact_repo", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/nexus_artifact_repo", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "nexus_artifact_repo" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "nfc-naming-code" : { - "tags" : "nfc-naming-code", - "name" : "nfc-naming-code", - "property" : { - "description" : "nfc-naming-code", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "type" : "SQL", - "query" : "select nfc_naming_code as nfc_naming_code from sdnctl.VFC_MODEL where customization_uuid=:vfccustomizationuuid", - "input-key-mapping" : { - "vfccustomizationuuid" : "vfccustomizationuuid" - }, - "output-key-mapping" : { - "nfc-naming-code" : "nfc_naming_code" - }, - "key-dependencies" : [ "vfccustomizationuuid" ], - "endpoint-selector" : "dynamic-db-source" - } - } - } - }, - "onap_private_net_cidr" : { - "tags" : "onap_private_net_cidr", - "name" : "onap_private_net_cidr", - "property" : { - "description" : "onap_private_net_cidr", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "endpoint-selector" : "dynamic-db-source", - "type" : "SQL", - "query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = \"management\"", - "input-key-mapping" : { }, - "output-key-mapping" : { - "onap_private_net_cidr" : "prefix" - } - } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/onap_private_net_cidr", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "onap_private_net_cidr" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "onap_private_net_id" : { - "tags" : "onap_private_net_id", - "name" : "onap_private_net_id", - "property" : { - "description" : "onap_private_net_id", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/onap_private_net_id", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "onap_private_net_id" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "onap_private_subnet_id" : { - "tags" : "onap_private_subnet_id", - "name" : "onap_private_subnet_id", - "property" : { - "description" : "onap_private_subnet_id", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/onap_private_subnet_id", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "onap_private_subnet_id" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "pg_int" : { - "tags" : "pg_int", - "name" : "pg_int", - "property" : { - "description" : "pg_int", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/pg_int", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "pg_int" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "pktgen_private_net_cidr" : { - "tags" : "pktgen_private_net_cidr", - "name" : "pktgen_private_net_cidr", - "property" : { - "description" : "pktgen_private_net_cidr", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "type" : "SQL", - "query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = \"private2\"", - "output-key-mapping" : { - "pktgen_private_net_cidr" : "prefix" - }, - "endpoint-selector" : "dynamic-db-source", - "input-key-mapping" : { } - } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/pktgen_private_net_cidr", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "pktgen_private_net_cidr" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "private2-prefix-id" : { - "tags" : "private2-prefix-id", - "name" : "private2-prefix-id", - "property" : { - "description" : "private2-prefix-id", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/private2-prefix-id", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "private2-prefix-id" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "endpoint-selector" : "dynamic-db-source", - "type" : "SQL", - "query" : "select sdnctl.IPAM_IP_POOL.prefix_id as prefix_id from sdnctl.IPAM_IP_POOL where description = \"private2\"", - "input-key-mapping" : { }, - "output-key-mapping" : { - "private2-prefix-id" : "prefix_id" - } - } - } - } - }, - "pub_key" : { - "tags" : "pub_key", - "name" : "pub_key", - "property" : { - "description" : "pub_key", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/pub_key", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "pub_key" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "public_net_id" : { - "tags" : "public_net_id", - "name" : "public_net_id", - "property" : { - "description" : "public_net_id", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/public_net_id", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "public_net_id" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "sec_group" : { - "tags" : "sec_group", - "name" : "sec_group", - "property" : { - "description" : "sec_group", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/sec_group", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "sec_group" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "service-instance-id" : { - "tags" : "service-instance-id, tosca.datatypes.Root, data_type", - "name" : "service-instance-id", - "property" : { - "description" : "To be provided", - "type" : "string" - }, - "updated-by" : "Singal, Kapil ", - "sources" : { - "input" : { - "type" : "source-input", - "properties" : { } - }, - "any-db" : { - "type" : "source-db", - "properties" : { - "query" : "SELECT artifact_name FROM BLUEPRINT_RUNTIME where artifact_version=\"1.0.0\"", - "input-key-mapping" : { }, - "output-key-mapping" : { - "service-instance-id" : "artifact_name" - } - } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "query" : "SELECT artifact_name FROM BLUEPRINT_RUNTIME where artifact_version=\"1.0.0\"", - "input-key-mapping" : { }, - "output-key-mapping" : { - "service-instance-id" : "artifact_name" - } - } - }, - "capability" : { - "type" : "source-capability", - "properties" : { - "script-type" : "jython", - "script-class-reference" : "SampleRAProcessor", - "instance-dependencies" : [ ] - } - } - } - }, - "vf-module-id" : { - "tags" : "vf-module-id", - "name" : "vf-module-id", - "property" : { - "description" : "vf-module-id", - "type" : "string" - }, - "updated-by" : "Singal, Kapil ", - "sources" : { - "input" : { - "type" : "source-input", - "properties" : { } - } - } - }, - "vf-module-label" : { - "tags" : "vf-module-label", - "name" : "vf-module-label", - "property" : { - "description" : "vf-module-label", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "type" : "SQL", - "query" : "select sdnctl.VF_MODULE_MODEL.vf_module_label as vf_module_label from sdnctl.VF_MODULE_MODEL where sdnctl.VF_MODULE_MODEL.customization_uuid=:customizationid", - "input-key-mapping" : { - "customizationid" : "vf-module-model-customization-uuid" - }, - "output-key-mapping" : { - "vf-module-label" : "vf_module_label" - }, - "key-dependencies" : [ "vf-module-model-customization-uuid" ], - "endpoint-selector" : "dynamic-db-source" - } - } - } - }, - "vf-module-model-customization-uuid" : { - "tags" : "vf-module-model-customization-uuid", - "name" : "vf-module-model-customization-uuid", - "property" : { - "description" : "vf-module-model-customization-uuid", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - } - } - }, - "vf-module-type" : { - "tags" : "vf-module-type", - "name" : "vf-module-type", - "property" : { - "description" : "vf-module-type", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "type" : "SQL", - "query" : "select vf_module_type as vf_module_type from sdnctl.VF_MODULE_MODEL where customization_uuid=:customizationid", - "output-key-mapping" : { - "vf-module-type" : "vf_module_type" - }, - "endpoint-selector" : "dynamic-db-source", - "input-key-mapping" : { - "customizationid" : "vf-module-model-customization-uuid" - }, - "key-dependencies" : [ "vf-module-model-customization-uuid" ] - } - } - } - }, - "vf-naming-policy" : { - "tags" : "vf-naming-policy", - "name" : "vf-naming-policy", - "property" : { - "description" : "vf-naming-policy", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vf-naming-policy", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "vf-naming-policy" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "endpoint-selector" : "dynamic-db-source", - "type" : "SQL", - "query" : "select sdnctl.VF_MODEL.naming_policy as vf_naming_policy from sdnctl.VF_MODEL where sdnctl.VF_MODEL.customization_uuid=:vnf_model_customization_uuid", - "input-key-mapping" : { - "vnf_model_customization_uuid" : "vnf-model-customization-uuid" - }, - "output-key-mapping" : { - "vf-naming-policy" : "vf_naming_policy" - }, - "key-dependencies" : [ "vnf-model-customization-uuid" ] - } - } - } - }, - "vf_module_name" : { - "tags" : "vf_module_name", - "name" : "vf_module_name", - "property" : { - "description" : "vf_module_name", - "type" : "string" - }, - "updated-by" : "Singal, Kapil ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - } - } - }, - "vfccustomizationuuid" : { - "tags" : "vfccustomizationuuid", - "name" : "vfccustomizationuuid", - "property" : { - "description" : "vfccustomizationuuid", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "endpoint-selector" : "dynamic-db-source", - "type" : "SQL", - "query" : "select sdnctl.VF_MODULE_TO_VFC_MAPPING.vfc_customization_uuid as vnf_customid from sdnctl.VF_MODULE_TO_VFC_MAPPING where vm_count = 1 and sdnctl.VF_MODULE_TO_VFC_MAPPING.vf_module_customization_uuid=:vfmodulecustomizationuuid", - "input-key-mapping" : { - "vfmodulecustomizationuuid" : "vf-module-model-customization-uuid" - }, - "output-key-mapping" : { - "vfccustomizationuuid" : "vnf_customid" - }, - "key-dependencies" : [ "vf-module-model-customization-uuid" ] - } - } - } - }, - "vlb_int_pktgen_private_ip_0" : { - "tags" : "vlb_int_pktgen_private_ip_0", - "name" : "vlb_int_pktgen_private_ip_0", - "property" : { - "description" : "vlb_int_pktgen_private_ip_0", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vlb_int_pktgen_private_ip_0", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "vlb_int_pktgen_private_ip_0" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "vm-type" : { - "tags" : "vm-type", - "name" : "vm-type", - "property" : { - "description" : "vm-type", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "type" : "SQL", - "query" : "select VFC_MODEL.vm_type as vm_type from VFC_MODEL where customization_uuid=:vfccustomizationuuid", - "output-key-mapping" : { - "vm-type" : "vm_type" - }, - "endpoint-selector" : "dynamic-db-source", - "input-key-mapping" : { - "vfccustomizationuuid" : "vfccustomizationuuid" - }, - "key-dependencies" : [ "vfccustomizationuuid" ] - } - } - } - }, - "vnf-id" : { - "tags" : "vnf-id", - "name" : "vnf-id", - "property" : { - "description" : "vnf-id", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vnf-id", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "vnf-id" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "vnf-model-customization-uuid" : { - "tags" : "vnf-model-customization-uuid", - "name" : "vnf-model-customization-uuid", - "property" : { - "description" : "vnf-model-customization-uuid", - "type" : "string" - }, - "updated-by" : "Singal, Kapil ", - "sources" : { - "input" : { - "type" : "source-input", - "properties" : { } - } - } - }, - "vnf_name" : { - "tags" : "vnf_name", - "name" : "vnf_name", - "property" : { - "description" : "vnf_name", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vnf_name", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "vnf_name" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "vnfc-model-invariant-uuid" : { - "tags" : "vnfc-model-invariant-uuid", - "name" : "vnfc-model-invariant-uuid", - "property" : { - "description" : "vnfc-model-invariant-uuid", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "type" : "SQL", - "query" : "select VFC_MODEL.invariant_uuid as vfc_invariant_uuid from VFC_MODEL where customization_uuid=:vfccustomizationuuid", - "output-key-mapping" : { - "vnfc-model-invariant-uuid" : "vfc_invariant_uuid" - }, - "endpoint-selector" : "dynamic-db-source", - "input-key-mapping" : { - "vfccustomizationuuid" : "vfccustomizationuuid" - }, - "key-dependencies" : [ "vfccustomizationuuid" ] - } - } - } - }, - "vnfc-model-version" : { - "tags" : "vnfc-model-version", - "name" : "vnfc-model-version", - "property" : { - "description" : "vnfc-model-version", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "processor-db" : { - "type" : "source-db", - "properties" : { - "type" : "SQL", - "query" : "select VFC_MODEL.version as vnfc_model_version from VFC_MODEL where customization_uuid=:vfccustomizationuuid", - "output-key-mapping" : { - "vnfc-model-version" : "vnfc_model_version" - }, - "endpoint-selector" : "dynamic-db-source", - "input-key-mapping" : { - "vfccustomizationuuid" : "vfccustomizationuuid" - }, - "key-dependencies" : [ "vfccustomizationuuid" ] - } - } - } - }, - "vpg_int_pktgen_private_ip_0" : { - "tags" : "vpg_int_pktgen_private_ip_0", - "name" : "vpg_int_pktgen_private_ip_0", - "property" : { - "description" : "vpg_int_pktgen_private_ip_0", - "type" : "string" - }, - "updated-by" : "Singal, Kapil ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vpg_int_pktgen_private_ip_0", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "vpg_int_pktgen_private_ip_0" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "vpg_name_0" : { - "tags" : "vpg_name_0", - "name" : "vpg_name_0", - "property" : { - "description" : "vlb_name_0", - "type" : "string" - }, - "updated-by" : "MALAKOV, YURIY ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vpg_name_0", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "vpg_name_0" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - }, - "vpg_onap_private_ip_0" : { - "tags" : "vpg_onap_private_ip_0", - "name" : "vpg_onap_private_ip_0", - "property" : { - "description" : "vpg_onap_private_ip_0", - "type" : "string" - }, - "updated-by" : "Singal, Kapil ", - "sources" : { - "input" : { - "type" : "source-input" - }, - "default" : { - "type" : "source-default", - "properties" : { } - }, - "sdnc" : { - "type" : "source-rest", - "properties" : { - "verb" : "GET", - "type" : "JSON", - "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vpg_onap_private_ip_0", - "path" : "/param/0/value", - "input-key-mapping" : { - "service-instance-id" : "service-instance-id", - "vnf-id" : "vnf-id" - }, - "output-key-mapping" : { - "vpg_onap_private_ip_0" : "value" - }, - "key-dependencies" : [ "service-instance-id", "vnf-id" ] - } - } - } - } -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml deleted file mode 100755 index 92fb2aa48..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt deleted file mode 100755 index e0d36ca17..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt +++ /dev/null @@ -1,82 +0,0 @@ -package org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts - -import com.fasterxml.jackson.databind.node.ObjectNode -import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput -import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractComponentFunction -import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractScriptComponentFunction -import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.ComponentFunctionScriptingService - -import java.io.ByteArrayInputStream -import java.io.IOException -import java.io.InputStream -import org.apache.sshd.client.SshClient -import org.apache.sshd.client.channel.ClientChannel -import org.apache.sshd.client.future.AuthFuture -import org.apache.sshd.client.future.ConnectFuture -import org.apache.sshd.client.session.ClientSession -import org.apache.sshd.common.future.SshFutureListener -import org.apache.sshd.common.util.io.NoCloseInputStream -import org.apache.sshd.common.util.io.NoCloseOutputStream -import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.storedContentFromResolvedArtifactNB -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException -import org.onap.ccsdk.cds.controllerblueprints.core.asListOfString -import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils -import org.slf4j.LoggerFactory -import java.io.ByteArrayOutputStream -import java.util.* - -open class SampleScriptComponent : AbstractScriptComponentFunction() { - - private val log = LoggerFactory.getLogger(SampleScriptComponent::class.java)!! - - override suspend fun processNB(executionRequest: ExecutionServiceInput) { - log.info("Hello Kotlin!") - val resolution_key = getDynamicProperties("resolution-key").asText() - log.info("resolution_key: $resolution_key") - val payload = storedContentFromResolvedArtifactNB(resolution_key, "userconfig") - val payloadObject = JacksonUtils.jsonNode(payload) as ObjectNode - val freeradius_ip: String = payloadObject.get("freeradius_ip").asText() - log.info("freeradius_ip: $freeradius_ip") - val user_config: String = payloadObject.get("user_config").asText() - log.info("user_config: $user_config") - log.info("Waiting 2 minutes for VM to initialize") - Thread.sleep(120000) - val client = SshClient.setUpDefaultClient() - client.start() - log.info("SSH Client Service started successfully") - val session = client.connect("cloud", freeradius_ip, 22).verify(3000).session - session.addPasswordIdentity("password") - log.info("SSH Client authenticating...") - val authFuture = session.auth().verify(3000) - log.info("SSH client session($session) created") - log.info("SSH Authenticated: $authFuture.isSuccess()") - val command="echo '$user_config' | sudo tee -a /etc/freeradius/users" - log.info("Executing host($session) command($command)") - val channel = session.createExecChannel(command) - val outputStream = ByteArrayOutputStream() - channel!!.out = outputStream - channel!!.err = outputStream - channel!!.open().await() - //val waitMask = channel!!.waitFor(Collections.unmodifiableSet(EnumSet.of(ClientChannelEvent.CLOSED)), 3000) - //if (waitMask.contains(ClientChannelEvent.TIMEOUT)) { - // throw BluePrintProcessorException("Failed to retrieve command result in time: $command") - //} - Thread.sleep(3000) - val exitStatus = channel!!.exitStatus - //ClientChannel. .validateCommandExitStatusCode(command, exitStatus!!) - if (channel != null) { - channel!!.close() - } - if (client.isOpen) { - client.stop() - } - log.info(outputStream.toString()) - log.info("SSH Client Service stopped successfully") - - - } - - - override suspend fun recoverNB(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) { - } -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py deleted file mode 100755 index 2b88e8271..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (c) 2019 Bell Canada. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import netconf_constant -from common import ResolutionHelper -from time import sleep -from netconfclient import NetconfClient -from org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor import \ - NetconfComponentFunction - - -class ConfigDeploy(NetconfComponentFunction): - - def process(self, execution_request): - log = globals()[netconf_constant.SERVICE_LOG] - print(globals()) - rr = ResolutionHelper(self) - - # Get meshed template from DB - resolution_key = self.getDynamicProperties("resolution-key").asText() - payload = rr.retrieve_resolved_template_from_database(resolution_key, "userconfig") - print(payload) - - - def recover(self, runtime_exception, execution_request): - log.error("Exception in the script {}", runtime_exception) - print self.addError(runtime_exception.cause.message) - return None \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta deleted file mode 100755 index bc98c171a..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,6 +0,0 @@ -TOSCA-Meta-File-Version: 1.0.0 -CSAR-Version: 1.0 -Created-By: SEAUDI, Abdelmuhaimen -Entry-Definitions: Definitions/freeradius.json -Template-Tags: freeradius_CDS -Content-Type: application/vnd.oasis.bpmn \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-mapping.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-mapping.json deleted file mode 100755 index 271167d77..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-mapping.json +++ /dev/null @@ -1,613 +0,0 @@ -[ - { - "name": "radius_test_user", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_user", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "radius_test_password", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_password", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "freeradius_ip", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "freeradius_ip", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "cloud_env", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "openstack" - }, - "input-param": false, - "dictionary-name": "cloud_env", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf_module_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "${vf_module_name}" - }, - "input-param": false, - "dictionary-name": "vf_module_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "aic-cloud-region", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "aic-cloud-region", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "keypair", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "vlb_key" - }, - "input-param": false, - "dictionary-name": "keypair", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "nfc-naming-code", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "nfc-naming-code", - "dictionary-source": "processor-db", - "dependencies": [ - "vfccustomizationuuid" - ], - "version": 0 - }, - { - "name": "onap_private_net_cidr", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "onap_private_net_cidr", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "onap_private_net_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "onap_private_net_id", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "onap_private_subnet_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "onap_private_subnet_id", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "public_net_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "public_net_id", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "pub_key", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "pub_key", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "key_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "key_name", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "sec_group", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "sec_group", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "service-instance-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "service-instance-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf-module-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-module-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf-module-label", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-module-label", - "dictionary-source": "processor-db", - "dependencies": [ - "vf-module-model-customization-uuid" - ], - "version": 0 - }, - { - "name": "vf-module-model-customization-uuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-module-model-customization-uuid", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf-module-type", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-module-type", - "dictionary-source": "processor-db", - "dependencies": [ - "vf-module-model-customization-uuid" - ], - "version": 0 - }, - { - "name": "vf-naming-policy", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-naming-policy", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "vfccustomizationuuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vfccustomizationuuid", - "dictionary-source": "processor-db", - "dependencies": [ - "vf-module-model-customization-uuid" - ], - "version": 0 - }, - { - "name": "vnf_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnf_name", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "vm-type", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vm-type", - "dictionary-source": "processor-db", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnf-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-model-customization-uuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnf-model-customization-uuid", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnfc-model-invariant-uuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnfc-model-invariant-uuid", - "dictionary-source": "processor-db", - "dependencies": [ - "vfccustomizationuuid" - ], - "version": 0 - }, - { - "name": "vnfc-model-version", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnfc-model-version", - "dictionary-source": "processor-db", - "dependencies": [ - "vfccustomizationuuid" - ], - "version": 0 - } -] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-template.vtl b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-template.vtl deleted file mode 100755 index f4c57d4cb..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-template.vtl +++ /dev/null @@ -1,211 +0,0 @@ -{ - "resource-accumulator-resolved-data": [ - { - "param-name": "radius_test_user", - "param-value": "${radius_test_user}" - }, - { - "param-name": "radius_test_password", - "param-value": "${radius_test_password}" - }, - { - "param-name": "freeradius_ip", - "param-value": "${freeradius_ip}" - }, - { - "param-name": "service-instance-id", - "param-value": "${service-instance-id}" - }, - { - "param-name": "vnf_id", - "param-value": "${vnf-id}" - }, - { - "param-name": "vnf_name", - "param-value": "${vnf_name}" - }, - { - "param-name": "vnf_model_customization_uuid", - "param-value": "${vnf-model-customization-uuid}" - }, - { - "param-name": "vf_module_id", - "param-value": "${vf-module-id}" - }, - { - "param-name": "vf_module_type", - "param-value": "${vf-module-type}" - }, - { - "param-name": "vf_module_customization_uuid", - "param-value": "${vf-module-model-customization-uuid}" - }, - { - "param-name": "vfc_customization_uuid", - "param-value": "${vfccustomizationuuid}" - }, - { - "param-name": "aic-cloud-region", - "param-value": "${aic-cloud-region}" - }, - { - "param-name": "vm-type", - "param-value": "${vm-type}" - }, - { - "param-name": "vnfc-model-customization-uuid", - "param-value": "${vfccustomizationuuid}" - }, - { - "param-name": "vnfc-model-invariant-uuid", - "param-value": "${vnfc-model-invariant-uuid}" - }, - { - "param-name": "vnfc-model-version", - "param-value": "${vnfc-model-version}" - }, - { - "param-name": "nfc-naming-code", - "param-value": "${nfc-naming-code}" - }, - { - "param-name": "cloud_env", - "param-value": "openstack" - }, - { - "param-name": "key_name", - "param-value": "${key_name}" - }, - { - "param-name": "pub_key", - "param-value": "${pub_key}" - }, - { - "param-name": "public_net_id", - "param-value": "${public_net_id}" - }, - { - "param-name": "onap_private_net_id", - "param-value": "${onap_private_net_id}" - }, - { - "param-name": "onap_private_subnet_id", - "param-value": "${onap_private_subnet_id}" - }, - { - "param-name": "onap_private_net_cidr", - "param-value": "${onap_private_net_cidr}" - }, - { - "param-name": "sec_group", - "param-value": "${sec_group}" - } - ], - "capability-data": [ - { - "capability-name": "generate-name", - "key-mapping": [ - { - "payload": [ - { - "param-name": "resource-name", - "param-value": "freeRadius_name_0" - }, - { - "param-name": "resource-value", - "param-value": "${freeRadius_name_0}" - }, - { - "param-name": "external-key", - "param-value": "${vf-module-id}_freeRadius_name_0" - }, - { - "param-name": "policy-instance-name", - "param-value": "${vf-naming-policy}" - }, - { - "param-name": "naming-type", - "param-value": "VNFC" - }, - { - "param-name": "VNF_NAME", - "param-value": "${vnf_name}" - }, - { - "param-name": "NFC_NAMING_CODE", - "param-value": "${nfc-naming-code}" - } - ], - "output-key-mapping": [ - { - "resource-name": "freeRadius_name_0", - "resource-value": "${freeRadius_name_0}" - } - ] - }, - { - "payload": [ - { - "param-name": "resource-name", - "param-value": "vf-module-name" - }, - { - "param-name": "resource-value", - "param-value": "${vf-module-name}" - }, - { - "param-name": "external-key", - "param-value": "${vf-module-id}_vf-module-name" - }, - { - "param-name": "policy-instance-name", - "param-value": "${vf-naming-policy}" - }, - { - "param-name": "naming-type", - "param-value": "VF-MODULE" - }, - { - "param-name": "VNF_NAME", - "param-value": "${vnf_name}" - }, - { - "param-name": "VF_MODULE_LABEL", - "param-value": "${vf-module-label}" - }, - { - "param-name": "VF_MODULE_TYPE", - "param-value": "${vf-module-type}" - } - ], - "output-key-mapping": [ - { - "resource-name": "vf-module-name", - "resource-value": "${vf-module-name}" - } - ] - } - ] - }, - { - "capability-name": "aai-vf-module-put", - "key-mapping": [ - { - "payload": [ - { - "param-name": "vf-module", - "param-value": "vf-module" - } - ], - "output-key-mapping": [ - { - "resource-name": "aai-vf-module-put", - "resource-value": "${status}" - } - ] - } - ] - } - - ] -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-mapping.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-mapping.json deleted file mode 100755 index 7fb2978af..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-mapping.json +++ /dev/null @@ -1,112 +0,0 @@ -[ - { - "name": "service-instance-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "service-instance-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnf-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - - "name": "radius_test_user", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_user", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "freeradius_ip", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "freeradius_ip", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "radius_test_password", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_password", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - } -] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-template.vtl b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-template.vtl deleted file mode 100755 index 6a23c3f83..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-template.vtl +++ /dev/null @@ -1 +0,0 @@ -{"freeradius_ip":"$freeradius_ip","user_config":"$radius_test_user Cleartext-Password := \"$radius_test_password\""} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-mapping.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-mapping.json deleted file mode 100755 index 55f0a698e..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-mapping.json +++ /dev/null @@ -1,375 +0,0 @@ -[ - { - "name": "radius_test_user", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_user", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "radius_test_password", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_password", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "cloud_env", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "openstack" - }, - "input-param": false, - "dictionary-name": "cloud_env", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "flavor_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "flavor_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "image_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "image_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "pub_key", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs84Cy8+qi/jvucay0BwFtOq3ian0ulTXFGxkZcZCR0N48j88pbHJaEqb9e25MAsrfH+7Etb9Kd5nbBThEL/i0AyHXnDsc80Oq0sqlLcfLo3SGSurkrNoRofHboJ5Hn+N9SlWN5FCQGbTx1w3rjqR4LasAI6XxH9xpXSFyyge6ysVXH0cYaZ8sg98nFZa1fPJR9L8COjZvF+EYudub2RC5HVyV/sx7bliNFo9JwQh6du1abG4G7ZDjTIcYwYp21iq52UzWU28RVcAyY6AQZJu2lHLdsr8fPvyeWZpC5EqGsxI1G609m9G/dURRKwYfez/f2ATzpn5QjEX7LrLWBM8r Generated-by-Nova" - }, - "input-param": false, - "dictionary-name": "pub_key", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "onap_private_net_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "onap_private_net_id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "onap_private_subnet_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "onap_private_subnet_id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "public_net_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "public_net_id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "onap_private_net_cidr", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "onap_private_net_cidr", - "dictionary-source": "processor-db", - "dependencies": [], - "version": 0 - }, - { - "name": "sec_group", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "sec_group", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "service-instance-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "service-instance-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "vnf-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-model-customization-uuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "vnf-model-customization-uuid", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf-naming-policy", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "SDNC_Policy.Config_MS_ONAP_VNF_NAMING_TIMESTAMP" - }, - "input-param": false, - "dictionary-name": "vf-naming-policy", - "dictionary-source": "default", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "${vnf_name}" - }, - "input-param": false, - "dictionary-name": "vnf_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "aic-cloud-region", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "aic-cloud-region", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "key_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "olc-key" - }, - "input-param": false, - "dictionary-name": "key_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - } -] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-template.vtl b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-template.vtl deleted file mode 100755 index 8d1cf3b09..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-template.vtl +++ /dev/null @@ -1,166 +0,0 @@ -{ - "resource-accumulator-resolved-data": [ - { - "param-name": "radius_test_user", - "param-value": "${radius_test_user}" - }, - { - "param-name": "radius_test_password", - "param-value": "${radius_test_password}" - }, - { - "param-name": "service-instance-id", - "param-value": "${service-instance-id}" - }, - { - "param-name": "vnf_id", - "param-value": "${vnf-id}" - }, - { - "param-name": "vf-naming-policy", - "param-value": "${vf-naming-policy}" - }, - { - "param-name": "vnf-model-customization-uuid", - "param-value": "${vnf-model-customization-uuid}" - }, - { - "param-name": "aic-cloud-region", - "param-value": "${aic-cloud-region}" - }, - { - "param-name": "onap_private_net_id", - "param-value": "${onap_private_net_id}" - }, - { - "param-name": "image_name", - "param-value": "${image_name}" - }, - { - "param-name": "onap_private_subnet_id", - "param-value": "${onap_private_subnet_id}" - }, - { - "param-name": "vfccustomizationuuid", - "param-value": "${vfccustomizationuuid}" - }, - { - "param-name": "vf-module-model-customization-uuid", - "param-value": "${vf-module-model-customization-uuid}" - }, - { - "param-name": "cloud_env", - "param-value": "${cloud_env}" - }, - { - "param-name": "flavor_name", - "param-value": "${flavor_name}" - }, - { - "param-name": "pub_key", - "param-value": "${pub_key}" - }, - { - "param-name": "sec_group", - "param-value": "${sec_group}" - }, - { - "param-name": "public_net_id", - "param-value": "${public_net_id}" - }, - { - "param-name": "onap_private_net_cidr", - "param-value": "${onap_private_net_cidr}" - }, - { - "param-name": "key_name", - "param-value": "${key_name}" - } - ], - "capability-data": [{ - "capability-name": "generate-name", - "key-mapping": [{ - "payload": [{ - "param-name": "resource-name", - "param-value": "vnf_name" - }, - { - "param-name": "resource-value", - "param-value": "${vnf_name}" - }, - { - "param-name": "external-key", - "param-value": "${vnf-id}_vnf_name" - }, - { - "param-name": "policy-instance-name", - "param-value": "${vf-naming-policy}" - }, - { - "param-name": "naming-type", - "param-value": "VNF" - }, - { - "param-name": "AIC_CLOUD_REGION", - "param-value": "${aic-cloud-region}" - }], - "output-key-mapping": [{ - "resource-name": "vnf_name", - "resource-value": "${vnf_name}" - }] - }] - }, - { - "capability-name": "aai-vnf-put", - "key-mapping": [ - { - "payload": [ - { - "param-name": "generic-vnf", - "param-value": "generic-vnf" - } - ], - "output-key-mapping": [ - { - "resource-name": "aai-vnf-put", - "resource-value": "${status}" - } - ] - } - ] - }, - { - "capability-name": "netbox-ip-assign", - "key-mapping": [ - - - { - "payload": [ - { - "param-name": "service-instance-id", - "param-value": "${service-instance-id}" - }, - { - "param-name": "prefix-id", - "param-value": "3" - }, - { - "param-name": "vnf-id", - "param-value": "${vnf-id}" - }, - { - "param-name": "external_key", - "param-value": "${vnf-id}-freeradius_ip" - } - ], - "output-key-mapping": [ - { - "resource-name": "freeradius_ip", - "resource-value": "${freeradius_ip}" - } - ] - }, - ] - } - ] -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius.zip b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius.zip deleted file mode 100755 index 114ef5402c55179e129bf1c2b3730676b73c12db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2280 zcmZ{mcT^L|7RD3Wh8B>PfYhhRlF)@9MHbZ1LI){=2!SMYfdG${BGSu(G^vUxMUg61 zFp&~K2?1Fk2$+CW6#@vNNMC%r`{cYmZ|0o&&YeGgbLX5p_ZtfoGm8KK0003lCySXo zsD9LlK8nnM008%qn(CPu=_9Re6uj`){VEr&08C|sZkmlWoVDy>cQ$1hEiIPlVeAzU zXo=M`!bXZ4@+sW4&jigI;AM67)b6t8nDdhfa56HKv#FqV7vmxFC;Y+mGw|bAa3g__3+jc2ThQnx{hs( zd}8Y3M6#P3Yhtt*D7K|NQukhd!K#BvJy}C$Ys&Zq3omb{Xr|A`-e&5s3phNTIk}?| z#J(xp@?Z=e@Okf&B_>=m{vbA!J=XDE0#aYXc4I(8>=Xk6id@I+`0cexw9s|zinZ3a zE0(Y8T3xuXpTDFqKDas2E|663!_0v{7lkkZiCYFhF||H z$^s`H7q%BQ5KFF)IwM@%9b&po6(j_ts;9TjnT+;$%B1X=Jh>dK4KMZ8pu(p^?krb{ zbcSZ%9pthzZmxICi;0ukEO4pZRPbUYDK<5gr@}Q~ZqmNWSWzdUvBq!TM z0vhgZe?|C(N;1AmWeSv2B4!so8K}17U1!VnQ@KRYOfPj$b^o`VBdy0{R~Pf~1-LV=nr~4X0p}kO zEy^;5;=*tWRSw!iTNwzVp+Kg-pMh)ByN<2MG{&@tCr|yVULa3=U+nC7WQ#`53I$9Mq`*yd z4sr?LGPes|eDm^AO6>tWdx%3_&bTSuzRZsb(@r)s-{ABtjAj7<_>W!)=Z^~e)z#N$ z#eVwwTLf>U`n$uKS)Cx}*$Gq&gvbi7XT4~3O1v$hnb+f^5C0v*)KZ#A#o?B?Y#$${ zFQl#dWV|#8oia^dj||r?8hd5pp)|mURiYISJ0$~Z%BS0*<~K#J5uxDt7-(>5D3&&? zcp7+z1M*?=} z%U#s_&=Cn#ddtN;q#y7UR&?6umJy(Kt)nX$H&qkq=!U1l=GTpax77W2>&*)tS!$%L z14(mZX}PYjIqgn7g{FJ!Jet9_3NvgmI!V%ik$Fcmh>hT^*1_V9?CMWdbyHVLQ^X9Z z#6G4A6V8(J1zhs%!hNd!6`*HB@ky_ck@-f-=^)vbI*220QPS3XP;&<5} z-8>QJ(@HPdmZa|DmrXfx;__!thGl|OaZ0B!(PS9XRac<*##bu$rrc8adYt}!tSX*e zYoybVqr{yl$eu&nwFcsiuSypE%*gH$;VKjeWs^%2^rE{qN@$7>-OR59H8niSOT=iN z!53}YeU_|Skpzj0x=f9O@3{!WNGNWadX@y{ z@coOkTh<1lIP~QGW#Q_r@^9W5Z+ti4rFA~m@!IYgHxOj@K1pqcUg)xgY+ZMY)I`;; zf!w*S8V9}Z!6@V|GFyMk5uH@Q@_O77L4mKRRON<-ecn~( zPfPE5-kL-676-b$5xD)t1A!PnZ#gQ1abzD@f;CEU8#BCKY(m<4^YAdYt{wK6{+abL8!RvA=iS?Wgb2AD1`hx&QzG diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/MANIFEST.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/MANIFEST.json deleted file mode 100755 index 5719ac888..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/MANIFEST.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "radius", - "description": "", - "data": [ - { - "file": "radius.yaml", - "type": "HEAT", - "isBase": "true", - "data": [ - { - "file": "radius.env", - "type": "HEAT_ENV" - } - ] - } - ] -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.env b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.env deleted file mode 100755 index bee325592..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.env +++ /dev/null @@ -1,17 +0,0 @@ -parameters: -# Metadata required by ONAP - vnf_id: FreeRadius-VNF - vf_module_id: FreeRadius-VF-module - vnf_name: FreeRadius-VNF-name - -# Server parameters, naming required by ONAP - image_name: ubuntu-16.04-daily - flavor_name: onap.small - pub_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDExKK9DuERvBQwdYbHzDw8en8pfg/1vEYHTIW2IS6+yhRH+jKncYVI/PHWjfM/ragWEipSyMHxfqhdlYylxVAYQKm1DTWCC9y3a6TUieFWn802Sb6YbEtXdYZWxlNWwD3Y/7c/zF7V6Oh30ZS3lMoncX9oh9nAM8GQL0m+4vcKMGX5am3S1qPslrcxhEEpOlFb9FX1jSy3aeHLb57aj0wp/g9WwWlDZ31FWensUZG6O0o2QUmMB0QOb2rIcFHlpRzF36i/2wKXT+xJxXEB38UwweJwohLRSo8sLqJvYRYjIxlZK2pgqyZalHq7GZBqfPyaLpXPUwMtE0oHV47zQABx root@qvocrobot-virtual-machine - key_name: FreeRadius-key - freeRadius_name_0: FreeRadius-VM-name - freeradius_ip: 10.0.0.100 - -# Network parameters, naming required by ONAP - onap_private_net_id: admin - public_net_id: admin diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.yaml b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.yaml deleted file mode 100755 index a699ca00e..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.yaml +++ /dev/null @@ -1,163 +0,0 @@ -heat_template_version: 2013-05-23 - -description: Heat template to deploy a FreeRadius - -parameters: -# Metadata required by ONAP - vnf_name: - type: string - label: VM name - description: The VM name - vnf_id: - type: string - label: VNF ID - description: The VNF ID is provided by ONAP - vf_module_id: - type: string - label: VF module ID - description: The VF Module ID is provided by ONAP - -# Server parameters, naming required by ONAP - image_name: - type: string - label: Image name or ID - description: Image to be used for compute instance - flavor_name: - type: string - label: Flavor - description: Type of instance (flavor) to be used - pub_key: - type: string - label: Public key - description: Public key to be installed on the compute instance - key_name: - type: string - label: Public key name - description: Public key name to be installed on the compute instance - freeRadius_name_0: - type: string - label: VM name - description: The VM name - -# Network parameters, naming required by ONAP - onap_private_net_id: - type: string - label: management network - description: The management network - onap_private_subnet_id: - type: string - label: management network - description: The management network - public_net_id: - type: string - label: control plane network - description: The control plane network - freeradius_ip: - type: string - label: freeradius vm ip address - description: freeradius vm ip address - -resources: - random-str: - type: OS::Heat::RandomString - properties: - length: 4 - - freeRadius_key: - type: OS::Nova::KeyPair - properties: - name: { get_param: key_name } - public_key: { get_param: pub_key } - save_private_key: false - - freeRadius_oam_security_group: - type: OS::Neutron::SecurityGroup - properties: - description: security group - name: - str_replace: - template: pre_base_rand - params: - pre: oam_sg_ - base: { get_param: vnf_name } - rand: { get_resource: random-str } - rules: [ - {remote_ip_prefix: 0.0.0.0/0, protocol: tcp, port_range_min: 22, port_range_max: 22}, - {remote_ip_prefix: 0.0.0.0/0, protocol: icmp}] - - freeRadius_control_plane_security_group: - type: OS::Neutron::SecurityGroup - properties: - description: security group - name: - str_replace: - template: pre_base_rand - params: - pre: cp_sg_ - base: { get_param: vnf_name } - rand: { get_resource: random-str } - rules: [ - {remote_ip_prefix: 0.0.0.0/0, protocol: tcp, port_range_min: 22, port_range_max: 22}, - {remote_ip_prefix: 0.0.0.0/0, protocol: icmp}] - - freeRadius_0_oam_port_0: - type: OS::Neutron::Port - properties: - name: - str_replace: - template: pre_base_rand - params: - pre: oam_port_ - base: { get_param: vnf_name } - rand: { get_resource: random-str } - network: { get_param: onap_private_net_id } - fixed_ips: [{"subnet": { get_param: onap_private_subnet_id }, "ip_address": { get_param: freeradius_ip }}] - security_groups: [{ get_resource: freeRadius_oam_security_group }] - - freeRadius_0_control_plane_port_0: - type: OS::Neutron::Port - properties: - name: - str_replace: - template: pre_base_rand - params: - pre: cp_port_ - base: { get_param: vnf_name } - rand: { get_resource: random-str } - network: { get_param: public_net_id } - security_groups: [{ get_resource: freeRadius_control_plane_security_group }] - - freeRadius_VM_settings: - type: OS::Heat::SoftwareConfig - properties: - config: | - #!/bin/bash - apt-get update - apt-get install -y freeradius - echo -e "password\npassword" | passwd cloud - sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config - service ssh restart - - - freeRadius_server_0: - type: OS::Nova::Server - properties: - image: { get_param: image_name } - flavor: { get_param: flavor_name } - name: { get_param: freeRadius_name_0 } - metadata: {vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }, vnf_name: { get_param: vnf_name }} - key_name: { get_resource: freeRadius_key } - networks: - - port: { get_resource: freeRadius_0_oam_port_0 } - - port: { get_resource: freeRadius_0_control_plane_port_0 } - user_data_format: RAW - user_data: | - #!/bin/bash - echo "!!! Install FreeRadius" - apt-get update - apt-get install -y freeradius - echo "!!! Setup password authentication for user cloud" - echo -e "password\npassword" | passwd cloud - sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config - service ssh restart - echo "!!! Done" diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius.cba b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius.cba deleted file mode 100755 index 37a74ddf008201a72bde3ef573a2bb2ce9f82eb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10020 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 diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Definitions/freeradius.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Definitions/freeradius.json deleted file mode 100755 index 76d8e74cd..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Definitions/freeradius.json +++ /dev/null @@ -1,224 +0,0 @@ -{ - "tosca_definitions_version": "controller_blueprint_1_0_0", - "metadata": { - "template_author": "Abdelmuhaimen Seaudi", - "author-email": "abdelmuhaimen.seaudi@orange.com", - "user-groups": "ADMIN, OPERATION", - "template_name": "freeradius", - "template_version": "1.0.0", - "template_tags": "test, freeradius, freeradius_cds" - }, - "imports": [{ - "file": "Definitions/data_types.json" - }, - { - "file": "Definitions/relationship_types.json" - }, - { - "file": "Definitions/artifact_types.json" - }, - { - "file": "Definitions/node_types.json" - }, - { - "file": "Definitions/policy_types.json" - }], - "dsl_definitions": { - "ipam-1": { - "type": "token-auth", - "url": "http://netbox-nginx:8080", - "token": "Token 0123456789abcdef0123456789abcdef01234567" - }, - "config-deploy-properties": { - "resolution-key": { - "get_input": "resolution-key" - }, - "freeradius_ip": { - "get_input": "freeradius_ip" - } - }, - "dynamic-db-source": { - "type": "maria-db", - "url": "jdbc:mysql://mariadb-galera:3306/sdnctl", - "username": "root", - "password": "secretpassword" - } - }, - "topology_template": { - "workflows": { - "resource-assignment": { - "steps": { - "resource-assignment": { - "description": "Resource Assign Workflow", - "target": "resource-assignment" - } - }, - "inputs": { - "template-prefix": { - "required": true, - "type": "list", - "entry_schema": { - "type": "string" - } - }, - "resource-assignment-properties": { - "description": "Dynamic PropertyDefinition for workflow(resource-assignment).", - "required": true, - "type": "dt-resource-assignment-properties" - } - }, - "outputs": { - "meshed-template": { - "type": "json", - "value": { - "get_attribute": ["resource-assignment", - "assignment-params"] - } - } - } - }, - "config-assign": { - "steps": { - "config-assign": { - "description": "Config Assign Workflow", - "target": "config-assign", - "activities": [{ - "call_operation": "" - }] - } - }, - "inputs": { - "resolution-key": { - "required": true, - "type": "string" - }, - "config-assign-properties": { - "description": "Dynamic PropertyDefinition for workflow(config-assign).", - "required": true, - "type": "dt-config-assign-properties" - } - }, - "outputs": { - "dry-run": { - "type": "json", - "value": { - "get_attribute": ["config-assign", - "assignment-params"] - } - } - } - }, - "config-deploy": { - "steps": { - "config-deploy": { - "description": "Resource Assign and Python Netconf Activation Workflow", - "target": "config-deploy-process", - "activities": [{ - "call_operation": "ComponentScriptExecutor.process" - }] - } - }, - "inputs": { - "resolution-key": { - "required": false, - "type": "string" - }, - "service-instance-id": { - "required": false, - "type": "string" - }, - "freeradius_ip": { - "required": false, - "type": "string" - }, - "config-deploy-properties": { - "description": "Dynamic PropertyDefinition for workflow(config-deploy).", - "required": true, - "type": "dt-config-deploy-properties" - } - } - } - }, - "node_templates": { - "resource-assignment": { - "type": "component-resource-resolution", - "interfaces": { - "ResourceResolutionComponent": { - "operations": { - "process": { - "inputs": { - "artifact-prefix-names": { - "get_input": "template-prefix" - } - } - } - } - } - }, - "artifacts": { - "vnf-template": { - "type": "artifact-template-velocity", - "file": "Templates/vnf-template.vtl" - }, - "vnf-mapping": { - "type": "artifact-mapping-resource", - "file": "Templates/vnf-mapping.json" - }, - "radius-template": { - "type": "artifact-template-velocity", - "file": "Templates/radius-template.vtl" - }, - "radius-mapping": { - "type": "artifact-mapping-resource", - "file": "Templates/radius-mapping.json" - } - } - }, - "config-assign": { - "type": "component-resource-resolution", - "interfaces": { - "ResourceResolutionComponent": { - "operations": { - "process": { - "inputs": { - "resolution-key": { - "get_input": "resolution-key" - }, - "store-result": true, - "artifact-prefix-names": ["userconfig"] - } - } - } - } - }, - "artifacts": { - "userconfig-template": { - "type": "artifact-template-velocity", - "file": "Templates/userconfig-template.vtl" - }, - "userconfig-mapping": { - "type": "artifact-mapping-resource", - "file": "Templates/userconfig-mapping.json" - } - } - }, - "config-deploy-process": { - "type": "component-script-executor", - "interfaces": { - "ComponentScriptExecutor": { - "operations": { - "process": { - "inputs": { - "script-type": "kotlin", - "script-class-reference": "org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts.SampleScriptComponent", - "instance-dependencies": [], - "dynamic-properties": "*config-deploy-properties" - } - } - } - } - } - } - } - } -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml deleted file mode 100755 index 92fb2aa48..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt deleted file mode 100755 index e0d36ca17..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt +++ /dev/null @@ -1,82 +0,0 @@ -package org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts - -import com.fasterxml.jackson.databind.node.ObjectNode -import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput -import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractComponentFunction -import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractScriptComponentFunction -import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.ComponentFunctionScriptingService - -import java.io.ByteArrayInputStream -import java.io.IOException -import java.io.InputStream -import org.apache.sshd.client.SshClient -import org.apache.sshd.client.channel.ClientChannel -import org.apache.sshd.client.future.AuthFuture -import org.apache.sshd.client.future.ConnectFuture -import org.apache.sshd.client.session.ClientSession -import org.apache.sshd.common.future.SshFutureListener -import org.apache.sshd.common.util.io.NoCloseInputStream -import org.apache.sshd.common.util.io.NoCloseOutputStream -import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.storedContentFromResolvedArtifactNB -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException -import org.onap.ccsdk.cds.controllerblueprints.core.asListOfString -import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils -import org.slf4j.LoggerFactory -import java.io.ByteArrayOutputStream -import java.util.* - -open class SampleScriptComponent : AbstractScriptComponentFunction() { - - private val log = LoggerFactory.getLogger(SampleScriptComponent::class.java)!! - - override suspend fun processNB(executionRequest: ExecutionServiceInput) { - log.info("Hello Kotlin!") - val resolution_key = getDynamicProperties("resolution-key").asText() - log.info("resolution_key: $resolution_key") - val payload = storedContentFromResolvedArtifactNB(resolution_key, "userconfig") - val payloadObject = JacksonUtils.jsonNode(payload) as ObjectNode - val freeradius_ip: String = payloadObject.get("freeradius_ip").asText() - log.info("freeradius_ip: $freeradius_ip") - val user_config: String = payloadObject.get("user_config").asText() - log.info("user_config: $user_config") - log.info("Waiting 2 minutes for VM to initialize") - Thread.sleep(120000) - val client = SshClient.setUpDefaultClient() - client.start() - log.info("SSH Client Service started successfully") - val session = client.connect("cloud", freeradius_ip, 22).verify(3000).session - session.addPasswordIdentity("password") - log.info("SSH Client authenticating...") - val authFuture = session.auth().verify(3000) - log.info("SSH client session($session) created") - log.info("SSH Authenticated: $authFuture.isSuccess()") - val command="echo '$user_config' | sudo tee -a /etc/freeradius/users" - log.info("Executing host($session) command($command)") - val channel = session.createExecChannel(command) - val outputStream = ByteArrayOutputStream() - channel!!.out = outputStream - channel!!.err = outputStream - channel!!.open().await() - //val waitMask = channel!!.waitFor(Collections.unmodifiableSet(EnumSet.of(ClientChannelEvent.CLOSED)), 3000) - //if (waitMask.contains(ClientChannelEvent.TIMEOUT)) { - // throw BluePrintProcessorException("Failed to retrieve command result in time: $command") - //} - Thread.sleep(3000) - val exitStatus = channel!!.exitStatus - //ClientChannel. .validateCommandExitStatusCode(command, exitStatus!!) - if (channel != null) { - channel!!.close() - } - if (client.isOpen) { - client.stop() - } - log.info(outputStream.toString()) - log.info("SSH Client Service stopped successfully") - - - } - - - override suspend fun recoverNB(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) { - } -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py deleted file mode 100755 index 2b88e8271..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (c) 2019 Bell Canada. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import netconf_constant -from common import ResolutionHelper -from time import sleep -from netconfclient import NetconfClient -from org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor import \ - NetconfComponentFunction - - -class ConfigDeploy(NetconfComponentFunction): - - def process(self, execution_request): - log = globals()[netconf_constant.SERVICE_LOG] - print(globals()) - rr = ResolutionHelper(self) - - # Get meshed template from DB - resolution_key = self.getDynamicProperties("resolution-key").asText() - payload = rr.retrieve_resolved_template_from_database(resolution_key, "userconfig") - print(payload) - - - def recover(self, runtime_exception, execution_request): - log.error("Exception in the script {}", runtime_exception) - print self.addError(runtime_exception.cause.message) - return None \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta deleted file mode 100755 index bc98c171a..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,6 +0,0 @@ -TOSCA-Meta-File-Version: 1.0.0 -CSAR-Version: 1.0 -Created-By: SEAUDI, Abdelmuhaimen -Entry-Definitions: Definitions/freeradius.json -Template-Tags: freeradius_CDS -Content-Type: application/vnd.oasis.bpmn \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-mapping.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-mapping.json deleted file mode 100755 index 271167d77..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-mapping.json +++ /dev/null @@ -1,613 +0,0 @@ -[ - { - "name": "radius_test_user", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_user", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "radius_test_password", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_password", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "freeradius_ip", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "freeradius_ip", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "cloud_env", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "openstack" - }, - "input-param": false, - "dictionary-name": "cloud_env", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf_module_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "${vf_module_name}" - }, - "input-param": false, - "dictionary-name": "vf_module_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "aic-cloud-region", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "aic-cloud-region", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "keypair", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "vlb_key" - }, - "input-param": false, - "dictionary-name": "keypair", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "nfc-naming-code", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "nfc-naming-code", - "dictionary-source": "processor-db", - "dependencies": [ - "vfccustomizationuuid" - ], - "version": 0 - }, - { - "name": "onap_private_net_cidr", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "onap_private_net_cidr", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "onap_private_net_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "onap_private_net_id", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "onap_private_subnet_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "onap_private_subnet_id", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "public_net_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "public_net_id", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "pub_key", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "pub_key", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "key_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "key_name", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "sec_group", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "sec_group", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "service-instance-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "service-instance-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf-module-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-module-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf-module-label", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-module-label", - "dictionary-source": "processor-db", - "dependencies": [ - "vf-module-model-customization-uuid" - ], - "version": 0 - }, - { - "name": "vf-module-model-customization-uuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-module-model-customization-uuid", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf-module-type", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-module-type", - "dictionary-source": "processor-db", - "dependencies": [ - "vf-module-model-customization-uuid" - ], - "version": 0 - }, - { - "name": "vf-naming-policy", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vf-naming-policy", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "vfccustomizationuuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vfccustomizationuuid", - "dictionary-source": "processor-db", - "dependencies": [ - "vf-module-model-customization-uuid" - ], - "version": 0 - }, - { - "name": "vnf_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnf_name", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "vm-type", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vm-type", - "dictionary-source": "processor-db", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnf-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-model-customization-uuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnf-model-customization-uuid", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnfc-model-invariant-uuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnfc-model-invariant-uuid", - "dictionary-source": "processor-db", - "dependencies": [ - "vfccustomizationuuid" - ], - "version": 0 - }, - { - "name": "vnfc-model-version", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnfc-model-version", - "dictionary-source": "processor-db", - "dependencies": [ - "vfccustomizationuuid" - ], - "version": 0 - } -] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-template.vtl b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-template.vtl deleted file mode 100755 index f4c57d4cb..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-template.vtl +++ /dev/null @@ -1,211 +0,0 @@ -{ - "resource-accumulator-resolved-data": [ - { - "param-name": "radius_test_user", - "param-value": "${radius_test_user}" - }, - { - "param-name": "radius_test_password", - "param-value": "${radius_test_password}" - }, - { - "param-name": "freeradius_ip", - "param-value": "${freeradius_ip}" - }, - { - "param-name": "service-instance-id", - "param-value": "${service-instance-id}" - }, - { - "param-name": "vnf_id", - "param-value": "${vnf-id}" - }, - { - "param-name": "vnf_name", - "param-value": "${vnf_name}" - }, - { - "param-name": "vnf_model_customization_uuid", - "param-value": "${vnf-model-customization-uuid}" - }, - { - "param-name": "vf_module_id", - "param-value": "${vf-module-id}" - }, - { - "param-name": "vf_module_type", - "param-value": "${vf-module-type}" - }, - { - "param-name": "vf_module_customization_uuid", - "param-value": "${vf-module-model-customization-uuid}" - }, - { - "param-name": "vfc_customization_uuid", - "param-value": "${vfccustomizationuuid}" - }, - { - "param-name": "aic-cloud-region", - "param-value": "${aic-cloud-region}" - }, - { - "param-name": "vm-type", - "param-value": "${vm-type}" - }, - { - "param-name": "vnfc-model-customization-uuid", - "param-value": "${vfccustomizationuuid}" - }, - { - "param-name": "vnfc-model-invariant-uuid", - "param-value": "${vnfc-model-invariant-uuid}" - }, - { - "param-name": "vnfc-model-version", - "param-value": "${vnfc-model-version}" - }, - { - "param-name": "nfc-naming-code", - "param-value": "${nfc-naming-code}" - }, - { - "param-name": "cloud_env", - "param-value": "openstack" - }, - { - "param-name": "key_name", - "param-value": "${key_name}" - }, - { - "param-name": "pub_key", - "param-value": "${pub_key}" - }, - { - "param-name": "public_net_id", - "param-value": "${public_net_id}" - }, - { - "param-name": "onap_private_net_id", - "param-value": "${onap_private_net_id}" - }, - { - "param-name": "onap_private_subnet_id", - "param-value": "${onap_private_subnet_id}" - }, - { - "param-name": "onap_private_net_cidr", - "param-value": "${onap_private_net_cidr}" - }, - { - "param-name": "sec_group", - "param-value": "${sec_group}" - } - ], - "capability-data": [ - { - "capability-name": "generate-name", - "key-mapping": [ - { - "payload": [ - { - "param-name": "resource-name", - "param-value": "freeRadius_name_0" - }, - { - "param-name": "resource-value", - "param-value": "${freeRadius_name_0}" - }, - { - "param-name": "external-key", - "param-value": "${vf-module-id}_freeRadius_name_0" - }, - { - "param-name": "policy-instance-name", - "param-value": "${vf-naming-policy}" - }, - { - "param-name": "naming-type", - "param-value": "VNFC" - }, - { - "param-name": "VNF_NAME", - "param-value": "${vnf_name}" - }, - { - "param-name": "NFC_NAMING_CODE", - "param-value": "${nfc-naming-code}" - } - ], - "output-key-mapping": [ - { - "resource-name": "freeRadius_name_0", - "resource-value": "${freeRadius_name_0}" - } - ] - }, - { - "payload": [ - { - "param-name": "resource-name", - "param-value": "vf-module-name" - }, - { - "param-name": "resource-value", - "param-value": "${vf-module-name}" - }, - { - "param-name": "external-key", - "param-value": "${vf-module-id}_vf-module-name" - }, - { - "param-name": "policy-instance-name", - "param-value": "${vf-naming-policy}" - }, - { - "param-name": "naming-type", - "param-value": "VF-MODULE" - }, - { - "param-name": "VNF_NAME", - "param-value": "${vnf_name}" - }, - { - "param-name": "VF_MODULE_LABEL", - "param-value": "${vf-module-label}" - }, - { - "param-name": "VF_MODULE_TYPE", - "param-value": "${vf-module-type}" - } - ], - "output-key-mapping": [ - { - "resource-name": "vf-module-name", - "resource-value": "${vf-module-name}" - } - ] - } - ] - }, - { - "capability-name": "aai-vf-module-put", - "key-mapping": [ - { - "payload": [ - { - "param-name": "vf-module", - "param-value": "vf-module" - } - ], - "output-key-mapping": [ - { - "resource-name": "aai-vf-module-put", - "resource-value": "${status}" - } - ] - } - ] - } - - ] -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-mapping.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-mapping.json deleted file mode 100755 index 7fb2978af..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-mapping.json +++ /dev/null @@ -1,112 +0,0 @@ -[ - { - "name": "service-instance-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "service-instance-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "vnf-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - - "name": "radius_test_user", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_user", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "freeradius_ip", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "freeradius_ip", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - }, - { - "name": "radius_test_password", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_password", - "dictionary-source": "sdnc", - "dependencies": [ - "service-instance-id", - "vnf-id" - ], - "version": 0 - } -] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-template.vtl b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-template.vtl deleted file mode 100755 index 6a23c3f83..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-template.vtl +++ /dev/null @@ -1 +0,0 @@ -{"freeradius_ip":"$freeradius_ip","user_config":"$radius_test_user Cleartext-Password := \"$radius_test_password\""} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-mapping.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-mapping.json deleted file mode 100755 index 55f0a698e..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-mapping.json +++ /dev/null @@ -1,375 +0,0 @@ -[ - { - "name": "radius_test_user", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_user", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "radius_test_password", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "radius_test_password", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "cloud_env", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "openstack" - }, - "input-param": false, - "dictionary-name": "cloud_env", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "flavor_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "flavor_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "image_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "image_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "pub_key", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs84Cy8+qi/jvucay0BwFtOq3ian0ulTXFGxkZcZCR0N48j88pbHJaEqb9e25MAsrfH+7Etb9Kd5nbBThEL/i0AyHXnDsc80Oq0sqlLcfLo3SGSurkrNoRofHboJ5Hn+N9SlWN5FCQGbTx1w3rjqR4LasAI6XxH9xpXSFyyge6ysVXH0cYaZ8sg98nFZa1fPJR9L8COjZvF+EYudub2RC5HVyV/sx7bliNFo9JwQh6du1abG4G7ZDjTIcYwYp21iq52UzWU28RVcAyY6AQZJu2lHLdsr8fPvyeWZpC5EqGsxI1G609m9G/dURRKwYfez/f2ATzpn5QjEX7LrLWBM8r Generated-by-Nova" - }, - "input-param": false, - "dictionary-name": "pub_key", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "onap_private_net_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "onap_private_net_id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "onap_private_subnet_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "onap_private_subnet_id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "public_net_id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "public_net_id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "onap_private_net_cidr", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "onap_private_net_cidr", - "dictionary-source": "processor-db", - "dependencies": [], - "version": 0 - }, - { - "name": "sec_group", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - } - }, - "input-param": false, - "dictionary-name": "sec_group", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "service-instance-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "service-instance-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-id", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "vnf-id", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf-model-customization-uuid", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "vnf-model-customization-uuid", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "vf-naming-policy", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "SDNC_Policy.Config_MS_ONAP_VNF_NAMING_TIMESTAMP" - }, - "input-param": false, - "dictionary-name": "vf-naming-policy", - "dictionary-source": "default", - "dependencies": [], - "version": 0 - }, - { - "name": "vnf_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "${vnf_name}" - }, - "input-param": false, - "dictionary-name": "vnf_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "aic-cloud-region", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "" - }, - "input-param": false, - "dictionary-name": "aic-cloud-region", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - }, - { - "name": "key_name", - "property": { - "description": "", - "required": false, - "type": "string", - "status": "", - "constraints": [ - {} - ], - "entry_schema": { - "type": "" - }, - "default": "olc-key" - }, - "input-param": false, - "dictionary-name": "key_name", - "dictionary-source": "input", - "dependencies": [], - "version": 0 - } -] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-template.vtl b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-template.vtl deleted file mode 100755 index 8d1cf3b09..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-template.vtl +++ /dev/null @@ -1,166 +0,0 @@ -{ - "resource-accumulator-resolved-data": [ - { - "param-name": "radius_test_user", - "param-value": "${radius_test_user}" - }, - { - "param-name": "radius_test_password", - "param-value": "${radius_test_password}" - }, - { - "param-name": "service-instance-id", - "param-value": "${service-instance-id}" - }, - { - "param-name": "vnf_id", - "param-value": "${vnf-id}" - }, - { - "param-name": "vf-naming-policy", - "param-value": "${vf-naming-policy}" - }, - { - "param-name": "vnf-model-customization-uuid", - "param-value": "${vnf-model-customization-uuid}" - }, - { - "param-name": "aic-cloud-region", - "param-value": "${aic-cloud-region}" - }, - { - "param-name": "onap_private_net_id", - "param-value": "${onap_private_net_id}" - }, - { - "param-name": "image_name", - "param-value": "${image_name}" - }, - { - "param-name": "onap_private_subnet_id", - "param-value": "${onap_private_subnet_id}" - }, - { - "param-name": "vfccustomizationuuid", - "param-value": "${vfccustomizationuuid}" - }, - { - "param-name": "vf-module-model-customization-uuid", - "param-value": "${vf-module-model-customization-uuid}" - }, - { - "param-name": "cloud_env", - "param-value": "${cloud_env}" - }, - { - "param-name": "flavor_name", - "param-value": "${flavor_name}" - }, - { - "param-name": "pub_key", - "param-value": "${pub_key}" - }, - { - "param-name": "sec_group", - "param-value": "${sec_group}" - }, - { - "param-name": "public_net_id", - "param-value": "${public_net_id}" - }, - { - "param-name": "onap_private_net_cidr", - "param-value": "${onap_private_net_cidr}" - }, - { - "param-name": "key_name", - "param-value": "${key_name}" - } - ], - "capability-data": [{ - "capability-name": "generate-name", - "key-mapping": [{ - "payload": [{ - "param-name": "resource-name", - "param-value": "vnf_name" - }, - { - "param-name": "resource-value", - "param-value": "${vnf_name}" - }, - { - "param-name": "external-key", - "param-value": "${vnf-id}_vnf_name" - }, - { - "param-name": "policy-instance-name", - "param-value": "${vf-naming-policy}" - }, - { - "param-name": "naming-type", - "param-value": "VNF" - }, - { - "param-name": "AIC_CLOUD_REGION", - "param-value": "${aic-cloud-region}" - }], - "output-key-mapping": [{ - "resource-name": "vnf_name", - "resource-value": "${vnf_name}" - }] - }] - }, - { - "capability-name": "aai-vnf-put", - "key-mapping": [ - { - "payload": [ - { - "param-name": "generic-vnf", - "param-value": "generic-vnf" - } - ], - "output-key-mapping": [ - { - "resource-name": "aai-vnf-put", - "resource-value": "${status}" - } - ] - } - ] - }, - { - "capability-name": "netbox-ip-assign", - "key-mapping": [ - - - { - "payload": [ - { - "param-name": "service-instance-id", - "param-value": "${service-instance-id}" - }, - { - "param-name": "prefix-id", - "param-value": "3" - }, - { - "param-name": "vnf-id", - "param-value": "${vnf-id}" - }, - { - "param-name": "external_key", - "param-value": "${vnf-id}-freeradius_ip" - } - ], - "output-key-mapping": [ - { - "resource-name": "freeradius_ip", - "resource-value": "${freeradius_ip}" - } - ] - }, - ] - } - ] -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius.zip b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius.zip deleted file mode 100755 index 114ef5402c55179e129bf1c2b3730676b73c12db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2280 zcmZ{mcT^L|7RD3Wh8B>PfYhhRlF)@9MHbZ1LI){=2!SMYfdG${BGSu(G^vUxMUg61 zFp&~K2?1Fk2$+CW6#@vNNMC%r`{cYmZ|0o&&YeGgbLX5p_ZtfoGm8KK0003lCySXo zsD9LlK8nnM008%qn(CPu=_9Re6uj`){VEr&08C|sZkmlWoVDy>cQ$1hEiIPlVeAzU zXo=M`!bXZ4@+sW4&jigI;AM67)b6t8nDdhfa56HKv#FqV7vmxFC;Y+mGw|bAa3g__3+jc2ThQnx{hs( zd}8Y3M6#P3Yhtt*D7K|NQukhd!K#BvJy}C$Ys&Zq3omb{Xr|A`-e&5s3phNTIk}?| z#J(xp@?Z=e@Okf&B_>=m{vbA!J=XDE0#aYXc4I(8>=Xk6id@I+`0cexw9s|zinZ3a zE0(Y8T3xuXpTDFqKDas2E|663!_0v{7lkkZiCYFhF||H z$^s`H7q%BQ5KFF)IwM@%9b&po6(j_ts;9TjnT+;$%B1X=Jh>dK4KMZ8pu(p^?krb{ zbcSZ%9pthzZmxICi;0ukEO4pZRPbUYDK<5gr@}Q~ZqmNWSWzdUvBq!TM z0vhgZe?|C(N;1AmWeSv2B4!so8K}17U1!VnQ@KRYOfPj$b^o`VBdy0{R~Pf~1-LV=nr~4X0p}kO zEy^;5;=*tWRSw!iTNwzVp+Kg-pMh)ByN<2MG{&@tCr|yVULa3=U+nC7WQ#`53I$9Mq`*yd z4sr?LGPes|eDm^AO6>tWdx%3_&bTSuzRZsb(@r)s-{ABtjAj7<_>W!)=Z^~e)z#N$ z#eVwwTLf>U`n$uKS)Cx}*$Gq&gvbi7XT4~3O1v$hnb+f^5C0v*)KZ#A#o?B?Y#$${ zFQl#dWV|#8oia^dj||r?8hd5pp)|mURiYISJ0$~Z%BS0*<~K#J5uxDt7-(>5D3&&? zcp7+z1M*?=} z%U#s_&=Cn#ddtN;q#y7UR&?6umJy(Kt)nX$H&qkq=!U1l=GTpax77W2>&*)tS!$%L z14(mZX}PYjIqgn7g{FJ!Jet9_3NvgmI!V%ik$Fcmh>hT^*1_V9?CMWdbyHVLQ^X9Z z#6G4A6V8(J1zhs%!hNd!6`*HB@ky_ck@-f-=^)vbI*220QPS3XP;&<5} z-8>QJ(@HPdmZa|DmrXfx;__!thGl|OaZ0B!(PS9XRac<*##bu$rrc8adYt}!tSX*e zYoybVqr{yl$eu&nwFcsiuSypE%*gH$;VKjeWs^%2^rE{qN@$7>-OR59H8niSOT=iN z!53}YeU_|Skpzj0x=f9O@3{!WNGNWadX@y{ z@coOkTh<1lIP~QGW#Q_r@^9W5Z+ti4rFA~m@!IYgHxOj@K1pqcUg)xgY+ZMY)I`;; zf!w*S8V9}Z!6@V|GFyMk5uH@Q@_O77L4mKRRON<-ecn~( zPfPE5-kL-676-b$5xD)t1A!PnZ#gQ1abzD@f;CEU8#BCKY(m<4^YAdYt{wK6{+abL8!RvA=iS?Wgb2AD1`hx&QzG diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/MANIFEST.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/MANIFEST.json deleted file mode 100755 index 5719ac888..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/MANIFEST.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "radius", - "description": "", - "data": [ - { - "file": "radius.yaml", - "type": "HEAT", - "isBase": "true", - "data": [ - { - "file": "radius.env", - "type": "HEAT_ENV" - } - ] - } - ] -} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.env b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.env deleted file mode 100755 index bee325592..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.env +++ /dev/null @@ -1,17 +0,0 @@ -parameters: -# Metadata required by ONAP - vnf_id: FreeRadius-VNF - vf_module_id: FreeRadius-VF-module - vnf_name: FreeRadius-VNF-name - -# Server parameters, naming required by ONAP - image_name: ubuntu-16.04-daily - flavor_name: onap.small - pub_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDExKK9DuERvBQwdYbHzDw8en8pfg/1vEYHTIW2IS6+yhRH+jKncYVI/PHWjfM/ragWEipSyMHxfqhdlYylxVAYQKm1DTWCC9y3a6TUieFWn802Sb6YbEtXdYZWxlNWwD3Y/7c/zF7V6Oh30ZS3lMoncX9oh9nAM8GQL0m+4vcKMGX5am3S1qPslrcxhEEpOlFb9FX1jSy3aeHLb57aj0wp/g9WwWlDZ31FWensUZG6O0o2QUmMB0QOb2rIcFHlpRzF36i/2wKXT+xJxXEB38UwweJwohLRSo8sLqJvYRYjIxlZK2pgqyZalHq7GZBqfPyaLpXPUwMtE0oHV47zQABx root@qvocrobot-virtual-machine - key_name: FreeRadius-key - freeRadius_name_0: FreeRadius-VM-name - freeradius_ip: 10.0.0.100 - -# Network parameters, naming required by ONAP - onap_private_net_id: admin - public_net_id: admin diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.yaml b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.yaml deleted file mode 100755 index a699ca00e..000000000 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.yaml +++ /dev/null @@ -1,163 +0,0 @@ -heat_template_version: 2013-05-23 - -description: Heat template to deploy a FreeRadius - -parameters: -# Metadata required by ONAP - vnf_name: - type: string - label: VM name - description: The VM name - vnf_id: - type: string - label: VNF ID - description: The VNF ID is provided by ONAP - vf_module_id: - type: string - label: VF module ID - description: The VF Module ID is provided by ONAP - -# Server parameters, naming required by ONAP - image_name: - type: string - label: Image name or ID - description: Image to be used for compute instance - flavor_name: - type: string - label: Flavor - description: Type of instance (flavor) to be used - pub_key: - type: string - label: Public key - description: Public key to be installed on the compute instance - key_name: - type: string - label: Public key name - description: Public key name to be installed on the compute instance - freeRadius_name_0: - type: string - label: VM name - description: The VM name - -# Network parameters, naming required by ONAP - onap_private_net_id: - type: string - label: management network - description: The management network - onap_private_subnet_id: - type: string - label: management network - description: The management network - public_net_id: - type: string - label: control plane network - description: The control plane network - freeradius_ip: - type: string - label: freeradius vm ip address - description: freeradius vm ip address - -resources: - random-str: - type: OS::Heat::RandomString - properties: - length: 4 - - freeRadius_key: - type: OS::Nova::KeyPair - properties: - name: { get_param: key_name } - public_key: { get_param: pub_key } - save_private_key: false - - freeRadius_oam_security_group: - type: OS::Neutron::SecurityGroup - properties: - description: security group - name: - str_replace: - template: pre_base_rand - params: - pre: oam_sg_ - base: { get_param: vnf_name } - rand: { get_resource: random-str } - rules: [ - {remote_ip_prefix: 0.0.0.0/0, protocol: tcp, port_range_min: 22, port_range_max: 22}, - {remote_ip_prefix: 0.0.0.0/0, protocol: icmp}] - - freeRadius_control_plane_security_group: - type: OS::Neutron::SecurityGroup - properties: - description: security group - name: - str_replace: - template: pre_base_rand - params: - pre: cp_sg_ - base: { get_param: vnf_name } - rand: { get_resource: random-str } - rules: [ - {remote_ip_prefix: 0.0.0.0/0, protocol: tcp, port_range_min: 22, port_range_max: 22}, - {remote_ip_prefix: 0.0.0.0/0, protocol: icmp}] - - freeRadius_0_oam_port_0: - type: OS::Neutron::Port - properties: - name: - str_replace: - template: pre_base_rand - params: - pre: oam_port_ - base: { get_param: vnf_name } - rand: { get_resource: random-str } - network: { get_param: onap_private_net_id } - fixed_ips: [{"subnet": { get_param: onap_private_subnet_id }, "ip_address": { get_param: freeradius_ip }}] - security_groups: [{ get_resource: freeRadius_oam_security_group }] - - freeRadius_0_control_plane_port_0: - type: OS::Neutron::Port - properties: - name: - str_replace: - template: pre_base_rand - params: - pre: cp_port_ - base: { get_param: vnf_name } - rand: { get_resource: random-str } - network: { get_param: public_net_id } - security_groups: [{ get_resource: freeRadius_control_plane_security_group }] - - freeRadius_VM_settings: - type: OS::Heat::SoftwareConfig - properties: - config: | - #!/bin/bash - apt-get update - apt-get install -y freeradius - echo -e "password\npassword" | passwd cloud - sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config - service ssh restart - - - freeRadius_server_0: - type: OS::Nova::Server - properties: - image: { get_param: image_name } - flavor: { get_param: flavor_name } - name: { get_param: freeRadius_name_0 } - metadata: {vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }, vnf_name: { get_param: vnf_name }} - key_name: { get_resource: freeRadius_key } - networks: - - port: { get_resource: freeRadius_0_oam_port_0 } - - port: { get_resource: freeRadius_0_control_plane_port_0 } - user_data_format: RAW - user_data: | - #!/bin/bash - echo "!!! Install FreeRadius" - apt-get update - apt-get install -y freeradius - echo "!!! Setup password authentication for user cloud" - echo -e "password\npassword" | passwd cloud - sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config - service ssh restart - echo "!!! Done" diff --git a/docs/guides/onap-user/design/parameter_resolution/index.rst b/docs/guides/onap-user/design/parameter_resolution/index.rst index ec09d6309..58bc82aa6 100644 --- a/docs/guides/onap-user/design/parameter_resolution/index.rst +++ b/docs/guides/onap-user/design/parameter_resolution/index.rst @@ -10,17 +10,20 @@ VNF Parameter resolution templating Overview -------- -When instantiating a Service composed of PNF, VNF or CNF there is the need to -get some values for some parameters. +When instantiating a Service composed of connectivity, PNF, +VNF or CNF there is the need to set the parameter values for the +created instances. For example, it may be necessary to provide a VNF management @ip Address or a VNF instance name. Those parameters can be necessary to create cloud resources or to configure the VNF at application level. -The initial implementation of ONAP required operators to provide -preload data spreadsheet for each PNF/VNF/CNF Instance that is being -instantiated via ONAP which was error prone and was not operationally -a scalable solution for telcos. As part of the ONAP CDS component introduction +In the first releases of ONAP the operator needed to provide these parameters +as preload data via datasheet or API call before instantiating each +PNF/VNF/CNF. +This was an error-prone manual step that interferes with an automated and +scalable service instantiation. +As part of the ONAP CDS component introduction in Casablanca release, the user, that wants to instantiate a new VNF/CNF, does not need to get and provide those data. @@ -58,36 +61,79 @@ The purpose of the following text is to describe various files and content that are necessary to the CDS controller to resolve any parameters. To illustrate the subject, let's take an example: a service composed of -a freeradius VNF. +an "ubuntu" VNF. That service will be called "ubuntuCDS" in ONAP SDC +for that example. -That software will be installed on a simple ubuntu image. +That VNF will be based on a simple ubuntu image. That VF will be called +ubuntuCDS in ONAP SDC for that example. +WARNING: all operations need to be adapted to your context +(platform, service, identifiers...) + +Pre-requisite +------------- + +There are two problems with ONAP ElAlto release: + +**wrong Directed Graphs** + +In ONAP Elalto, a problem was detected about Directed Graphs: JIRA_SDNC_949_ + +The workaround is to upload/replace the following two Directed Graph in SDNC +(via DG Builder UI for example). + +VNF topology assign: DG_VNF_ASSIGN_. + +VF-Module topology assign: DG_VFMODULE_ASSIGN_. + + +**wrong URL in CDS-UI pod** + +CDS-UI pod needs to communicate with CDS BluePrint processor to perform +"enrichment", "publish", "deploy" operations. + +The URL is not correct in the OOM file used to deploy CDS UI. + +If you have permission, you can change the url via: + +:: + + kubectl edit deployment -n onap {{cds ui pod id}} + +API_BLUEPRINT_CONTROLLER_HTTP_BASE_URL parameter must have the following value + +:: + + http://cds-blueprints-processor-http:8080/api/v1 + + +Those problems should be corrected in next ONAP release. Design process -------------- - * `Step 1 : identify the parameters needed for instantiation`_ + * `Step 1: identify the parameters needed for instantiation`_ * `Step 2: identify the parameters needed for post-instantiation`_ - * `Step 3: identify the data source for each parameter`_ + * `Step 3: identify the resolution method for each parameter`_ * `Step 4: add new data definition in CDS resource dictionary`_ * `Step 5: write template files`_ * `Step 6: write mapping files`_ * `Step 7: write scripts`_ - * `Step 8: write the "CDS blueprint" file`_ + * `Step 8: write the "blueprint" file`_ * `Step 9: build the "Controller Blueprint Archive” (cba)`_ * `Step 10: attached the cba to a service definition`_ * `Step 11: distribute the service`_ * `Step 12: instantiate the service and check`_ -Step 1 : identify the parameters needed for instantiation ---------------------------------------------------------- +Step 1: identify the parameters needed for instantiation +-------------------------------------------------------- -To instantiate a freeradius VNF, a Heat Template can be used. Several +To instantiate an "ubuntu" VNF, a Heat Template can be used. Several parameters are defined in that template: vnf_name, image_name, management @ip... -This Heat Template is a first place to find the parameters that need +This Heat Template is a first place to identify the parameters that need to be resolved. Our example: @@ -96,274 +142,128 @@ Our example: parameters: # Metadata required by ONAP - vnf_id: FreeRadius-VNF - vf_module_id: FreeRadius-VF-module - vnf_name: FreeRadius-VNF-name + vnf_id: ubuntuCDS-VNF + vf_module_id: ubuntuCDS-VF-module + vnf_name: ubuntuCDS-VNF-name # Server parameters, naming required by ONAP - image_name: ubuntu-16.04-daily - flavor_name: onap.small - pub_key: ssh-rsa AAAAB3Nza...UwMtE0oHV47zQABx root@qvocrobot-virtual-machine - key_name: FreeRadius-key - freeRadius_name_0: FreeRadius-VM-name - freeradius_ip: 10.0.0.100 + ubuntuCDS_image_name: ubuntu-18 + ubuntuCDS_flavor_name: onap.small + ubuntuCDS_pub_key: ssh-rsa AAAAB3VHCx...vVL8l1BrX3BY0R8D imported-openssh-key + ubuntuCDS_name_0: ubuntuCDS # Network parameters, naming required by ONAP - onap_private_net_id: admin - public_net_id: admin - - -In the following section, only part of those parameters will be automated -by CDS (just for illustration). - -- vnf_name -- flavor_name -- pub_key -- image_name -- freeradius_ip - -In real, all parameters need to be processed -(or at least those that change from one VNF instance to the other) + admin_plane_net_name: admin Step 2: identify the parameters needed for post-instantiation ------------------------------------------------------------- -Also, a freeradius VNF is software that will be able to accept or reject -some connection requests. Only declared "users" can be accepted by -the freeradius. - -To be able to proceed, it is necessary to declare (=configure) some "users" -in a file located in /etc/freeradius/users in the VM where the freeradius -software is installed. +Post-instantiation activity will occur after the VNF is instantiated. -At this step, the designer needs to know the VNF specificities. It is -application-level parameters. For example: configure a firewall rule in -a firewall VNF, declare a "user" in a AAA radius VNF... +Typically, it can be adding a first firewall rule in a firewall VNF. -In the freeradius example (an opensource AAA radius solution), -the following parameters can be automated via CDS: +In the ubuntuCDS example, there is no such parameter. -- user_name -- user_password -Step 3: identify the data source for each parameter ---------------------------------------------------- - -The parameter list that the Designer decided to automate: - -- vnf_name -- flavor_name -- pub_key -- image_name -- freeradius_ip -- user_name -- user_password +Step 3: identify the resolution method for each parameter +--------------------------------------------------------- Here after the decision/solution that the designer may take: -**vnf_name** will be resolved using a "naming" application (micro-service), -provided by ONAP. +**vnf_name** will be resolved via an input that will be provided +in the instantiation request. -**image_name** will be resolved via a default value in the template +**ubuntuCDS_image_name** will be resolved via an input that will be provided +in the instantiation request. + +**ubuntuCDS_flavor_name** will be resolved via an input that will be provided +in the instantiation request. -**flavor_name** will be resolved via an input that will be provided +**ubuntuCDS_pub_key** will be resolved via an input that will be provided in the instantiation request. -**pub_key** will be resolved via an input that will be provided +**admin_plane_net_name** will be resolved via an input that will be provided in the instantiation request. -**freeradius_ip** will be resolved using an IP Address Management (IPAM) -application, provided by ONAP (Netbox). +Service Designer needs also to know that some parameters will be +automatically resolved by ONAP SO and/or ONAP SDNC. + +- service-instance-id +- vnf-id +- vf_module_id + +For each resolution method, Service Designer needs to identify all +necessary parameters that must be provided to the resoluton method +in order to obtain the resolution. + +Also, Service Designer needs to know that ONAP will instantiate +a service, a list of VNF that are composing the service and, for each VNF, +a "VF-module" will be instantiated. -**user_name** and **user_password** will be resolved via inputs -that will be provided in the instantiation request. Step 4: add new data definition in CDS resource dictionary ---------------------------------------------------------- In CDS, there is a database that will contain all resource Definitions -in order to be able to re-use those resources. +in order to be able to re-use those resources from one service to an other. -Service Designer needs to check about existing resources in the disctionary. +Service Designer needs to check about existing resource definitions +in the dictionary. By default, some resources are pre-loaded when installing ONAP platform. Preloaded resources (parameter definition): Resources_. -For the freeradius use-case, there are 3 resources to add -in the resource dictionary: +Be careful: the content of the resource dictionary is not the same from +one ONAP release to an other. -:: +If Service Designer sees that there is an existing parameter +that corresponds to the need, he has the possibility to re-use it +in the mapping file(s), but maybe with a different name. - curl -k 'https://cds-ui:30497/resourcedictionary/save' -X POST -H 'Content-type: application/json' \ - -d '{ - "name": "radius_test_user", - "tags": "radius_test_user", - "data_type": "string", - "description": "radius_test_user", - "entry_schema": "string", - "updatedBy": "Seaudi, Abdelmuhaimen ", - "definition": { - "tags": "radius_test_user", - "name": "radius_test_user", - "property": { - "description": "radius_test_user", - "type": "string" - }, - "updated-by": "Seaudi, Abdelmuhaimen ", - "sources": { - "input": { - "type": "source-input" - }, - "default": { - "type": "source-default", - "properties": {} - }, - "sdnc": { - "type": "source-rest", - "properties": { - "verb": "GET", - "type": "JSON", - "url-path": "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/radius_test_user", - "path": "/param/0/value", - "input-key-mapping": { - "service-instance-id": "service-instance-id", - "vnf-id": "vnf-id" - }, - "output-key-mapping": { - "radius_test_user": "value" - }, - "key-dependencies": ["service-instance-id", - "vnf-id"] - } - } - } - } - }' - - -:: - - curl -k 'https://cds-ui:30497/resourcedictionary/save' -X POST -H 'Content-type: application/json' \ - '{ - "name": "radius_test_password", - "tags": "radius_test_password", - "data_type": "string", - "description": "radius_test_password", - "entry_schema": "string", - "updatedBy": "Seaudi, Abdelmuhaimen ", - "definition": { - "tags": "radius_test_password", - "name": "radius_test_password", - "property": { - "description": "radius_test_password", - "type": "string" - }, - "updated-by": "Seaudi, Abdelmuhaimen ", - "sources": { - "input": { - "type": "source-input" - }, - "default": { - "type": "source-default", - "properties": {} - }, - "sdnc": { - "type": "source-rest", - "properties": { - "verb": "GET", - "type": "JSON", - "url-path": "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/radius_test_password", - "path": "/param/0/value", - "input-key-mapping": { - "service-instance-id": "service-instance-id", - "vnf-id": "vnf-id" - }, - "output-key-mapping": { - "radius_test_password": "value" - }, - "key-dependencies": ["service-instance-id", - "vnf-id"] - } - } - } - } - }' - - -:: - - curl -k 'https://cds-ui:30497/resourcedictionary/save' -X POST -H 'Content-type: application/json' \ - '{ - "name": "freeradius_ip", - "tags": "freeradius_ip", - "data_type": "string", - "description": "freeradius_ip", - "entry_schema": "string", - "updatedBy": "Seaudi, Abdelmuhaimen ", - "definition": { - "tags": "freeradius_ip", - "name": "freeradius_ip", - "property": { - "description": "freeradius_ip", - "type": "string" - }, - "updated-by": "Seaudi, Abdelmuhaimen ", - "sources": { - "input": { - "type": "source-input" - }, - "default": { - "type": "source-default", - "properties": {} - }, - "sdnc": { - "type": "source-rest", - "properties": { - "verb": "GET", - "type": "JSON", - "url-path": "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/freeradius_ip", - "path": "/param/0/value", - "input-key-mapping": { - "service-instance-id": "service-instance-id", - "vnf-id": "vnf-id" - }, - "output-key-mapping": { - "freeradius_ip": "value" - }, - "key-dependencies": ["service-instance-id", - "vnf-id"] - } - } - } - } - }' +For example, "image_name" is already defined in the resource dictionary but, +it is named "freeRadius_image_name" in the Heat files. +For the ubuntuCDS example, there is no need to add any entry in the +data_dictionary +"curls" requests example to declare a new resource +:download:`Here ` Step 5: write template files ---------------------------- -In this example, Designer needs to create 3 "templates". +In this Ubuntu example, Designer needs to create 2 "templates" files. +Naming of those files is important. For VNF, prefix name must be equal to the +VF name in ONAP SDC. For the VFmodule, prefix name must be equal to the name +of the Heat template. -- VNF level :download:`VNF_template_file ` -- VFmodule level :download:`VFmodule_template_file ` -- post-instantiation VNF level :download:`VNF_config_template_file ` +- VNF level :download:`VNF_template_file ` +- VF-module level :download:`VFmodule_template_file ` CDS makes use of "velocity template" or "Jinja template" files. This way, CDS is able to generate the desired datastructure with resolved values, that will then be sent to the target system: -- openstack when instantiating the VNF/VF-module +- openstack when instantiating the Heat stack - instantiated VNF when doing some post-instantiation operation There are two sections in each velocity file: - "resource-accumulator-resolved-data": a list of all parameters -- "capability-data": a list of "capabilities" to process and resolv a parameter +- "capability-data": a list of "capabilities" to process and resolve + a parameter -ONAP SDNC provides some "capabilities": +A capability can be an other way to resolve a parameter, +using a directed graph. + +A capability may also be an action to be performed such as modifying +a data in ONAP AAI. + +ONAP SDNC provides those "capabilities": - generate-name - vlan-tag-assign @@ -373,16 +273,29 @@ ONAP SDNC provides some "capabilities": There is an SDNC Directed Graph associated to each of those "capability". -Service Designer needs to know about those capabilitie with their -input/output, in order to re-use them. +Service Designer needs to know about those capabilities with their +input/output, in order to re-use them. Especially, Service Designer needs +to know inputs because those inputs need to be part of the templates. -In case, Service Designer wants to use a new capability, a solution will be -to create a Directed Graph and update the Self-serve-vnf-assign and/or -Self-serve-vf-module-assign Directed Graph by adding a new +In case Service Designer wants to use a new capability, a solution is +to create a Directed Graph and update the self-serve-vnf-assign and/or +self-serve-vf-module-assign Directed Graph by adding a new entry in the list of capabilities (node: set ss.capability.execution-order[]) +The "aai-vfmodule-put" capability is important to be part of a vf-module +template because it will be used to put the vf-module-name in AAI +and ONAP SO will use that value to name the heat stack. + |image3| + +About the name/value of each parameter, Service Designer needs to understand +how various information will map between the various files needed by CDS. + +|image5| + +And be very careful with "_" or "-" + Step 6: write mapping files --------------------------- @@ -395,85 +308,83 @@ This is the place where the Designer explains, for each parameter: - default value At VNF instantiation step, values are often coming from input (in the request -sent by the user). +sent by the user, in the "instanceParams" section of the vnf). -At VF module instantion step, values are often coming from SDNC database -(stored values from VNF instantiation step). +At VF module instantion step, values can come form input also in the request +sent by the user, in the "instanceParams" section of the vf-module) Resolved data are always stored in SDNC database (MDSAL) -About sources: +Note1: if service designer wants to re-use for vf-module a +parameter/value from VNF "userParams" section, +then the source will be from "SDNC" in the vf-module mapping file. -- "input": parameter/value is provided in the request -- "sdnc": parameter/value is coming from the SDNC database (MDSAL) - via a Rest call -- "default": always take the default value -- "processor-db": coming from SDNC but MariaDB database via SQL request +Note2: service-instance-id, vnf-id and vf_module_id are parameters considered +as "input" from CDS point of view but in reality they are resolved by ONAP SO +with ONAP AAI. Thus, those parameters are not "input" from ONAP SO +point of view: service designer has not need to provide those parameters in +service instantiation request (step 12). -Other sources are possible. +For the ubuntu example, there are then 2 mapping files. +File names are important and must be aligned with vtl template names. -For the freeradius example, there are then 3 mapping files: - -- VNF level :download:`VNF_mapping_file ` -- VFmodule level :download:`VFmodule_mapping_file ` -- post-instantiation VNF level :download:`VNF_config_mapping_file ` +- VNF level :download:`VNF_mapping_file ` +- VFmodule level :download:`VFmodule_mapping_file ` Step 7: write scripts --------------------- Sometimes, it will be necessary to use some scripts (python, kotlin, -ansible...) to process some operation. +ansible...) to process some post-configuration operation. Those scripts needs to be part of the "Controller Blueprint Archive” (cba). -In freeradius example, a :download:`Kotlin script ` is used -to get data, open an ssh tunnel to the VNF and add the user/password -in the /etc/freeradius/users file. +No such script for the ubuntuCDS example. + -Step 8: write the "CDS blueprint" file +Step 8: write the "blueprint" file -------------------------------------- -The "designer" will then create a "CDS blueprint". +The "designer" will then create a "blueprint". -It is a JSON file and for the freeradius usecase, it is called -freeradius.json. +It is a JSON file and for the ubuntuCDS usecase, it is called +ubuntuCDS.json. +Name must be aligned with VF name in ONAP SDC. -This file will be the main entry point for CDS controller -to understand what need to be processed and how to process it. +This file will be the main entry point for CDS blueprint processor. +This processor will use that file to understand what need to +be processed and how to process it. The content of that file is composed of several sections conforming to TOSCA specifications. -Part of the file is provided by the Service Designer but it will them be -automatically completed by CDS controller via an "enrichment" operation -(see next step) - |image1| -In a short, this file will contain information about: +For the ubuntu example :download:`CDS blueprint ` before enrichment. -- any parameters or external sources needed to resolve parameters, -- all the resolve actions needed during the instantiation of a service, -- any post-instantiation steps that need to run after the service - instance is up and running -- all necessary template files +This example is the minimum that is required to simply instantiate a +VNF. -For the freeradius example, here is the :download:`CDS blueprint ` -before enrichment. +Some extension can then be added in order to define additional +operations. Step 9: build the "Controller Blueprint Archive” (cba) ------------------------------------------------------ -Having created velocity templates, mapping files, scripts and a first +Having created velocity templates, mapping files and a first CDS blueprint version, it is now simple to create the "Controller Blueprint Archive” (cba). This is a "zip-like" archive file that will have the following structure -and content: +and content ("environment", "scripts" and "plans" are optional): |image2| -For the freeradius example, here is the :download:`cba archive ` before enrichment. +For the ubuntu example :download:`cba archive ` before enrichment. To complete that cba, an "enrichment" operation is needed. @@ -483,57 +394,41 @@ Service Designer can use two methods: - using CDS rest API Service Designer needs to send the cba to CDS-UI pod and requests -the enrichment. +the enrichment, then save and then download. -Here is the example using CDS-UI rest API: +Result will be that the cba will now contains several new files in "Definition" +folder of the cba. -:: - - curl -X POST \ - https://cds-ui:30497/controllerblueprint/enrich-blueprint \ - -H 'Accept: application/json, text/plain, */*' \ - -H 'Accept-Encoding: gzip, deflate, br' \ - -H 'Accept-Language: en-US,en;q=0.9,ar;q=0.8,fr;q=0.7' \ - -H 'Cache-Control: no-cache' \ - -H 'Connection: keep-alive' \ - -H 'Content-Length: 16488' \ - -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryamjjRAAflAzY4XR5' \ - -H 'Host: cds-ui:30497' \ - -H 'Origin: https://cds-ui:30497' \ - -H 'Postman-Token: 5e895c04-577a-4610-97e6-5d3881fd96c5,508c40d9-65da-47bc-a3a8-038d64f44a94' \ - -H 'Referer: https://cds-ui:30497/blueprint' \ - -H 'Sec-Fetch-Mode: cors' \ - -H 'Sec-Fetch-Site: same-origin' \ - -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' \ - -H 'cache-control: no-cache' \ - -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ - -F 'file=@/home/user/dev/CBA_freeradius.cba' -k - -Result will be that the cba will contains several new files in "Definition" -folder of the cba. Also, the CDS blueprint file (freeradius.json) will -be completed. +The "blueprint" file will also be completed. -The cba is now ready to be onboarded in ONAP SDC along with +The "enriched" cba is now ready to be onboarded in ONAP SDC along with a service definition. -For the freeradius example, here is the :download:`cba archive ` after enrichment. +For the ubuntu example :download:`cba archive ` after enrichment. Step 10: attached the cba to a service definition ------------------------------------------------- -In SDC, when defining a service, Designer will attach the cba archive -to the service definition, using the "deployment" section. +In SDC, when defining a VF, Designer will attach the cba archive +to the VF definition, using the "deployment artifact" section. + +Having define all necessary VF, Service Designer will create a SERVICE in SDC. -Note that the template_name and template_version are to be added to the -service model in SDC under assignment parameters section, and this will -tell SO which blueprint to use for the service model that is being -instantiated. +Service Designer will compose the SERVICE with appropriate VF(s) and will have +to modify PROPERTIES in the "properties assignement" section. -SDC sdnc_artifact_name = CBA blueprint json filename, e.g. “vnf”, +Service Designer needs to provide values for sdnc_artifact_name, +sdnc_model_name and sdnc_model_verion. + +This will tell SO which blueprint to use for the service model that is being +instantiate + +SDC sdnc_artifact_name = CBA blueprint json filename, e.g. “ubuntuCDS”, we will see below that we will have vnf-mapping.json and vnf-template.vtl templates in the blueprint. -SDC sdnc_model_name = CBA Metadata template_name, e.g. “test”, +SDC sdnc_model_name = CBA Metadata template_name, e.g. “ubuntuCDS”, we can see in the below screenshot the metadata section showing template name. SDC sdnc_model_verion = CBA Metadata template_version, e.g. “1.0.0”, @@ -553,139 +448,178 @@ CDS controller will then collect the cba archive. Step 12: instantiate the service and check ------------------------------------------ -Here is the ONAP SO api request to instantiate the freeradius service: +Here is an example of an ONAP SO api request to +instantiate the ubuntu service. + +This request is used to instantiate a service using the "Macro" mode. + +Do not try to use that example as-is: you need to adapt all values to your +platform/service model. + +In this example, the request contains several "inputs" at VNF level and +several "inputs" at VF-module level. + +All various "id" and "version" are some copy/paste information that +Service Designer has the possibility to find in the TOSCA service +template created in ONAP SDC. + +This request will instantiate a "service", a "VNF" and a "VF-module". +That "service" instance is attached to the customer named "JohnDoe" with +service subscription named "ubuntCDS" +(supposed already declared in your ONAP AAI). + +In case the instantiation fails, a roolback is performed (parameter +"suppressRollback" = false) + +For that example, no "homing" and the "cloud" tenant is explicitely +provided (supposed already declared in your ONAP AAI) :: curl -X POST \ - http://84.39.34.234:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances \ - -H 'Accept: */*' \ - -H 'Accept-Encoding: gzip, deflate' \ + http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances \ + -H 'Accept: application/json' \ -H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \ - -H 'Cache-Control: no-cache' \ - -H 'Connection: keep-alive' \ - -H 'Content-Length: 4581' \ -H 'Content-Type: application/json' \ - -H 'Cookie: JSESSIONID=DAFA0915D8D644A5E01BB499A1769365' \ - -H 'Host: 84.39.34.234:30277' \ - -H 'Postman-Token: 02273554-69e5-426b-83ce-675462a14436,eea8e2dc-fbce-45ac-82d7-19fdca83804a' \ - -H 'User-Agent: PostmanRuntime/7.19.0' \ + -H 'X-ONAP-PartnerName: NBI' \ -H 'cache-control: no-cache' \ -d '{ - "requestDetails": { - "subscriberInfo": { - "globalSubscriberId": "Demonstration" - }, - "requestInfo": { - "suppressRollback": false, - "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", - "requestorId": "adt", - "source": "VID" - }, - "cloudConfiguration": { - "lcpCloudRegionId": "fr1", - "tenantId": "6270eaa820934710960682c506115453", - "cloudOwner":"CloudOwner" - }, - "requestParameters": { - "subscriptionServiceType": "vLB", - "userParams": [ - { - "Homing_Solution": "none" + "requestDetails": { + "subscriberInfo": { + "globalSubscriberId": "JohnDoe" }, - { - "service": { - "instanceParams": [ - ], - "resources": { - "vnfs": [ + "requestInfo": { + "suppressRollback": false, + "productFamilyId": "Useless_But_Mandatory", + "requestorId": "adt", + "instanceName": "My_ubuntuCDS_service_instance_001", + "source": "VID" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "RegionOne", + "tenantId": "71cf9d931d9e4b8e9fcca50d97c1cf96", + "cloudOwner": "ONAP" + }, + "requestParameters": { + "subscriptionServiceType": "ubuntuCDS", + "userParams": [ { - "modelInfo": { - "modelName": "freeradius5", - "modelVersionId": "f7538c8d-c27c-46f9-8c2c-f01eb2a19bfa", - "modelInvariantUuid": "cd322f8b-0496-4126-b3d6-200adceaf11f", - "modelVersion": "1.0", - "modelCustomizationId": "bc976d7c-bf2c-4da5-9b6b-815d9ea22b92", - "modelInstanceName": "freeradius5 0" - }, - "cloudConfiguration": { - "lcpCloudRegionId": "fr1", - "tenantId": "6270eaa820934710960682c506115453" - }, - "platform": { - "platformName": "test" - }, - "lineOfBusiness": { - "lineOfBusinessName": "LOB-Demonstration" - }, - "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", - "instanceName": "freeradius5 0", - "instanceParams": [ - { - "onap_private_net_id": "olc-onap", - "onap_private_subnet_id": "olc-onap", - "pub_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs84Cy8+qi/jvucay0BwFtOq3ian0ulTXFGxkZcZCR0N48j88pbHJaEqb9e25MAsrfH+7Etb9Kd5nbBThEL/i0AyHXnDsc80Oq0sqlLcfLo3SGSurkrNoRofHboJ5Hn+N9SlWN5FCQGbTx1w3rjqR4LasAI6XxH9xpXSFyyge6ysVXH0cYaZ8sg98nFZa1fPJR9L8COjZvF+EYudub2RC5HVyV/sx7bliNFo9JwQh6du1abG4G7ZDjTIcYwYp21iq52UzWU28RVcAyY6AQZJu2lHLdsr8fPvyeWZpC5EqGsxI1G609m9G/dURRKwYfez/f2ATzpn5QjEX7LrLWBM8r Generated-by-Nova", - "image_name": "Ubuntu 16.04", - "flavor_name":"n1.cw.standard-1", - "sec_group":"olc-open", - "cloud_env":"openstack", - "public_net_id": "olc-public", - "aic-cloud-region": "fr1", - "key_name":"olc-key", - "vf-naming-policy": "SDNC_Policy.Config_MS_ONAP_VNF_NAMING_TIMESTAMP", - "radius_test_user": "Rene-Robert", - "radius_test_password": "SecretPassword" - } - ], - "vfModules": [ - { - "modelInfo": { - "modelName": "Freeradius5..radius..module-0", - "modelVersionId": "e08d6d0f-27ea-4b46-a2d1-0d60c49fca59", - "modelInvariantUuid": "fdb408c6-6dd1-4a0c-88ca-ebc3ff77b445", - "modelVersion": "1", - "modelCustomizationId": "e82a94de-6dff-4dc9-a57e-335315c8fdae" - }, - "instanceName": "Freeradius5..radius..module-0", - "instanceParams": [ - { } - ] + "Homing_Solution": "none" + }, + { + "service": { + "instanceParams": [], + "instanceName": "My_ubuntuCDS_service_instance_001", + "resources": { + "vnfs": [ + { + "modelInfo": { + "modelName": "ubuntuCDS", + "modelVersionId": "c6a5534e-76d5-4128-97bf-ad3b72208d53", + "modelInvariantUuid": "ed3064e7-62c0-494c-bb9b-4f56d1ad157e", + "modelVersion": "1.0", + "modelCustomizationId": "6a32fb56-191e-4d11-a0cc-44b779aba4fc", + "modelInstanceName": "ubuntuCDS 0" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "RegionOne", + "tenantId": "71cf9d931d9e4b8e9fcca50d97c1cf96" + }, + "platform": { + "platformName": "Useless_But_Mandatory" + }, + "productFamilyId": "Useless_But_Mandatory", + "instanceName": "My_VNF_ubuntuCDS_instance_001", + "instanceParams": [ + { + "vnf_name": "My_VNF_ubuntuCDS_instance_001" + } + ], + "vfModules": [ + { + "modelInfo": { + "modelName": "Ubuntucds..base_ubuntuCDS..module-0", + "modelVersionId": "3025cd36-b170-4667-abb1-2bae1f297844", + "modelInvariantUuid": "0101f9e0-7beb-4b58-92c7-ba3324b5a54d", + "modelVersion": "1", + "modelCustomizationId": "9bca4d4b-e27c-4652-a61e-b1b4ebca503d" + }, + "instanceName": "My_vfModule_ubuntuCDS_instance_001", + "instanceParams": [ + { + "vnf_name": "My_VNF_ubuntuCDS_instance_001", + "vf_module_name": "My_vfModule_ubuntuCDS_instance_001", + "ubuntuCDS_pub_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY15cdBmIs2XOpe4EiFCsaY6bmUmK/GysMoLl4UG51JCfJwvwoWCoA+6mDIbymZxhxq9IGxilp/yTA6WQ9s/5pBag1cUMJmFuda9PjOkXl04jgqh5tR6I+GZ97AvCg93KAECis5ubSqw1xOCj4utfEUtPoF1OuzqM/lE5mY4N6VKXn+fT7pCD6cifBEs6JHhVNvs5OLLp/tO8Pa3kKYQOdyS0xc3rh+t2lrzvKUSWGZbX+dLiFiEpjsUL3tDqzkEMNUn4pdv69OJuzWHCxRWPfdrY9Wg0j3mJesP29EBht+w+EC9/kBKq+1VKdmsXUXAcjEvjovVL8l1BrX3BY0R8D imported-openssh-key", + "ubuntuCDS_image_name": "ubuntu-18.04-daily", + "ubuntuCDS_flavor_name": "onap.small", + "ubuntuCDS_name_0": "ubuntuCDS-VM-001", + "admin_plane_net_name": "admin" + } + ] + } + ] + } + ] + }, + "modelInfo": { + "modelVersion": "1.0", + "modelVersionId": "10369444-1e06-4d5d-974b-362bcfd19533", + "modelInvariantId": "32e00b49-eff8-443b-82a8-b75fbb6e3867", + "modelName": "ubuntuCDS", + "modelType": "service" + } } - ] } - ] - }, - "modelInfo": { + ], + "aLaCarte": false, + "usePreload": false + }, + "owningEntity": { + "owningEntityId": "Useless_But_Mandatory", + "owningEntityName": "Useless_But_Mandatory" + }, + "modelInfo": { "modelVersion": "1.0", - "modelVersionId": "4dacb612-935f-4755-91a1-78af64331c42", - "modelInvariantId": "98d65302-3be3-4828-a116-1bedb2919048", - "modelName": "freeradius5", + "modelVersionId": "10369444-1e06-4d5d-974b-362bcfd19533", + "modelInvariantId": "32e00b49-eff8-443b-82a8-b75fbb6e3867", + "modelName": "ubuntuCDS", "modelType": "service" - } - } } - ], - "aLaCarte": false - }, - "project": { - "projectName": "Project-Demonstration" - }, - "owningEntity": { - "owningEntityId": "67f2e84c-734d-4e90-a1e4-d2ffa2e75849", - "owningEntityName": "OE-Demonstration" - }, - "modelInfo": { - "modelVersion": "1.0", - "modelVersionId": "4dacb612-935f-4755-91a1-78af64331c42", - "modelInvariantId": "98d65302-3be3-4828-a116-1bedb2919048", - "modelName": "freeradius5", - "modelType": "service" } - } }' +In response, ONAP SO will immediately provide a requestId and a service +instance id. + +The instantiation will take some time. It will be necessary +to perform a "GET" on the request to check the result. + +:: + + curl -X GET \ + http://so.api.simpledemo.onap.org:30277/onap/so/infra/orchestrationRequests/v7/{{requestID}} \ + -H 'Accept: application/json' \ + -H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \ + -H 'Content-Type: application/json' \ + -H 'X-FromAppId: AAI' \ + -H 'X-TransactionId: get_aai_subscr' \ + -H 'cache-control: no-cache' + +Trouble shooting +---------------- + +Have a look to + +- debug.log in CDS blueprint processor pod +- debug.log into SO Bpmn pod +- karaf.log into SDNC pod + .. |image1| image:: ../media/cds-blueprint.png .. |image2| image:: ../media/cba.png .. |image3| image:: ../media/capabilities.png .. |image4| image:: ../media/sdc.png -.. _Resources: https://git.onap.org/ccsdk/cds/tree/components/model-catalog/resource-dictionary/starter-dictionary +.. |image5| image:: ../media/mapping.png +.. _JIRA_SDNC_949: https://jira.onap.org/browse/SDNC-949 +.. _Resources: https://git.onap.org/ccsdk/cds/tree/components/model-catalog/resource-dictionary/starter-dictionary +.. _DG_VNF_ASSIGN: https://gerrit.onap.org/r/gitweb?p=sdnc/oam.git;a=blob_plain;f=platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_vnf-topology-operation-assign.json;hb=HEAD +.. _DG_VFMODULE_ASSIGN: https://gerrit.onap.org/r/gitweb?p=sdnc/oam.git;a=blob_plain;f=platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_vf-module-topology-operation-assign.json;hb=HEAD diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/artifact_types.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/artifact_types.json similarity index 100% rename from docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/artifact_types.json rename to docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/artifact_types.json diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/data_types.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/data_types.json new file mode 100755 index 000000000..413a5e5b8 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/data_types.json @@ -0,0 +1,116 @@ +{ + "data_types" : { + "dt-resource-assignment-properties" : { + "description" : "Dynamic DataType definition for workflow(resource-assignment).", + "version" : "1.0.0", + "properties" : { + "vnf-id" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "default" : "", + "entry_schema" : { + "type" : "" + } + }, + "vf-module-id" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "default" : "", + "entry_schema" : { + "type" : "" + } + }, + "ubuntuCDS_pub_key" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "entry_schema" : { + "type" : "" + } + }, + "vnf_id" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "default" : "", + "entry_schema" : { + "type" : "" + } + }, + "service-instance-id" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "default" : "", + "entry_schema" : { + "type" : "" + } + }, + "vnf_name" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "default" : "ubuntuCDS-VNF-name", + "entry_schema" : { + "type" : "" + } + }, + "ubuntuCDS_flavor_name" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "entry_schema" : { + "type" : "" + } + }, + "ubuntuCDS_name_0" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "entry_schema" : { + "type" : "" + } + }, + "admin_plane_net_name" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "entry_schema" : { + "type" : "" + } + }, + "ubuntuCDS_image_name" : { + "description" : "", + "required" : false, + "type" : "string", + "status" : "", + "constraints" : [ { } ], + "entry_schema" : { + "type" : "" + } + } + }, + "derived_from" : "tosca.datatypes.Dynamic" + } + } +} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/node_types.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/node_types.json similarity index 64% rename from docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/node_types.json rename to docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/node_types.json index d1ace9f9b..e812db1cf 100755 --- a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/node_types.json +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/node_types.json @@ -1,140 +1,5 @@ { "node_types" : { - "component-script-executor":{ - "description": "This is CLI Transaction Configuration Component API", - "version": "1.0.0", - "attributes": { - "response-data": { - "required": false, - "type": "json" - } - }, - "capabilities": { - "component-node": { - "type": "tosca.capabilities.Node" - } - }, - "interfaces": { - "ComponentScriptExecutor": { - "operations": { - "process": { - "inputs": { - "script-type": { - "description": "Script type, kotlin type is supported", - "required": true, - "type": "string", - "default": "internal", - "constraints": [ - { - "valid_values": [ - "kotlin", - "jython", - "internal" - ] - } - ] - }, - "script-class-reference": { - "description": "Kotlin Script class name or jython script name.", - "required": true, - "type": "string" - }, - "dynamic-properties": { - "description": "Dynamic Json Content or DSL Json reference.", - "required": false, - "type": "json" - } - }, - "outputs": { - "response-data": { - "description": "Execution Response Data.", - "required": false, - "type": "string" - }, - "status": { - "description": "Status of the Component Execution ( success or failure )", - "required": true, - "type": "string" - } - } - } - } - } - }, - "derived_from": "tosca.nodes.Component" -}, - "component-netconf-executor" : { - "description" : "This is Netconf Transaction Configuration Component API", - "version" : "1.0.0", - "attributes" : { - "response-data" : { - "required" : false, - "type" : "json" - } - }, - "capabilities" : { - "component-node" : { - "type" : "tosca.capabilities.Node" - } - }, - "requirements" : { - "netconf-connection" : { - "capability" : "netconf", - "node" : "vnf-netconf-device", - "relationship" : "tosca.relationships.ConnectsTo" - } - }, - "interfaces" : { - "ComponentNetconfExecutor" : { - "operations" : { - "process" : { - "inputs" : { - "script-type" : { - "description" : "Script type, kotlin type is supported", - "required" : true, - "type" : "string", - "constraints" : [ { - "valid_values" : [ "kotlin", "jython", "internal" ] - } ], - "default" : "internal" - }, - "script-class-reference" : { - "description" : "Kotlin Script class name or jython script name.", - "required" : true, - "type" : "string" - }, - "instance-dependencies" : { - "description" : "Instance names to inject to Jython or Kotlin Script.", - "required" : true, - "type" : "list", - "entry_schema" : { - "type" : "string" - } - }, - "dynamic-properties" : { - "description" : "Dynamic Json Content or DSL Json reference.", - "required" : false, - "type" : "json" - } - }, - "outputs" : { - "response-data" : { - "description" : "Execution Response Data in JSON format.", - "required" : false, - "type" : "string" - }, - "status" : { - "description" : "Status of the Component Execution ( success or failure )", - "required" : true, - "type" : "string" - } - } - } - } - } - }, - "derived_from" : "tosca.nodes.Component" - }, "component-resource-resolution" : { "description" : "This is Resource Assignment Component API", "version" : "1.0.0", diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/policy_types.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/policy_types.json similarity index 100% rename from docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/policy_types.json rename to docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/policy_types.json diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/relationship_types.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/relationship_types.json similarity index 100% rename from docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/relationship_types.json rename to docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/relationship_types.json diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/resources_definition_types.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/resources_definition_types.json new file mode 100755 index 000000000..96e9269ce --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/resources_definition_types.json @@ -0,0 +1,283 @@ +{ + "image_name" : { + "tags" : "image_name", + "name" : "image_name", + "property" : { + "description" : "image_name", + "type" : "string" + }, + "updated-by" : "Singal, Kapil ", + "sources" : { + "input" : { + "type" : "source-input" + }, + "sdnc" : { + "type" : "source-rest", + "properties" : { + "type" : "JSON", + "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/image_name", + "path" : "/param/0/value", + "input-key-mapping" : { + "service-instance-id" : "service-instance-id", + "vnf-id" : "vnf-id" + }, + "output-key-mapping" : { + "image_name" : "value" + }, + "key-dependencies" : [ "service-instance-id", "vnf-id" ] + } + } + } + }, + "pub_key" : { + "tags" : "pub_key", + "name" : "pub_key", + "property" : { + "description" : "pub_key", + "type" : "string" + }, + "updated-by" : "MALAKOV, YURIY ", + "sources" : { + "input" : { + "type" : "source-input" + }, + "default" : { + "type" : "source-default", + "properties" : { } + }, + "sdnc" : { + "type" : "source-rest", + "properties" : { + "type" : "JSON", + "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/pub_key", + "path" : "/param/0/value", + "input-key-mapping" : { + "service-instance-id" : "service-instance-id", + "vnf-id" : "vnf-id" + }, + "output-key-mapping" : { + "pub_key" : "value" + }, + "key-dependencies" : [ "service-instance-id", "vnf-id" ] + } + } + } + }, + "public_net_id" : { + "tags" : "public_net_id", + "name" : "public_net_id", + "property" : { + "description" : "public_net_id", + "type" : "string" + }, + "updated-by" : "MALAKOV, YURIY ", + "sources" : { + "input" : { + "type" : "source-input" + }, + "default" : { + "type" : "source-default", + "properties" : { } + }, + "sdnc" : { + "type" : "source-rest", + "properties" : { + "type" : "JSON", + "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/public_net_id", + "path" : "/param/0/value", + "input-key-mapping" : { + "service-instance-id" : "service-instance-id", + "vnf-id" : "vnf-id" + }, + "output-key-mapping" : { + "public_net_id" : "value" + }, + "key-dependencies" : [ "service-instance-id", "vnf-id" ] + } + } + } + }, + "service-instance-id" : { + "tags" : "service-instance-id, tosca.datatypes.Root, data_type", + "name" : "service-instance-id", + "property" : { + "description" : "To be provided", + "type" : "string" + }, + "updated-by" : "Singal, Kapil ", + "sources" : { + "input" : { + "type" : "source-input", + "properties" : { } + }, + "any-db" : { + "type" : "source-db", + "properties" : { + "query" : "SELECT artifact_name FROM BLUEPRINT_RUNTIME where artifact_version=\"1.0.0\"", + "input-key-mapping" : { }, + "output-key-mapping" : { + "service-instance-id" : "artifact_name" + } + } + }, + "processor-db" : { + "type" : "source-db", + "properties" : { + "query" : "SELECT artifact_name FROM BLUEPRINT_RUNTIME where artifact_version=\"1.0.0\"", + "input-key-mapping" : { }, + "output-key-mapping" : { + "service-instance-id" : "artifact_name" + } + } + }, + "capability" : { + "type" : "source-capability", + "properties" : { + "script-type" : "jython", + "script-class-reference" : "SampleRAProcessor", + "instance-dependencies" : [ ] + } + } + } + }, + "vlb_flavor_name" : { + "tags" : "vlb_flavor_name", + "name" : "vlb_flavor_name", + "property" : { + "description" : "vlb_flavor_name", + "type" : "string" + }, + "updated-by" : "MALAKOV, YURIY ", + "sources" : { + "input" : { + "type" : "source-input" + }, + "default" : { + "type" : "source-default", + "properties" : { } + }, + "sdnc" : { + "type" : "source-rest", + "properties" : { + "type" : "JSON", + "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vlb_flavor_name", + "path" : "/param/0/value", + "input-key-mapping" : { + "service-instance-id" : "service-instance-id", + "vnf-id" : "vnf-id" + }, + "output-key-mapping" : { + "vlb_flavor_name" : "value" + }, + "key-dependencies" : [ "service-instance-id", "vnf-id" ] + } + } + } + }, + "vnf-id" : { + "tags" : "vnf-id", + "name" : "vnf-id", + "property" : { + "description" : "vnf-id", + "type" : "string" + }, + "updated-by" : "MALAKOV, YURIY ", + "sources" : { + "input" : { + "type" : "source-input" + }, + "default" : { + "type" : "source-default", + "properties" : { } + }, + "sdnc" : { + "type" : "source-rest", + "properties" : { + "type" : "JSON", + "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vnf-id", + "path" : "/param/0/value", + "input-key-mapping" : { + "service-instance-id" : "service-instance-id", + "vnf-id" : "vnf-id" + }, + "output-key-mapping" : { + "vnf-id" : "value" + }, + "key-dependencies" : [ "service-instance-id", "vnf-id" ] + } + } + } + }, + "vf-module-id" : { + "name" : "vf-module-id", + "tags" : "vf-module-id", + "updated-by" : "Singal, Kapil ", + "property" : { + "description" : "vf-module-id", + "type" : "string" + }, + "sources" : { + "input" : { + "type" : "source-input", + "properties" : { } + }, + "sdnc": { + "type": "source-rest", + "properties": { + "verb": "GET", + "type": "JSON", + "url-path": "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vf-modules/vf-module/$vf-module-id", + "path": "/vf-module/0/vf-module-id", + "input-key-mapping": { + "service-instance-id": "service-instance-id", + "vnf-id": "vnf-id", + "vf-module-id": "vf-module.vf-module-id" + }, + "output-key-mapping": { + "vf-module-id": "vf-module-id" + }, + "key-dependencies": [ + "service-instance-id", + "vnf-id", + "vf-module.vf-module-id" + ] + } + } + } + }, + "vnf_name" : { + "tags" : "vnf_name", + "name" : "vnf_name", + "property" : { + "description" : "vnf_name", + "type" : "string" + }, + "updated-by" : "Singal, Kapil ", + "sources" : { + "default" : { + "type" : "source-default", + "properties" : { } + }, + "input" : { + "type" : "source-input", + "properties" : { } + }, + "sdnc" : { + "type" : "source-rest", + "properties" : { + "type" : "JSON", + "url-path" : "config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/vnf_name", + "path" : "/param/0/value", + "input-key-mapping" : { + "service-instance-id" : "service-instance-id", + "vnf-id" : "vnf-id" + }, + "output-key-mapping" : { + "vnf_name" : "value" + }, + "key-dependencies" : [ "service-instance-id", "vnf-id" ] + } + } + } + } +} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/ubuntuCDS.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/ubuntuCDS.json new file mode 100755 index 000000000..8933ce14b --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Definitions/ubuntuCDS.json @@ -0,0 +1,96 @@ +{ + "tosca_definitions_version": "ubuntuCDS_1_0_0", + "metadata": { + "template_author": "ONES", + "author-email": "rene.robert@orange.com", + "user-groups": "ADMIN, OPERATION", + "template_name": "ubuntuCDS", + "template_version": "1.0.0", + "template_tags": "ubuntuCDS" + }, + "imports": [ { + "file" : "Definitions/data_types.json" + }, { + "file" : "Definitions/relationship_types.json" + }, { + "file" : "Definitions/artifact_types.json" + }, { + "file" : "Definitions/node_types.json" + }, { + "file" : "Definitions/policy_types.json" + } ], + "dsl_definitions": {}, + "topology_template": { + "workflows": { + "resource-assignment": { + "steps": { + "resource-assignment": { + "description": "Resource Assign Workflow", + "target": "resource-assignment" + } + }, + "inputs": { + "template-prefix": { + "required": true, + "type": "list", + "entry_schema": { + "type": "string" + } + }, + "resource-assignment-properties": { + "description": "Dynamic PropertyDefinition for workflow(resource-assignment).", + "required": true, + "type": "dt-resource-assignment-properties" + } + }, + "outputs": { + "meshed-template": { + "type": "json", + "value": { + "get_attribute": [ + "resource-assignment", + "assignment-params" + ] + } + } + } + } + }, + "node_templates": { + "resource-assignment": { + "type": "component-resource-resolution", + "interfaces": { + "ResourceResolutionComponent": { + "operations": { + "process": { + "inputs": { + "artifact-prefix-names": { + "get_input": "template-prefix" + } + } + } + } + } + }, + "artifacts": { + "ubuntuCDS-template": { + "type": "artifact-template-velocity", + "file": "Templates/ubuntuCDS-template.vtl" + }, + "ubuntuCDS-mapping": { + "type": "artifact-mapping-resource", + "file": "Templates/ubuntuCDS-mapping.json" + }, + "base_ubuntuCDS-template": { + "type": "artifact-template-velocity", + "file": "Templates/base_ubuntuCDS-template.vtl" + }, + "base_ubuntuCDS-mapping": { + "type": "artifact-mapping-resource", + "file": "Templates/base_ubuntuCDS-mapping.json" + } + } + } + } + } + } diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/TOSCA-Metadata/TOSCA.meta b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/TOSCA-Metadata/TOSCA.meta new file mode 100755 index 000000000..ed91e91cf --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/TOSCA-Metadata/TOSCA.meta @@ -0,0 +1,6 @@ +TOSCA-Meta-File-Version: 1.0.0 +CSAR-Version: 1.0 +Created-By: RG, ONES +Entry-Definitions: Definitions/ubuntuCDS.json +Template-Tags: ubuntuCDS +Content-Type: application/vnd.oasis.bpmn \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/base_ubuntuCDS-mapping.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/base_ubuntuCDS-mapping.json new file mode 100755 index 000000000..825f05add --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/base_ubuntuCDS-mapping.json @@ -0,0 +1,185 @@ +[ + { + "name": "service-instance-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "" + }, + "input-param": false, + "dictionary-name": "service-instance-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vnf-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "" + }, + "input-param": false, + "dictionary-name": "vnf-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vf-module-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "vf-module-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vnf_id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "ubuntuCDS_VNF" + }, + "input-param": false, + "dictionary-name": "vnf-id", + "dictionary-source": "sdnc", + "dependencies": [], + "version": 0 + }, + { + "name": "ubuntuCDS_image_name", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "image_name", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "ubuntuCDS_flavor_name", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "vlb_flavor_name", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "ubuntuCDS_pub_key", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "pub_key", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "ubuntuCDS_name_0", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "vnf_name", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "admin_plane_net_name", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "public_net_id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + } +] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/base_ubuntuCDS-template.vtl b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/base_ubuntuCDS-template.vtl new file mode 100755 index 000000000..bfbe352d6 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/base_ubuntuCDS-template.vtl @@ -0,0 +1,69 @@ +{ + "resource-accumulator-resolved-data": [ + { + "param-name": "service-instance-id", + "param-value": "${service-instance-id}" + }, + { + "param-name": "vnf-id", + "param-value": "${vnf-id}" + }, + { + "param-name": "vf_module_id", + "param-value": "${vf-module-id}" + }, + { + "param-name": "vnf_id", + "param-value": "${vnf-id}" + }, + { + "param-name": "vnf_name", + "param-value": "${vnf_name}" + }, + { + "param-name": "vf_module_name", + "param-value": "${vf_module_name}" + }, + { + "param-name": "ubuntuCDS_pub_key", + "param-value": "${ubuntuCDS_pub_key}" + }, + { + "param-name": "ubuntuCDS_image_name", + "param-value": "${ubuntuCDS_image_name}" + }, + { + "param-name": "ubuntuCDS_flavor_name", + "param-value": "${ubuntuCDS_flavor_name}" + }, + { + "param-name": "ubuntuCDS_name_0", + "param-value": "${ubuntuCDS_name_0}" + }, + { + "param-name": "admin_plane_net_name", + "param-value": "${admin_plane_net_name}" + } + ], + "capability-data": [ + { + "capability-name": "aai-vf-module-put", + "key-mapping": [ + { + "payload": [ + { + "param-name": "vf-module", + "param-value": "vf-module" + } + ], + "output-key-mapping": [ + { + "resource-name": "aai-vf-module-put", + "resource-value": "${status}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/ubuntuCDS-mapping.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/ubuntuCDS-mapping.json new file mode 100755 index 000000000..f0b2308bb --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/ubuntuCDS-mapping.json @@ -0,0 +1,65 @@ +[ + { + "name": "service-instance-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "" + }, + "input-param": false, + "dictionary-name": "service-instance-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vnf-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "" + }, + "input-param": false, + "dictionary-name": "vnf-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vnf_name", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "ubuntuCDS-VNF-name" + }, + "input-param": false, + "dictionary-name": "vnf_name", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + } +] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/ubuntuCDS-template.vtl b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/ubuntuCDS-template.vtl new file mode 100755 index 000000000..209d78023 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/Templates/ubuntuCDS-template.vtl @@ -0,0 +1,37 @@ +{ + "resource-accumulator-resolved-data": [ + { + "param-name": "service-instance-id", + "param-value": "${service-instance-id}" + }, + { + "param-name": "vnf_id", + "param-value": "${vnf-id}" + }, + { + "param-name": "vnf_name", + "param-value": "${vnf_name}" + } + ], + "capability-data": [ + { + "capability-name": "aai-vnf-put", + "key-mapping": [ + { + "payload": [ + { + "param-name": "generic-vnf", + "param-value": "generic-vnf" + } + ], + "output-key-mapping": [ + { + "resource-name": "aai-vnf-put", + "resource-value": "${status}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/cba-ubuntuCDS-enriched.zip b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-after-enrichment/cba-ubuntuCDS-enriched.zip new file mode 100755 index 0000000000000000000000000000000000000000..bb9ce8a42de441cd04fdb578a7f32e6c1086ab63 GIT binary patch literal 7295 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 +Entry-Definitions: Definitions/ubuntuCDS.json +Template-Tags: ubuntuCDS +Content-Type: application/vnd.oasis.bpmn \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/base_ubuntuCDS-mapping.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/base_ubuntuCDS-mapping.json new file mode 100755 index 000000000..825f05add --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/base_ubuntuCDS-mapping.json @@ -0,0 +1,185 @@ +[ + { + "name": "service-instance-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "" + }, + "input-param": false, + "dictionary-name": "service-instance-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vnf-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "" + }, + "input-param": false, + "dictionary-name": "vnf-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vf-module-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "vf-module-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vnf_id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "ubuntuCDS_VNF" + }, + "input-param": false, + "dictionary-name": "vnf-id", + "dictionary-source": "sdnc", + "dependencies": [], + "version": 0 + }, + { + "name": "ubuntuCDS_image_name", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "image_name", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "ubuntuCDS_flavor_name", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "vlb_flavor_name", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "ubuntuCDS_pub_key", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "pub_key", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "ubuntuCDS_name_0", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "vnf_name", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "admin_plane_net_name", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + } + }, + "input-param": false, + "dictionary-name": "public_net_id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + } +] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/base_ubuntuCDS-template.vtl b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/base_ubuntuCDS-template.vtl new file mode 100755 index 000000000..bfbe352d6 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/base_ubuntuCDS-template.vtl @@ -0,0 +1,69 @@ +{ + "resource-accumulator-resolved-data": [ + { + "param-name": "service-instance-id", + "param-value": "${service-instance-id}" + }, + { + "param-name": "vnf-id", + "param-value": "${vnf-id}" + }, + { + "param-name": "vf_module_id", + "param-value": "${vf-module-id}" + }, + { + "param-name": "vnf_id", + "param-value": "${vnf-id}" + }, + { + "param-name": "vnf_name", + "param-value": "${vnf_name}" + }, + { + "param-name": "vf_module_name", + "param-value": "${vf_module_name}" + }, + { + "param-name": "ubuntuCDS_pub_key", + "param-value": "${ubuntuCDS_pub_key}" + }, + { + "param-name": "ubuntuCDS_image_name", + "param-value": "${ubuntuCDS_image_name}" + }, + { + "param-name": "ubuntuCDS_flavor_name", + "param-value": "${ubuntuCDS_flavor_name}" + }, + { + "param-name": "ubuntuCDS_name_0", + "param-value": "${ubuntuCDS_name_0}" + }, + { + "param-name": "admin_plane_net_name", + "param-value": "${admin_plane_net_name}" + } + ], + "capability-data": [ + { + "capability-name": "aai-vf-module-put", + "key-mapping": [ + { + "payload": [ + { + "param-name": "vf-module", + "param-value": "vf-module" + } + ], + "output-key-mapping": [ + { + "resource-name": "aai-vf-module-put", + "resource-value": "${status}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/ubuntuCDS-mapping.json b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/ubuntuCDS-mapping.json new file mode 100755 index 000000000..f0b2308bb --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/ubuntuCDS-mapping.json @@ -0,0 +1,65 @@ +[ + { + "name": "service-instance-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "" + }, + "input-param": false, + "dictionary-name": "service-instance-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vnf-id", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "" + }, + "input-param": false, + "dictionary-name": "vnf-id", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + }, + { + "name": "vnf_name", + "property": { + "description": "", + "required": false, + "type": "string", + "status": "", + "constraints": [ + {} + ], + "entry_schema": { + "type": "" + }, + "default": "ubuntuCDS-VNF-name" + }, + "input-param": false, + "dictionary-name": "vnf_name", + "dictionary-source": "input", + "dependencies": [], + "version": 0 + } +] \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/ubuntuCDS-template.vtl b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/ubuntuCDS-template.vtl new file mode 100755 index 000000000..209d78023 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/Templates/ubuntuCDS-template.vtl @@ -0,0 +1,37 @@ +{ + "resource-accumulator-resolved-data": [ + { + "param-name": "service-instance-id", + "param-value": "${service-instance-id}" + }, + { + "param-name": "vnf_id", + "param-value": "${vnf-id}" + }, + { + "param-name": "vnf_name", + "param-value": "${vnf_name}" + } + ], + "capability-data": [ + { + "capability-name": "aai-vnf-put", + "key-mapping": [ + { + "payload": [ + { + "param-name": "generic-vnf", + "param-value": "generic-vnf" + } + ], + "output-key-mapping": [ + { + "resource-name": "aai-vnf-put", + "resource-value": "${status}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/cba-before-enrichment.zip b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/cba-before-enrichment/cba-before-enrichment.zip new file mode 100644 index 0000000000000000000000000000000000000000..492e63bf1269498d6892eb78dbcabd717b6d4f7a GIT binary patch literal 3788 zcmbtW2{=@HAD%JBJ`4#X)re4bO|o3fSW31T*Ql!u#*!fh8B6x5s4O*POC=&oDk@7M z$`aY>n!*^7HhYm4bKN=aRr1w$Kll61bIzIbJoCK2`7Q7Je{tpzPEimLD4#Iw;+MZ~ z0w5&F*zJG^*@NQYL-tp-#lt|{CUs1L8T$gB0m1wrFz0Is2();^Eh6!NctFD^zaeep z1A!!0AO$!FkSPI1#x^RR{yyYI+_-m4!qT+@x5`$}r%w&eU@3B1Dmz_m>%F@3ytL7H z4R41u59dCeX0OeOn@?Ls*DO@!Dyb)#M!J&pBv79wK2A(CK6#70#-6aqlWlS`SBy=z z)p&N479t!0Gc2)QThLeUa_CG;lAV@bLvoa?j4A5H^=ImbvtB?krY9b*Un3V%QW@%H zgc>a0h}lgdT0!w}{!%cNnU1s-^n3g`s4@w8$zHAgGPPZtIhoe&H0xWIX~4LdI*AVT zH!+ha`rs5&c{{E~`n8d0-^Xy2*tPTEH0nx5|>yWM)NNOFDC(Ws^Pn}a;z^Zf%i zE#`a0#%w=mLUQ6=&2r(wTRa?6aL++m(jwI6&X=}{yY3@xFxsVtg?(3?28^Kw`}XZw zx9)`Ti>OC*e;>&#p(@AY5tnFt?6Z%D<>Tt2d)}QsT^_}ZDi`)c92~=Foz7S{dH(QQ>JtKZ!{zbF$F>Zolp>SyY^N>tz2k|>${FeTZFtB2iXlC* z9CBvn&|Z59dgKmQUxrLHjm}S+6UV`vL37!>yEsD?R@{~mF2c%Qd{`AyS1U`ZxJeFc*GIBd4Ng(e9 zLs3^UUR;Zip4dEW9an`ycSE3eDEnuwV(YY}sbsj9WwLFl57+fPVS}OZL1d!UQ_KDvLhQ|O*&){ z5T+sX_=p&qUg;v3qtR;G6a!g^@{~qdkrdkFUElIBRh%N`$6Ce^*@qJPC8^U^&}w@x zy0^<6FV~FM?&PZ8NC>bY0U7x2iVY z{+yl__;Hq1Dvr>SNS&*OqT+ zuO6H2`eSiq1^TguX!gi}!Tfk+OimD+ipxp;FL`LKcd$-Pfbm{2{uMuEqW6$Xnqk_o zmi>MYsCa$K2wGu|*?!Ve|K6RBKu_+Y9ig`}2XygfRr&eJa@|Mn+v1Np}La!{M*3-KEeq5x0)}doVZ-44kxO0HEYm%b_?`jz0&YS zm?UAX8Bb?s$g=b-@tv$Jpr-o6#Mf?jtWY$M|?j=!~s2DQcPX|&@$4pmtwL?t`wENF`rj)rG9 zdS1Lve{^l08)&AGbyPEx-AtfmKR=3ufUU*a7-5tx-6%v?B89jL7q?us+S#cP{|UB; zt>Vqb{wJlfZ7~--q6X(0499jto*von9RFKKN)mcFq9*Z4vPZYr8nP-mUS(mIK7&#q zDsF+aYPeKRJkenNpiCo8+lKJ$j{pnkv137g_Iv}GJ1Xz?tY<=ZP^GmE(V@OzlCgHV zN4uvPQFyJsz}Y*SiU$p(&wV-DRaju9pCgm!_bzZGI>s+NVsD<*=3LpCq2j^8s_l@l z6JsVpZ;%-Zp$47nfR9HU>jY}WnS(h*AwT!U?4K+K3j;h>=aTJyJq6&C zmx4t#TY>ylbiN(>OO6?Mt~m7nTLpkaSqc_Li*4Xn<5#}@e_%tFpLl>{Sqc_4>O0*3 z!@n$*0<;WBxm>ZoPq`1eyp$CwSEC>+Q!dvoK%tg`MTK!MPx*C5t1@USvn?n0_t^q@ zew^*!)CSbBoa4YdAQ(%*!qoDzv#nM>zF&{!qyhwFDOglE+eEJb|KH^VXAWf_*B}rt N`;*1qGckVP?N9zGj`jcm literal 0 HcmV?d00001 diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/curls_resource_dictionary.txt b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/curls_resource_dictionary.txt new file mode 100644 index 000000000..da04447fd --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/curls_resource_dictionary.txt @@ -0,0 +1,50 @@ + +HERE AFTER A REQUEST TO ADD RESOURCE IN CDS RESOURCE DICTIONARY +WE ADD a radius_test_user parameter with 3 methods to resolve that parameter: input, default, sdnc + + +curl -k 'https://cds-ui:30497/resourcedictionary/save' -X POST -H 'Content-type: application/json' \ +-d '{ + "name": "radius_test_user", + "tags": "radius_test_user", + "data_type": "string", + "description": "radius_test_user", + "entry_schema": "string", + "updatedBy": "Seaudi, Abdelmuhaimen ", + "definition": { + "tags": "radius_test_user", + "name": "radius_test_user", + "property": { + "description": "radius_test_user", + "type": "string" + }, + "updated-by": "Seaudi, Abdelmuhaimen ", + "sources": { + "input": { + "type": "source-input" + }, + "default": { + "type": "source-default", + "properties": {} + }, + "sdnc": { + "type": "source-rest", + "properties": { + "verb": "GET", + "type": "JSON", + "url-path": "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/radius_test_user", + "path": "/param/0/value", + "input-key-mapping": { + "service-instance-id": "service-instance-id", + "vnf-id": "vnf-id" + }, + "output-key-mapping": { + "radius_test_user": "value" + }, + "key-dependencies": ["service-instance-id", + "vnf-id"] + } + } + } + } +}' diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/base_ubuntuCDS.env b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/base_ubuntuCDS.env new file mode 100755 index 000000000..b9e55fa7f --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/base_ubuntuCDS.env @@ -0,0 +1,14 @@ +parameters: +# Metadata required by ONAP + vnf_id: ubuntuCDS-VNF + vf_module_id: ubuntuCDS-VF-module + vnf_name: ubuntuCDS-VNF-name + +# Server parameters, naming required by ONAP + ubuntuCDS_image_name: ubuntu-18 + ubuntuCDS_flavor_name: onap.small + ubuntuCDS_pub_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY15cdBmIs2XOpe4EiFCsaY6bmUmK/GysMoLl4UG51JCfJwvwoWCoA+6mDIbymZxhxq9IGxilp/yTA6WQ9s/5pBag1cUMJmFuda9PjOkXl04jgqh5tR6I+GZ97AvCg93KAECis5ubSqw1xOCj4utfEUtPoF1OuzqM/lE5mY4N6VKXn+fT7pCD6cifBEs6JHhVNvs5OLLp/tO8Pa3kKYQOdyS0xc3rh+t2lrzvKUSWGZbX+dLiFiEpjsUL3tDqzkEMNUn4pdv69OJuzWHCxRWPfdrY9Wg0j3mJesP29EBht+w+EC9/kBKq+1VKdmsXUXAcjEvjovVL8l1BrX3BY0R8D imported-openssh-key + ubuntuCDS_name_0: ubuntuCDS + +# Network parameters, naming required by ONAP + admin_plane_net_name: admin diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/base_ubuntuCDS.yaml b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/base_ubuntuCDS.yaml new file mode 100755 index 000000000..ad250fa52 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/base_ubuntuCDS.yaml @@ -0,0 +1,110 @@ +heat_template_version: 2013-05-23 + +description: Heat template to deploy a ubuntuCDS VM + +parameters: + # Metadata required by ONAP + vnf_name: + type: string + label: VM name + description: The VM name + vnf_id: + type: string + label: VNF ID + description: The VNF ID is provided by ONAP + vf_module_id: + type: string + label: VF module ID + description: The VF Module ID is provided by ONAP + +# Server parameters, naming required by ONAP + ubuntuCDS_image_name: + type: string + label: Image name or ID + description: Image to be used for compute instance + ubuntuCDS_flavor_name: + type: string + label: Flavor + description: Type of instance (flavor) to be used + ubuntuCDS_pub_key: + type: string + label: Public key + description: Public key to be installed on the compute instance + ubuntuCDS_name_0: + type: string + label: VM name + description: The VM name + +# Network parameters, naming required by ONAP + admin_plane_net_name: + type: string + label: management network + description: The external management network + +resources: + random-str: + type: OS::Heat::RandomString + properties: + length: 4 + + ubuntuCDS_instantiated_key_name: + type: OS::Nova::KeyPair + properties: + name: + str_replace: + template: pre_base_rand + params: + pre: key_ + base: { get_param: vnf_name } + rand: { get_resource: random-str } + public_key: { get_param: ubuntuCDS_pub_key } + save_private_key: false + + ubuntuCDS_admin_security_group: + type: OS::Neutron::SecurityGroup + properties: + description: security group + name: + str_replace: + template: pre_base_rand + params: + pre: sg_ + base: { get_param: vnf_name } + rand: { get_resource: random-str } + rules: [ + {remote_ip_prefix: 0.0.0.0/0, protocol: tcp, port_range_min: 22, port_range_max: 22}, + {remote_ip_prefix: 0.0.0.0/0, protocol: icmp}] + + ubuntuCDS_0_admin_plane_port_0: + type: OS::Neutron::Port + properties: + name: + str_replace: + template: pre_base_rand + params: + pre: port_ + base: { get_param: vnf_name } + rand: { get_resource: random-str } + network: { get_param: admin_plane_net_name } + security_groups: [{ get_resource: ubuntuCDS_admin_security_group }] + + ubuntuCDS_VM_settings: + type: OS::Heat::SoftwareConfig + properties: + config: | + #!/bin/bash + sudo apt-get update + + ubuntuCDS_server_0: + type: OS::Nova::Server + properties: + image: { get_param: ubuntuCDS_image_name } + flavor: { get_param: ubuntuCDS_flavor_name } + name: { get_param: ubuntuCDS_name_0 } + metadata: {vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }, vnf_name: { get_param: vnf_name }} + key_name: { get_resource: ubuntuCDS_instantiated_key_name } + networks: + - port: { get_resource: ubuntuCDS_0_admin_plane_port_0 } + user_data_format: RAW + user_data: + get_resource: ubuntuCDS_VM_settings diff --git a/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/ubuntuCDS_heat.zip b/docs/guides/onap-user/design/parameter_resolution/ubuntu_example/ubuntuCDS_heat/ubuntuCDS_heat.zip new file mode 100755 index 0000000000000000000000000000000000000000..ad359bf3232649ebab037c47b127b6e351c13197 GIT binary patch literal 1680 zcmZ`)eK^x=82%X{E5q5O)O>$SW~!5EXsab;`DQhln8hfwmF;9#`OIbxqI^^i$tj6t zgpp99QlSw;^Kn9&b9_`JIdsl-uCCKL&wE|ZeckW-$Nm0s-_L`0l9hu30H6qHr!rj^ z%x8EqAOKh^3jk^>x1<1CkUyP7509c_uWr z`doo#314#!C8Smp+7NTX*^_i!y++7-R+D;@rkD@t@r+s2CAHurS;Ze!j7=Y3(lw5& zl+=8xGf?zYmj=$8UI@sZ?i6@QD^YbL9q_So=Z;g1S1}T;3SZioIBJnsnIkmAnqlLg zlViZ^VdO{4wlg&(t-uplSB|(-;;34b|9B!%|2eSGY`MS7XuV1E(ne7kD6n`(ko}8X zt79MKoo}G$-myX_zysCIpPKp(JeJvX`YH1)4*!~$XedkA{s7IeDa>h~q4a&kC0ip3 z+lp#OHIY4gVT6(L7UATCU&u(u_JfYaF+HO8J%L-|H6+GcKKIH&oD>Do!*4fK9*V)3ZM@s=$!$lBxIFT^X$`lX_2HLm!tBpxs2VdVsXN%9$xndhwGZ`9df;>Fx(xd|`vX5o3RQBpfAhniP?T9xWPnYX@JrKnOC z0sd@nr_ab76)|o08^p@r;Y%$PvQz@o-FZh*M#e%^htG`YIvYME^jC|5@Hq1Z#ba8A z3ilIwGoZ&@j;pXA44b}e7@HNtkhaNfaa}RXj&%U=!}o@X4xolT^m=l;%Ti@v z%uJpybAC@WwGN{V-*X?fx7@xpGQ%-6?NtjO4C`l;!|qZB^yhS^L%gT+vXN*coR!ja zGO?5rhq>n zR7vkvNXH>tFW_*Z_c+!d58(LM349tO!4X8eTJ6bwqQj~=KhMz!vFmKeMSc(C_nGqp zpfHfJMUY87VPvoxY*>Q)g=iPQ!F8XWG)x<1=@oG-lk7L^<$bSl7V4^_Q=9}E_QX1O zzS~$K$wO)JU57k8s8QZ3^{`~6zJkbnHPPt<^C{Jt zAuXGgIF~V4W9(b)?wOmtRlevLiYAe$fKOCFejWu;3Qe+T5+2D=}gR$O?iY;yNmH_D%)($a2B`y&BPG78M+K-QzRw8|zn zTBSMu6y~g46w(fJ=~=jjvl_D)(mSQm->|!Cpx%1z)xmQ{Jc_DC#1$o^!vkbu9b_DJGYlWsHBt(Lj!O$6#Z_0Rt%!HxVI#bg z49E`nzmcuKlEKx|{@VX*fGhp|CIe^y)w(uu%xfZpHfmm4< p|5_5Ong3SAF!WO4st64G7giv6Upd}sjr{5_K`W