aboutsummaryrefslogtreecommitdiffstats
path: root/robot/resources/test_templates/vnf_instantiation_ovp.robot
blob: ea7b0f9209e123d3c6c4c349a13c581a4e3a2f2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
*** 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 #####