Resource openstack/keystone_interface.robot
Resource openstack/heat_interface.robot
Resource openstack/nova_interface.robot
+Resource openstack/neutron_interface.robot
Resource aai/aai_interface.robot
*** Variables ***
-${VERSIONED_INDEX_PATH} /aai/v8
${MULTIPART_PATH} /bulkadd
${NAMED_QUERY_PATH} /aai/search/named-query
-${NAMED_QUERY_TEMPLATE} robot/assets/templates/aai/named_query.template
+${NAMED_QUERY_TEMPLATE} robot/assets/templates/aai/named_query.template
+
+${BASE_URI} /cloud-infrastructure/cloud-regions/cloud-region/\${cloud}/\${region}
+${IMAGE_URI} ${BASE_URI}/images/image/\${image_id}
+${FLAVOR_URI} ${BASE_URI}/flavors/flavor/\${flavor}
+${VSERVER_URI} ${BASE_URI}/tenants/tenant/\${tenant}/vservers/vserver/\${vserver_id}
+${L_INTERFACE_URI} ${VSERVER_URI}/l-interfaces/l-interface/\${linterface_id}
+
+#******************** Test Case Variables ****************
${REVERSE_HEATBRIDGE}
Execute Heatbridge
[Documentation] Run the Heatbridge against the stack to generate the bulkadd message
... Execute the build add
- ... Validate the add results by running the named query
- [Arguments] ${stack_name} ${service_instance_id} ${service}
- Return From Keyword If '${service}' == 'vVG'
+ ... Validate the add results by running the named query
+ [Arguments] ${stack_name} ${service_instance_id} ${service} ${ipv4_oam_address}
+ Return From Keyword If '${service}' == 'vVG'
Run Openstack Auth Request auth
${stack_info}= Wait for Stack to Be Deployed auth ${stack_name}
${stack_id}= Get From Dictionary ${stack_info} id
${tenant_id}= Get From Dictionary ${stack_info} OS::project_id
${vnf_id}= Get From Dictionary ${stack_info} vnf_id
- ${openstack_identity_url}= Catenate ${GLOBAL_OPENSTACK_KEYSTONE_SERVER}/v2.0
- Init Bridge ${openstack_identity_url} ${GLOBAL_VM_PROPERTIES['openstack_username']} ${GLOBAL_VM_PROPERTIES['openstack_password']} ${tenant_id} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${GLOBAL_AAI_CLOUD_OWNER}
+ ${KeyIsPresent}= Run Keyword And Return Status Dictionary Should Contain Key ${stack_info} ${ipv4_oam_address}
+ ${ipv4_vnf_address}= Run Keyword If ${KeyIsPresent} Get From Dictionary ${stack_info} ${ipv4_oam_address}
+ Run Set VNF Params ${vnf_id} ${ipv4_vnf_address} PROV Active
+ ${url} ${path}= Get Keystone Url And Path
+ ${openstack_identity_url}= Catenate ${url}${path}
+ ${region}= Get Openstack Region
+ ${user} ${pass}= Get Openstack Credentials
+ Init Bridge ${openstack_identity_url} ${user} ${pass} ${tenant_id} ${region} ${GLOBAL_AAI_CLOUD_OWNER}
${request}= Bridge Data ${stack_id}
Log ${request}
- ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${MULTIPART_PATH} ${request}
- Should Be Equal As Strings ${resp.status_code} 200
- Generate Reverse Heatbridge ${request}
+ ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${MULTIPART_PATH} ${request}
+ ${status_string}= Convert To String ${resp.status_code}
+ Should Match Regexp ${status_string} ^(201|200)$
+ ${reverse_heatbridge}= Generate Reverse Heatbridge From Stack Info ${stack_info}
+ Set Test Variable ${REVERSE_HEATBRIDGE} ${reverse_heatbridge}
Run Validation Query ${stack_info} ${service}
+
Run Validation Query
- [Documentation] Run A&AI query to validate the bulk add
+ [Documentation] Run A&AI query to validate the bulk add
[Arguments] ${stack_info} ${service}
- Return from Keyword If '${service}' == ''
+ Return from Keyword If '${service}' == ''
${server_name_parameter}= Get From Dictionary ${GLOBAL_VALIDATE_NAME_MAPPING} ${service}
${vserver_name}= Get From Dictionary ${stack_info} ${server_name_parameter}
- Run Vserver Query ${vserver_name}
+ Run Vserver Query ${vserver_name}
Run Vserver Query
- [Documentation] Run A&AI query to validate the bulk add
+ [Documentation] Run A&AI query to validate the bulk add
[Arguments] ${vserver_name}
${dict}= Create Dictionary vserver_name=${vserver_name}
${request}= OperatingSystem.Get File ${NAMED_QUERY_TEMPLATE}
- ${request}= Template String ${request} ${dict}
+ ${request}= Template String ${request} ${dict}
${resp}= Run A&AI Post Request ${NAMED_QUERY_PATH} ${request}
- Should Be Equal As Strings ${resp.status_code} 200
-
-Generate Reverse Heatbridge
- [Documentation] Turn all of the HB puts into deletes...
- [Arguments] ${heatbridge_string}
- ${heatbridge}= To Json ${heatbridge_string}
- ${list}= Get From Dictionary ${heatbridge} transactions
- ${transactions}= Create List
- ${dupeDict} Create Dictionary
- :for ${t} in @{list}
- \ ${entry}= Get Deletes From Heatbridge ${t} ${dupeDict}
- \ Run Keyword If len(${entry}) > 0 Append To List ${transactions} ${entry}
- ${reverse}= Create Dictionary transactions=${transactions}
- Set Test Variable ${REVERSE_HEATBRIDGE} ${reverse}
- [Return] ${REVERSE_HEATBRIDGE}
-
-Get Deletes From Heatbridge
- [Documentation] Turn all of the HB puts into deletes... Should be one 'put' with one
- ... Not sure why this is structured this way, dictionary with operation as the key
- ... So only one occurrance of an each operation, but with list of urls/bodies
- ... So multiple gets, puts, etc. but in which order???
- [Arguments] ${putDict} ${dupeDict}
- ${deleteDict}= Create Dictionary
- ${keys}= Get Dictionary Keys ${putDict}
- # We do not expect anyhting other than 'put'
- :for ${key} in @{keys}
- \ Should be Equal ${key} put
- \ ${list}= Get From Dictionary ${putDict} put
- \ ${deleteList}= Get List Of Deletes ${list} ${dupeDict}
- \ Run Keyword If len(${deleteList}) > 0 Set To Dictionary ${deleteDict} delete=${deleteList}
- [Return] ${deleteDict}
-
-Get List Of Deletes
- [Documentation] Turn the list of puts into a list of deletes...
- ... There is only on hash per 'put' but it looks like there can be more...
- [Arguments] ${putList} ${dupeDict}
- ${deleteList}= Create List
- :for ${put} in @{putList}
- \ ${uri}= Get From Dictionary ${put} uri
- \ Continue For Loop If '${uri}' in ${dupeDict}
- \ ${delete}= Create Dictionary uri=${uri}
- \ Append To List ${deleteList} ${delete}
- \ Set To Dictionary ${dupeDict} ${uri}=${uri}
- [Return] ${deleteList}
-
-Execute Bulk Transaction
- [Arguments] ${transaction}
- :for ${put} in ${transaction}
- \ Execute Put List ${put}
-
-Execute Put List
- [Arguments] ${put}
- Log ${put}
- ${list}= Get From Dictionary ${put} put
- :for ${request} in @{list}
- \ Execute Single Put ${request}
-
-Execute Single Put
- [Arguments] ${request}
- ${data}= Get From Dictionary ${request} body
- ${path}= Get From Dictionary ${request} uri
- ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${path} ${data}
- Should Be Equal As Strings ${resp.status_code} 201
-
+ Should Be Equal As Strings ${resp.status_code} 200
+
+
+Run Set VNF Params
+ [Documentation] Run A&A GET and PUT to set prov-status, orchestration status, and ipv4-oam-address
+ [Arguments] ${vnf_id} ${ipv4_vnf_address} ${prov_status}=PROV ${orch_status}=Active
+ ${payload}= Run Get Generic VNF by VnfId ${vnf_id}
+
+ #${payload_json}= evaluate json.loads('''${payload}''') json
+ set to dictionary ${payload} prov-status ${prov_status}
+ set to dictionary ${payload} orchestration-status ${orch_status}
+ set to dictionary ${payload} ipv4-oam-address ${ipv4_vnf_address}
+ ${payload_string}= evaluate json.dumps(${payload}) json
+
+ ${put_resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}/network/generic-vnfs/generic-vnf/${vnf_id} ${payload_string}
+ ${status_string}= Convert To String ${put_resp.status_code}
+ Should Match Regexp ${status_string} ^(200|201)$
+ Log To Console Set VNF ProvStatus: ${vnf_id} to ${prov_status}
+
+Run Get Generic VNF By VnfId
+ [Documentation] Get VNF GET Payload with resource ID
+ [Arguments] ${vnf_id}
+ ${resp}= Run A&AI Get Request ${VERSIONED_INDEX_PATH}/network/generic-vnfs/generic-vnf?vnf-id=${vnf_id}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
Execute Reverse Heatbridge
- [Documentation] VID has already torn down the stack, reverse HB
- [Arguments] ${reverse_heatbridge}
- ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${MULTIPART_PATH} ${reverse_heatbridge}
- Should Be Equal As Strings ${resp.status_code} 200
-
-
-Execute Heatbridge Teardown
- [Documentation] Run teardown against the stack to generate a bulkadd message that removes it
- [Arguments] ${stack_name}
+ [Documentation] VID has already torn down the stack, reverse HB
+ Return From Keyword If len(${REVERSE_HEATBRIDGE}) == 0
+ :for ${uri} in @{REVERSE_HEATBRIDGE}
+ \ Run Keyword And Ignore Error Delete A&AI Entity ${uri}
+
+Generate Reverse Heatbridge From Stack Name
+ [Arguments] ${stack_name}
Run Openstack Auth Request auth
- ${stack_info}= Wait for Stack to Be Deployed auth ${stack_name}
+ ${stack_info}= Wait for Stack to Be Deployed auth ${stack_name} timeout=10s
+ ${reverse_heatbridge}= Generate Reverse Heatbridge From Stack Info ${stack_info}
+ [Return] ${reverse_heatbridge}
+
+Generate Reverse Heatbridge From Stack Info
+ [Arguments] ${stack_info}
+ ${reverse_heatbridge}= Create List
+ ${stack_name}= Get From Dictionary ${stack_info} name
${stack_id}= Get From Dictionary ${stack_info} id
${tenant_id}= Get From Dictionary ${stack_info} OS::project_id
+ ${region}= Get Openstack Region
+ ${keys}= Create Dictionary region=${region} cloud=${GLOBAL_AAI_CLOUD_OWNER} tenant=${tenant_id}
${stack_resources}= Get Stack Resources auth ${stack_name} ${stack_id}
${resource_list}= Get From Dictionary ${stack_resources} resources
- Get Length ${resource_list}
- Log ${resource_list}
:FOR ${resource} in @{resource_list}
\ Log ${resource}
- \ Run Keyword If '${resource['resource_type']}' == 'OS::Nova::Server' Execute Server Teardown auth ${resource['physical_resource_id']}
+ \ Run Keyword If '${resource['resource_type']}' == 'OS::Neutron::Port' Generate Linterface Uri auth ${resource['physical_resource_id']} ${reverse_heatbridge} ${keys}
+ :FOR ${resource} in @{resource_list}
+ \ Log ${resource}
+ \ Run Keyword If '${resource['resource_type']}' == 'OS::Nova::Server' Generate Vserver Uri auth ${resource['physical_resource_id']} ${reverse_heatbridge} ${keys} ${resource_list}
+ [Return] ${reverse_heatbridge}
+
+Generate Vserver Uri
+ [Documentation] Run teardown against the server to generate a message that removes it
+ [Arguments] ${alias} ${port_id} ${reverse_heatbridge} ${keys} ${resource_list}
+ ${resp}= Get Openstack Server By Id ${alias} ${port_id}
+ Return From Keyword If '${resp.status_code}' != '200'
+ ${info}= Set Variable ${resp.json()}
+ Set To Dictionary ${keys} vserver_id=${info['server']['id']}
+ Set To Dictionary ${keys} flavor=${info['server']['flavor']['id']}
+ Set To Dictionary ${keys} image_id=${info['server']['image']['id']}
+ ${uri}= Template String ${VSERVER_URI} ${keys}
+ Append To List ${reverse_heatbridge} ${uri}
+ ${uri}= Template String ${FLAVOR_URI} ${keys}
+ Append To List ${reverse_heatbridge} ${uri}
+ ${uri}= Template String ${IMAGE_URI} ${keys}
+ Append To List ${reverse_heatbridge} ${uri}
-Execute Server Teardown
+Generate Linterface Uri
[Documentation] Run teardown against the server to generate a message that removes it
- [Arguments] ${alias} ${server_id}
- ${server}= Get Openstack Server By Id ${alias} ${server_id}
- Log ${server}
\ No newline at end of file
+ [Arguments] ${alias} ${server_id} ${reverse_heatbridge} ${keys}
+ ${resp}= Get Openstack Port By Id ${alias} ${server_id}
+ Return From Keyword If '${resp.status_code}' != '200'
+ ${info}= Set Variable ${resp.json()}
+ Set To Dictionary ${keys} vserver_id=${info['port']['device_id']}
+ Set To Dictionary ${keys} linterface_id=${info['port']['name']}
+ ${uri}= Template String ${L_INTERFACE_URI} ${keys}
+ Append To List ${reverse_heatbridge} ${uri}
+