From: Rene_Robert Date: Mon, 4 Nov 2019 08:03:23 +0000 (+0100) Subject: add parameter resolution (CDS) in User-Guide X-Git-Tag: 6.0.0-ONAP~4064^2 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=5cceec6b1a0ebde893a738ccd9759519bf92bbd5;p=doc.git add parameter resolution (CDS) in User-Guide Issue-ID: DOC-569 Signed-off-by: Rene_Robert Change-Id: I93d7f9666f21dcc961ba9e7f961ebf5554208228 --- diff --git a/docs/guides/onap-user/design/index.rst b/docs/guides/onap-user/design/index.rst index 29d166ccb..6964740d4 100644 --- a/docs/guides/onap-user/design/index.rst +++ b/docs/guides/onap-user/design/index.rst @@ -113,7 +113,7 @@ The follwing sections will focus on the different Design steps: Governance Approval and Service Distribution <./service-distribution/index.rst> - VNF parameter assignment templating <../../../submodules/ccsdk/cds.git/docs/index.rst> + VNF parameter assignment templating <./parameter_resolution/index.rst> Policy Design <../../../submodules/policy/parent.git/docs/design/design.rst> diff --git a/docs/guides/onap-user/design/media/capabilities.png b/docs/guides/onap-user/design/media/capabilities.png new file mode 100755 index 000000000..447a3c65f Binary files /dev/null and b/docs/guides/onap-user/design/media/capabilities.png differ diff --git a/docs/guides/onap-user/design/media/cba.png b/docs/guides/onap-user/design/media/cba.png new file mode 100755 index 000000000..eda765050 Binary files /dev/null and b/docs/guides/onap-user/design/media/cba.png differ diff --git a/docs/guides/onap-user/design/media/cds-blueprint.png b/docs/guides/onap-user/design/media/cds-blueprint.png new file mode 100755 index 000000000..f7d988f64 Binary files /dev/null and b/docs/guides/onap-user/design/media/cds-blueprint.png differ diff --git a/docs/guides/onap-user/design/media/sdc.png b/docs/guides/onap-user/design/media/sdc.png new file mode 100755 index 000000000..5e553cda9 Binary files /dev/null and b/docs/guides/onap-user/design/media/sdc.png differ diff --git a/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius.cba b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius.cba new file mode 100755 index 000000000..9bc1d2b19 Binary files /dev/null and b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius.cba differ 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/freeradius_example/after_enrichment/CBA_freeradius/Definitions/artifact_types.json new file mode 100755 index 000000000..da498e35e --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/artifact_types.json @@ -0,0 +1,16 @@ +{ + "artifact_types" : { + "artifact-mapping-resource" : { + "description" : "Resource Mapping File used along with Configuration template", + "version" : "1.0.0", + "derived_from" : "tosca.artifacts.Implementation", + "file_ext" : [ "json" ] + }, + "artifact-template-velocity" : { + "description" : " Velocity Template used for Configuration", + "version" : "1.0.0", + "derived_from" : "tosca.artifacts.Implementation", + "file_ext" : [ "vtl" ] + } + } +} \ No newline at end of file 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 new file mode 100755 index 000000000..3d584007a --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/data_types.json @@ -0,0 +1,669 @@ +{ + "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 new file mode 100755 index 000000000..76d8e74cd --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/freeradius.json @@ -0,0 +1,224 @@ +{ + "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/node_types.json b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/node_types.json new file mode 100755 index 000000000..d1ace9f9b --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/node_types.json @@ -0,0 +1,395 @@ +{ + "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", + "attributes" : { + "assignment-params" : { + "required" : true, + "type" : "string" + } + }, + "capabilities" : { + "component-node" : { + "type" : "tosca.capabilities.Node" + } + }, + "interfaces" : { + "ResourceResolutionComponent" : { + "operations" : { + "process" : { + "inputs" : { + "resolution-key" : { + "description" : "Key for service instance related correlation.", + "required" : false, + "type" : "string" + }, + "occurrence" : { + "description" : "Number of time to perform the resolution.", + "required" : false, + "type" : "integer", + "default" : 1 + }, + "store-result" : { + "description" : "Whether or not to store the output.", + "required" : false, + "type" : "boolean" + }, + "resource-type" : { + "description" : "Request type.", + "required" : false, + "type" : "string" + }, + "artifact-prefix-names" : { + "description" : "Template , Resource Assignment Artifact Prefix names", + "required" : true, + "type" : "list", + "entry_schema" : { + "type" : "string" + } + }, + "request-id" : { + "description" : "Request Id, Unique Id for the request.", + "required" : true, + "type" : "string" + }, + "resource-id" : { + "description" : "Resource Id.", + "required" : false, + "type" : "string" + }, + "action-name" : { + "description" : "Action Name of the process", + "required" : false, + "type" : "string" + }, + "dynamic-properties" : { + "description" : "Dynamic Json Content or DSL Json reference.", + "required" : false, + "type" : "json" + } + }, + "outputs" : { + "resource-assignment-params" : { + "required" : true, + "type" : "string" + }, + "status" : { + "required" : true, + "type" : "string" + } + } + } + } + } + }, + "derived_from" : "tosca.nodes.Component" + }, + "source-capability" : { + "description" : "This is Component Resource Source Node Type", + "version" : "1.0.0", + "properties" : { + "script-type" : { + "required" : true, + "type" : "string", + "constraints" : [ { + "valid_values" : [ "kotlin", "internal", "jython" ] + } ], + "default" : "kotlin" + }, + "script-class-reference" : { + "description" : "Capability reference name for internal and kotlin, for jython script file path", + "required" : true, + "type" : "string" + }, + "instance-dependencies" : { + "description" : "Instance dependency Names to Inject to Kotlin / Jython Script.", + "required" : false, + "type" : "list", + "entry_schema" : { + "type" : "string" + } + }, + "key-dependencies" : { + "description" : "Resource Resolution dependency dictionary names.", + "required" : true, + "type" : "list", + "entry_schema" : { + "type" : "string" + } + } + }, + "derived_from" : "tosca.nodes.ResourceSource" + }, + "source-db" : { + "description" : "This is Database Resource Source Node Type", + "version" : "1.0.0", + "properties" : { + "type" : { + "required" : true, + "type" : "string", + "constraints" : [ { + "valid_values" : [ "SQL", "PLSQL" ] + } ], + "default" : "SQL" + }, + "endpoint-selector" : { + "required" : false, + "type" : "string" + }, + "query" : { + "required" : true, + "type" : "string" + }, + "input-key-mapping" : { + "required" : false, + "type" : "map", + "entry_schema" : { + "type" : "string" + } + }, + "output-key-mapping" : { + "required" : false, + "type" : "map", + "entry_schema" : { + "type" : "string" + } + }, + "key-dependencies" : { + "required" : true, + "type" : "list", + "entry_schema" : { + "type" : "string" + } + } + }, + "derived_from" : "tosca.nodes.ResourceSource" + }, + "source-default" : { + "description" : "This is Default Resource Source Node Type", + "version" : "1.0.0", + "properties" : { }, + "derived_from" : "tosca.nodes.ResourceSource" + }, + "source-input" : { + "description" : "This is Input Resource Source Node Type", + "version" : "1.0.0", + "properties" : { }, + "derived_from" : "tosca.nodes.ResourceSource" + }, + "source-rest" : { + "description" : "This is Rest Resource Source Node Type", + "version" : "1.0.0", + "properties" : { + "type" : { + "required" : true, + "type" : "string", + "constraints" : [ { + "valid_values" : [ "JSON" ] + } ], + "default" : "JSON" + }, + "verb" : { + "required" : true, + "type" : "string", + "constraints" : [ { + "valid_values" : [ "GET", "POST", "DELETE", "PUT" ] + } ], + "default" : "GET" + }, + "payload" : { + "required" : false, + "type" : "string", + "default" : "" + }, + "endpoint-selector" : { + "required" : false, + "type" : "string" + }, + "url-path" : { + "required" : true, + "type" : "string" + }, + "path" : { + "required" : true, + "type" : "string" + }, + "expression-type" : { + "required" : false, + "type" : "string", + "constraints" : [ { + "valid_values" : [ "JSON_PATH", "JSON_POINTER" ] + } ], + "default" : "JSON_PATH" + }, + "input-key-mapping" : { + "required" : false, + "type" : "map", + "entry_schema" : { + "type" : "string" + } + }, + "output-key-mapping" : { + "required" : false, + "type" : "map", + "entry_schema" : { + "type" : "string" + } + }, + "key-dependencies" : { + "required" : true, + "type" : "list", + "entry_schema" : { + "type" : "string" + } + } + }, + "derived_from" : "tosca.nodes.ResourceSource" + }, + "tosca.nodes.Component" : { + "description" : "This is default Component Node", + "version" : "1.0.0", + "derived_from" : "tosca.nodes.Root" + }, + "tosca.nodes.ResourceSource" : { + "description" : "TOSCA base type for Resource Sources", + "version" : "1.0.0", + "derived_from" : "tosca.nodes.Root" + } + } +} \ No newline at end of file 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/freeradius_example/after_enrichment/CBA_freeradius/Definitions/policy_types.json new file mode 100755 index 000000000..1e44cc70a --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/policy_types.json @@ -0,0 +1,3 @@ +{ + "policy_types" : { } +} \ No newline at end of file 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/freeradius_example/after_enrichment/CBA_freeradius/Definitions/relationship_types.json new file mode 100755 index 000000000..4ddd7a57c --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/relationship_types.json @@ -0,0 +1,3 @@ +{ + "relationship_types" : { } +} \ 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 new file mode 100755 index 000000000..766d7be3e --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Definitions/resources_definition_types.json @@ -0,0 +1,1385 @@ +{ + "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 new file mode 100755 index 000000000..92fb2aa48 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100755 index 000000000..e0d36ca17 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt @@ -0,0 +1,82 @@ +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 new file mode 100755 index 000000000..2b88e8271 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py @@ -0,0 +1,39 @@ +# 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 new file mode 100755 index 000000000..bc98c171a --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta @@ -0,0 +1,6 @@ +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 new file mode 100755 index 000000000..271167d77 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-mapping.json @@ -0,0 +1,613 @@ +[ + { + "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 new file mode 100755 index 000000000..f4c57d4cb --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/radius-template.vtl @@ -0,0 +1,211 @@ +{ + "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 new file mode 100755 index 000000000..7fb2978af --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-mapping.json @@ -0,0 +1,112 @@ +[ + { + "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 new file mode 100755 index 000000000..6a23c3f83 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/userconfig-template.vtl @@ -0,0 +1 @@ +{"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 new file mode 100755 index 000000000..55f0a698e --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-mapping.json @@ -0,0 +1,375 @@ +[ + { + "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 new file mode 100755 index 000000000..8d1cf3b09 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/CBA_freeradius/Templates/vnf-template.vtl @@ -0,0 +1,166 @@ +{ + "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 new file mode 100755 index 000000000..114ef5402 Binary files /dev/null and b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius.zip differ 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 new file mode 100755 index 000000000..5719ac888 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "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 new file mode 100755 index 000000000..bee325592 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.env @@ -0,0 +1,17 @@ +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 new file mode 100755 index 000000000..a699ca00e --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/after_enrichment/HEAT_freeradius/radius.yaml @@ -0,0 +1,163 @@ +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 new file mode 100755 index 000000000..37a74ddf0 Binary files /dev/null and b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius.cba differ 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 new file mode 100755 index 000000000..76d8e74cd --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Definitions/freeradius.json @@ -0,0 +1,224 @@ +{ + "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 new file mode 100755 index 000000000..92fb2aa48 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Plans/CONFIG_ConfigDeploy.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100755 index 000000000..e0d36ca17 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt @@ -0,0 +1,82 @@ +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 new file mode 100755 index 000000000..2b88e8271 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/python/ConfigDeploy.py @@ -0,0 +1,39 @@ +# 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 new file mode 100755 index 000000000..bc98c171a --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/TOSCA-Metadata/TOSCA.meta @@ -0,0 +1,6 @@ +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 new file mode 100755 index 000000000..271167d77 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-mapping.json @@ -0,0 +1,613 @@ +[ + { + "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 new file mode 100755 index 000000000..f4c57d4cb --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/radius-template.vtl @@ -0,0 +1,211 @@ +{ + "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 new file mode 100755 index 000000000..7fb2978af --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-mapping.json @@ -0,0 +1,112 @@ +[ + { + "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 new file mode 100755 index 000000000..6a23c3f83 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/userconfig-template.vtl @@ -0,0 +1 @@ +{"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 new file mode 100755 index 000000000..55f0a698e --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-mapping.json @@ -0,0 +1,375 @@ +[ + { + "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 new file mode 100755 index 000000000..8d1cf3b09 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Templates/vnf-template.vtl @@ -0,0 +1,166 @@ +{ + "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 new file mode 100755 index 000000000..114ef5402 Binary files /dev/null and b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius.zip differ 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 new file mode 100755 index 000000000..5719ac888 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "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 new file mode 100755 index 000000000..bee325592 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.env @@ -0,0 +1,17 @@ +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 new file mode 100755 index 000000000..a699ca00e --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/HEAT_freeradius/radius.yaml @@ -0,0 +1,163 @@ +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 new file mode 100644 index 000000000..ec09d6309 --- /dev/null +++ b/docs/guides/onap-user/design/parameter_resolution/index.rst @@ -0,0 +1,691 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 +.. International License. http://creativecommons.org/licenses/by/4.0 +.. Copyright 2019 ONAP Contributors. All rights reserved. + +.. _doc_guide_user_des_param_assign: + +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. + +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 Casablanca release, the user, that wants to instantiate a new VNF/CNF, +does not need to get and provide those data. + +Of course the “user” may be a human but may be also an application that uses +the “instantiation” API on ONAP NBI or ONAP SO. + +ONAP CDS component is then in charge of resolving those parameters +automatically. + +.. toctree:: + :maxdepth: 1 + :titlesonly: + + Full CDS documentation is here <../../../../submodules/ccsdk/cds.git/docs/index.rst> + +It offers automated solution out of the box by delivering network intent +declarative package during design time phase that automated the provisioning +and/or network configuration network intent. + +At instantiation time, CDS controller will find (assign) the values +according some “recipies” described in a "Controller Blueprint Archive”: +a collection of files that CDS controller will use to proceed +parameter resolution. + +Thanks to CDS, at instantiation time, the user, that wants to instantiate +a new VNF, does not need to get and provide those data himself. +Of course the “user” may be a human but may be also +an application that uses the “instantiation” API on ONAP NBI or ONAP SO. + +Less effort for the “user”, but more effort for the “designer” +that needs to pre-defined all necessary recipies +during design time. + +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. + +That software will be installed on a simple ubuntu image. + + +Design process +-------------- + + * `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 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 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 +--------------------------------------------------------- + +To instantiate a freeradius 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 +to be resolved. + +Our example: + +:: + + 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 AAAAB3Nza...UwMtE0oHV47zQABx 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 + + +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) + +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. + +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... + +In the freeradius example (an opensource AAA radius solution), +the following parameters can be automated via CDS: + +- 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 + +Here after the decision/solution that the designer may take: + +**vnf_name** will be resolved using a "naming" application (micro-service), +provided by ONAP. + +**image_name** will be resolved via a default value in the template + +**flavor_name** 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 +in the instantiation request. + +**freeradius_ip** will be resolved using an IP Address Management (IPAM) +application, provided by ONAP (Netbox). + +**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. + +Service Designer needs to check about existing resources in the disctionary. + +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: + +:: + + 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"] + } + } + } + } + }' + + + +Step 5: write template files +---------------------------- + +In this example, Designer needs to create 3 "templates". + +- VNF level :download:`VNF_template_file ` +- VFmodule level :download:`VFmodule_template_file ` +- post-instantiation VNF level :download:`VNF_config_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 +- 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 + +ONAP SDNC provides some "capabilities": + +- generate-name +- vlan-tag-assign +- netbox-ip-assign +- aai-vnf-put +- ... + +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. + +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 +entry in the list of capabilities (node: set ss.capability.execution-order[]) + +|image3| + +Step 6: write mapping files +--------------------------- + +Along with each velocity template, Designer needs to create a +"mapping" file. + +This is the place where the Designer explains, for each parameter: + +- value source: the system or database that will provide the value +- default value + +At VNF instantiation step, values are often coming from input (in the request +sent by the user). + +At VF module instantion step, values are often coming from SDNC database +(stored values from VNF instantiation step). + +Resolved data are always stored in SDNC database (MDSAL) + +About sources: + +- "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 + +Other sources are possible. + +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 ` + +Step 7: write scripts +--------------------- + +Sometimes, it will be necessary to use some scripts (python, kotlin, +ansible...) to process some 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. + +Step 8: write the "CDS blueprint" file +-------------------------------------- + +The "designer" will then create a "CDS blueprint". + +It is a JSON file and for the freeradius usecase, it is called +freeradius.json. + +This file will be the main entry point for CDS controller +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: + +- 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 + +For the freeradius example, here is the :download:`CDS blueprint ` +before enrichment. + +Step 9: build the "Controller Blueprint Archive” (cba) +------------------------------------------------------ + +Having created velocity templates, mapping files, scripts 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: + +|image2| + +For the freeradius example, here is the :download:`cba archive ` before enrichment. + +To complete that cba, an "enrichment" operation is needed. + +Service Designer can use two methods: + +- using CDS User Interface +- using CDS rest API + +Service Designer needs to send the cba to CDS-UI pod and requests +the enrichment. + +Here is the example using CDS-UI rest API: + +:: + + 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 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. + +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. + +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. + +SDC sdnc_artifact_name = CBA blueprint json filename, e.g. “vnf”, +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”, +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”, +we can see in the below screenshot the metadata section showing +template version. + +|image4| + +Step 11: distribute the service +------------------------------- + +In SDC, when distributing the service, the CDS controller will be +informed that a new cba archive is available. + +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: + +:: + + curl -X POST \ + http://84.39.34.234:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances \ + -H 'Accept: */*' \ + -H 'Accept-Encoding: gzip, deflate' \ + -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 '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" + }, + { + "service": { + "instanceParams": [ + ], + "resources": { + "vnfs": [ + { + "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": [ + { } + ] + } + ] + } + ] + }, + "modelInfo": { + "modelVersion": "1.0", + "modelVersionId": "4dacb612-935f-4755-91a1-78af64331c42", + "modelInvariantId": "98d65302-3be3-4828-a116-1bedb2919048", + "modelName": "freeradius5", + "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" + } + } + }' + +.. |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