From 992832a29265fd57bdb3d2cb67f956e38790a498 Mon Sep 17 00:00:00 2001 From: Marco Platania Date: Fri, 8 Feb 2019 15:25:19 -0800 Subject: Add create VNFC to Robot - Add template file and create functions to AAI section - Modify heatbridge to create VNFCs Change-Id: I66ec14241568e58f9d59bae8fb08c081d6a72822 Issue-ID: TEST-137 Signed-off-by: Marco Platania --- robot/assets/templates/aai/add_vnfc_body.template | 7 +++ robot/resources/aai/create_vnfc.robot | 52 +++++++++++++++++++++++ robot/resources/heatbridge.robot | 19 +++++++++ 3 files changed, 78 insertions(+) create mode 100644 robot/assets/templates/aai/add_vnfc_body.template create mode 100644 robot/resources/aai/create_vnfc.robot diff --git a/robot/assets/templates/aai/add_vnfc_body.template b/robot/assets/templates/aai/add_vnfc_body.template new file mode 100644 index 00000000..88ababd3 --- /dev/null +++ b/robot/assets/templates/aai/add_vnfc_body.template @@ -0,0 +1,7 @@ +{ +"vnfc-name": "${vnfc_name}", +"nfc-naming-code": "${vnfc_nc}", +"nfc-function": "${vnfc_func}", +"in-maint": "false", +"is-closed-loop-disabled": "false" +} \ No newline at end of file diff --git a/robot/resources/aai/create_vnfc.robot b/robot/resources/aai/create_vnfc.robot new file mode 100644 index 00000000..f140406d --- /dev/null +++ b/robot/resources/aai/create_vnfc.robot @@ -0,0 +1,52 @@ +*** Settings *** +Documentation Create VNFC in AAI + +Resource ../json_templater.robot +Resource aai_interface.robot +Library OperatingSystem +Library Collections + + +*** Variables *** +${INDEX_PATH} /aai/v14 +${ROOT_PATH} /network/vnfcs/vnfc + +${SYSTEM USER} robot-ete +${AAI_ADD_VNFC_BODY}= robot/assets/templates/aai/add_vnfc_body.template + +*** Keywords *** +Create VNFC If Not Exists + [Documentation] Creates VNFC in A&AI if it doesn't exist + [Arguments] ${vnfc_name} ${vnfc_nc} ${vnfc_func} + ${get_resp}= Run A&AI Get Request ${INDEX_PATH}${ROOT_PATH}/${vnfc_name} + Return From Keyword If '${get_resp.status_code}' == '200' + Create VNFC ${vnfc_name} ${vnfc_nc} ${vnfc_func} + +Create VNFC + [Documentation] Creates VNFC in A&AI + [Arguments] ${vnfc_name} ${vnfc_nc} ${vnfc_func} + ${arguments}= Create Dictionary vnfc_name=${vnfc_name} vnfc_nc=${vnfc_nc} vnfc_func=${vnfc_func} + ${data}= Fill JSON Template File ${AAI_ADD_VNFC_BODY} ${arguments} + ${put_resp}= Run A&AI Put Request ${INDEX_PATH}${ROOT_PATH}/${vnfc_name} ${data} + ${status_string}= Convert To String ${put_resp.status_code} + Should Match Regexp ${status_string} ^(201|200)$ + +Delete VNFC If Exists + [Documentation] Removes VNFC from AAI if it exists + [Arguments] ${vnfc_name} + ${get_resp}= Run A&AI Get Request ${INDEX_PATH}${ROOT_PATH}/${vnfc_name} + Run Keyword If '${get_resp.status_code}' == '200' Delete VNFC ${vnfc_name} ${get_resp.json()} + +Delete VNFC + [Documentation] Removes VNFC from AAI + [Arguments] ${vnfc_name} ${json} + ${resource_version}= Catenate ${json['resource-version']} + ${put_resp}= Run A&AI Delete Request ${INDEX_PATH}${ROOT_PATH}/${vnfc_name} ${resource_version} + Should Be Equal As Strings ${put_resp.status_code} 204 + +Get VNFC + [Documentation] Return VNFC + [Arguments] ${vnfc_name} + ${resp}= Run A&AI Get Request ${INDEX_PATH}${ROOT_PATH}/${vnfc_name} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} \ No newline at end of file diff --git a/robot/resources/heatbridge.robot b/robot/resources/heatbridge.robot index 2b271ee2..c0b9a910 100644 --- a/robot/resources/heatbridge.robot +++ b/robot/resources/heatbridge.robot @@ -10,6 +10,7 @@ Resource openstack/heat_interface.robot Resource openstack/nova_interface.robot Resource openstack/neutron_interface.robot Resource aai/aai_interface.robot +Resource aai/create_vnfc.robot *** Variables *** ${MULTIPART_PATH} /bulkadd @@ -21,6 +22,7 @@ ${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} +${VSERVER_NAME} \${vserver_name} #******************** Test Case Variables **************** ${REVERSE_HEATBRIDGE} @@ -41,6 +43,11 @@ Execute Heatbridge ${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} ACTIVE Active + ### Create a vnfc for each vServer ### + ${stack_resources}= Get Stack Resources auth ${stack_name} ${stack_id} + ${resource_list}= Get From Dictionary ${stack_resources} resources + :FOR ${resource} in @{resource_list} + \ Run Keyword If '${resource['resource_type']}' == 'OS::Nova::Server' Run Create VNFC auth ${resource['physical_resource_id']} ${service} ${keystone_api_version}= Run Keyword If '${GLOBAL_INJECTED_OPENSTACK_KEYSTONE_API_VERSION}'=='' Get KeystoneAPIVersion ... ELSE Set Variable ${GLOBAL_INJECTED_OPENSTACK_KEYSTONE_API_VERSION} ${url} ${path}= Get Keystone Url And Path ${keystone_api_version} @@ -58,6 +65,18 @@ Execute Heatbridge Set Test Variable ${REVERSE_HEATBRIDGE} ${reverse_heatbridge} Run Validation Query ${stack_info} ${service} +Run Create VNFC + [Documentation] Create a VNFC for a vServer + [Arguments] ${alias} ${vserver_id} ${service} + ${resp}= Get Openstack Server By Id ${alias} ${vserver_id} + Return From Keyword If '${resp.status_code}' != '200' + ${info}= Set Variable ${resp.json()} + ${keys}= Create Dictionary + Set To Dictionary ${keys} vserver_name=${info['server']['name']} + ${vnfc_name}= Template String ${VSERVER_NAME} ${keys} + ${vnfc_nc}= Set Variable ${service} + ${vnfc_func}= Set Variable ${service} + Create VNFC If Not Exists ${vnfc_name} ${vnfc_nc} ${vnfc_func} Run Validation Query [Documentation] Run A&AI query to validate the bulk add -- cgit 1.2.3-korg