GLOBAL_INJECTED_CLOUD_ENV = "${GLOBAL_INJECTED_CLOUD_ENV}"
 GLOBAL_INJECTED_SCRIPT_VERSION = "${GLOBAL_INJECTED_SCRIPT_VERSION}"
 
+
+GLOBAL_INJECTED_PROPERTIES={
+"GLOBAL_INJECTED_ARTIFACTS_VERSION" : "${GLOBAL_INJECTED_ARTIFACTS_VERSION}",
+"GLOBAL_INJECTED_GITLAB_PASSWORD" : "password",
+"GLOBAL_INJECTED_GITLAB_USERNAME" : "username",
+"GLOBAL_INJECTED_NETWORK" : "${GLOBAL_INJECTED_NETWORK}",
+"GLOBAL_INJECTED_NEXUS_DOCKER_REPO" : "${GLOBAL_INJECTED_NEXUS_DOCKER_REPO}",
+"GLOBAL_INJECTED_NEXUS_PASSWORD" : "password",
+"GLOBAL_INJECTED_NEXUS_REPO" : "${GLOBAL_INJECTED_NEXUS_REPO}",
+"GLOBAL_INJECTED_NEXUS_USERNAME" : "docker",
+"GLOBAL_INJECTED_OPENSTACK_API_KEY" : "openstackapikey",
+"GLOBAL_INJECTED_OPENSTACK_PASSWORD" : "openstackpass",
+"GLOBAL_INJECTED_OPENSTACK_USERNAME" : "openstackuser",
+"GLOBAL_INJECTED_OPENSTACK_TENANT_ID" : "${GLOBAL_INJECTED_OPENSTACK_TENANT_ID}",
+"GLOBAL_INJECTED_REGION" : "${GLOBAL_INJECTED_REGION}",
+"GLOBAL_INJECTED_KEYSTONE" : "${GLOBAL_INJECTED_KEYSTONE}",
+"GLOBAL_INJECTED_AAI1_IP_ADDR" : "${aai1}",
+"GLOBAL_INJECTED_AAI2_IP_ADDR" : "${aai2}",
+"GLOBAL_INJECTED_APPC_IP_ADDR" : "${appc}",
+"GLOBAL_INJECTED_DCAE_IP_ADDR" : "${dcae_controller}",
+"GLOBAL_INJECTED_SO_IP_ADDR" : "${mso}",
+"GLOBAL_INJECTED_MR_IP_ADDR" : "${message_router}",
+"GLOBAL_INJECTED_POLICY_IP_ADDR" : "${policy}",
+"GLOBAL_INJECTED_PORTAL_IP_ADDR" : "${portal}",
+"GLOBAL_INJECTED_SDC_IP_ADDR" : "${sdc}",
+"GLOBAL_INJECTED_SDNC_IP_ADDR" : "${sdnc}",
+"GLOBAL_INJECTED_VID_IP_ADDR" : "${vid}",
+"GLOBAL_INJECTED_OPENO_IP_ADDR" : "${openo}",
+"GLOBAL_INJECTED_CLAMP_IP_ADDR" : "${clamp}",
+"GLOBAL_INJECTED_VM_FLAVOR" : "${GLOBAL_INJECTED_VM_FLAVOR}",
+"GLOBAL_INJECTED_VM_IMAGE_NAME" : "${GLOBAL_INJECTED_VM_IMAGE_NAME}",
+"GLOBAL_INJECTED_PUBLIC_NET_ID" : "${GLOBAL_INJECTED_PUBLIC_NET_ID}",
+"GLOBAL_INJECTED_CLOUD_ENV" : "${GLOBAL_INJECTED_CLOUD_ENV}",
+"GLOBAL_INJECTED_SCRIPT_VERSION" : "${GLOBAL_INJECTED_SCRIPT_VERSION}"
+}
     </pre>
 
     <h2> SDN-C </h2>
 
 Resource          ../json_templater.robot
 Resource          ../stack_validation/validate_vlb.robot
 Resource          ../stack_validation/validate_vfw.robot
+Resource          ../stack_validation/validate_vfwcl.robot
 Resource          ../stack_validation/validate_vvg.robot
 Resource          ../aai/aai_interface.robot
 
        Run Keyword If    '${stack_type}'=='vLB'    Validate vLB Stack    ${vf_module_name}
        Run Keyword If    '${stack_type}'=='vFW'    Validate Firewall Stack    ${vf_module_name}
        Run Keyword If    '${stack_type}'=='vVG'    Validate vVG Stack    ${vf_module_name}
+       Run Keyword If    '${stack_type}'=='vPKG'    Validate FirewallPKG Stack    ${vf_module_name}
+       Run Keyword If    '${stack_type}'=='vFWSNK'    Validate FirewallSNK Stack    ${vf_module_name}
 
 *** Keywords ***
 Create AAI Service Instance
 
     [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
-    ${parameters}=    Get Template Parameters    ${filename}   ${uuid}   ${servers}
-    Set To Dictionary   ${parameters}   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}
+    ${robot_values}=   Create Dictionary   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
     Should Be Equal As Strings         ${get_resp.status_code}         200
 
 Get Template Parameters
-    [Arguments]    ${template}    ${uuid}   ${servers}
+    [Arguments]    ${template}    ${uuid}   ${servers}   ${robot_values}
     ${rest}   ${suite}=    Split String From Right    ${SUITE NAME}   .   1
     ${uuid}=    Catenate    ${uuid}
     ${hostid}=    Get Substring    ${uuid}    -4
 
     # 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}
     #
     ${vnf_parameters}=   Resolve VNF Parameters Into Array   ${valuemap}   ${template}
     ${vnf_parameters_json}=   Evaluate    json.dumps(${vnf_parameters})    json
-    ${parameters}=   Create Dictionary   vnf_parameters=${vnf_parameters_json}
+    ${parameters}=   Copy Dictionary    ${robot_values}
+    Set TO Dictionary   ${parameters}   vnf_parameters=${vnf_parameters_json}
     [Return]    ${parameters}
 
 Resolve Values Into Dictionary
 
 Wait For Packets
     [Documentation]    Final vfw validation that packets are flowing from the pgn VM  to the snk VM
     [Arguments]   ${vpg_public_ip}   ${vpg_unprotected_ip}   ${vsn_protected_ip}   ${vsn_public_ip}
-    ${resp}=    Enable Stream    ${vpg_public_ip}
-    Should Be Equal As Strings    ${resp.status_code}    200
+    #${resp}=    Enable Stream    ${vpg_public_ip}
+    #Should Be Equal As Strings    ${resp.status_code}    200
     ${syslog_message}=    Catenate    UDP: short packet: From ${vpg_unprotected_ip}:.* to ${vsn_protected_ip}:.*
     Tail File on Host Until    ${vsn_public_ip}    UDP:    /var/log/syslog    ${syslog_message}    timeout=120s
-    Disable All Streams    ${vpg_public_ip}
+    #Disable All Streams    ${vpg_public_ip}
 
 
 Wait For Firewall
     [Documentation]     Wait for the defined firewall processes to come up
     [Arguments]    ${ip}
-    ##Wait for Process on Host    ./vpp_measurement_reporter    ${ip}
+    Wait for Process on Host    ./vpp_measurement_reporter    ${ip}
     Wait for Process on Host    vpp -c /etc/vpp/startup.conf    ${ip}
 
 Wait For Packet Generator
     [Documentation]     Wait for the defined packet generator processes to come up
     [Arguments]    ${ip}
     Wait for Process on Host    vpp -c /etc/vpp/startup.conf    ${ip}
-    ##Wait Until Keyword Succeeds    180s    5s    Tail File on Host Until    ${ip}    Honeycomb    /var/log/honeycomb/honeycomb.log    - Honeycomb initialized   options=-c +0    timeout=120s
+    Wait Until Keyword Succeeds    180s    5s    Tail File on Host Until    ${ip}    Honeycomb    /var/log/honeycomb/honeycomb.log    Honeycomb initialized   options=-c +0    timeout=120s
     Run Keyword And Ignore Error    Wait for Process on Host    run_traffic_fw_demo.sh    ${ip}    timeout=60s
-    Pkill Process On Host    "/bin/bash ./run_traffic_fw_demo.sh"    ${ip}
+    ##Pkill Process On Host    "/bin/bash ./run_traffic_fw_demo.sh"    ${ip}
 
 Wait For Packet Sink
     [Documentation]     Wait for the defined packet sink processes to come up
 
--- /dev/null
+*** Settings ***
+Documentation    Testing openstack.
+Library    OperatingSystem
+Library    SSHLibrary
+Library    RequestsLibrary
+Library    JSONUtils
+Library    OpenstackLibrary
+Library    HEATUtils
+Library    Collections
+Resource          ../../resources/openstack/keystone_interface.robot
+Resource          ../../resources/openstack/nova_interface.robot
+Resource          ../../resources/openstack/heat_interface.robot
+Resource          ../../resources/ssh/files.robot
+Resource          ../../resources/ssh/processes.robot
+Resource          ../appc_interface.robot
+Resource          packet_generator_interface.robot
+Resource          validate_common.robot
+Resource          validate_vfw.robot
+
+
+*** Variables ***
+${TV_VFW_PUBLIC_IP}
+${TV_VSN_PUBLIC_IP}
+
+*** Keywords ***
+Validate FirewallPKG Stack
+    [Documentation]    Identifies and validates the firewall servers in the VFW Stack
+    [Arguments]    ${STACK_NAME}
+    Run Openstack Auth Request    auth
+    ${stack_info}=    Wait for Stack to Be Deployed    auth    ${STACK_NAME}
+    ${stack_id}=    Get From Dictionary    ${stack_info}    id
+    ${server_list}=    Get Openstack Servers    auth
+
+    ${vpg_unprotected_ip}=    Get From Dictionary    ${stack_info}    vpg_private_ip_0
+    ${vsn_protected_ip}=    Get From Dictionary    ${stack_info}    vsn_private_ip_0
+    ${vpg_name_0}=    Get From Dictionary    ${stack_info}    vpg_name_0
+    ${vnf_id}=    Get From Dictionary    ${stack_info}    vnf_id
+    
+    ${vpg_public_ip}=    Get Server Ip    ${server_list}    ${stack_info}   vpg_name_0    network_name=public
+    Wait For Server    ${vpg_public_ip}
+    Log    Accessed all servers
+    Wait For Packet Generator    ${vpg_public_ip}
+    Log    All server processes up
+    ${vpg_oam_ip}=    Get From Dictionary    ${stack_info}    vpg_private_ip_1
+    
+    ${appc}=    Create Mount Point In APPC    ${vnf_id}    ${vpg_oam_ip}
+    Wait For Packets   ${vpg_public_ip}   ${vpg_unprotected_ip}   ${vsn_protected_ip}   ${TV_VSN_PUBLIC_IP}
+
+Validate FirewallSNK Stack
+    [Documentation]    Identifies and validates the firewall servers in the VFW Stack
+    [Arguments]    ${STACK_NAME}
+    Run Openstack Auth Request    auth
+    ${stack_info}=    Wait for Stack to Be Deployed    auth    ${STACK_NAME}
+    ${stack_id}=    Get From Dictionary    ${stack_info}    id
+    ${server_list}=    Get Openstack Servers    auth
+
+    ${vfw_public_ip}=    Get Server Ip    ${server_list}    ${stack_info}   vfw_name_0    network_name=public
+    ${vsn_public_ip}=    Get Server Ip    ${server_list}    ${stack_info}   vsn_name_0    network_name=public
+
+    Wait For Server    ${vfw_public_ip}
+    Log    Accessed all servers
+    Wait For Firewall    ${vfw_public_ip}
+    Wait For Packet Sink    ${vsn_public_ip}
+    # Save for teh PKG validation
+    Set Test Variable   ${TV_VFW_PUBLIC_IP}   ${vfw_public_ip}
+    Set Test Variable   ${TV_VSN_PUBLIC_IP}   ${vsn_public_ip}
+    Log    All server processes up
+
+
 
 Library            ExtendedSelenium2Library
 Library                UUID
 Library                Collections
+Library                String
 
 
 
     Validate Service Instance    ${service_instance_id}    ${service}      ${customer_name}
     ${vnflist}=   Get From Dictionary    ${GLOBAL_SERVICE_VNF_MAPPING}    ${service}
     ${vnfmap}=    Create Dictionary
+    # For vFWLC closed loop test generic-vnf-name (${vnf_name} will be used as the FWL hostname so we 
+    # now need to make it be a valid hostname 
     :for   ${vnf}   in   @{vnflist}
-    \   ${vnf_name}=    Catenate    Ete_${vnf}_${uuid}
+    \   ${shortuuid}=   Catenate   ${uuid} 
+    \   ${shortuuid}=   Replace String    ${shortuuid}    -   ${SPACE}
+    \   ${shortuuid}=   Get Substring    ${shortuuid}    -8         
+    \   ${vnf_name}=    Catenate    ${vnf}${shortuuid}
     \   ${vf_module_name}=    Catenate    Vfmodule_Ete_${vnf}_${uuid}
     \   ${vnf_type}=   Get VNF Type   ${catalog_resources}   ${vnf}
     \   ${vf_module}=    Get VF Module    ${catalog_resources}   ${vnf}
 
 
 
 *** Test Cases ***
+Jerry
+    ${uuid}=   Generate UUID
+    ${shortuuid}=   Catenate   ${uuid} 
+    ${shortuuid}=   Replace String    ${shortuuid}    -   ${SPACE}
+    ${shortuuid}=   Get Substring    ${shortuuid}    -8         
+    Log   ${shortuuid}
+    
 Initialize Customer And Models
     [Tags]   InitDemo
     Load Customer And Models   Demonstration