*** Settings *** Documentation This test can be used for an arbitrary VNF. Resource ../vid/vid_interface.robot Resource ../vid/create_vid_vnf.robot Resource ../sdnc_interface.robot Library ONAPLibrary.Openstack Library SeleniumLibrary Library Collections Library ONAPLibrary.Utilities Library ONAPLibrary.JSON Library ONAPLibrary.ServiceMapping WITH NAME ServiceMapping *** Keywords *** Instantiate VNF [Documentation] Log into VID, create service instance, vnf instance, and module. This handles an arbitrary, single VNF service w/ volume modules. [Arguments] ${customer_name} ${service} ${service_type} ${service_name} ${service_model_type} ${vnf_type} ${vf_modules} ${catalog_resources} ${product_family} ${tenant_name} ${lcp_region} ${cloud_owner} ${project_name} ${owning_entity} ${api_type} ${line_of_business}=LOB-Demonstration ${platform}=Platform-Demonstration ${uuid}= Generate UUID4 ${list}= Create List ${report_data}= Create List Setup Browser Login To VID GUI api_type=${api_type} Log Creating ${service_name} in VID console=yes ${service_instance_id}= Wait Until Keyword Succeeds 900s 5s Create VID Service Instance ${customer_name} ${service_model_type} ${service_type} ${service_name} ${project_name} ${owning_entity} Validate Service Instance ${service_instance_id} ${service_type} ${customer_name} ServiceMapping.Set Directory default ${GLOBAL_SERVICE_MAPPING_DIRECTORY} ${vnflist}= ServiceMapping.Get Service Vnf Mapping default ${service} ${vnf_name_index}= Set Variable 0 ${vf_module_name_list}= Create List ${uuid}= Evaluate str("${uuid}")[:8] ##### INSTANTIATING VNF IN VID ##### :FOR ${vnf} IN @{vnflist} # APPC max is 50 characters \ ${vnf_name}= Catenate Ete_${vnf}_${uuid}_${vnf_name_index} \ ${generic_vnf_type}= Set Variable ${service_name}/${vnf_type} ${vnf_name_index} \ ${vnf_name_index}= Evaluate ${vnf_name_index} + 1 \ Log Creating VNF ${vnf_name} in VID console=yes \ Wait Until Keyword Succeeds 900s 5s Create VID VNF ${service_instance_id} ${vnf_name} ${product_family} ${lcp_region} ${tenant_name} ${vnf_type} ${CUSTOMER_NAME} line_of_business=${line_of_business} platform=${platform} cloud_owner_uc=${cloud_owner} #### Calling Keyword To Create Each Module #### \ ${report_data}= Loop and Create Modules in VID ${vf_modules} ${vnf_name} ${generic_vnf_type} ${service_instance_id} ${lcp_region} ${tenant_name} ${cloud_owner} ${customer_name} ${vnf} ${catalog_resources} [Return] ${report_data} Loop and Create Modules in VID [Documentation] Loops through the VF modules in a VNF and instantiates in VID [Arguments] ${vf_modules} ${vnf_name} ${generic_vnf_type} ${service_instance_id} ${lcp_region} ${tenant_name} ${cloud_owner} ${customer_name} ${vnf} ${resources} ${temp_list_for_report} Create List ### Base Module :FOR ${module} IN @{vf_modules} \ ${vf_module_type}= Get From Dictionary ${module} name \ ${template_name}= Get Heat Template Name From Catalog Resource ${resources} ${vnf} ${vf_module_type} \ ${preload_file} ${isBase}= Retrieve Module Preload and isBase ${template_name} \ ${temp_dict_for_report} = Run Keyword If "${isBase}"=="true" Create Module in VID ${vnf_name} ${template_name} ${vf_module_type} ${generic_vnf_type} ${preload_file} ${service_instance_id} ${lcp_region} ${tenant_name} ${customer_name} ${cloud_owner} \ Run Keyword If "${isBase}"=="true" Append To List ${temp_list_for_report} ${temp_dict_for_report} ### Incremental Modules :FOR ${module} IN @{vf_modules} \ ${vf_module_type}= Get From Dictionary ${module} name \ ${template_name}= Get Heat Template Name From Catalog Resource ${resources} ${vnf} ${vf_module_type} \ ${preload_file} ${isBase}= Retrieve Module Preload and isBase ${template_name} \ ${temp_dict_for_report} = Run Keyword If "${isBase}"=="false" Create Module in VID ${vnf_name} ${template_name} ${vf_module_type} ${generic_vnf_type} ${preload_file} ${service_instance_id} ${lcp_region} ${tenant_name} ${customer_name} ${cloud_owner} \ Run Keyword If "${isBase}"=="false" Append To List ${temp_list_for_report} ${temp_dict_for_report} [Return] ${temp_list_for_report} Create Module in VID [Arguments] ${vnf_name} ${template_name} ${vf_module_type} ${generic_vnf_type} ${preload_file} ${service_instance_id} ${lcp_region} ${tenant_name} ${customer_name} ${cloud_owner} ${vf_module_name}= Catenate Vfmodule_${vnf_name}_${template_name} ${vf_module_name}= Remove String ${vf_module_name} .yaml .yml ${Module_name}= Set Variable ${api_type}= Retrieve Manifest Data api_type Create Preload From JSON ${BUILD_DIR}/preloads/${preload_file} ${api_type} ${vf_module_name} ${vf_module_type} ${vnf_name} ${generic_vnf_type} ${temp_dict_for_report} Create Dictionary stack_name=${vf_module_name} template_name=${BUILD_DIR}/templates/${template_name} preload_name=${BUILD_DIR}/preloads/${preload_file} Log Creating ${vf_module_name} in VID console=yes ${vf_module_id}= Create VID VNF module ${service_instance_id} ${vf_module_name} ${lcp_region} ${tenant_name} ${vf_module_type} ${customer_name} ${vnf_name} cloud_owner_uc=${cloud_owner} [Return] ${temp_dict_for_report} Retrieve Module Preload and isBase [Arguments] ${file_name} ${json}= OperatingSystem.Get File ${BUILD_DIR}/vnf-details.json ${object}= Evaluate json.loads('''${json}''') json :FOR ${vnf} IN @{object["modules"]} \ ${module_present}= set variable True \ ${file_name_m}= set variable ${vnf["filename"]} \ ${preload_name}= set variable if '${file_name_m}' == '${file_name}' ${vnf["preload"]} \ ${isBase}= set variable if '${file_name_m}' == '${file_name}' ${vnf["isBase"]} \ Exit For Loop If '${file_name_m}' == '${file_name}' \ ${module_present}= set variable False Return From Keyword If ${module_present}==True ${preload_name} ${isBase} Fail msg=ERROR: A module with the file name: ${file_name} is not present. ##### Getting The Heat Template Name From the Module ID, using the catalog data ##### Get Heat Template Name From Catalog Resource [Documentation] Searching through the catalog resources looking for the heat template name [Arguments] ${resources} ${vnf} ${module_id} ${keys}= Get Dictionary Keys ${resources} ${artifact_ids}= Get Artifact IDs From CSAR ${resources} ${vnf} ${module_id} :FOR ${key} IN @{keys} \ ${cr}= Get From Dictionary ${resources} ${key} \ ${artifacts}= Set Variable ${cr['allArtifacts']} \ ${artifactName}= Get Artifact Name From Artifacts ${artifacts} ${artifact_ids} \ Return From Keyword If "${artifactName}" != "NOTFOUND" ${artifactName} Get Artifact Name From Artifacts [Arguments] ${artifacts} ${artifact_ids} ${keys}= Get Dictionary Keys ${artifacts} :FOR ${key} IN @{keys} \ ${artifact}= Get From Dictionary ${artifacts} ${key} \ ${artifactType}= Get From Dictionary ${artifact} artifactType \ ${csar_id}= Set Variable '' \ ${csar_id}= Run Keyword If "${artifactType}"=="HEAT" Get From Dictionary ${artifact} artifactUUID \ ${artifactName}= Run Keyword If $csar_id in $artifact_ids Get From Dictionary ${artifact} artifactName \ Return From Keyword If $csar_id in $artifact_ids ${artifactName} [Return] NOTFOUND Get Artifact IDs From CSAR [Documentation] Looking for the artifact ID for a given module [Arguments] ${resources} ${vnf} ${module_id} ${keys}= Get Dictionary Keys ${resources} :FOR ${key} IN @{keys} \ ${cr}= Get From Dictionary ${resources} ${key} \ ${groups}= Set Variable ${cr['groups']} \ ${artifact_ids}= Get Artifact IDs From Module ${groups} ${module_id} \ Return From Keyword If ${artifact_ids} is not None ${artifact_ids} ${empty_list}= Create List [Return] ${empty_list} Get Artifact IDs From Module [Arguments] ${groups} ${module_id} :FOR ${group} IN @{groups} \ ${invariant_name}= Get From Dictionary ${group} invariantName \ ${artifact_ids}= Create List \ ${artifact_ids}= Run Keyword If "${invariant_name}"== "${module_id}" Get From Dictionary ${group} artifactsUuid \ Return From Keyword If ${artifact_ids} is not None ${artifact_ids} ${empty_list}= Create List [Return] ${empty_list} ##### End of catalog manipulation #####