change properties to match what is in the new oom repo
[testsuite.git] / robot / resources / heatbridge.robot
1 *** Settings ***
2 Library     HeatBridge
3 Library     Collections
4 Library     OperatingSystem
5 Library     ONAPLibrary.ServiceMapping    WITH NAME    ServiceMapping
6 Library     ONAPLibrary.Templating    WITH NAME    Templating
7 Library     ONAPLibrary.AAI    WITH NAME     AAI
8
9
10 Resource    openstack/keystone_interface.robot
11 Resource    openstack/heat_interface.robot
12 Resource    openstack/nova_interface.robot
13 Resource    openstack/neutron_interface.robot
14 Resource    aai/aai_interface.robot
15 Resource    aai/create_vnfc.robot
16
17 *** Variables ***
18 ${MULTIPART_PATH}  /bulkadd
19 ${NAMED_QUERY_PATH}  /aai/search/named-query
20 ${NAMED_QUERY_TEMPLATE}    aai/named_query.jinja
21
22 ${BASE_URI}   /cloud-infrastructure/cloud-regions/cloud-region/\${cloud}/\${region}
23 ${IMAGE_URI}   ${BASE_URI}/images/image/\${image_id}
24 ${FLAVOR_URI}   ${BASE_URI}/flavors/flavor/\${flavor}
25 ${VSERVER_URI}   ${BASE_URI}/tenants/tenant/\${tenant}/vservers/vserver/\${vserver_id}
26 ${L_INTERFACE_URI}   ${VSERVER_URI}/l-interfaces/l-interface/\${linterface_id}
27 ${VSERVER_NAME}    \${vserver_name}
28
29 *** Keywords ***
30 Execute Heatbridge
31     [Documentation]   Run the Heatbridge against the stack to generate the bulkadd message
32     ...    Execute the build add
33     ...    Validate the add results by running the named query
34     [Arguments]    ${stack_name}    ${service}    ${ipv4_oam_address}
35     Return From Keyword If    '${service}' == 'vVG'
36     Run Openstack Auth Request    auth
37     ${stack_info}=    Wait for Stack to Be Deployed    auth    ${stack_name}
38     ${stack_id}=    Get From Dictionary    ${stack_info}    id
39     ${tenant_id}=   Get From Dictionary    ${stack_info}    OS::project_id
40     ${vnf_id}=    Get From Dictionary    ${stack_info}    vnf_id
41     ${KeyIsPresent}=    Run Keyword And Return Status       Dictionary Should Contain Key       ${stack_info}      ${ipv4_oam_address}
42     ${ipv4_vnf_address}=   Run Keyword If      ${KeyIsPresent}     Get From Dictionary  ${stack_info}      ${ipv4_oam_address}
43     Run Set VNF Params  ${vnf_id}  ${ipv4_vnf_address}  ACTIVE  Active
44     ### Create a vnfc for each vServer ###
45     ${stack_resources}=    Get Stack Resources    auth    ${stack_name}    ${stack_id}
46     ${resource_list}=    Get From Dictionary    ${stack_resources}    resources
47     :FOR   ${resource}    IN    @{resource_list}
48     \    Run Keyword If    '${resource['resource_type']}' == 'OS::Nova::Server'    Run Create VNFC    auth    ${resource['physical_resource_id']}    ${service}
49     ${keystone_api_version}=    Run Keyword If    '${GLOBAL_INJECTED_OPENSTACK_KEYSTONE_API_VERSION}'==''    Get KeystoneAPIVersion
50     ...    ELSE    Set Variable   ${GLOBAL_INJECTED_OPENSTACK_KEYSTONE_API_VERSION}
51     ${url}   ${path}=   Get Keystone Url And Path   ${keystone_api_version}
52     ${openstack_identity_url}=    Catenate    ${url}${path}
53     ${region}=   Get Openstack Region
54     ${user}   ${pass}=   Get Openstack Credentials
55     Run Keyword If   '${keystone_api_version}'=='v2.0'    Init Bridge    ${openstack_identity_url}    ${user}    ${pass}    ${tenant_id}    ${region}   ${GLOBAL_AAI_CLOUD_OWNER}
56     ...    ELSE    Init Bridge    ${openstack_identity_url}    ${user}    ${pass}    ${tenant_id}    ${region}   ${GLOBAL_AAI_CLOUD_OWNER}    ${GLOBAL_INJECTED_OPENSTACK_DOMAIN_ID}    ${GLOBAL_INJECTED_OPENSTACK_PROJECT_NAME}
57     ${request}=    Bridge Data    ${stack_id}
58     Log    ${request}
59     ${resp}=    AAI.Run Put Request    ${AAI_FRONTEND_ENDPOINT}    ${VERSIONED_INDEX_PATH}${MULTIPART_PATH}    ${request}    auth=${GLOBAL_AAI_AUTHENTICATION}
60     ${status_string}=    Convert To String    ${resp.status_code}
61     Should Match Regexp    ${status_string}     ^(201|200)$
62     ${reverse_heatbridge}=   Generate Reverse Heatbridge From Stack Info   ${stack_info}
63     Run Validation Query    ${stack_info}    ${service}    ${vnf_id}
64     [Return]    ${reverse_heatbridge}
65
66 Run Create VNFC
67     [Documentation]    Create a VNFC for a vServer
68     [Arguments]    ${alias}     ${vserver_id}    ${service}
69     ${resp}=    Get Openstack Server By Id   ${alias}     ${vserver_id}
70     Return From Keyword If   '${resp.status_code}' != '200'
71     ${info}=   Set Variable   ${resp.json()}
72     ${keys}=    Create Dictionary
73     ${vnfc_name}=   Catenate    \    ${info['server']['name']}
74     ${vnfc_nc}=    Set Variable  ${service}
75     ${vnfc_func}=    Set Variable  ${service}
76     Create VNFC If Not Exists    ${vnfc_name}     ${vnfc_nc}     ${vnfc_func}
77
78 Run Validation Query
79     [Documentation]    Run A&AI query to validate the bulk add
80     [Arguments]    ${stack_info}    ${service}    ${vnf_id}
81     Return from Keyword If    '${service}' == ''
82     ServiceMapping.Set Directory    default    ${GLOBAL_SERVICE_MAPPING_DIRECTORY}
83     ${payload}=  Run Get Generic VNF by VnfId       ${vnf_id}
84     ${vnf_type}=    Catenate    ${payload.json()[vnf-type]}
85     ${server_name_parameter}=    ServiceMapping.Get Validate Name Mapping    default    ${service}    ${vnf_type}
86     ${vserver_name}=    Get From Dictionary    ${stack_info}   ${server_name_parameter}
87     Run Vserver Query   ${vserver_name}
88
89 Run Vserver Query
90     [Documentation]    Run A&AI query to validate the bulk add
91     [Arguments]    ${vserver_name}
92     ${dict}=    Create Dictionary    vserver_name=${vserver_name}
93     Templating.Create Environment    aai    ${GLOBAL_TEMPLATE_FOLDER}
94     ${request}=   Templating.Apply Template    aai   ${NAMED_QUERY_TEMPLATE}    ${dict}
95     ${resp}=    AAI.Run Post Request      ${AAI_FRONTEND_ENDPOINT}    ${NAMED_QUERY_PATH}    ${request}     auth=${GLOBAL_AAI_AUTHENTICATION}
96     Should Be Equal As Strings    ${resp.status_code}    200
97
98
99 Run Set VNF Params
100     [Documentation]  Run A&A GET and PUT to set prov-status, orchestration status, and ipv4-oam-address
101     [Arguments]   ${vnf_id}  ${ipv4_vnf_address}  ${prov_status}=ACTIVE  ${orch_status}=Active
102     ${payload}=  Run Get Generic VNF by VnfId   ${vnf_id}
103     ${vnf_type}=    Catenate    ${payload.json()[vnf-type]}
104     #${payload_json}=    evaluate    json.loads('''${payload}''')    json
105     set to dictionary    ${payload}    vnf-type    ${prov_status}
106     set to dictionary    ${payload}    orchestration-status   ${orch_status}
107     set to dictionary    ${payload}    ipv4-oam-address  ${ipv4_vnf_address}
108     ${payload_string}=    evaluate    json.dumps(${payload})    json
109     ${put_resp}=    AAI.Run Put Request      ${AAI_FRONTEND_ENDPOINT}    ${VERSIONED_INDEX_PATH}/network/generic-vnfs/generic-vnf/${vnf_id}    ${payload_string}        auth=${GLOBAL_AAI_AUTHENTICATION}
110     ${status_string}=    Convert To String    ${put_resp.status_code}
111     Should Match Regexp    ${status_string}    ^(200|201)$
112     Log    Set VNF ProvStatus: ${vnf_id} to ${prov_status}
113
114 Run Get Generic VNF By VnfId
115     [Documentation]  Get VNF GET Payload with resource ID
116     [Arguments]   ${vnf_id}
117     ${resp}=    AAI.Run Get Request    ${AAI_FRONTEND_ENDPOINT}    ${VERSIONED_INDEX_PATH}/network/generic-vnfs/generic-vnf?vnf-id=${vnf_id}    auth=${GLOBAL_AAI_AUTHENTICATION}
118     Should Be Equal As Strings  ${resp.status_code}     200
119     [Return]   ${resp.json()}
120
121 Execute Reverse Heatbridge
122     [Documentation]   VID has already torn down the stack, reverse HB
123     [Arguments]   ${uris_to_delete}
124     Return From Keyword If   len(${uris_to_delete}) == 0
125     :FOR   ${uri}    IN   @{uris_to_delete}
126     \    Run Keyword And Ignore Error    Delete A&AI Entity   ${uri}
127
128 Generate Reverse Heatbridge From Stack Name
129     [Arguments]   ${stack_name}
130     Run Openstack Auth Request    auth
131     ${stack_info}=    Wait for Stack to Be Deployed    auth    ${stack_name}   timeout=10s
132     ${reverse_heatbridge}=    Generate Reverse Heatbridge From Stack Info   ${stack_info}
133     [Return]    ${reverse_heatbridge}
134
135 Generate Reverse Heatbridge From Stack Info
136     [Arguments]   ${stack_info}
137     ${reverse_heatbridge}=    Create List
138     ${stack_name}=    Get From Dictionary    ${stack_info}    name
139     ${stack_id}=    Get From Dictionary    ${stack_info}    id
140     ${tenant_id}=   Get From Dictionary    ${stack_info}    OS::project_id
141     ${region}=   Get Openstack Region
142     ${keys}=    Create Dictionary   region=${region}   cloud=${GLOBAL_AAI_CLOUD_OWNER}   tenant=${tenant_id}
143     ${stack_resources}=    Get Stack Resources    auth    ${stack_name}    ${stack_id}
144     ${resource_list}=    Get From Dictionary    ${stack_resources}    resources
145     :FOR   ${resource}    IN    @{resource_list}
146     \    Log     ${resource}
147     \    Run Keyword If    '${resource['resource_type']}' == 'OS::Neutron::Port'    Generate Linterface Uri    auth    ${resource['physical_resource_id']}   ${reverse_heatbridge}   ${keys}
148     :FOR   ${resource}    IN    @{resource_list}
149     \    Log     ${resource}
150     \    Run Keyword If    '${resource['resource_type']}' == 'OS::Nova::Server'    Generate Vserver Uri    auth    ${resource['physical_resource_id']}  ${reverse_heatbridge}   ${keys}   ${resource_list}
151     [Return]    ${reverse_heatbridge}
152
153 Generate Vserver Uri
154     [Documentation]   Run teardown against the server to generate a message that removes it
155     [Arguments]    ${alias}    ${port_id}   ${reverse_heatbridge}   ${keys}   ${resource_list}
156     ${resp}=    Get Openstack Server By Id   ${alias}     ${port_id}
157     Return From Keyword If   '${resp.status_code}' != '200'
158     ${info}=   Set Variable   ${resp.json()}
159     Set To Dictionary   ${keys}   vserver_id=${info['server']['id']}
160     Set To Dictionary   ${keys}   flavor=${info['server']['flavor']['id']}
161     Set To Dictionary   ${keys}   image_id=${info['server']['image']['id']}
162     ${uri}=   Templating.Template String    ${VSERVER_URI}    ${keys}
163     Append To List  ${reverse_heatbridge}   ${uri}
164     ${uri}=   Templating.Template String    ${FLAVOR_URI}    ${keys}
165     Append To List  ${reverse_heatbridge}   ${uri}
166     ${uri}=   Templating.Template String    ${IMAGE_URI}    ${keys}
167     Append To List  ${reverse_heatbridge}   ${uri}
168
169 Generate Linterface Uri
170     [Documentation]   Run teardown against the server to generate a message that removes it
171     [Arguments]    ${alias}    ${server_id}   ${reverse_heatbridge}   ${keys}
172     ${resp}=    Get Openstack Port By Id   ${alias}     ${server_id}
173     Return From Keyword If   '${resp.status_code}' != '200'
174     ${info}=   Set Variable   ${resp.json()}
175     Set To Dictionary   ${keys}   vserver_id=${info['port']['device_id']}
176     Set To Dictionary   ${keys}   linterface_id=${info['port']['name']}
177     ${uri}=   Templating.Template String    ${L_INTERFACE_URI}    ${keys}
178     Append To List  ${reverse_heatbridge}   ${uri}
179