--- /dev/null
+{
+"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
--- /dev/null
+*** 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
Resource openstack/nova_interface.robot
Resource openstack/neutron_interface.robot
Resource aai/aai_interface.robot
+Resource aai/create_vnfc.robot
*** Variables ***
${MULTIPART_PATH} /bulkadd
${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}
${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}
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