From: Lukasz Rajewski Date: Wed, 19 Feb 2020 14:14:25 +0000 (+0100) Subject: APPC CDT Automation X-Git-Tag: 1.6.0~48 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=demo.git;a=commitdiff_plain;h=42ecc70c1f5a05c4de5dda414a7964398552b47d APPC CDT Automation The patch modifies vFWDT configuration scripts in order to automate the configuration of APPC artifacts instead of CDT. As a result it makes use case closer for CSIT automation Change-Id: I5ab2785093515ee0b224c8f3e8a5d9eb600e52f9 Issue-ID: APPC-1731 Signed-off-by: Lukasz Rajewski --- diff --git a/tutorials/vFWDT/playbooks/configure_ansible.sh b/tutorials/vFWDT/playbooks/configure_ansible.sh index 5c197963..c49153f8 100755 --- a/tutorials/vFWDT/playbooks/configure_ansible.sh +++ b/tutorials/vFWDT/playbooks/configure_ansible.sh @@ -17,6 +17,32 @@ # # ============LICENSE_END========================================================= +if [ ! -f playbooks/onap.pem ]; then + echo "onap.pem file does not exist" + exit +fi + +K8S_NODE_IP=`kubectl get nodes -o=wide | grep 01 | awk {'print $6'}` + +CDT_REQ_DIR="workflow/templates/cdt-requests" + +echo "APPC Artifacts configuration" + +for f in $CDT_REQ_DIR/*.json; do + echo "" + echo "Uploading $f" + RES=`curl -k -s -X POST -H "Content-Type: application/json" -d @$f https://$K8S_NODE_IP:30211/cdtService/getDesigns` + echo "$RES" + + if [[ $RES != *'"code":"400","message":"success"'* ]]; then + echo "CDT Artifact Upload failed" + exit + fi +done + +echo "APPC Artifacts configuration completed" + +echo "APPC Ansible configuration" ANSIBLE=`kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep appc-ansible` echo $ANSIBLE diff --git a/tutorials/vFWDT/playbooks/darkstat b/tutorials/vFWDT/playbooks/darkstat deleted file mode 100755 index e80f43fe..00000000 Binary files a/tutorials/vFWDT/playbooks/darkstat and /dev/null differ diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/templates/action-template.json b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/action-template.json new file mode 100755 index 00000000..9e7429a6 --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/action-template.json @@ -0,0 +1,9 @@ +{ + "userID": "demo", + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0", + "action": "DistributeTrafficCheck", + "artifact-name": "template_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json", + "artifact-type": "APPC-CONFIG", + "artifact-version": "0.0.1", + "artifact-contents": "{\r\n \"InventoryNames\": \"VM\",\r\n \"PlaybookName\": \"${book_name}\",\r\n \"AutoNodeList\": True,\r\n \"EnvParameters\": {\r\n \"ConfigFileName\": \"../traffic_distribution_config.json\",\r\n \"vnf_instance\": \"vfwdt\",\r\n },\r\n \"FileParameters\": {\r\n \"traffic_distribution_config.json\": \"${file_parameter_content}\"\r\n },\r\n \"Timeout\": 3600\r\n}" +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/templates/all-actions-content.json b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/all-actions-content.json new file mode 100755 index 00000000..4269f0e1 --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/all-actions-content.json @@ -0,0 +1,77 @@ +{ + "reference_data": [ + { + "action": "DistributeTraffic", + "action-level": "vnf", + "scope": { + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0", + "vnfc-type-list": [], + "vnfc-type": "" + }, + "template": "Y", + "vm": [], + "device-protocol": "ANSIBLE", + "user-name": "admin", + "port-number": "8000", + "artifact-list": [ + { + "artifact-name": "template_DistributeTraffic_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json", + "artifact-type": "config_template" + }, + { + "artifact-name": "pd_DistributeTraffic_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.yaml", + "artifact-type": "parameter_definitions" + }, + { + "artifact-name": "param_DistributeTraffic_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json", + "artifact-type": "param_values" + } + ], + "scopeType": "vnf-type" + }, + { + "action": "AllAction", + "action-level": "vnf", + "scope": { + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0", + "vnfc-type-list": [], + "vnfc-type": "" + }, + "artifact-list": [ + { + "artifact-name": "reference_AllAction_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json", + "artifact-type": "reference_template" + } + ] + }, + { + "action": "DistributeTrafficCheck", + "action-level": "vnf", + "scope": { + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0", + "vnfc-type-list": [], + "vnfc-type": "" + }, + "template": "Y", + "vm": [], + "device-protocol": "ANSIBLE", + "user-name": "admin", + "port-number": "8000", + "artifact-list": [ + { + "artifact-name": "template_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json", + "artifact-type": "config_template" + }, + { + "artifact-name": "pd_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.yaml", + "artifact-type": "parameter_definitions" + }, + { + "artifact-name": "param_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json", + "artifact-type": "param_values" + } + ], + "scopeType": "vnf-type" + } + ] +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/templates/reference-all-actions.json b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/reference-all-actions.json new file mode 100755 index 00000000..c99112ae --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/reference-all-actions.json @@ -0,0 +1,9 @@ +{ + "userID": "demo", + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0", + "action": "AllAction", + "artifact-name": "reference_AllAction_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json", + "artifact-type": "APPC-CONFIG", + "artifact-version": "0.1", + "artifact-contents": "{\"reference_data\":[{\"action\":\"DistributeTraffic\",\"action-level\":\"vnf\",\"scope\":{\"vnf-type\":\"vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0\",\"vnfc-type-list\":[],\"vnfc-type\":\"\"},\"template\":\"Y\",\"vm\":[],\"device-protocol\":\"ANSIBLE\",\"user-name\":\"admin\",\"port-number\":\"8000\",\"artifact-list\":[{\"artifact-name\":\"template_DistributeTraffic_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json\",\"artifact-type\":\"config_template\"},{\"artifact-name\":\"pd_DistributeTraffic_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.yaml\",\"artifact-type\":\"parameter_definitions\"},{\"artifact-name\":\"param_DistributeTraffic_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json\",\"artifact-type\":\"param_values\"}],\"scopeType\":\"vnf-type\"},{\"action\":\"AllAction\",\"action-level\":\"vnf\",\"scope\":{\"vnf-type\":\"vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0\",\"vnfc-type-list\":[],\"vnfc-type\":\"\"},\"artifact-list\":[{\"artifact-name\":\"reference_AllAction_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json\",\"artifact-type\":\"reference_template\"}]},{\"action\":\"DistributeTrafficCheck\",\"action-level\":\"vnf\",\"scope\":{\"vnf-type\":\"vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0\",\"vnfc-type-list\":[],\"vnfc-type\":\"\"},\"template\":\"Y\",\"vm\":[],\"device-protocol\":\"ANSIBLE\",\"user-name\":\"admin\",\"port-number\":\"8000\",\"artifact-list\":[{\"artifact-name\":\"template_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json\",\"artifact-type\":\"config_template\"},{\"artifact-name\":\"pd_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.yaml\",\"artifact-type\":\"parameter_definitions\"},{\"artifact-name\":\"param_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json\",\"artifact-type\":\"param_values\"}],\"scopeType\":\"vnf-type\"}]}" +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/templates/traffic-params-list.json b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/traffic-params-list.json new file mode 100755 index 00000000..a0104861 --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/traffic-params-list.json @@ -0,0 +1,9 @@ +{ + "userID": "demo", + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0", + "action": "DistributeTrafficCheck", + "artifact-name": "param_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.json", + "artifact-type": "APPC-CONFIG", + "artifact-version": "0.0.1", + "artifact-contents": "[{\"book_name\":\"\",\"file_parameter_content\":\"\"}]" +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/templates/traffic-params.json b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/traffic-params.json new file mode 100755 index 00000000..1824592f --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/traffic-params.json @@ -0,0 +1,9 @@ +{ + "userID": "demo", + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vPKG 81793128-bca7 0", + "action": "DistributeTrafficCheck", + "artifact-name": "pd_DistributeTrafficCheck_vFWDT2020-02-0314:40:_vFWDT_vPKG81793128-bca70_0.0.1V.yaml", + "artifact-type": "APPC-CONFIG", + "artifact-version": "0.0.1", + "artifact-contents": "---\nkind: \"Property Definition\"\nversion: V1\nvnf-parameter-list:\n- name: book_name\n type: null\n description: null\n required: null\n default: null\n source: Manual\n rule-type: null\n request-keys: null\n response-keys: null\n- name: file_parameter_content\n type: null\n description: null\n required: null\n default: null\n source: Manual\n rule-type: null\n request-keys: null\n response-keys: null\n" +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/templates/upgrade-params-list.json b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/upgrade-params-list.json new file mode 100755 index 00000000..5d029269 --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/upgrade-params-list.json @@ -0,0 +1,9 @@ +{ + "userID": "demo", + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vFWSNK 3f9e7507-b8de 0", + "action": "UpgradeSoftware", + "artifact-name": "param_UpgradeSoftware_vFWDT2020-02-0314:40:_vFWDT_vFWSNK3f9e7507-b8de0_0.0.1V.json", + "artifact-type": "APPC-CONFIG", + "artifact-version": "0.0.1", + "artifact-contents": "[{\"book_name\":\"\",\"new-software-version\":\"\",\"existing-software-version\":\"\",\"file_parameter_content\":\"\"}]" +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/templates/upgrade-params.json b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/upgrade-params.json new file mode 100755 index 00000000..cf656f37 --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/templates/upgrade-params.json @@ -0,0 +1,9 @@ +{ + "userID": "demo", + "vnf-type": "vFWDT 2020-02-03 14:40:/vFWDT_vFWSNK 3f9e7507-b8de 0", + "action": "UpgradeSoftware", + "artifact-name": "pd_UpgradeSoftware_vFWDT2020-02-0314:40:_vFWDT_vFWSNK3f9e7507-b8de0_0.0.1V.yaml", + "artifact-type": "APPC-CONFIG", + "artifact-version": "0.0.1", + "artifact-contents": "---\nkind: \"Property Definition\"\nversion: V1\nvnf-parameter-list:\n- name: book_name\n type: null\n description: null\n required: null\n default: null\n source: Manual\n rule-type: null\n request-keys: null\n response-keys: null\n- name: new-software-version\n type: null\n description: null\n required: null\n default: null\n source: Manual\n rule-type: null\n request-keys: null\n response-keys: null\n- name: existing-software-version\n type: null\n description: null\n required: null\n default: null\n source: Manual\n rule-type: null\n request-keys: null\n response-keys: null\n- name: file_parameter_content\n type: null\n description: null\n required: null\n default: null\n source: Manual\n rule-type: null\n request-keys: null\n response-keys: null\n" +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/vfw-sink/traffic.json b/tutorials/vFWDT/workflow/templates/cdt-templates/vfw-sink/traffic.json new file mode 100755 index 00000000..404cd2f5 --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/vfw-sink/traffic.json @@ -0,0 +1,13 @@ +{ + "InventoryNames": "VM", + "PlaybookName": "${()=(book_name)}", + "AutoNodeList": true, + "EnvParameters": { + "ConfigFileName": "../traffic_distribution_config.json", + "vnf_instance": "vfwdt" + }, + "FileParameters": { + "traffic_distribution_config.json": "${()=(file_parameter_content)}" + }, + "Timeout": 3600 +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/vfw-sink/upgrade.json b/tutorials/vFWDT/workflow/templates/cdt-templates/vfw-sink/upgrade.json new file mode 100755 index 00000000..49c64d0e --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/vfw-sink/upgrade.json @@ -0,0 +1,15 @@ +{ + "InventoryNames": "VM", + "PlaybookName": "${()=(book_name)}", + "AutoNodeList": true, + "EnvParameters": { + "ConfigFileName": "../config.json", + "vnf_instance": "vfwdt", + "new_software_version": "${()=(new-software-version)}", + "existing_software_version": "${()=(existing-software-version)}" + }, + "FileParameters": { + "config.json": "${()=(file_parameter_content)}" + }, + "Timeout": 3600 +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/templates/cdt-templates/vpgn/traffic.json b/tutorials/vFWDT/workflow/templates/cdt-templates/vpgn/traffic.json new file mode 100755 index 00000000..404cd2f5 --- /dev/null +++ b/tutorials/vFWDT/workflow/templates/cdt-templates/vpgn/traffic.json @@ -0,0 +1,13 @@ +{ + "InventoryNames": "VM", + "PlaybookName": "${()=(book_name)}", + "AutoNodeList": true, + "EnvParameters": { + "ConfigFileName": "../traffic_distribution_config.json", + "vnf_instance": "vfwdt" + }, + "FileParameters": { + "traffic_distribution_config.json": "${()=(file_parameter_content)}" + }, + "Timeout": 3600 +} \ No newline at end of file diff --git a/tutorials/vFWDT/workflow/workflow.py b/tutorials/vFWDT/workflow/workflow.py index 1ddcde54..cbeac413 100755 --- a/tutorials/vFWDT/workflow/workflow.py +++ b/tutorials/vFWDT/workflow/workflow.py @@ -1003,6 +1003,167 @@ def _execute_lcm_requests(workflow, onap_ip, check_result): _execute_lcm_requests(lcm_requests[i]["workflow"], onap_ip, check_result) +def _generate_cdt_artifact_request(req_id, artifact, action, vnfc_type): + req = { + 'input': { + 'design-request': { + 'request-id': req_id, + 'action': "uploadArtifact", + 'payload': json.dumps(artifact['payload']) + } + } + } + + file = "{}_{}_{}.json".format(artifact['type'], action.lower(), vnfc_type) + dirname = "templates/cdt-requests" + #print(file) + if not os.path.exists(dirname): + os.makedirs(dirname) + f = open("{}/{}".format(dirname, file), 'w') + f.write(json.dumps(req, indent=4)) + f.close() + + return req + + +def _get_name_of_artifact(prefix, action, vnf_type): + return "{}_{}_{}_0.0.1V.json".format(prefix, action, vnf_type) + + +def _set_artifact_payload(vnf_type, vnfc_type, action, artifact): + sw_upgrade = False + if action == "DistributeTraffic" or action == "DistributeTrafficCheck" or action == "AllAction": + pass + elif action == "UpgradeSoftware" or action == "UpgradePreCheck" or action == "UpgradePostCheck": + sw_upgrade = True + else: + raise Exception("{} action not supported".format(action)) + + artifact_contents = '' + if artifact['type'] == 'config_template': + file = 'templates/cdt-templates/templates/action-template.json' + template_file = 'templates/cdt-templates/{}/{}' + if sw_upgrade: + template_file = template_file.format(vnfc_type, 'upgrade.json') + else: + template_file = template_file.format(vnfc_type, 'traffic.json') + + artifact_contents = json.dumps(json.loads(open(template_file).read())) + elif artifact['type'] == 'parameter_definitions': + file = 'templates/cdt-templates/templates/{}' + if sw_upgrade: + file = file.format('upgrade-params.json') + else: + file = file.format('traffic-params.json') + elif artifact['type'] == 'param_values': + file = 'templates/cdt-templates/templates/{}' + if sw_upgrade: + file = file.format('upgrade-params-list.json') + else: + file = file.format('traffic-params-list.json') + elif artifact['type'] == 'reference_template': + file = 'templates/cdt-templates/templates/reference-all-actions.json' + else: + raise Exception("{} not supported artifact type".format(artifact['type'])) + + payload = json.loads(open(file).read()) + payload['vnf-type'] = vnf_type + payload['artifact-name'] = artifact['name'] + payload['action'] = action + + if artifact['type'] == 'config_template': + artifact['artifact-contents'] = artifact_contents + artifact['payload'] = payload + + +def _generate_artifacts_for_cdt(vnf_type, vnf_type_formatted, vnfc_type, action): + artifacts = [] + artifacts.append({ + 'name': _get_name_of_artifact("template", action, vnf_type_formatted), + 'type': 'config_template', + 'payload': {'test': 'test'} + }) + artifacts.append({ + 'name': _get_name_of_artifact("pd", action, vnf_type_formatted), + 'type': 'parameter_definitions', + 'payload': {'test': 'test'} + }) + artifacts.append({ + 'name': _get_name_of_artifact("param", action, vnf_type_formatted), + 'type': 'param_values', + 'payload': {'test': 'test'} + }) + + _set_artifact_payload(vnf_type, vnfc_type, action, artifacts[0]) + _set_artifact_payload(vnf_type, vnfc_type, action, artifacts[1]) + _set_artifact_payload(vnf_type, vnfc_type, action, artifacts[2]) + + return artifacts + + +def _generate_cdt_payloads_for_vnf(vnf_info, vnfc_type, actions): + req_id = str(uuid.uuid4()).replace('-','') + vnf_type_formatted = vnf_info['vnf-type'].replace(' ','').replace('/', '_') + artifacts = { + 'AllAction': [{ + 'name': _get_name_of_artifact("reference", 'AllAction', vnf_type_formatted), + 'type': 'reference_template' + }] + } + + all_action_artifact = artifacts['AllAction'][0] + + _set_artifact_payload(vnf_info['vnf-type'], vnfc_type, 'AllAction', all_action_artifact) + + for action in actions: + action_artifacts = _generate_artifacts_for_cdt(vnf_info['vnf-type'], vnf_type_formatted, vnfc_type, action) + artifacts[action] = action_artifacts + + all_action_artifacts = list() + + for action in artifacts: + artifact_list = list() + action_info = { + 'action': action, + 'action-level': "vnf", + 'scope': { + 'vnf-type': vnf_info['vnf-type'], + 'vnfc-type-list': [], + 'vnfc-type': "" + }, + 'artifact-list': artifact_list + } + + if action != 'AllAction': + action_info.update({ + 'template': "Y", + 'vm': [], + 'device-protocol': "ANSIBLE", + 'user-name': "admin", + 'port-number': "8000", + 'scopeType': "vnf-type" + }) + + for action_artifact in artifacts[action]: + artifact_list.append({'artifact-name': action_artifact['name'], 'artifact-type': action_artifact['type']}) + if action != 'AllAction': + req = _generate_cdt_artifact_request(req_id, action_artifact, action, vnfc_type) + #print(json.dumps(req, indent=4)) + + #print(json.dumps(action_info, indent=4)) + all_action_artifacts.append(action_info) + + all_action_artifact['payload']['artifact-contents'] = json.dumps({'reference_data': all_action_artifacts}) + req = _generate_cdt_artifact_request(req_id, all_action_artifact, 'AllAction', vnfc_type) + #print(json.dumps(req, indent=4)) + + +def _generate_cdt_payloads(aai_data): + vfw_actions = ["DistributeTrafficCheck", "UpgradeSoftware", "UpgradePreCheck", "UpgradePostCheck", "UpgradeSoftware"] + vpgn_actions = ["DistributeTraffic", "DistributeTrafficCheck"] + _generate_cdt_payloads_for_vnf(aai_data["vfw-model-info"], "vfw-sink", vfw_actions) + _generate_cdt_payloads_for_vnf(aai_data["vpgn-model-info"], "vpgn", vpgn_actions) + def execute_workflow(vfw_vnf_id, rancher_ip, onap_ip, use_oof_cache, if_close_loop_vfw, info_only, check_result, new_version=None): print("\nExecuting workflow for VNF ID '{}' on Rancher with IP {} and ONAP with IP {}".format( @@ -1030,6 +1191,8 @@ def execute_workflow(vfw_vnf_id, rancher_ip, onap_ip, use_oof_cache, if_close_lo f.write(inventory) f.close() + _generate_cdt_payloads(aai_data) + if info_only: return print("\nDistribute Traffic Workflow Execution:")