Collapse VNF specific templates into 1

Issue: TEST-55
Change-Id: Ia3db6d7e08ecdcfa7cc90b7f6ce31a8a54499043
Signed-off-by: Jerry Flood <jf9860@att.com>
diff --git a/robot/assets/service_mappings.py b/robot/assets/service_mappings.py
index d80a466..290d140 100644
--- a/robot/assets/service_mappings.py
+++ b/robot/assets/service_mappings.py
@@ -1,30 +1,29 @@
+'''
+This metadata identifies the folders to be zipped and uploaded to SDC for model distribution for a given VNF
+'''
 GLOBAL_SERVICE_FOLDER_MAPPING = {"vFW" : ['base_vfw'], \
                                  "vLB" : ['base_vlb'], \
                                  "vVG" : ['base_vvg'], \
                                  "vIMS" : ['base_clearwater'], \
                                  }
-                                 
+
+'''
+This metadata identifes the preloads that need to be done for a VNF as there may be more than one (vLB)
+"template" maps to the key value in the preload_paramenters.py  - GLOBAL_PRELOAD_PARAMETERS[<testcase>][<template>] -
+    GLOBAL_PRELOAD_PARAMETERS['Demo'][dnsscaling_preload.template']
+It no longer refers to a template file as all have been collapsed into preload.template
+'''
 GLOBAL_SERVICE_TEMPLATE_MAPPING = {"vFW" : [{"isBase" : "true", "template" : "vfw_preload.template", "name_pattern": "base_vfw"}], \
                                  "vLB" : [{"isBase" : "true", "template" : "vlb_preload.template", "name_pattern": "base_vlb"},
                                           {"isBase" : "false", "template" : "dnsscaling_preload.template", "name_pattern": "dnsscaling", "prefix" : "vDNS_"}],
                                  "vVG" : [{"isBase" : "true", "template" : "vvg_preload.template", "name_pattern": "base_vvg"}], \
+                                 "vIMS" : [{"isBase" : "true", "template" : "vims_preload.template", "name_pattern": "base_clearwater"}], \
                                  }
 
-
-##
-## The following identifies the stack parameter names for the oam_ecomp network IPS
-## In stantiated by the stack. During stack teardown, we need to ensure that 
-## These ports are deleted due to latency in rackspace to free these ports.
-## This is just a workaround to enable respinning a VM as soon as possible
-GLOBAL_SERVICE_ECOMP_IP_MAPPING = {"vFW" : ['vpg_private_ip_1', 'vfw_private_ip_2','vsn_private_ip_1'], \
-                                 "vLB" : ['vlb_private_ip_1', 'vdns_private_ip_1'],
-                                 "vVG" : [], \
-                                 }
-
-
-## 
-## Used by the Heatbridge Validate Query to A&AI to locate the vserver name
+'''
+Used by the Heatbridge Validate Query to A&AI to locate the vserver name
+'''
 GLOBAL_VALIDATE_NAME_MAPPING = {"vFW" : 'vfw_name_0',
                                  "vLB" : 'vlb_name_0',
-                                 "vVG" : '' 
+                                 "vVG" : ''
                                  }
diff --git a/robot/assets/templates/sdnc/dnsscaling_preload.template b/robot/assets/templates/sdnc/dnsscaling_preload.template
deleted file mode 100644
index 278ee80..0000000
--- a/robot/assets/templates/sdnc/dnsscaling_preload.template
+++ /dev/null
@@ -1,92 +0,0 @@
-{
-    "input": {
-        "vnf-topology-information": {
-            "vnf-topology-identifier": {
-                "service-type": "${service_type}",
-                "vnf-name": "${vf_module_name}",
-                "vnf-type": "${vf_module_type}",
-                "generic-vnf-name": "${generic_vnf_name}",
-                "generic-vnf-type": "${generic_vnf_type}"
-            },
-            "vnf-assignments": {
-                "availability-zones": [],
-                "vnf-networks": [],
-                "vnf-vms": []
-            },
-             "vnf-parameters": [
-                {
-                    "vnf-parameter-name": "repo_url_blob",
-                    "vnf-parameter-value": "${repo_url_blob}"
-                },
-                {
-                    "vnf-parameter-name": "repo_url_artifacts",
-                    "vnf-parameter-value": "${repo_url_artifacts}"
-                },
-                {
-                    "vnf-parameter-name": "demo_artifacts_version",
-                    "vnf-parameter-value": "${demo_artifacts_version}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_net_id",
-                    "vnf-parameter-value": "${ecomp_private_net_id}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_subnet_id",
-                    "vnf-parameter-value": "${ecomp_private_subnet_id}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_net_cidr",
-                    "vnf-parameter-value": "${ecomp_private_net_cidr}"
-                },
-                {
-                    "vnf-parameter-name": "vlb_private_net_id",
-                    "vnf-parameter-value": "${vlb_private_net_id}"
-                },
-                {
-                    "vnf-parameter-name": "vlb_private_ip_0",
-                    "vnf-parameter-value": "${vlb_private_ip_0}"
-                },
-                {
-                    "vnf-parameter-name": "vlb_private_ip_1",
-                    "vnf-parameter-value": "${vlb_private_ip_1}"
-                },
-                 {
-                    "vnf-parameter-name": "vdns_private_ip_0",
-                    "vnf-parameter-value": "${vdns_private_ip_0}"
-                },
-                {
-                    "vnf-parameter-name": "vdns_private_ip_1",
-                    "vnf-parameter-value": "${vdns_private_ip_1}"
-                },
-                {
-                    "vnf-parameter-name": "vdns_name_0",
-                    "vnf-parameter-value": "${scaling_vdns_name_0}"
-                },
-                {
-                    "vnf-parameter-name": "dcae_collector_ip",
-                    "vnf-parameter-value": "${dcae_collector_ip}"
-                },
-                {
-                    "vnf-parameter-name": "key_name",
-                    "vnf-parameter-value": "${key_name}"
-                },
-                {
-                    "vnf-parameter-name": "pub_key",
-                    "vnf-parameter-value": "${pub_key}"
-                }
-            ]
-        },
-        "request-information": {
-            "request-id": "robot12",
-            "order-version": "1",
-            "notification-url": "openecomp.org",
-            "order-number": "1",
-            "request-action": "PreloadVNFRequest"
-        },
-        "sdnc-request-header": {
-            "svc-request-id": "robot12",
-            "svc-notification-url": "http:\/\/openecomp.org:8080\/adapters\/rest\/SDNCNotify",
-            "svc-action": "reserve"
-        }
-    }    
-}
\ No newline at end of file
diff --git a/robot/assets/templates/sdnc/vvg_preload.template b/robot/assets/templates/sdnc/preload.template
similarity index 83%
rename from robot/assets/templates/sdnc/vvg_preload.template
rename to robot/assets/templates/sdnc/preload.template
index 83095e9..b2f4f08 100644
--- a/robot/assets/templates/sdnc/vvg_preload.template
+++ b/robot/assets/templates/sdnc/preload.template
@@ -13,13 +13,8 @@
                 "vnf-networks": [],
                 "vnf-vms": []
             },
-             "vnf-parameters": [
-  				{
-                    "vnf-parameter-name": "nova_instance",
-                    "vnf-parameter-value": "${nova_instance}"
-                }
-            ]
-        },
+             "vnf-parameters": ${vnf_parameters}
+       },
         "request-information": {
             "request-id": "robot12",
             "order-version": "1",
diff --git a/robot/assets/templates/sdnc/vfw_preload.template b/robot/assets/templates/sdnc/vfw_preload.template
deleted file mode 100644
index fbe96ca..0000000
--- a/robot/assets/templates/sdnc/vfw_preload.template
+++ /dev/null
@@ -1,128 +0,0 @@
-{
-    "input": {
-        "vnf-topology-information": {
-            "vnf-topology-identifier": {
-                "service-type": "${service_type}",
-                "vnf-name": "${vf_module_name}",
-                "vnf-type": "${vf_module_type}",
-                "generic-vnf-name": "${generic_vnf_name}",
-                "generic-vnf-type": "${generic_vnf_type}"
-            },
-            "vnf-assignments": {
-                "availability-zones": [],
-                "vnf-networks": [],
-                "vnf-vms": []
-            },
-             "vnf-parameters": [
-                {
-                    "vnf-parameter-name": "repo_url_blob",
-                    "vnf-parameter-value": "${repo_url_blob}"
-                },
-                {
-                    "vnf-parameter-name": "repo_url_artifacts",
-                    "vnf-parameter-value": "${repo_url_artifacts}"
-                },
-                {
-                    "vnf-parameter-name": "demo_artifacts_version",
-                    "vnf-parameter-value": "${demo_artifacts_version}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_net_id",
-                    "vnf-parameter-value": "${ecomp_private_net_id}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_subnet_id",
-                    "vnf-parameter-value": "${ecomp_private_subnet_id}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_net_cidr",
-                    "vnf-parameter-value": "${ecomp_private_net_cidr}"
-                },
-                {
-                    "vnf-parameter-name": "unprotected_private_net_id",
-                    "vnf-parameter-value": "${unprotected_private_net_id}"
-                },
-                {
-                    "vnf-parameter-name": "protected_private_net_id",
-                    "vnf-parameter-value": "${protected_private_net_id}"
-                },
-                {
-                    "vnf-parameter-name": "protected_private_net_cidr",
-                    "vnf-parameter-value": "${protected_private_net_cidr}"
-                },
-                {
-                    "vnf-parameter-name": "unprotected_private_net_cidr",
-                    "vnf-parameter-value": "${unprotected_private_net_cidr}"
-                },
-                {
-                    "vnf-parameter-name": "vfw_private_ip_0",
-                    "vnf-parameter-value": "${vfw_private_ip_0}"
-                },
-                {
-                    "vnf-parameter-name": "vfw_private_ip_1",
-                    "vnf-parameter-value": "${vfw_private_ip_1}"
-                },
-                {
-                    "vnf-parameter-name": "vfw_private_ip_2",
-                    "vnf-parameter-value": "${vfw_private_ip_2}"
-                },
-                {
-                    "vnf-parameter-name": "vpg_private_ip_0",
-                    "vnf-parameter-value": "${vpg_private_ip_0}"
-                },
-                {
-                    "vnf-parameter-name": "vpg_private_ip_1",
-                    "vnf-parameter-value": "${vpg_private_ip_1}"
-                },
-                {
-                    "vnf-parameter-name": "vsn_private_ip_0",
-                    "vnf-parameter-value": "${vsn_private_ip_0}"
-                },
-                {
-                    "vnf-parameter-name": "vsn_private_ip_1",
-                    "vnf-parameter-value": "${vsn_private_ip_1}"
-                },
-                {
-                    "vnf-parameter-name": "vfw_name_0",
-                    "vnf-parameter-value": "${vfw_name_0}"
-                },
-                {
-                    "vnf-parameter-name": "vpg_name_0",
-                    "vnf-parameter-value": "${vpg_name_0}"
-                },
-                {
-                    "vnf-parameter-name": "vsn_name_0",
-                    "vnf-parameter-value": "${vsn_name_0}"
-                },
-                {
-                    "vnf-parameter-name": "dcae_collector_ip",
-                    "vnf-parameter-value": "${dcae_collector_ip}"
-                },
-                {
-                    "vnf-parameter-name": "dcae_collector_port",
-                    "vnf-parameter-value": "${dcae_collector_port}"
-                },
-                {
-                    "vnf-parameter-name": "key_name",
-                    "vnf-parameter-value": "${key_name}"
-                },
-                {
-                    "vnf-parameter-name": "pub_key",
-                    "vnf-parameter-value": "${pub_key}"
-                }
-            ]
-        },
-        "request-information": {
-            "request-id": "robot12",
-            "order-version": "1",
-            "notification-url": "openecomp.org",
-            "order-number": "1",
-            "request-action": "PreloadVNFRequest"
-        },
-        "sdnc-request-header": {
-            "svc-request-id": "robot12",
-            "svc-notification-url": "http:\/\/openecomp.org:8080\/adapters\/rest\/SDNCNotify",
-            "svc-action": "reserve"
-        }
-    }    
-}
\ No newline at end of file
diff --git a/robot/assets/templates/sdnc/vlb_preload.template b/robot/assets/templates/sdnc/vlb_preload.template
deleted file mode 100644
index acc3c9d..0000000
--- a/robot/assets/templates/sdnc/vlb_preload.template
+++ /dev/null
@@ -1,104 +0,0 @@
-{
-    "input": {
-        "vnf-topology-information": {
-            "vnf-topology-identifier": {
-                "service-type": "${service_type}",
-                "vnf-name": "${vf_module_name}",
-                "vnf-type": "${vf_module_type}",
-                "generic-vnf-name": "${generic_vnf_name}",
-                "generic-vnf-type": "${generic_vnf_type}"
-            },
-            "vnf-assignments": {
-                "availability-zones": [],
-                "vnf-networks": [],
-                "vnf-vms": []
-            },
-             "vnf-parameters": [
-                {
-                    "vnf-parameter-name": "repo_url_blob",
-                    "vnf-parameter-value": "${repo_url_blob}"
-                },
-                {
-                    "vnf-parameter-name": "repo_url_artifacts",
-                    "vnf-parameter-value": "${repo_url_artifacts}"
-                },
-                {
-                    "vnf-parameter-name": "demo_artifacts_version",
-                    "vnf-parameter-value": "${demo_artifacts_version}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_net_id",
-                    "vnf-parameter-value": "${ecomp_private_net_id}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_subnet_id",
-                    "vnf-parameter-value": "${ecomp_private_subnet_id}"
-                },
-                {
-                    "vnf-parameter-name": "ecomp_private_net_cidr",
-                    "vnf-parameter-value": "${ecomp_private_net_cidr}"
-                },
-                {
-                    "vnf-parameter-name": "vlb_private_net_id",
-                    "vnf-parameter-value": "${vlb_private_net_id}"
-                },
-                {
-                    "vnf-parameter-name": "vlb_private_net_cidr",
-                    "vnf-parameter-value": "${vlb_private_net_cidr}"
-                },
-                {
-                    "vnf-parameter-name": "vlb_private_ip_0",
-                    "vnf-parameter-value": "${vlb_private_ip_0}"
-                },
-                {
-                    "vnf-parameter-name": "vlb_private_ip_1",
-                    "vnf-parameter-value": "${vlb_private_ip_1}"
-                },
-                 {
-                    "vnf-parameter-name": "vdns_private_ip_0",
-                    "vnf-parameter-value": "${vdns_private_ip_0}"
-                },
-                {
-                    "vnf-parameter-name": "vdns_private_ip_1",
-                    "vnf-parameter-value": "${vdns_private_ip_1}"
-                },
-                {
-                    "vnf-parameter-name": "vlb_name_0",
-                    "vnf-parameter-value": "${vlb_name_0}"
-                },
-                {
-                    "vnf-parameter-name": "vdns_name_0",
-                    "vnf-parameter-value": "${vdns_name_0}"
-                },
-                {
-                    "vnf-parameter-name": "dcae_collector_ip",
-                    "vnf-parameter-value": "${dcae_collector_ip}"
-                },
-                {
-                    "vnf-parameter-name": "dcae_collector_port",
-                    "vnf-parameter-value": "${dcae_collector_port}"
-                },
-                {
-                    "vnf-parameter-name": "key_name",
-                    "vnf-parameter-value": "${key_name}"
-                },
-                {
-                    "vnf-parameter-name": "pub_key",
-                    "vnf-parameter-value": "${pub_key}"
-                }
-            ]
-        },
-        "request-information": {
-            "request-id": "robot12",
-            "order-version": "1",
-            "notification-url": "openecomp.org",
-            "order-number": "1",
-            "request-action": "PreloadVNFRequest"
-        },
-        "sdnc-request-header": {
-            "svc-request-id": "robot12",
-            "svc-notification-url": "http:\/\/openecomp.org:8080\/adapters\/rest\/SDNCNotify",
-            "svc-action": "reserve"
-        }
-    }    
-}
\ No newline at end of file
diff --git a/robot/resources/sdngc_interface.robot b/robot/resources/sdngc_interface.robot
index bb330b3..d3606c1 100644
--- a/robot/resources/sdngc_interface.robot
+++ b/robot/resources/sdngc_interface.robot
@@ -1,7 +1,7 @@
 *** 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	          UUID
 Library    OperatingSystem
 Library 	    ExtendedSelenium2Library
 Library         Collections
@@ -30,7 +30,7 @@
     [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   
+    Should Be Equal As Strings 	${resp.json()['output']['response-code']} 	200
 
 Run SDNGC Get Request
     [Documentation]    Runs an SDNGC get request
@@ -43,7 +43,7 @@
     ${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}
@@ -66,8 +66,8 @@
     ${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} 
-  
+    [Return]    ${resp}
+
 Run SDNGC Delete Request
     [Documentation]    Runs an SDNGC delete request
     [Arguments]    ${data_path}
@@ -92,37 +92,36 @@
     \       ${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}     
+    \       ${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}
-    [Return]    ${base_vf_module_type}   ${closedloop_vf_module}    
+    [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}           
+    ${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    
+    [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}    
+    :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}
     Return From Keyword If    '${filename}' == ''
-    ${data_template}=    OperatingSystem.Get File    ${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}/${filename}
+    ${data_template}=    OperatingSystem.Get File    ${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}/preload.template
     ${parameters}=    Get Template Parameters    ${filename}   ${uuid}
     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}    uuid=${uuid}
-    ${data}=	Fill JSON Template    ${data_template}    ${parameters}        
+    ${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 	${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
 
@@ -135,7 +134,7 @@
     # Initialize the value map with the properties generated from the Robot VM /opt/config folder
     ${valuemap}=   Create Dictionary
     Set To Dictionary   ${valuemap}   artifacts_version=${GLOBAL_INJECTED_ARTIFACTS_VERSION}
-    Set To Dictionary   ${valuemap}   network=${GLOBAL_INJECTED_NETWORK} 
+    Set To Dictionary   ${valuemap}   network=${GLOBAL_INJECTED_NETWORK}
     # update the value map with unique values.
     Set To Dictionary   ${valuemap}   uuid=${uuid}   hostid=${hostid}    ecompnet=${ecompnet}
     ${parameters}=    Create Dictionary
@@ -143,17 +142,30 @@
     Resolve Values Into Dictionary   ${valuemap}   ${defaults}    ${parameters}
     ${suite_templates}=    Get From Dictionary    ${GLOBAL_PRELOAD_PARAMETERS}    ${suite}
     ${template}=    Get From Dictionary    ${suite_templates}    ${template}
-    Resolve Values Into Dictionary   ${valuemap}   ${template}    ${parameters}
+    ${vnf_parameters}=   Resolve VNF Parameters Into Array   ${valuemap}   ${template}    ${parameters}
+    ${vnf_parameters_json}=   Evaluate    json.dumps(${vnf_parameters})    json
+    Set To Dictionary   ${parameters}   vnf_parameters=${vnf_parameters_json}
     [Return]    ${parameters}
-   
-Resolve Values Into Dictionary    
+
+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}    ${to}
+    ${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
@@ -163,25 +175,25 @@
     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 
+    Page Should Contain  VNF Profile
     Input Text    xpath=//div[@id='vnf_profile_filter']//input    ${vnf_name}
-    Page Should Contain  ${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 
+    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}')]    
+    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 is now being managed by the test case
     ## Setup Browser
     Go To    ${SDNGC_ADMIN_SIGNUP_URL}
     Maximize Browser Window
@@ -190,7 +202,7 @@
     Log    Logging in to ${SDNGC_ADMIN_LOGIN_URL}
     Handle Proxy Warning
     Title Should Be    AdminPortal
-    ${uuid}=    Generate UUID  
+    ${uuid}=    Generate UUID
     ${shortened_uuid}=     Evaluate    str("${uuid}")[:12]
     ${email}=        Catenate    ${shortened_uuid}@robotete.com
     Input Text    xpath=//input[@id='nf_email']    ${email}