Remove trailing spaces in robot scripts
[testsuite.git] / robot / resources / demo_preload.robot
1 *** Settings ***
2 Documentation     This test template encapsulates the VNF Orchestration use case.
3
4 Resource        test_templates/model_test_template.robot
5 Resource        test_templates/model_test_template_vcperescust.robot
6 Resource        test_templates/vnf_orchestration_test_template.robot
7 Resource        sdc_interface.robot
8 Resource        vid/vid_interface.robot
9 Resource        consul_interface.robot
10 Resource        policy_interface.robot
11 Resource        aai/create_availability_zone.robot
12 Resource    so/direct_instantiate.robot
13
14 Library         ONAPLibrary.Utilities
15 Library         Collections
16 Library         OperatingSystem
17 Library         SeleniumLibrary
18 Library         RequestsLibrary
19 Library         ONAPLibrary.Templating    WITH NAME    Templating
20 Library         ONAPLibrary.AAI    WITH NAME    AAI
21 Library         ONAPLibrary.SO    WITH NAME    SO
22
23 *** Variables ***
24
25 ${ADD_DEMO_CUSTOMER_BODY}   aai/add_demo_customer.jinja
26 ${AAI_INDEX_PATH}     /aai/v8
27 ${VF_MODULES_NAME}     _Demo_VFModules.json
28 ${FILE_CACHE}    /share/
29 ${DEMO_PREFIX}   demo
30 ${VPKG_MODULE_LABEL}    base_vpkg
31
32
33 *** Keywords ***
34 Load Customer And Models
35     [Documentation]   Use ONAP to Orchestrate a service.
36     [Arguments]    ${customer_name}
37     Load OwningEntity  lineOfBusiness  LOB-${customer_name}
38     Load OwningEntity  platform  Platform-${customer_name}
39     Load OwningEntity  project  Project-${customer_name}
40     Load OwningEntity  owningEntity  OE-${customer_name}
41     Load Customer  ${customer_name}
42     Load Models  ${customer_name}
43
44 Load OwningEntity
45     [Documentation]   Use ONAP to Orchestrate a service.
46     [Arguments]    ${parameter}   ${name}
47     ${data_path}=  Set Variable  /maintenance/category_parameter/${parameter}
48     ${vid_data}=  Set Variable  {"options":["${name}"]}
49     ${auth}=  Create List  ${GLOBAL_VID_USERNAME}    ${GLOBAL_VID_PASSWORD}
50     Log    Creating session ${data_path}
51     ${session}=    Create Session       vid    ${VID_ENDPOINT}${VID_ENV}     auth=${auth}
52     ${uuid}=    Generate UUID4
53     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    USER_ID=${GLOBAL_VID_USERNAME}    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
54     ${resp}=    Post Request    vid     ${data_path}   data=${vid_data}    headers=${headers}
55
56 Load Customer
57     [Documentation]   Use ONAP to Orchestrate a service.
58     [Arguments]    ${customer_name}
59     ${tenant_id}    ${tenant_name}=    Setup Orchestrate VNF   ${GLOBAL_AAI_CLOUD_OWNER}   SharedNode    OwnerType    v1    CloudZone
60     ${region}=   Get Openstack Region
61     Create Customer For VNF Demo    ${customer_name}    ${customer_name}    INFRA    ${GLOBAL_AAI_CLOUD_OWNER}    ${region}   ${tenant_id}
62     Create Customer For VNF Demo    ${customer_name}    ${customer_name}    INFRA    ${GLOBAL_AAI_CLOUD_OWNER}    RegionTlab  50b190410b2a4c229d8a6044a80ab7c1
63     Create Availability Zone If Not Exists    ${GLOBAL_AAI_CLOUD_OWNER}    ${region}   ${GLOBAL_AAI_AVAILABILITY_ZONE_NAME}
64
65 Load Models
66     [Documentation]   Load Basic Test VNF Models
67     [Arguments]    ${customer_name}
68     Log   ${\n}Distributing vFWCL
69     Distribute Model   vFWCL   ${DEMO_PREFIX}VFWCL
70     Log   Distibuting vLB
71     Distribute Model   vLB   ${DEMO_PREFIX}VLB
72     Log   Distibuting vLB_CDS
73     Distribute Model   vLB_CDS   ${DEMO_PREFIX}VLB_CDS  True
74
75 Load vCPE Models
76     [Documentation]   Load vCPE Models
77     [Arguments]    ${customer_name}
78     Log   Distibuting vCPEInfra
79     Distribute Model   vCPEInfra   ${DEMO_PREFIX}VCPEInfra
80     Log   Distibuting vCPEvBNG
81     Distribute Model   vCPEvBNG   ${DEMO_PREFIX}VCPEvBNG
82     Log   Distibuting vCPEvBRGEMU
83     Distribute Model   vCPEvBRGEMU   ${DEMO_PREFIX}VCPEvBRGEMU
84     Log   Distibuting vCPEvGMUX
85     Distribute Model   vCPEvGMUX    ${DEMO_PREFIX}VCPEvGMUX
86     Log   Distibuting vCPEvGW (this is not vCPEResCust service)
87     Distribute Model   vCPEvGW    ${DEMO_PREFIX}VCPEvGW
88
89 Distribute Model
90     [Arguments]   ${service}   ${modelName}  ${cds}=False   ${instantiationType}=A-la-carte  ${resourceType}=VF
91     Model Distribution For Directory    ${service}   ${modelName}  ${cds}  ${instantiationType}  ${resourceType}
92
93 Create Customer For VNF Demo
94     [Documentation]    Create demo customer for the demo
95     [Arguments]    ${customer_name}   ${customer_id}   ${customer_type}    ${clouder_owner}    ${cloud_region_id}    ${tenant_id}
96     Create Service If Not Exists    vFW
97     Create Service If Not Exists    vFWCL
98     Create Service If Not Exists    vLB
99     Create Service If Not Exists    vCPE
100     Create Service If Not Exists    vIMS
101     Create Service If Not Exists    gNB
102     ${arguments}=    Create Dictionary    subscriber_name=${customer_name}    global_customer_id=${customer_id}    subscriber_type=${customer_type}     cloud_owner=${clouder_owner}  cloud_region_id=${cloud_region_id}    tenant_id=${tenant_id}
103     Set To Dictionary   ${arguments}       service1=vFWCL       service2=vLB   service3=vCPE   service4=vIMS  service5=gNB   service6=vFW
104     Templating.Create Environment    aai    ${GLOBAL_TEMPLATE_FOLDER}
105     ${data}=   Templating.Apply Template    aai   ${ADD_DEMO_CUSTOMER_BODY}    ${arguments}
106     ${put_resp}=    AAI.Run Put Request     ${AAI_FRONTEND_ENDPOINT}    ${INDEX PATH}${ROOT_CUSTOMER_PATH}${customer_id}    ${data}    auth=${GLOBAL_AAI_AUTHENTICATION}
107     ${status_string}=    Convert To String    ${put_resp.status_code}
108     Should Match Regexp    ${status_string}    ^(200|201|412)$
109
110 Preload User Model
111     [Documentation]   Preload the demo data for the passed VNF with the passed module name
112     [Arguments]   ${vnf_name}   ${vf_module_name}    ${service}    ${service_instance_id}    ${vnf}=${service}
113     # Go to A&AI and get information about the VNF we need to preload
114     ${status}  ${generic_vnf}=   Run Keyword And Ignore Error   Get Service Instance    ${vnf_name}
115     Run Keyword If   '${status}' == 'FAIL'   FAIL   VNF Name: ${vnf_name} is not found.
116     ${vnf_type}=   Set Variable   ${generic_vnf['vnf-type']}
117     ${relationships}=   Set Variable   ${generic_vnf['relationship-list']['relationship']}
118     ${relationship_data}=    Get Relationship Data   ${relationships}
119     ${customer_id}=   Catenate
120     :FOR    ${r}   IN   @{relationship_data}
121     \   ${service}=   Set Variable If    '${r['relationship-key']}' == 'service-subscription.service-type'   ${r['relationship-value']}    ${service}
122     \   ${service_instance_id}=   Set Variable If    '${r['relationship-key']}' == 'service-instance.service-instance-id'   ${r['relationship-value']}   ${service_instance_id}
123     \   ${customer_id}=    Set Variable If   '${r['relationship-key']}' == 'customer.global-customer-id'   ${r['relationship-value']}   ${customer_id}
124     ${invariantUUID}=   Get Persona Model Id     ${service_instance_id}    ${service}    ${customer_id}
125
126     # We still need the vf module names. We can get them from VID using the persona_model_id (invariantUUID) from A&AI
127     Setup Browser
128     Login To VID GUI
129     ${vf_modules}=   Get Module Names from VID    ${invariantUUID}
130     Log    ${generic_vnf}
131     Log   ${service_instance_id},${vnf_name},${vnf_type},${vf_module_name},${vf_modules},${service}
132     Preload Vnf    ${service_instance_id}   ${vnf_name}   ${vnf_type}   ${vf_module_name}    ${vf_modules}    ${vnf}    demo    ${service}
133     [Teardown]    Close All Browsers
134
135 Preload User Model GRA
136     [Documentation]   Preload the demo data for the passed VNF with the passed module name via GRA
137     [Arguments]   ${vnf_name}   ${vf_module_name}   ${service}    ${service_instance_id}    ${vnf}=${service}
138     # Go to A&AI and get information about the VNF we need to preload
139     ${status}  ${generic_vnf}=   Run Keyword And Ignore Error   Get Service Instance    ${vnf_name}
140     Run Keyword If   '${status}' == 'FAIL'   FAIL   VNF Name: ${vnf_name} is not found.
141     ${vnf_type}=   Set Variable   ${generic_vnf['vnf-type']}
142     ${relationships}=   Set Variable   ${generic_vnf['relationship-list']['relationship']}
143     ${relationship_data}=    Get Relationship Data   ${relationships}
144     ${customer_id}=   Catenate
145     :FOR    ${r}   IN   @{relationship_data}
146     \   ${service}=   Set Variable If    '${r['relationship-key']}' == 'service-subscription.service-type'   ${r['relationship-value']}    ${service}
147     \   ${service_instance_id}=   Set Variable If    '${r['relationship-key']}' == 'service-instance.service-instance-id'   ${r['relationship-value']}   ${service_instance_id}
148     \   ${customer_id}=    Set Variable If   '${r['relationship-key']}' == 'customer.global-customer-id'   ${r['relationship-value']}   ${customer_id}
149     ${invariantUUID}=   Get Persona Model Id     ${service_instance_id}    ${service}    ${customer_id}
150
151     # We still need the vf module names. We can get them from VID using the persona_model_id (invariantUUID) from A&AI
152     Setup Browser
153     Login To VID GUI
154     ${vf_modules}=   Get Module Names from VID    ${invariantUUID}
155     Log    ${generic_vnf}
156     Log   ${service_instance_id},${vnf_name},${vnf_type},${vf_module_name},${vf_modules},${service}
157     Preload Gra    ${service_instance_id}   ${vnf_name}   ${vnf_type}   ${vf_module_name}    ${vf_modules}  ${vnf}   demo   ${service}
158     [Teardown]    Close All Browsers
159
160
161 Get Relationship Data
162     [Arguments]   ${relationships}
163     :FOR    ${r}   IN   @{relationships}
164     \     ${status}   ${relationship_data}   Run Keyword And Ignore Error    Set Variable   ${r['relationship-data']}
165     \     Return From Keyword If    '${status}' == 'PASS'   ${relationship_data}
166
167
168 Get Generic VNF By ID
169     [Arguments]   ${vnf_id}
170     ${resp}=    AAI.Run Get Request    ${AAI_FRONTEND_ENDPOINT}    ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-id=${vnf_id}    auth=${GLOBAL_AAI_AUTHENTICATION}
171     Should Be Equal As Strings  ${resp.status_code}     200
172     [Return]   ${resp.json()}
173
174 Get Service Instance
175     [Arguments]   ${vnf_name}
176     ${resp}=    AAI.Run Get Request    ${AAI_FRONTEND_ENDPOINT}    ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-name=${vnf_name}    auth=${GLOBAL_AAI_AUTHENTICATION}
177     Should Be Equal As Strings  ${resp.status_code}     200
178     [Return]   ${resp.json()}
179
180 Get Persona Model Id
181     [Documentation]    Query and Validates A&AI Service Instance
182     [Arguments]    ${service_instance_id}    ${service_type}   ${customer_id}
183     ${resp}=    AAI.Run Get Request    ${AAI_FRONTEND_ENDPOINT}    ${INDEX PATH}${CUSTOMER SPEC PATH}${customer_id}${SERVICE SUBSCRIPTIONS}${service_type}${SERVICE INSTANCE}${service_instance_id}    auth=${GLOBAL_AAI_AUTHENTICATION}
184     ${persona_model_id}=   Get From DIctionary   ${resp.json()['service-instance'][0]}    model-invariant-id
185     [Return]   ${persona_model_id}
186
187 APPC Mount Point
188     [Arguments]   ${vf_module_name}
189     Run Openstack Auth Request    auth
190     ${status}   ${stack_info}=   Run Keyword and Ignore Error    Wait for Stack to Be Deployed    auth    ${vf_module_name}   timeout=120s
191     Run Keyword if   '${status}' == 'FAIL'   FAIL   ${vf_module_name} Stack is not found
192     ${stack_id}=    Get From Dictionary    ${stack_info}    id
193     ${server_list}=    Get Openstack Servers    auth
194     ${vpg_name_0}=    Get From Dictionary    ${stack_info}    vpg_name_0
195     ${vnf_id}=    Get From Dictionary    ${stack_info}    vnf_id
196     ${vpg_public_ip}=    Get Server Ip    ${server_list}    ${stack_info}   vpg_name_0    network_name=${GLOBAL_INJECTED_OPENSTACK_PUBLIC_NETWORK}
197     ${appc}=    Create Mount Point In APPC    ${vnf_id}    ${vpg_public_ip}
198
199 Instantiate VNF
200     [Arguments]   ${service}   ${vf_module_label}=NULL
201     ${tenant_id}    ${tenant_name}=    Setup Orchestrate VNF    ${GLOBAL_AAI_CLOUD_OWNER}    SharedNode    OwnerType    v1    CloudZone
202     ${uuid}=    Generate UUID4
203     ${vf_module_name_list}   ${generic_vnfs}    ${server_id}    ${service_instance_id}    ${catalog_resource_ids}   ${catalog_service_id}    ${uris_to_delete}=    Orchestrate VNF    DemoCust_${uuid}    ${service}   ${service}    ${tenant_id}    ${tenant_name}
204     ${stack_name} =     Get From List   ${vf_module_name_list}  -1
205     Save For Delete    ${tenant_id}    ${tenant_name}    ${server_id}    DemoCust_${uuid}    ${service_instance_id}    ${stack_name}    ${catalog_service_id}    ${catalog_resource_ids}
206     :FOR  ${vf_module_name}  IN   @{vf_module_name_list}
207     \   Log   VNF Module Name=${vf_module_name}
208     # Don't get from SO for now due to SO-1186
209     # ${model_invariant_id}=  Run SO Get ModelInvariantId   ${suite_service_model_name}  ${vf_module_label}
210     ${model_invariant_id}=   Set Variable   ${EMPTY}
211     :FOR    ${vf_module}    IN    @{generic_vnfs}
212     \    ${generic_vnf}=    Get From Dictionary    ${generic_vnfs}    ${vf_module}
213     \    ${model_invariant_id}=    Set Variable If    '${vf_module_label}' in '${vf_module}'   ${generic_vnf['model-invariant-id']}    ${model_invariant_id}
214     Log   Update old vFWCL Policy for ModelInvariantID=${model_invariant_id}
215     ${status}   ${value}=   Run Keyword And Ignore Error  Update vVFWCL Policy   ${model_invariant_id}
216     :FOR  ${vf_module_name}  IN   @{vf_module_name_list}
217     \   Log   APPC Mount Point for VNF Module Name=${vf_module_name}
218     \   ${status}   ${value}=   Run Keyword And Ignore Error  APPC Mount Point    ${vf_module_name}
219     Log   Update Tca ControlLoopName
220     Update Tca ControlLoopName    ${model_invariant_id}
221
222 Instantiate VNF CDS
223     [Arguments]   ${service}   ${vf_module_label}=NULL
224     ${status}   ${value}=   Run Keyword And Ignore Error   Distribute Model   vLB_CDS   demoVLB_CDS  True
225     ${resp}=  Get Service Catalog  demoVLB_CDS
226     ${service-uuid}=     Set Variable    ${resp['uuid']}
227     ${service-invariantUUID}=     Set Variable    ${resp['invariantUUID']}
228     ${requestid}=   CDS Service Instantiate  demoVLB_CDS  ${service-uuid}  ${service-invariantUUID}
229     ${auth}=  Create List  ${GLOBAL_SO_CATDB_USERNAME }  ${GLOBAL_SO_PASSWORD}
230     SO.Run Polling Get Request  ${GLOBAL_SO_APIHAND_ENDPOINT}  ${GLOBAL_SO_ORCHESTRATION_REQUESTS_PATH}/${requestid}  tries=30   interval=60  auth=${auth}
231
232 Instantiate Demo VNF
233     [Arguments]   ${service}   ${vf_module_label}=NULL
234     ${tenant_id}    ${tenant_name}=    Setup Orchestrate VNF    ${GLOBAL_AAI_CLOUD_OWNER}    SharedNode    OwnerType    v1    CloudZone
235     ${vf_module_name}    ${service}    ${generic_vnfs}=   Orchestrate Demo VNF    Demonstration    ${service}   ${service}    ${tenant_id}    ${tenant_name}
236     Log   VNF Module Name=${vf_module_name}
237     # Don't get from SO for now due to SO-1186
238     # ${model_invariant_id}=  Run SO Get ModelInvariantId   ${suite_service_model_name}  ${vf_module_label}
239     ${model_invariant_id}=   Set Variable   ${EMPTY}
240     :FOR    ${vf_module}    IN    @{generic_vnfs}
241     \    ${generic_vnf}=    Get From Dictionary    ${generic_vnfs}    ${vf_module}
242     \    ${model_invariant_id}=    Set Variable If    '${vf_module_label}' in '${vf_module}'   ${generic_vnf['model-invariant-id']}    ${model_invariant_id}
243     Log   ModelInvariantID=${model_invariant_id}
244     ${status}   ${value}=   Run Keyword And Ignore Error  Update vVFWCL Policy   ${model_invariant_id}
245     ${status}   ${value}=   Run Keyword And Ignore Error  APPC Mount Point    ${vf_module_name}
246
247
248 Save For Delete
249     [Documentation]   Create a variable file to be loaded for save for delete
250     [Arguments]    ${tenant_id}    ${tenant_name}    ${vvg_server_id}    ${customer_name}    ${service_instance_id}    ${stack_name}    ${catalog_service_id}    ${catalog_resource_ids}
251     ${dict}=    Create Dictionary
252     Set To Dictionary   ${dict}   TENANT_NAME=${tenant_name}
253     Set To Dictionary   ${dict}   TENANT_ID=${tenant_id}
254     Set To Dictionary   ${dict}   CUSTOMER_NAME=${customer_name}
255     Set To Dictionary   ${dict}   STACK_NAME=${stack_name}
256     Set To Dictionary   ${dict}   VVG_SERVER_ID=${vvg_server_id}
257     Set To Dictionary   ${dict}   SERVICE_INSTANCE_ID=${service_instance_id}
258     Set To Dictionary   ${dict}   CATALOG_SERVICE_ID=${catalog_service_id}
259
260     ${vars}=    Catenate
261     ${keys}=   Get Dictionary Keys    ${dict}
262     :FOR   ${key}   IN   @{keys}
263     \    ${value}=   Get From Dictionary   ${dict}   ${key}
264     \    ${vars}=   Catenate   ${vars}${key} = "${value}"\n
265
266     ${comma}=   Catenate
267     ${vars}=    Catenate   ${vars}CATALOG_RESOURCE_IDS = [
268     :FOR   ${id}   IN    @{catalog_resource_ids}
269     \    ${vars}=    Catenate  ${vars}${comma} "${id}"
270     \    ${comma}=   Catenate   ,
271     ${vars}=    Catenate  ${vars}]\n
272     OperatingSystem.Create File   ${FILE_CACHE}/${stack_name}.py   ${vars}
273     OperatingSystem.Create File   ${FILE_CACHE}/lastVNF4HEATBRIGE.py   ${vars}