Add missing GLOBAL_INJECTED_SCRIPT_VERSION props 25/29525/5
authorAlexis de Talhouët <adetalhouet89@gmail.com>
Mon, 29 Jan 2018 15:03:22 +0000 (10:03 -0500)
committerAlexis de Talhouët <alexis.de_talhouet@bell.ca>
Tue, 30 Jan 2018 18:33:06 +0000 (18:33 +0000)
Change-Id: Iab48112dacc0b6e282d5a4915b46bf2113719118
Signed-off-by: Alexis de Talhouët <adetalhouet89@gmail.com>
Issue-ID: OOM-575

kubernetes/config/docker/init/src/config/robot/eteshare/config/vm_properties.py
kubernetes/config/docker/init/src/config/robot/robot/resources/sdngc_interface.robot [new file with mode: 0644]
kubernetes/config/values.yaml
kubernetes/robot/templates/robot-deployment.yaml
kubernetes/robot/values.yaml

index 7fd5b2f..e2db30c 100644 (file)
@@ -30,6 +30,8 @@ GLOBAL_INJECTED_NETWORK = "VNF_OPENSTACK_OAM_NETWORK_ID_HERE"
 GLOBAL_INJECTED_PUBLIC_NET_ID = "VNF_OPENSTACK_PUBLIC_ID_HERE"
 GLOBAL_INJECTED_VM_FLAVOR = "VNF_OPENSTACK_FLAVOR_HERE"
 GLOBAL_INJECTED_VM_IMAGE_NAME = "VNF_OPENSTACK_IMAGE_HERE"
+GLOBAL_INJECTED_SCRIPT_VERSION = "1.1.1"
+GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR = "sdnc-portal.onap-sdnc"
 
 GLOBAL_INJECTED_PROPERTIES={
 "GLOBAL_INJECTED_VM_IMAGE_NAME" : "VNF_OPENSTACK_IMAGE_HERE",
@@ -60,5 +62,7 @@ GLOBAL_INJECTED_PROPERTIES={
 "GLOBAL_INJECTED_SDC_BE_IP_ADDR" : "sdc-be.onap-sdc",
 "GLOBAL_INJECTED_SDC_FE_IP_ADDR" : "sdc-fe.onap-sdc",
 "GLOBAL_INJECTED_SDNC_IP_ADDR" : "sdnhost.onap-sdnc",
+"GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR" : "sdnc-portal.onap-sdnc",
 "GLOBAL_INJECTED_SO_IP_ADDR" : "mso.onap-mso",
-"GLOBAL_INJECTED_VID_IP_ADDR" : "vid-server.onap-vid"}
\ No newline at end of file
+"GLOBAL_INJECTED_VID_IP_ADDR" : "vid-server.onap-vid",
+"GLOBAL_INJECTED_SCRIPT_VERSION" : "1.1.1"}
\ No newline at end of file
diff --git a/kubernetes/config/docker/init/src/config/robot/robot/resources/sdngc_interface.robot b/kubernetes/config/docker/init/src/config/robot/robot/resources/sdngc_interface.robot
new file mode 100644 (file)
index 0000000..3c7a431
--- /dev/null
@@ -0,0 +1,254 @@
+*** Settings ***
+Documentation     The main interface for interacting with SDN-GC. It handles low level stuff like managing the http request library and SDN-GC required fields
+Library              RequestsLibrary
+Library                  UUID
+Library    OperatingSystem
+Library            ExtendedSelenium2Library
+Library         Collections
+Library      String
+Library      StringTemplater
+Resource          global_properties.robot
+Resource          ../resources/json_templater.robot
+Resource        browser_setup.robot
+Resource          openstack/nova_interface.robot
+Resource          openstack/keystone_interface.robot
+Resource          stack_validation/validate_common.robot
+
+Variables    ../assets/service_mappings.py
+
+*** Variables ***
+${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}  /operations/VNF-API:preload-vnf-topology-operation
+${PRELOAD_VNF_CONFIG_PATH}  /config/VNF-API:preload-vnfs/vnf-preload-list
+${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}  robot/assets/templates/sdnc/
+${SDNGC_INDEX_PATH}    /restconf
+${SDNCGC_HEALTHCHECK_OPERATION_PATH}  /operations/SLI-API:healthcheck
+${SDNGC_REST_ENDPOINT}    ${GLOBAL_SDNGC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDNC_IP_ADDR}:${GLOBAL_SDNGC_REST_PORT}
+${SDNGC_ADMIN_ENDPOINT}    ${GLOBAL_SDNGC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR}:${GLOBAL_SDNGC_ADMIN_PORT}
+${SDNGC_ADMIN_SIGNUP_URL}    ${SDNGC_ADMIN_ENDPOINT}/signup
+${SDNGC_ADMIN_LOGIN_URL}    ${SDNGC_ADMIN_ENDPOINT}/login
+${SDNGC_ADMIN_VNF_PROFILE_URL}    ${SDNGC_ADMIN_ENDPOINT}/mobility/getVnfProfile
+
+*** Keywords ***
+Run SDNGC Health Check
+    [Documentation]    Runs an SDNGC healthcheck
+       ${resp}=    Run SDNGC Post Request     ${SDNGC_INDEX PATH}${SDNCGC_HEALTHCHECK_OPERATION_PATH}     ${None}
+    Should Be Equal As Strings         ${resp.status_code}     200
+    Should Be Equal As Strings         ${resp.json()['output']['response-code']}       200
+
+Run SDNGC Get Request
+    [Documentation]    Runs an SDNGC get request
+    [Arguments]    ${data_path}
+    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
+    Log    Creating session ${SDNGC_REST_ENDPOINT}
+    ${session}=    Create Session      sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
+    ${uuid}=    Generate UUID
+    ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
+    ${resp}=   Get Request     sdngc   ${data_path}     headers=${headers}
+    Log    Received response from sdngc ${resp.text}
+    [Return]    ${resp}
+
+Run SDNGC Put Request
+    [Documentation]    Runs an SDNGC put request
+    [Arguments]    ${data_path}    ${data}
+    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
+    Log    Creating session ${SDNGC_REST_ENDPOINT}
+    ${session}=    Create Session      sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
+    ${uuid}=    Generate UUID
+    ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
+    ${resp}=   Put Request     sdngc   ${data_path}     data=${data}    headers=${headers}
+    Log    Received response from sdngc ${resp.text}
+    [Return]    ${resp}
+
+Run SDNGC Post Request
+    [Documentation]    Runs an SDNGC post request
+    [Arguments]    ${data_path}    ${data}
+    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
+    Log    Creating session ${SDNGC_REST_ENDPOINT}
+    ${session}=    Create Session      sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
+    ${uuid}=    Generate UUID
+    ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
+    ${resp}=   Post Request    sdngc   ${data_path}     data=${data}    headers=${headers}
+    Log    Received response from sdngc ${resp.text}
+    [Return]    ${resp}
+
+Run SDNGC Delete Request
+    [Documentation]    Runs an SDNGC delete request
+    [Arguments]    ${data_path}
+    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
+    Log    Creating session ${SDNGC_REST_ENDPOINT}
+    ${session}=    Create Session      sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
+    ${uuid}=    Generate UUID
+    ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
+    ${resp}=   Delete Request  sdngc   ${data_path}        headers=${headers}
+    Log    Received response from sdngc ${resp.text}
+    [Return]    ${resp}
+
+
+Preload Vnf
+    [Arguments]    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}     ${vf_module_name}    ${vf_modules}    ${service}   ${uuid}
+    ${base_vf_module_type}=    Catenate
+    ${closedloop_vf_module}=    Create Dictionary
+    Run Openstack Auth Request    auth
+    ${servers}=    Get Openstack Servers    auth
+    ${templates}=    Get From Dictionary    ${GLOBAL_SERVICE_TEMPLATE_MAPPING}    ${service}
+    :for    ${vf_module}    in      @{vf_modules}
+    \       ${vf_module_type}=    Get From Dictionary    ${vf_module}    name
+    \       ${dict}   Get From Mapping    ${templates}    ${vf_module}
+    \       ${filename}=    Get From Dictionary    ${dict}    template
+    \       ${base_vf_module_type}=   Set Variable If    '${dict['isBase']}' == 'true'     ${vf_module_type}    ${base_vf_module_type}
+    \       ${closedloop_vf_module}=   Set Variable If    '${dict['isBase']}' == 'false'     ${vf_module}    ${closedloop_vf_module}
+    \       ${vf_name}=     Update Module Name    ${dict}    ${vf_module_name}
+    \       Preload Vnf Profile    ${vf_module_type}
+    \       Preload One Vnf Topology    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}     ${vf_name}    ${vf_module_type}    ${service}    ${filename}   ${uuid}   ${servers}
+    [Return]    ${base_vf_module_type}   ${closedloop_vf_module}
+
+
+Update Module Name
+    [Arguments]    ${dict}    ${vf_module_name}
+    Return From Keyword If    'prefix' not in ${dict}    ${vf_module_name}
+    Return From Keyword If    '${dict['prefix']}' == ''    ${vf_module_name}
+    ${name}=    Replace String   ${vf_module_name}   Vfmodule_    ${dict['prefix']}
+    [Return]    ${name}
+
+Get From Mapping
+    [Documentation]    Retrieve the appropriate prelad template entry for the passed vf_module
+    [Arguments]    ${templates}    ${vf_module}
+    ${vf_module_name}=    Get From DIctionary    ${vf_module}    name
+    :for    ${template}   in   @{templates}
+    \    Return From Keyword If    '${template['name_pattern']}' in '${vf_module_name}'     ${template}
+    [Return]    None
+
+Preload One Vnf Topology
+    [Arguments]    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}       ${vf_module_name}    ${vf_module_type}    ${service}    ${filename}   ${uuid}   ${servers}
+    Return From Keyword If    '${filename}' == ''
+    ${data_template}=    OperatingSystem.Get File    ${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}/preload.template
+    ${pub_key}=   OperatingSystem.Get File    ${GLOBAL_VM_PUBLIC_KEY}
+    ${robot_values}=   Create Dictionary   pub_key=${pub_key}   generic_vnf_name=${generic_vnf_name}     generic_vnf_type=${generic_vnf_type}  service_type=${service_type_uuid}    vf_module_name=${vf_module_name}    vf_module_type=${vf_module_type}
+    ${parameters}=    Get Template Parameters    ${filename}   ${uuid}   ${servers}   ${robot_values}
+    ${data}=   Fill JSON Template    ${data_template}    ${parameters}
+       ${put_resp}=    Run SDNGC Post Request     ${SDNGC_INDEX_PATH}${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}     ${data}
+    Should Be Equal As Strings         ${put_resp.json()['output']['response-code']}   200
+    ${get_resp}=  Run SDNGC Get Request  ${SDNGC_INDEX_PATH}${PRELOAD_VNF_CONFIG_PATH}/${vf_module_name}/${vf_module_type}
+    Should Be Equal As Strings         ${get_resp.status_code}         200
+
+Get Template Parameters
+    [Arguments]    ${template}    ${uuid}   ${servers}   ${robot_values}
+    ${rest}   ${suite}=    Split String From Right    ${SUITE NAME}   .   1
+    ${uuid}=    Catenate    ${uuid}
+    ${hostid}=    Get Substring    ${uuid}    -4
+    ${ecompnet}=    Evaluate    (${GLOBAL_BUILD_NUMBER}%128)+128
+    ${dcae_server}=   Get From Dictionary    ${servers}    ${GLOBAL_DCAE_COLLECTOR_HOST_NAME}
+    ${dcae_collector_ip}=   Search Addresses    ${dcae_server}    public
+
+
+    # Initialize the value map with the properties generated from the Robot VM /opt/config folder
+    ${valuemap}=   Copy Dictionary    ${GLOBAL_INJECTED_PROPERTIES}
+    ${robot_keys}=   Get Dictionary Keys    ${robot_values}
+    :for   ${key}   in   @{robot_keys}
+    \    ${value}=   Get From Dictionary    ${robot_values}    ${key}
+    \    Set To Dictionary    ${valuemap}  ${key}    ${value}
+
+    # These should be deprecated by the above....
+    Set To Dictionary   ${valuemap}   artifacts_version=${GLOBAL_INJECTED_ARTIFACTS_VERSION}
+    Set To Dictionary   ${valuemap}   network=${GLOBAL_INJECTED_NETWORK}
+    Set To Dictionary   ${valuemap}   public_net_id=${GLOBAL_INJECTED_PUBLIC_NET_ID}
+    Set To Dictionary   ${valuemap}   cloud_env=${GLOBAL_INJECTED_CLOUD_ENV}
+    Set To Dictionary   ${valuemap}   install_script_version=${GLOBAL_INJECTED_SCRIPT_VERSION}
+    Set To Dictionary   ${valuemap}   vm_image_name=${GLOBAL_INJECTED_VM_IMAGE_NAME}
+    Set To Dictionary   ${valuemap}   vm_flavor_name=${GLOBAL_INJECTED_VM_FLAVOR}
+    Set To Dictionary   ${valuemap}   dcae_collector_ip=${dcae_collector_ip}
+
+
+    # update the value map with unique values.
+    Set To Dictionary   ${valuemap}   uuid=${uuid}   hostid=${hostid}    ecompnet=${ecompnet}
+
+    #
+    # Mash together the defaults dict with the test case dict to create the set of
+    # preload parameters
+    #
+    ${suite_templates}=    Get From Dictionary    ${GLOBAL_PRELOAD_PARAMETERS}    ${suite}
+    ${template}=    Get From Dictionary    ${suite_templates}    ${template}
+    ${defaults}=    Get From Dictionary    ${GLOBAL_PRELOAD_PARAMETERS}    defaults
+    # add all of the defaults to template...
+    @{keys}=    Get Dictionary Keys    ${defaults}
+    :for   ${key}   in   @{keys}
+    \    ${value}=   Get From Dictionary    ${defaults}    ${key}
+    \    Set To Dictionary    ${template}  ${key}    ${value}
+
+    #
+    # Get the vnf_parameters to preload
+    #
+    ${vnf_parameters}=   Resolve VNF Parameters Into Array   ${valuemap}   ${template}
+    ${vnf_parameters_json}=   Evaluate    json.dumps(${vnf_parameters})    json
+    ${parameters}=   Copy Dictionary    ${robot_values}
+    Set TO Dictionary   ${parameters}   vnf_parameters=${vnf_parameters_json}
+    [Return]    ${parameters}
+
+Resolve Values Into Dictionary
+    [Arguments]   ${valuemap}    ${from}    ${to}
+    ${keys}=    Get Dictionary Keys    ${from}
+    :for   ${key}   in  @{keys}
+    \    ${value}=    Get From Dictionary    ${from}   ${key}
+    \    ${value}=    Template String    ${value}    ${valuemap}
+    \    Set To Dictionary    ${to}    ${key}    ${value}
+
+Resolve VNF Parameters Into Array
+    [Arguments]   ${valuemap}    ${from}
+    ${vnf_parameters}=   Create List
+    ${keys}=    Get Dictionary Keys    ${from}
+    :for   ${key}   in  @{keys}
+    \    ${value}=    Get From Dictionary    ${from}   ${key}
+    \    ${value}=    Template String    ${value}    ${valuemap}
+    \    ${parameter}=   Create Dictionary   vnf-parameter-name=${key}    vnf-parameter-value=${value}
+    \    Append To List    ${vnf_parameters}   ${parameter}
+    [Return]   ${vnf_parameters}
+
+Preload Vnf Profile
+    [Arguments]    ${vnf_name}
+    Login To SDNGC Admin GUI
+    Go To    ${SDNGC_ADMIN_VNF_PROFILE_URL}
+    Click Button    xpath=//button[@data-target='#add_vnf_profile']
+    Input Text    xpath=//input[@id='nf_vnf_type']    ${vnf_name}
+    Input Text    xpath=//input[@id='nf_availability_zone_count']    999
+    Input Text    xpath=//input[@id='nf_equipment_role']    robot-ete-test
+    Click Button    xpath=//button[contains(.,'Submit')]
+    Page Should Contain  VNF Profile
+    Input Text    xpath=//div[@id='vnf_profile_filter']//input    ${vnf_name}
+    Page Should Contain  ${vnf_name}
+
+Delete Vnf Profile
+    [Arguments]    ${vnf_name}
+    Login To SDNGC Admin GUI
+    Go To    ${SDNGC_ADMIN_VNF_PROFILE_URL}
+    Page Should Contain  VNF Profile
+    Input Text    xpath=//div[@id='vnf_profile_filter']//input    ${vnf_name}
+    Page Should Contain  ${vnf_name}
+    Click Button    xpath=//button[contains(@onclick, '${vnf_name}')]
+    Page Should Contain    Are you sure you want to delete VNF_PROFILE
+    Click Button    xpath=//button[contains(text(), 'Yes')]
+    Page Should Not Contain  ${vnf_name}
+
+Login To SDNGC Admin GUI
+    [Documentation]   Login To SDNGC Admin GUI
+    ## Setup Browser is now being managed by the test case
+    ## Setup Browser
+    Go To    ${SDNGC_ADMIN_SIGNUP_URL}
+    ##Maximize Browser Window
+    Set Selenium Speed    ${GLOBAL_SELENIUM_DELAY}
+    Set Browser Implicit Wait    ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT}
+    Log    Logging in to ${SDNGC_ADMIN_LOGIN_URL}
+    Handle Proxy Warning
+    Title Should Be    AdminPortal
+    ${uuid}=    Generate UUID
+    ${shortened_uuid}=     Evaluate    str("${uuid}")[:12]
+    ${email}=        Catenate    ${shortened_uuid}@robotete.com
+    Input Text    xpath=//input[@id='nf_email']    ${email}
+    Input Password    xpath=//input[@id='nf_password']    ${shortened_uuid}
+    Click Button    xpath=//button[@type='submit']
+    Wait Until Page Contains    User created   20s
+    Go To    ${SDNGC_ADMIN_LOGIN_URL}
+    Input Text    xpath=//input[@id='email']    ${email}
+    Input Password    xpath=//input[@id='password']    ${shortened_uuid}
+    Click Button    xpath=//button[@type='submit']
+    Title Should Be    SDN-C AdminPortal
+    Log    Logged in to ${SDNGC_ADMIN_LOGIN_URL}
\ No newline at end of file
index 46d408d..ee45540 100644 (file)
@@ -3,5 +3,5 @@ nsPrefix: onap
 dockerSharePath: /dockerdata-nfs
 image:
   repository: oomk8s/config-init
-  tag: 1.1.14
+  tag: 1.1.15
   pullPolicy: Always
index c3b50b7..b80ea46 100644 (file)
@@ -33,6 +33,8 @@ spec:
           readOnly: true
         - name: robot-resources-asdc-interface
           mountPath: /var/opt/OpenECOMP_ETE/robot/resources/asdc_interface.robot
+        - name: robot-resources-sdnc-interface
+          mountPath: /var/opt/OpenECOMP_ETE/robot/resources/sdngc_interface.robot
         - name: robot-eteshare
           mountPath: /share
         - name: lighttpd-authorization
@@ -48,6 +50,9 @@ spec:
         - name: localtime
           hostPath:
             path: /etc/localtime
+        - name: robot-resources-sdnc-interface
+          hostPath:
+            path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/robot/resources/sdngc_interface.robot
         - name: robot-resources-asdc-interface
           hostPath:
             path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/robot/resources/asdc_interface.robot
index 657228f..221b572 100644 (file)
@@ -2,5 +2,5 @@ nsPrefix: onap
 pullPolicy: Always
 nodePortPrefix: 302
 image:
-  testsuite: nexus3.onap.org:10001/openecomp/testsuite:1.2-STAGING-latest
+  testsuite: nexus3.onap.org:10001/openecomp/testsuite:1.1-STAGING-latest