Initial OpenECOMP MSO commit

Change-Id: Ia6a7574859480717402cc2f22534d9973a78fa6d
Signed-off-by: ChrisC <cc697w@intl.att.com>
diff --git a/asdc-controller/src/test/resources/logback-test.xml b/asdc-controller/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..a23395f
--- /dev/null
+++ b/asdc-controller/src/test/resources/logback-test.xml
@@ -0,0 +1,47 @@
+<!--
+  ============LICENSE_START=======================================================
+  ECOMP MSO
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<configuration >
+
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d{MM/dd-HH:mm:ss.SSS}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}||%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}||%X{Timer}|%msg%n</pattern>
+    </encoder>
+  </appender>
+
+
+  <logger name="com.att.eelf.audit" level="info" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
+  
+  <logger name="com.att.eelf.metrics" level="info" additivity="false">
+        <appender-ref ref="STDOUT" />
+  </logger>
+
+  <logger name="com.att.eelf.error" level="trace" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger> 
+
+  <root level="info">
+    <appender-ref ref="STDOUT" />
+  </root>
+ 
+
+</configuration>
diff --git a/asdc-controller/src/test/resources/mso-bad.json b/asdc-controller/src/test/resources/mso-bad.json
new file mode 100644
index 0000000..be372fc
--- /dev/null
+++ b/asdc-controller/src/test/resources/mso-bad.json
@@ -0,0 +1,15 @@
+{
+  "asdc-connections":{,
+    "asdc-controller1":{
+        "user": "testuser",
+        "consumerGroup": "consumerGroup",
+        "consumerId": "consumerId",
+        "environmentName": "environmentName",
+        "asdcAddress": "hostname1",
+
+        "pollingInterval":10,
+        "pollingTimeout":30
+        
+    }
+  }
+}
diff --git a/asdc-controller/src/test/resources/mso-two-configs.json b/asdc-controller/src/test/resources/mso-two-configs.json
new file mode 100644
index 0000000..20c5f31
--- /dev/null
+++ b/asdc-controller/src/test/resources/mso-two-configs.json
@@ -0,0 +1,26 @@
+{
+  "asdc-connections":{
+    "asdc-controller1":{
+        "user": "User1",
+        "consumerGroup": "consumerGroup1",
+        "consumerId": "consumerId1",
+        "environmentName": "environmentName1",
+        "asdcAddress": "hostname1",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30
+        
+    },
+     "asdc-controller2":{
+        "user": "User2",
+        "consumerGroup": "consumerGroup2",
+        "consumerId": "consumerId2",
+        "environmentName": "environmentName2",
+        "asdcAddress": "hostname2",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30
+        
+    }
+  }
+}
diff --git a/asdc-controller/src/test/resources/mso-two-configs2.json b/asdc-controller/src/test/resources/mso-two-configs2.json
new file mode 100644
index 0000000..29db2ee
--- /dev/null
+++ b/asdc-controller/src/test/resources/mso-two-configs2.json
@@ -0,0 +1,26 @@
+{
+  "asdc-connections":{
+    "asdc-controller1":{
+        "user": "User1",
+        "consumerGroup": "consumerGroup1",
+        "consumerId": "consumerId1",
+        "environmentName": "environmentName1",
+        "asdcAddress": "hostname1",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30
+        
+    },
+     "asdc-controller2B":{
+        "user": "User2",
+        "consumerGroup": "consumerGroup2",
+        "consumerId": "consumerId2",
+        "environmentName": "environmentName2",
+        "asdcAddress": "hostname2",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30
+        
+    }
+  }
+}
diff --git a/asdc-controller/src/test/resources/mso-with-NULL.json b/asdc-controller/src/test/resources/mso-with-NULL.json
new file mode 100644
index 0000000..b7ef75b
--- /dev/null
+++ b/asdc-controller/src/test/resources/mso-with-NULL.json
@@ -0,0 +1,15 @@
+{
+  "asdc-connections":{
+    "asdc-controller1":{
+        "user": "User",
+        "consumerGroup": "NULL",
+        "consumerId": "consumerId",
+        "environmentName": "environmentName",
+        "asdcAddress": "hostname",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30
+        
+    }
+  }
+}
diff --git a/asdc-controller/src/test/resources/mso.json b/asdc-controller/src/test/resources/mso.json
new file mode 100644
index 0000000..d74ee07
--- /dev/null
+++ b/asdc-controller/src/test/resources/mso.json
@@ -0,0 +1,15 @@
+{
+  "asdc-connections":{
+    "asdc-controller1":{
+        "user": "User",
+        "consumerGroup": "consumerGroup",
+        "consumerId": "consumerId",
+        "environmentName": "environmentName",
+        "asdcAddress": "hostname",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30
+    
+    }
+  }
+}
diff --git a/asdc-controller/src/test/resources/mso2.json b/asdc-controller/src/test/resources/mso2.json
new file mode 100644
index 0000000..2d31fc4
--- /dev/null
+++ b/asdc-controller/src/test/resources/mso2.json
@@ -0,0 +1,15 @@
+{
+  "asdc-connections":{
+    "asdc-controller1":{
+        "user": "User",
+        "consumerGroup": "consumerGroup",
+        "consumerId": "consumerId",
+        "environmentName": "environmentName",
+        "asdcAddress": "hostname",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30
+        
+    }
+  }
+}
diff --git a/asdc-controller/src/test/resources/mso3.json b/asdc-controller/src/test/resources/mso3.json
new file mode 100644
index 0000000..ac84dcf
--- /dev/null
+++ b/asdc-controller/src/test/resources/mso3.json
@@ -0,0 +1,15 @@
+{
+  "asdc-connections":{
+    "asdc-controller1":{
+        "user": "User",
+        "consumerGroup": "consumerGroup",
+        "consumerId": "consumerId",
+        "environmentName": "environmentName",
+        "asdcAddress": "hostname1",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30
+        
+    }
+  }
+}
diff --git a/asdc-controller/src/test/resources/mso4-with-TLS.json b/asdc-controller/src/test/resources/mso4-with-TLS.json
new file mode 100644
index 0000000..8e7c506
--- /dev/null
+++ b/asdc-controller/src/test/resources/mso4-with-TLS.json
@@ -0,0 +1,17 @@
+{
+  "asdc-connections":{
+    "asdc-controller1":{
+        "user": "User",
+        "consumerGroup": "consumerGroup",
+        "consumerId": "consumerId",
+        "environmentName": "environmentName",
+        "asdcAddress": "hostname",
+        "password": "1c551b8b5ab91fcd5a0907b11c304199",
+        "pollingInterval":10,
+        "pollingTimeout":30,
+        "activateServerTLSAuth": true,
+        "keyStorePassword":"1c551b8b5ab91fcd5a0907b11c304199",    
+        "keyStorePath": "/test"
+    }
+  }
+}
diff --git a/asdc-controller/src/test/resources/resource-examples/autoscaling.yaml b/asdc-controller/src/test/resources/resource-examples/autoscaling.yaml
new file mode 100644
index 0000000..88eabb7
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/autoscaling.yaml
@@ -0,0 +1,216 @@
+heat_template_version: 2013-05-23 
+description: AutoScaling Wordpress 
+parameters: 
+ image: 
+   type: string 
+   description: Image used for servers 
+ key: 
+   type: string 
+   description: SSH key to connect to the servers 
+  flavor: 
+    type: string 
+    description: flavor used by the web servers 
+  database_flavor: 
+    type: string 
+    description: flavor used by the db server 
+  network: 
+    type: string 
+    description: Network used by the server 
+  subnet_id: 
+    type: string 
+    description: subnet on which the load balancer will be located 
+  database_name: 
+    type: string 
+    description: Name of the wordpress DB 
+    default: wordpress 
+  database_user: 
+    type: string 
+    description: Name of the wordpress user 
+    default: wordpress 
+  external_network_id: 
+    type: string 
+    description: UUID of a Neutron external network 
+resources: 
+  database_password: 
+    type: OS::Heat::RandomString 
+  database_root_password: 
+    type: OS::Heat::RandomString 
+  db: 
+    type: OS::Nova::Server 
+    properties: 
+      flavor: {get_param: database_flavor} 
+      image: {get_param: image} 
+      key_name: {get_param: key} 
+      networks: [{network: {get_param: network} }] 
+      user_data_format: RAW 
+      user_data: 
+        str_replace: 
+          template: | 
+            #!/bin/bash -v 
+            yum -y install mariadb mariadb-server 
+            systemctl enable mariadb.service 
+            systemctl start mariadb.service 
+            mysqladmin -u root password $db_rootpassword 
+            cat << EOF | mysql -u root --password=$db_rootpassword 
+            CREATE DATABASE $db_name; 
+            GRANT ALL PRIVILEGES ON $db_name.* TO "$db_user"@"%" 
+            IDENTIFIED BY "$db_password"; 
+            FLUSH PRIVILEGES; 
+            EXIT 
+            EOF 
+          params: 
+            $db_rootpassword: {get_attr: [database_root_password, value]} 
+            $db_name: {get_param: database_name} 
+            $db_user: {get_param: database_user} 
+            $db_password: {get_attr: [database_password, value]} 
+  asg: 
+    type: OS::Heat::AutoScalingGroup 
+    properties: 
+      min_size: 1 
+      max_size: 3 
+      resource: 
+        type: lb_server.yaml 
+        properties: 
+          flavor: {get_param: flavor} 
+          image: {get_param: image} 
+          key_name: {get_param: key} 
+          network: {get_param: network} 
+          pool_id: {get_resource: pool} 
+          metadata: {"metering.stack": {get_param: "OS::stack_id"}} 
+          user_data: 
+            str_replace: 
+              template: | 
+                #!/bin/bash -v 
+                yum -y install httpd wordpress 
+                systemctl enable httpd.service 
+                systemctl start httpd.service 
+                setsebool -P httpd_can_network_connect_db=1 
+ 
+                sed -i "/Deny from All/d" /etc/httpd/conf.d/wordpress.conf 
+                sed -i "s/Require local/Require all granted/" /etc/httpd/conf.d/wordpress.conf 
+                sed -i s/database_name_here/$db_name/ /etc/wordpress/wp-config.php 
+                sed -i s/username_here/$db_user/ /etc/wordpress/wp-config.php 
+                sed -i s/password_here/$db_password/ /etc/wordpress/wp-config.php 
+                sed -i s/localhost/$db_host/ /etc/wordpress/wp-config.php 
+ 
+                systemctl restart httpd.service 
+              params: 
+                $db_name: {get_param: database_name} 
+                $db_user: {get_param: database_user} 
+                 $db_password: {get_attr: [database_password, value]} 
+                 $db_host: {get_attr: [db, first_address]} 
+   web_server_scaleup_policy: 
+     type: OS::Heat::ScalingPolicy 
+     properties: 
+       adjustment_type: change_in_capacity 
+       auto_scaling_group_id: {get_resource: asg} 
+       cooldown: 60 
+       scaling_adjustment: 1 
+   web_server_scaledown_policy: 
+     type: OS::Heat::ScalingPolicy 
+     properties: 
+       adjustment_type: change_in_capacity 
+       auto_scaling_group_id: {get_resource: asg} 
+       cooldown: 60 
+       scaling_adjustment: -1 
+   cpu_alarm_high: 
+     type: OS::Ceilometer::Alarm 
+     properties: 
+       description: Scale-up if the average CPU > 50% for 1 minute 
+       meter_name: cpu_util 
+       statistic: avg 
+       period: 60 
+       evaluation_periods: 1 
+       threshold: 50 
+       alarm_actions: 
+         - {get_attr: [web_server_scaleup_policy, alarm_url]} 
+       matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}} 
+       comparison_operator: gt 
+   cpu_alarm_low: 
+     type: OS::Ceilometer::Alarm 
+     properties: 
+       description: Scale-down if the average CPU < 15% for 10 minutes 
+       meter_name: cpu_util 
+       statistic: avg 
+       period: 600 
+       evaluation_periods: 1 
+       threshold: 15 
+       alarm_actions: 
+         - {get_attr: [web_server_scaledown_policy, alarm_url]} 
+       matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}} 
+       comparison_operator: lt 
+   monitor: 
+     type: OS::Neutron::HealthMonitor 
+     properties: 
+       type: TCP 
+       delay: 5 
+       max_retries: 5 
+       timeout: 5 
+   pool: 
+     type: OS::Neutron::Pool 
+     properties: 
+       protocol: HTTP 
+       monitors: [{get_resource: monitor}] 
+       subnet_id: {get_param: subnet_id} 
+       lb_method: ROUND_ROBIN 
+       vip: 
+         protocol_port: 80 
+   lb: 
+     type: OS::Neutron::LoadBalancer 
+     properties: 
+       protocol_port: 80 
+       pool_id: {get_resource: pool} 
+  
+   # assign a floating ip address to the load balancer 
+   # pool. 
+   lb_floating: 
+     type: OS::Neutron::FloatingIP 
+     properties: 
+       floating_network_id: {get_param: external_network_id} 
+       port_id: {get_attr: [pool, vip, port_id]} 
+  
+ outputs: 
+   scale_up_url: 
+     description: > 
+       This URL is the webhook to scale up the autoscaling group.  You 
+       can invoke the scale-up operation by doing an HTTP POST to this 
+       URL; no body nor extra headers are needed. 
+     value: {get_attr: [web_server_scaleup_policy, alarm_url]} 
+   scale_dn_url: 
+     description: > 
+       This URL is the webhook to scale down the autoscaling group. 
+       You can invoke the scale-down operation by doing an HTTP POST to 
+       this URL; no body nor extra headers are needed. 
+     value: {get_attr: [web_server_scaledown_policy, alarm_url]} 
+   pool_ip_address: 
+     value: {get_attr: [pool, vip, address]} 
+     description: The IP address of the load balancing pool 
+   website_url: 
+     value: 
+       str_replace: 
+         template: http://host/wordpress/ 
+         params: 
+           host: { get_attr: [lb_floating, floating_ip_address] } 
+     description: > 
+       This URL is the "external" URL that can be used to access the 
+       Wordpress site. 
+   ceilometer_query: 
+     value: 
+       str_replace: 
+         template: > 
+           ceilometer statistics -m cpu_util 
+           -q metadata.user_metadata.stack=stackval -p 600 -a avg 
+         params: 
+           stackval: { get_param: "OS::stack_id" } 
+     description: > 
+       This is a Ceilometer query for statistics on the cpu_util meter 
+       Samples about OS::Nova::Server instances in this stack.  The -q 
+       parameter selects Samples according to the subject's metadata. 
+       When a VM's metadata includes an item of the form metering.X=Y, 
+       the corresponding Ceilometer resource has a metadata item of the 
+       form user_metadata.X=Y and samples about resources so tagged can 
+       be queried with a Ceilometer query term of the form 
+       metadata.user_metadata.X=Y.  In this case the nested stacks give 
+       their VMs metadata that is passed as a nested stack parameter, 
+       and this stack passes a metadata of the form metering.stack=Y, 
+       where Y is this stack's ID. 
diff --git a/asdc-controller/src/test/resources/resource-examples/mixed.yaml b/asdc-controller/src/test/resources/resource-examples/mixed.yaml
new file mode 100644
index 0000000..9dc4a42
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/mixed.yaml
@@ -0,0 +1,1523 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template that creates internal networks, load balancers and servers for vMMSC.
+
+parameters:
+  oam_net_name:
+    type: string
+    description: UID of OAM network
+  oam_network_netmask:
+    type: string
+    label: oam network netmask
+    description: oam network gateway
+  oam_network_gateway:
+    type: string
+    label: oam network gateway
+    description: oam network gateway
+  oam_network_route_1:
+    type: string
+    label: oam network route 1
+    description: oam network route 1
+  oam_network_route_2:
+    type: string
+    label: oam network route 2
+    description:  oam network route 2
+  external_dns:
+    type: string
+    label: dns server
+    description: dns server for MMSC
+  external_ntp:
+    type: string
+    label: ntp server 
+    description: ntp server for MMSC
+  lb1_oam_net_ip:
+    type: string
+    label: management network ip for mmsc
+    description: the ip of the management network for mmsc
+  lb2_oam_net_ip:
+    type: string
+    label: management network ip for mmsc
+    description: the ip of the management network for mmsc
+  dmz_protected_net:
+    type: string
+    description: UID of dmz_protected network
+  dmz_protected_net_local_ip1:
+    type: string
+    label: mmsc dmz protected network local ip1
+    description: the local ip1 of the mmsc dmz protected network
+  dmz_protected_net_local_ip2:
+    type: string
+    label: mmsc dmz protected network local ip2
+    description: the local ip2 of the mmsc dmz protected network
+  dmz_protected_net_floating_ip:
+    type: string
+    label: mmsc dmz protected floating ip
+    description: mmsc dmz direct floating ip
+  cor_direct_net:
+    type: string
+    label: cor direct net UID
+    description: cor direct net
+  cor_direct_net_local_ip1:
+    type: string  
+    label: mmsc cor direct network local ip1
+    description: the local ip1 of the mmsc cor direct network
+  cor_direct_net_local_ip2:
+    type: string
+    label: mmsc cor direct network local ip2
+    description: the local ip2 of the mmsc cor direct network
+  cor_direct_net_floating_ip:
+    type: string
+    label: mmsc cor direct floating ip
+    description: mmsc cor direct floating ip
+  mms_traffic_net_name:
+    type: string
+    description: Name of MMS traffic network
+  mms_traffic_net_cidr:
+    type: string
+    description: MMS traffic network address (CIDR notation)
+  mms_traffic_netmask:
+    type: string
+    description: MMS traffic network subnet mask  
+  mms_traffic_net_gateway:
+    type: string
+    description: MMS traffic network gateway address
+  mms_traffic_start:
+    type: string
+    label: mmsc traffic start IP
+    description: mmsc traffic start IP
+  mms_traffic_end:
+    type: string
+    label: mmsc traffic end IP
+    description: mmsc traffic end IP
+  mms_traffic_net_cidr:
+    type: string
+    label: mmsc traffic cidr
+    description: mmsc traffic cidr
+  mms_traffic_net_local_ip1:
+    type: string
+    label: mmsc traffic network local ip1
+    description: the local ip1 of the mmsc traffic network
+  mms_traffic_net_local_ip2:
+    type: string
+    label: mmsc traffic network local ip2
+    description: the local ip2 of the mmsc traffic network
+  mms_traffic_net_floating_ip:
+    type: string
+    label: mmsc traffic floating ip
+    description: mmsc traffic floating ip
+  nems_internal_name:
+    type: string
+    label: nems internal network name
+    description: nems internal network name
+  nems_internal_start:
+    type: string
+    label: nems internal start
+    description: nems internal start
+  nems_internal_end:
+    type: string
+    label: nems internal end
+    description: nems internal end
+  nems_internal_cidr:
+    type: string
+    label: nems ineternal cidr
+    description: nems internal cidr
+  nems_internal_netmask:
+    type: string
+    description: NEMS internal network subnet mask
+  nems_internal_gateway:
+    type: string
+    label: nems internal gw
+    description: nems internal gw
+  nems_traffic_name:
+    type: string
+    label: nems traffic name
+    description: nems traffic name
+  nems_traffic_start:
+    type: string
+    label: nems traffic start
+    description: nems traffic start
+  nems_traffic_end:
+    type: string
+    label: nems traffic end
+    description: nems traffic end
+  nems_traffic_cidr:
+    type: string
+    label: nems traffic cidr
+    description: nems traffic cidr
+  nems_traffic_netmask:
+    type: string
+    description: NEMS traffic network subnet mask
+  nems_traffic_gateway:
+    type: string
+    description: NEMS traffic network gateway  
+  nems_traffic_net_local_ip1:
+    type: string
+    label: nems traffic network local ip1
+    description: the local ip1 of the nems traffic network
+  nems_traffic_net_local_ip2:
+    type: string
+    label: nems traffic network local ip2
+    description: the local ip2 of the nems traffic network
+  nems_traffic_net_floating_ip:
+    type: string
+    label: nems traffic floating ip
+    description: nems traffic floating ip
+  nems_user_web_name:
+    type: string
+    label: nems user web name
+    description: nems user web name
+  nems_user_web_start:
+    type: string
+    label: nems user web start
+    description: nems user web end
+  nems_user_web_end:
+    type: string
+    label: nems user web end
+    description: nems user web end
+  nems_user_web_cidr:
+    type: string
+    label: nems user web cidr
+    description: nems user web cidr
+  nems_user_web_netmask:
+    type: string
+    description: NEMS user web network subnet mask
+  nems_user_web_gateway:
+    type: string
+    description: NEMS user web network gateway
+  nems_user_web_net_local_ip1:
+    type: string
+    label: nems user web network local ip1
+    description: the local ip1 of the nems user web network
+  nems_user_web_net_local_ip2:
+    type: string
+    label: nems user web network local ip2
+    description: the local ip2 of the nems user web network
+  nems_user_web_net_floating_ip:
+    type: string
+    label: nems user web floating ip
+    description: nems user web floating ip 
+  nems_imap_name:
+    type: string
+    label: nems imap name
+    description: nems imap name
+  nems_imap_netmask:
+    type: string
+    label: nems imap subnet mask
+    description: nems imap subnet mask  
+  nems_imap_start:
+    type: string
+    label: nems imap start
+    description: nems imap start
+  nems_imap_end:
+    type: string
+    label: nems imap end
+    description: nems imap end
+  nems_imap_cidr:
+    type: string
+    label: nems imap cidr
+    description: nems imap cidr
+  nems_imap_gateway:
+    type: string
+    label: nems imap gateway
+    description: nems imap gateway  
+  eca_traffic_name:
+    type: string
+    label: eca traffic name
+    description: eca traffic name
+  eca_traffic_start:
+    type: string
+    label: eca traffic start
+    description: eca traffic start
+  eca_traffic_end:
+    type: string
+    label: eca traffic end
+    description: eca traffic end
+  eca_traffic_cidr:
+    type: string
+    label: eca traffic cidr
+    description: eca traffic cidr
+  eca_traffic_netmask:
+    type: string
+    description: ECA traffic network subnet mask
+  eca_traffic_net_local_ip1:
+    type: string
+    label: eca traffic network local ip1
+    description: the local ip1 of the eca traffic network
+  eca_traffic_net_local_ip2:
+    type: string
+    label: eca traffic network local ip2
+    description: the local ip2 of the eca traffic network
+  eca_traffic_net_floating_ip:
+    type: string
+    label: eca traffic floating ip
+    description: eca traffic floating ip
+  eca_mgmt_name:
+    type: string
+    label: eca management name
+    description: eca management name
+  eca_mgmt_start:
+    type: string
+    label: eca management start
+    description: eca management start
+  eca_mgmt_end:
+    type: string
+    label: eca management end
+    description: eca management end
+  eca_mgmt_cidr:
+    type: string
+    label: eca management cidr
+    description: eca management cidr
+  eca_mgmt_netmask:
+    type: string
+    description: ECA mgmt network subnet mask
+  ha_net_name:
+    type: string
+    label: ha_failover network name
+    description: ha_failover network name
+  ha_net_start:
+    type: string
+    label: ha net start
+    description: ha net start
+  ha_net_end:
+    type: string
+    label: ha net end
+    description: ha net end
+  ha_net_cidr:
+    type: string
+    label: ha net cidr
+    description: ha net cidr
+  ha_net_local_ip1:
+    type: string
+    label: ha net network local ip1
+    description: the local ip1 of the ha network
+  ha_net_local_ip2:
+    type: string
+    label: ha net network local ip2
+    description: the local ip2 of the ha network
+  lb1_name:
+    type: string
+    label: MMSC load balancer instance name
+    description: MMSC load balancer instance name
+  lb_image_name:
+    type: string
+    label: MMSC load balancer image name
+    description: MMSC load balancer image name
+  lb_flavor_name:
+    type: string
+    label: Load balancer flavor name
+    description: the flavor name of MMSC load balancer instance
+  lb1_name:
+    type: string
+    label: MMSC load balancer1 instance name
+    description: MMSC load balancer1 instance name
+  lb2_name:
+    type: string
+    label: MMSC load balancer2 instance name
+    description: MMSC load balancer2 instance name
+  availabilityzone_name:
+    type: string
+    label: MMSC availabilityzone name
+    description: MMSC availabilityzone name
+  security_group_name:
+    type: string
+    label: MMSC security group name
+    description: MMSC security group name
+  mmsc_image:
+    type: string
+    description: Image for MMSC server
+  mmsc_flavor:
+    type: string
+    description: Flavor for MMSC server
+#  mmsc_cinder_volume_size:
+#    type: number
+#    label: MMSC Cinder volume size
+#    description: the size of the MMSC Cinder volume
+  nems_fe_image:
+    type: string
+    description: Image for NEMS FE server
+  nems_fe_flavor:
+    type: string
+    description: Flavor for NEMS FE server
+  nems_be_image:
+    type: string
+    description: Image for NEMS BE server
+  nems_be_flavor:
+    type: string
+    description: Flavor for NEMS BE server
+  eca_trx_image:
+    type: string
+    description: Image for ECA TRX server
+  eca_trx_flavor:
+    type: string
+    description: Flavor for ECA TRX server
+  eca_oam_image:
+    type: string
+    description: Image for ECA OAM server
+  eca_oam_flavor:
+    type: string
+    description: Flavor for ECA OAM server
+  mmsc1_name:
+    type: string
+    description: MMSC1 server name
+  mmsc1_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC1
+  mmsc1_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC1
+  mmsc2_name:
+    type: string
+    description: MMSC2 server name
+  mmsc2_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC2
+  mmsc2_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC2
+  mmsc3_name:
+    type: string
+    description: MMSC3 server name
+  mmsc3_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC3
+  mmsc3_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC3
+  mmsc4_name:
+    type: string
+    description: MMSC4 server name
+  mmsc4_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC4
+  mmsc4_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC4
+  mmsc5_name:
+    type: string
+    description: MMSC5 server name
+  mmsc5_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC5
+  mmsc5_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC5
+  nems_fe1_name:
+    type: string
+    description: NEMS_FE1 server name
+  nems_fe1_node_role:
+    type: string
+    label: nems node role
+    description: nems node role
+  nems_fe1_oam_net_ip:
+    type: string
+    description: OAM_net IP for NEMS_FE1
+  nems_fe1_nems_traffic_net_ip:
+    type: string
+    description: nems_traffic_net IP for NEMS_FE1
+  nems_fe1_nems_user_web_net_ip:
+    type: string
+    description: nems_web_user_net IP for NEMS_FE1
+  nems_fe1_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_FE1
+  nems_fe1_nems_imap_net_ip:
+    type: string
+    description: nems_imap_net IP for NEMS_FE1  
+  nems_fe2_name:
+    type: string
+    description: NEMS_FE2 server name
+  nems_fe2_node_role:
+    type: string
+    label: nems node role
+    description: nems node role
+  nems_fe2_oam_net_ip:
+    type: string
+    description: OAM_net IP for NEMS_FE2
+  nems_fe2_nems_traffic_net_ip:
+    type: string
+    description: nems_traffic_net IP for NEMS_FE2
+  nems_fe2_nems_user_web_net_ip:
+    type: string
+    description: nems_web_user_net IP for NEMS_FE2
+  nems_fe2_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_FE2
+  nems_fe2_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_FE2
+  nems_fe2_nems_imap_net_ip:
+    type: string
+    description: nems_imap_net IP for NEMS_FE2  
+  nems_be1_name:
+    type: string
+    description: NEMS_BE2 server name
+  nems_be1_node_role:
+    type: string
+    label: nems node role
+    description: nems node role
+  nems_be1_oam_net_ip:
+    type: string
+    description: OAM_net IP for NEMS_BE1
+  nems_be1_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_BE1
+  nems_be1_nems_imap_net_ip:
+    type: string
+    description: nems_imap_net IP for NEMS_BE1  
+  nems_be2_name:
+    type: string
+    description: NEMS_BE2 server name
+  nems_be2_node_role:
+    type: string
+    label: nems node role
+    description: nems node role
+  nems_be2_oam_net_ip:
+    type: string
+    description: OAM_net IP for NEMS_BE2
+  nems_be2_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_BE2
+  nems_be2_nems_imap_net_ip:
+    type: string
+    description: nems_imap_net IP for NEMS_BE2
+  eca_oam1_name:
+    type: string
+    description: ECA_OAM1 server name
+  eca_oam1_oam_net_ip:
+    type: string
+    description: OAM_net IP for ECA_OAM1
+  eca_oam1_eca_mgmt_net_ip:
+    type: string
+    description: eca_mgmt_net IP for ECA_OAM1
+  eca_oam2_name:
+    type: string
+    description: ECA_OAM2 server name
+  eca_oam2_oam_net_ip:
+    type: string
+    description: OAM_net IP for ECA_OAM2
+  eca_oam2_eca_mgmt_net_ip:
+    type: string
+    description: eca_mgmt_net IP for ECA_OAM2
+  eca_trx1_name:
+    type: string
+    description: ECA_TRX1 server name
+  eca_trx1_oam_net_ip:
+    type: string
+    description: OAM_net IP for ECA_TRX1
+  eca_trx1_eca_mgmt_net_ip:
+    type: string
+    description: eca_mgmt_net IP for ECA_TRX1
+  eca_trx1_eca_traffic_net_ip:
+    type: string
+    description: eca_traffic_net IP for ECA_TRX1
+
+resources:
+  mms_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: mmsc security group
+      name: {get_param: security_group_name}
+      rules: [{"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0}
+              ]
+
+  mms_traffic_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: mms_traffic_net_name }
+
+  mms_traffic_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: mms_traffic_net_name}      
+      network_id: { get_resource: mms_traffic_net }
+      cidr: { get_param: mms_traffic_net_cidr }
+      allocation_pools: [{"start": {get_param: mms_traffic_start}, "end": {get_param: mms_traffic_end}}]
+      gateway_ip: { get_param: mms_traffic_net_gateway }
+      enable_dhcp: false
+
+  nems_internal_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: nems_internal_name}
+
+  nems_internal_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: nems_internal_name}
+      allocation_pools: [{"start": {get_param: nems_internal_start}, "end": {get_param: nems_internal_end}}]
+      cidr: {get_param: nems_internal_cidr}
+      enable_dhcp: false
+      gateway_ip: null
+      network_id: {get_resource: nems_internal_net}
+
+  nems_traffic_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: nems_traffic_name}
+
+  nems_traffic_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: nems_traffic_name}
+      allocation_pools: [{"start": {get_param: nems_traffic_start}, "end": {get_param: nems_traffic_end}}]
+      cidr: {get_param: nems_traffic_cidr}
+      enable_dhcp: false
+      gateway_ip: null
+      network_id: {get_resource: nems_traffic_net}
+
+  nems_user_web_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: nems_user_web_name}
+
+  nems_user_web_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: nems_user_web_name}
+      allocation_pools: [{"start": {get_param: nems_user_web_start}, "end": {get_param: nems_user_web_end}}]
+      cidr: {get_param: nems_user_web_cidr}
+      enable_dhcp: false
+      gateway_ip: null
+      network_id: {get_resource: nems_user_web_net}
+
+  nems_imap_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: nems_imap_name}
+
+  nems_imap_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: nems_imap_name}
+      allocation_pools: [{"start": {get_param: nems_imap_start}, "end": {get_param: nems_imap_end}}]
+      cidr: {get_param: nems_imap_cidr}
+      enable_dhcp: false
+      gateway_ip: null
+      network_id: {get_resource: nems_imap_net}
+
+  eca_traffic_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: eca_traffic_name}
+
+  eca_traffic_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: eca_traffic_name}
+      allocation_pools: [{"start": {get_param: eca_traffic_start}, "end": {get_param: eca_traffic_end}}]
+      cidr: {get_param: eca_traffic_cidr}
+      enable_dhcp: false
+      gateway_ip: null
+      network_id: {get_resource: eca_traffic_net}
+
+  ha_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: ha_net_name}
+
+  ha_net_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: ha_net_name}
+      allocation_pools: [{"start": {get_param: ha_net_start}, "end": {get_param: ha_net_end}}]
+      cidr: {get_param: ha_net_cidr}
+      enable_dhcp: false
+      gateway_ip: null
+      network_id: {get_resource: ha_net}
+
+  eca_mgmt_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: eca_mgmt_name}
+
+  eca_mgmt_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: eca_mgmt_name}
+      allocation_pools: [{"start": {get_param: eca_mgmt_start}, "end": {get_param: eca_mgmt_end}}]
+      cidr: {get_param: eca_mgmt_cidr}
+      enable_dhcp: false
+      gateway_ip: null
+      network_id: {get_resource: eca_mgmt_net}
+
+  lb1_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: lb1_name}
+      image: {get_param: lb_image_name}
+      flavor: {get_param: lb_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: lb1_mgmt_port}
+        - port: {get_resource: lb1_dmz_protected_port}
+        - port: {get_resource: lb1_cor_direct_port}
+        - port: {get_resource: lb1_mms_traffic_port}
+        - port: {get_resource: lb1_nems_traffic_port}
+        - port: {get_resource: lb1_nems_user_web_port}
+        - port: {get_resource: lb1_eca_traffic_port}
+        - port: {get_resource: lb1_ha_net_port}
+
+  lb1_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: lb1_oam_net_ip}}]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_mms_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: mms_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: mms_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_dmz_protected_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: dmz_protected_net}
+      fixed_ips: [{"ip_address": {get_param: dmz_protected_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: dmz_protected_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_cor_direct_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: cor_direct_net}
+      fixed_ips: [{"ip_address": {get_param: cor_direct_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: cor_direct_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_nems_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: nems_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_nems_user_web_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_user_web_net}
+      fixed_ips: [{"ip_address": {get_param: nems_user_web_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_user_web_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_ha_net_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: ha_net}
+      fixed_ips: [{"ip_address": {get_param: ha_net_local_ip1}}]
+
+  lb1_eca_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: eca_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: eca_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: eca_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: lb2_name}
+      image: {get_param: lb_image_name}
+      flavor: {get_param: lb_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: lb2_mgmt_port}
+        - port: {get_resource: lb2_dmz_protected_port}
+        - port: {get_resource: lb2_cor_direct_port}
+        - port: {get_resource: lb2_mms_traffic_port}
+        - port: {get_resource: lb2_nems_traffic_port}
+        - port: {get_resource: lb2_nems_user_web_port}
+        - port: {get_resource: lb2_eca_traffic_port}
+        - port: {get_resource: lb2_ha_net_port}
+
+  lb2_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: lb2_oam_net_ip}}]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_mms_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: mms_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: mms_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_dmz_protected_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: dmz_protected_net}
+      fixed_ips: [{"ip_address": {get_param: dmz_protected_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: dmz_protected_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_cor_direct_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: cor_direct_net}
+      fixed_ips: [{"ip_address": {get_param: cor_direct_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: cor_direct_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_nems_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: nems_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_nems_user_web_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_user_web_net}
+      fixed_ips: [{"ip_address": {get_param: nems_user_web_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_user_web_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_ha_net_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: ha_net}
+      fixed_ips: [{"ip_address": {get_param: ha_net_local_ip2}}]
+
+  lb2_eca_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: eca_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: eca_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: eca_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  server_mmsc1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc1_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc1_port_0 }
+      - port: { get_resource: mmsc1_port_1 }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: mmsc1_oam_net_ip}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param:  mmsc1_mms_traffic_net_ip}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp} 
+      user_data_format: RAW
+#  mmsc1_volume:
+#    type: OS::Cinder::Volume
+#    properties:
+#      size: {get_param: mmsc_cinder_volume_size}
+
+#  mmsc1_volume_attachment:
+#    type: OS::Cinder::VolumeAttachment
+#    properties:
+#      volume_id: {get_resource: mmsc1_volume}
+#      instance_uuid: {get_resource: server_mmsc1}
+
+  mmsc1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc1_oam_net_ip }
+      ]
+
+  mmsc1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc1_mms_traffic_net_ip }
+      ]
+
+  server_mmsc2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc2_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc2_port_0 }
+      - port: { get_resource: mmsc2_port_1 }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: mmsc2_oam_net_ip}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param: mmsc2_mms_traffic_net_ip}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp} 
+      user_data_format: RAW
+#  mmsc2_volume:
+#    type: OS::Cinder::Volume
+#    properties:
+#      size: {get_param: mmsc_cinder_volume_size}
+
+#  mmsc2_volume_attachment:
+#    type: OS::Cinder::VolumeAttachment
+#    properties:
+#      volume_id: {get_resource: mmsc2_volume}
+#      instance_uuid: {get_resource: server_mmsc2}
+
+  mmsc2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc2_oam_net_ip }
+      ]
+
+  mmsc2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc2_mms_traffic_net_ip }
+      ]
+
+  server_mmsc3:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc3_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc3_port_0 }
+      - port: { get_resource: mmsc3_port_1 }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: mmsc3_oam_net_ip}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param:  mmsc3_mms_traffic_net_ip}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp}
+      user_data_format: RAW
+
+  mmsc3_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc3_oam_net_ip }
+      ]
+
+  mmsc3_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc3_mms_traffic_net_ip }
+      ]
+
+  server_mmsc4:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc4_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc4_port_0 }
+      - port: { get_resource: mmsc4_port_1 }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: mmsc4_oam_net_ip}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param:  mmsc4_mms_traffic_net_ip}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp}
+      user_data_format: RAW
+
+  mmsc4_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc4_oam_net_ip }
+      ]
+
+  mmsc4_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc4_mms_traffic_net_ip }
+      ]
+
+  server_mmsc5:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc5_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc5_port_0 }
+      - port: { get_resource: mmsc5_port_1 }
+
+  mmsc5_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc5_oam_net_ip }
+      ]
+
+  mmsc5_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc5_mms_traffic_net_ip }
+      ]
+
+  server_nems_fe1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_fe1_name }
+      image: { get_param: nems_fe_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: nems_fe_flavor }
+      networks:
+      - port: { get_resource: nems_fe1_port_0 }
+      - port: { get_resource: nems_fe1_port_1 }
+      - port: { get_resource: nems_fe1_port_2 }
+      - port: { get_resource: nems_fe1_port_3 }
+      - port: { get_resource: nems_fe1_port_4 }
+      user_data:
+        str_replace:
+          template: |
+            nems.mgmt.ip=${nems.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.traffic.ip=${nems.traffic.ip}
+            nems.traffic.netmask=${nems.traffic.netmask}
+            nems.traffic.gateway=${nems.traffic.gateway}
+            nems.fe0.internal.ip=${nems.fe0.internal.ip}
+            nems.fe1.internal.ip=${nems.fe1.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.internal.gateway=${nems.internal.gateway}
+            nems.userweb.ip=${nems.userweb.ip}
+            nems.userweb.netmask=${nems.userweb.netmask}
+            nems.userweb.gateway=${nems.userweb.gateway}
+            nems.imap.ip=${nems.imap.ip}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.imap.gateway=${nems.imap.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+          params:
+            ${nems.mgmt.ip}: {get_param: nems_fe1_oam_net_ip}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.traffic.ip}: {get_param: nems_fe1_nems_traffic_net_ip}
+            ${nems.traffic.netmask}: {get_param: nems_traffic_netmask}
+            ${nems.traffic.gateway}: {get_param: nems_traffic_gateway}
+            ${nems.fe0.internal.ip}: {get_param: nems_fe1_nems_internal_net_ip}
+            ${nems.fe1.internal.ip}: {get_param: nems_fe2_nems_internal_net_ip}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.internal.gateway}: {get_param: nems_internal_gateway}
+            ${nems.userweb.ip}: {get_param: nems_fe1_nems_user_web_net_ip}
+            ${nems.userweb.netmask}: {get_param: nems_user_web_netmask}
+            ${nems.userweb.gateway}: {get_param: nems_user_web_gateway}
+            ${nems.imap.ip}: {get_param: nems_fe1_nems_imap_net_ip}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.imap.gateway}: {get_param: nems_imap_gateway}  
+            ${nems.be.internal.ip}: {get_param: nems_be1_nems_internal_net_ip}
+            ${nems.be.imap.ip}: {get_param: nems_be1_nems_imap_net_ip}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_fe1_node_role} 
+      user_data_format: RAW
+
+  nems_fe1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_oam_net_ip }
+      ]
+
+  nems_fe_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: {get_param: oam_net_name}
+      port_id: {get_resource: nems_fe1_port_0}
+
+  nems_fe1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_nems_traffic_net_ip }
+      ]
+
+  nems_fe1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_user_web_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_nems_user_web_net_ip }
+      ]
+
+  nems_fe1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_nems_internal_net_ip }
+      ]
+
+  nems_fe1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_nems_imap_net_ip }
+      ]
+
+  server_nems_fe2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_fe2_name }
+      image: { get_param: nems_fe_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: nems_fe_flavor }
+      networks:
+      - port: { get_resource: nems_fe2_port_0 }
+      - port: { get_resource: nems_fe2_port_1 }
+      - port: { get_resource: nems_fe2_port_2 }
+      - port: { get_resource: nems_fe2_port_3 }
+      - port: { get_resource: nems_fe2_port_4 }
+      user_data:
+        str_replace:
+          template: |
+            nems.mgmt.ip=${nems.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.traffic.ip=${nems.traffic.ip}
+            nems.traffic.netmask=${nems.traffic.netmask}
+            nems.traffic.gateway=${nems.traffic.gateway}
+            nems.fe0.internal.ip=${nems.fe0.internal.ip}
+            nems.fe1.internal.ip=${nems.fe1.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.internal.gateway=${nems.internal.gateway}
+            nems.userweb.ip=${nems.userweb.ip}
+            nems.userweb.netmask=${nems.userweb.netmask}
+            nems.userweb.gateway=${nems.userweb.gateway}
+            nems.imap.ip=${nems.imap.ip}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.imap.gateway=${nems.imap.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+          params:
+            ${nems.mgmt.ip}: {get_param: nems_fe2_oam_net_ip}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.traffic.ip}: {get_param: nems_fe2_nems_traffic_net_ip}
+            ${nems.traffic.netmask}: {get_param: nems_traffic_netmask}
+            ${nems.traffic.gateway}: {get_param: nems_traffic_gateway}
+            ${nems.fe0.internal.ip}: {get_param: nems_fe1_nems_internal_net_ip}
+            ${nems.fe1.internal.ip}: {get_param: nems_fe2_nems_internal_net_ip}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.internal.gateway}: {get_param: nems_internal_gateway}
+            ${nems.userweb.ip}: {get_param: nems_fe2_nems_user_web_net_ip}
+            ${nems.userweb.netmask}: {get_param: nems_user_web_netmask}
+            ${nems.userweb.gateway}: {get_param: nems_user_web_gateway}
+            ${nems.imap.ip}: {get_param: nems_fe2_nems_imap_net_ip}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.imap.gateway}: {get_param: nems_imap_gateway}
+            ${nems.be.internal.ip}: {get_param: nems_be2_nems_internal_net_ip}
+            ${nems.be.imap.ip}: {get_param: nems_be2_nems_imap_net_ip}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_fe2_node_role}
+      user_data_format: RAW
+
+  nems_fe2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_oam_net_ip }
+      ]
+
+  nems_fe_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: {get_param: oam_net_name}
+      port_id: {get_resource: nems_fe2_port_0}
+
+  nems_fe2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_nems_traffic_net_ip }
+      ]
+
+  nems_fe2_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_user_web_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_nems_user_web_net_ip }
+      ]
+
+  nems_fe2_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_nems_internal_net_ip }
+      ]
+
+  nems_fe2_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_nems_imap_net_ip }
+      ]
+
+  server_nems_be1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_be1_name }
+      image: { get_param: nems_be_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: nems_be_flavor }
+      networks:
+      - port: { get_resource: nems_be1_port_0 }
+      - port: { get_resource: nems_be1_port_1 }
+      - port: { get_resource: nems_be1_port_2 }
+      user_data:
+        str_replace:
+          template: |
+            nems.be.mgmt.ip=${nems.be.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.internal.gateway=${nems.internal.gateway}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.imap.gateway=${nems.imap.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+          params:
+            ${nems.be.mgmt.ip}: {get_param: nems_be1_oam_net_ip}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.be.internal.ip}: {get_param: nems_be1_nems_internal_net_ip}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.internal.gateway}: {get_param: nems_internal_gateway}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.imap.gateway}: {get_param: nems_imap_gateway}  
+            ${nems.be.imap.ip}: {get_param: nems_be1_nems_imap_net_ip}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_be1_node_role} 
+      user_data_format: RAW
+
+  nems_be1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be1_oam_net_ip }
+      ]
+
+  nems_be_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: {get_param: oam_net_name}
+      port_id: {get_resource: nems_be1_port_0}
+
+  nems_be1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be1_nems_internal_net_ip }
+      ]
+
+  nems_be1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be1_nems_imap_net_ip }
+      ]
+
+  server_nems_be2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_be2_name }
+      image: { get_param: nems_be_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: nems_be_flavor }
+      networks:
+      - port: { get_resource: nems_be2_port_0 }
+      - port: { get_resource: nems_be2_port_1 }
+      - port: { get_resource: nems_be2_port_2 }
+      user_data:
+        str_replace:
+          template: |
+            nems.be.mgmt.ip=${nems.be.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.internal.gateway=${nems.internal.gateway}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.imap.gateway=${nems.imap.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+          params:
+            ${nems.be.mgmt.ip}: {get_param: nems_be2_oam_net_ip}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.be.internal.ip}: {get_param: nems_be2_nems_internal_net_ip}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.internal.gateway}: {get_param: nems_internal_gateway}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.imap.gateway}: {get_param: nems_imap_gateway}
+            ${nems.be.imap.ip}: {get_param: nems_be2_nems_imap_net_ip}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_be1_node_role}
+      user_data_format: RAW
+
+  nems_be2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be2_oam_net_ip }
+      ]
+
+  nems_be_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: {get_param: oam_net_name}
+      port_id: {get_resource: nems_be2_port_0}
+
+  nems_be2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be2_nems_internal_net_ip }
+      ]
+
+  nems_be2_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be2_nems_imap_net_ip }
+      ]
+
+  server_eca_oam1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: eca_oam1_name }
+      image: { get_param: eca_oam_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: eca_oam_flavor }
+      networks:
+      - port: { get_resource: eca_oam1_port_0 }
+      - port: { get_resource: eca_oam1_port_1 }
+
+  eca_oam1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: eca_oam1_oam_net_ip }
+      ]
+
+  eca_oam1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_mgmt_net }
+      fixed_ips: [
+        "ip_address": { get_param: eca_oam1_eca_mgmt_net_ip }
+      ]
+
+  server_eca_oam2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: eca_oam2_name }
+      image: { get_param: eca_oam_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: eca_oam_flavor }
+      networks:
+      - port: { get_resource: eca_oam2_port_0 }
+      - port: { get_resource: eca_oam2_port_1 }
+
+  eca_oam2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: eca_oam2_oam_net_ip }
+      ]
+
+  eca_oam2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_mgmt_net }
+      fixed_ips: [
+        "ip_address": { get_param: eca_oam2_eca_mgmt_net_ip }
+      ]
+
+  server_eca_trx1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: eca_trx1_name }
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx1_port_0 }
+      - port: { get_resource: eca_trx1_port_1 }
+      - port: { get_resource: eca_trx1_port_2 }
+
+
+  eca_trx1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: eca_trx1_oam_net_ip }
+      ]
+
+  eca_trx1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_mgmt_net }
+      fixed_ips: [
+        "ip_address": { get_param: eca_trx1_eca_mgmt_net_ip }
+      ]
+
+  eca_trx1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: eca_trx1_eca_traffic_net_ip }
+      ]
diff --git a/asdc-controller/src/test/resources/resource-examples/network.yaml b/asdc-controller/src/test/resources/resource-examples/network.yaml
new file mode 100644
index 0000000..ae10346
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/network.yaml
@@ -0,0 +1,32 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template that creates one COR network (direct).
+
+parameters:
+  cor_direct_net_name:
+    type: string
+    description: Name of COR direct network
+  cor_direct_net_cidr:
+    type: string
+    description: Direct network address (CIDR notation)
+  cor_direct_net_gateway:
+    type: string
+    description: Direct network gateway address
+  cor_direct_net_RT:
+    type: string
+    description: Direct network route-target (RT)
+
+resources:
+  cor_direct_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: cor_direct_net_name }
+      route_targets: [ get_param: cor_direct_net_RT ]
+
+  cor_direct_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: cor_direct_net }
+      cidr: {get_param: cor_direct_net_cidr}
+      gateway_ip: { get_param: cor_direct_net_gateway }
diff --git a/asdc-controller/src/test/resources/resource-examples/simpleTest.yaml b/asdc-controller/src/test/resources/resource-examples/simpleTest.yaml
new file mode 100644
index 0000000..8bfda2b
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/simpleTest.yaml
@@ -0,0 +1,39 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template that creates one COR network (direct).
+
+parameters:
+  cor_direct_net_name:
+    type: string
+    description: Name of COR direct network
+    default: testCorDirectNet
+  cor_direct_net_cidr:
+    type: string
+    description: Direct network address (CIDR notation)
+  cor_direct_net_gateway:
+    type: string
+    description: Direct network gateway address
+  cor_direct_net_RT:
+    type: string
+    description: Direct network route-target (RT)
+    default: testCorDirectNet
+  ip_port_snmp_manager:
+    type: string
+    default: 162
+    description: SNMP manager IP port
+
+
+resources:
+  cor_direct_net:
+    type: file:///my_test.yaml
+    properties:
+      name: { get_param: cor_direct_net_name }
+      route_targets: [ get_param: cor_direct_net_RT ]
+
+  cor_direct_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: cor_direct_net }
+      cidr: {get_param: cor_direct_net_cidr}
+      gateway_ip: { get_param: cor_direct_net_gateway }
diff --git a/asdc-controller/src/test/resources/resource-examples/simpleTestWithoutParam.yaml b/asdc-controller/src/test/resources/resource-examples/simpleTestWithoutParam.yaml
new file mode 100644
index 0000000..0a2db2b
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/simpleTestWithoutParam.yaml
@@ -0,0 +1,18 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template that creates one COR network (direct).
+
+resources:
+  cor_direct_net:
+    type: file:///my_test.yaml
+    properties:
+      name: { get_param: cor_direct_net_name }
+      route_targets: [ get_param: cor_direct_net_RT ]
+
+  cor_direct_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: cor_direct_net }
+      cidr: {get_param: cor_direct_net_cidr}
+      gateway_ip: { get_param: cor_direct_net_gateway }
diff --git a/asdc-controller/src/test/resources/resource-examples/vnf.yaml b/asdc-controller/src/test/resources/resource-examples/vnf.yaml
new file mode 100644
index 0000000..d4420de
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/vnf.yaml
@@ -0,0 +1,1449 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template that creates internal networks, load balancers and servers for vMMSC.
+
+parameters:
+  oam_net_name:
+    type: string
+    description: UID of OAM network
+  oam_network_netmask:
+    type: string
+    label: oam network netmask
+    description: oam network gateway
+  oam_network_gateway:
+    type: string
+    label: oam network gateway
+    description: oam network gateway
+  oam_network_route_1:
+    type: string
+    label: oam network route 1
+    description: oam network route 1
+  oam_network_route_2:
+    type: string
+    label: oam network route 2
+    description:  oam network route 2
+  external_dns:
+    type: string
+    label: dns server
+    description: dns server for MMSC
+  external_ntp:
+    type: string
+    label: ntp server 
+    description: ntp server for MMSC
+  lb1_oam_net_ip:
+    type: string
+    label: management network ip for mmsc
+    description: the ip of the management network for mmsc
+  lb2_oam_net_ip:
+    type: string
+    label: management network ip for mmsc
+    description: the ip of the management network for mmsc
+  dmz_protected_net:
+    type: string
+    description: UID of dmz_protected network
+  dmz_protected_net_local_ip1:
+    type: string
+    label: mmsc dmz protected network local ip1
+    description: the local ip1 of the mmsc dmz protected network
+  dmz_protected_net_local_ip2:
+    type: string
+    label: mmsc dmz protected network local ip2
+    description: the local ip2 of the mmsc dmz protected network
+  dmz_protected_net_floating_ip:
+    type: string
+    label: mmsc dmz protected floating ip
+    description: mmsc dmz direct floating ip
+  cor_direct_net:
+    type: string
+    label: cor direct net UID
+    description: cor direct net
+  cor_direct_net_local_ip1:
+    type: string  
+    label: mmsc cor direct network local ip1
+    description: the local ip1 of the mmsc cor direct network
+  cor_direct_net_local_ip2:
+    type: string
+    label: mmsc cor direct network local ip2
+    description: the local ip2 of the mmsc cor direct network
+  cor_direct_net_floating_ip:
+    type: string
+    label: mmsc cor direct floating ip
+    description: mmsc cor direct floating ip
+  mms_traffic_net_name:
+    type: string
+    description: Name of MMS traffic network
+  mms_traffic_net_cidr:
+    type: string
+    description: MMS traffic network address (CIDR notation)
+  mms_traffic_netmask:
+    type: string
+    description: MMS traffic network subnet mask  
+  mms_traffic_net_gateway:
+    type: string
+    description: MMS traffic network gateway address
+  mms_traffic_start:
+    type: string
+    label: mmsc traffic start IP
+    description: mmsc traffic start IP
+  mms_traffic_end:
+    type: string
+    label: mmsc traffic end IP
+    description: mmsc traffic end IP
+  mms_traffic_net_cidr:
+    type: string
+    label: mmsc traffic cidr
+    description: mmsc traffic cidr
+  mms_traffic_net_local_ip1:
+    type: string
+    label: mmsc traffic network local ip1
+    description: the local ip1 of the mmsc traffic network
+  mms_traffic_net_local_ip2:
+    type: string
+    label: mmsc traffic network local ip2
+    description: the local ip2 of the mmsc traffic network
+  mms_traffic_net_floating_ip:
+    type: string
+    label: mmsc traffic floating ip
+    description: mmsc traffic floating ip
+  nems_internal_name:
+    type: string
+    label: nems internal network name
+    description: nems internal network name
+  nems_internal_start:
+    type: string
+    label: nems internal start
+    description: nems internal start
+  nems_internal_end:
+    type: string
+    label: nems internal end
+    description: nems internal end
+  nems_internal_cidr:
+    type: string
+    label: nems ineternal cidr
+    description: nems internal cidr
+  nems_internal_netmask:
+    type: string
+    description: NEMS internal network subnet mask
+  nems_internal_gateway:
+    type: string
+    label: nems internal gw
+    description: nems internal gw
+  nems_traffic_name:
+    type: string
+    label: nems traffic name
+    description: nems traffic name
+  nems_traffic_start:
+    type: string
+    label: nems traffic start
+    description: nems traffic start
+  nems_traffic_end:
+    type: string
+    label: nems traffic end
+    description: nems traffic end
+  nems_traffic_cidr:
+    type: string
+    label: nems traffic cidr
+    description: nems traffic cidr
+  nems_traffic_netmask:
+    type: string
+    description: NEMS traffic network subnet mask
+  nems_traffic_gateway:
+    type: string
+    description: NEMS traffic network gateway  
+  nems_traffic_net_local_ip1:
+    type: string
+    label: nems traffic network local ip1
+    description: the local ip1 of the nems traffic network
+  nems_traffic_net_local_ip2:
+    type: string
+    label: nems traffic network local ip2
+    description: the local ip2 of the nems traffic network
+  nems_traffic_net_floating_ip:
+    type: string
+    label: nems traffic floating ip
+    description: nems traffic floating ip
+  nems_user_web_name:
+    type: string
+    label: nems user web name
+    description: nems user web name
+  nems_user_web_start:
+    type: string
+    label: nems user web start
+    description: nems user web end
+  nems_user_web_end:
+    type: string
+    label: nems user web end
+    description: nems user web end
+  nems_user_web_cidr:
+    type: string
+    label: nems user web cidr
+    description: nems user web cidr
+  nems_user_web_netmask:
+    type: string
+    description: NEMS user web network subnet mask
+  nems_user_web_gateway:
+    type: string
+    description: NEMS user web network gateway
+  nems_user_web_net_local_ip1:
+    type: string
+    label: nems user web network local ip1
+    description: the local ip1 of the nems user web network
+  nems_user_web_net_local_ip2:
+    type: string
+    label: nems user web network local ip2
+    description: the local ip2 of the nems user web network
+  nems_user_web_net_floating_ip:
+    type: string
+    label: nems user web floating ip
+    description: nems user web floating ip 
+  nems_imap_name:
+    type: string
+    label: nems imap name
+    description: nems imap name
+  nems_imap_netmask:
+    type: string
+    label: nems imap subnet mask
+    description: nems imap subnet mask  
+  nems_imap_start:
+    type: string
+    label: nems imap start
+    description: nems imap start
+  nems_imap_end:
+    type: string
+    label: nems imap end
+    description: nems imap end
+  nems_imap_cidr:
+    type: string
+    label: nems imap cidr
+    description: nems imap cidr
+  nems_imap_gateway:
+    type: string
+    label: nems imap gateway
+    description: nems imap gateway  
+  eca_traffic_name:
+    type: string
+    label: eca traffic name
+    description: eca traffic name
+  eca_traffic_start:
+    type: string
+    label: eca traffic start
+    description: eca traffic start
+  eca_traffic_end:
+    type: string
+    label: eca traffic end
+    description: eca traffic end
+  eca_traffic_cidr:
+    type: string
+    label: eca traffic cidr
+    description: eca traffic cidr
+  eca_traffic_netmask:
+    type: string
+    description: ECA traffic network subnet mask
+  eca_traffic_net_local_ip1:
+    type: string
+    label: eca traffic network local ip1
+    description: the local ip1 of the eca traffic network
+  eca_traffic_net_local_ip2:
+    type: string
+    label: eca traffic network local ip2
+    description: the local ip2 of the eca traffic network
+  eca_traffic_net_floating_ip:
+    type: string
+    label: eca traffic floating ip
+    description: eca traffic floating ip
+  eca_mgmt_name:
+    type: string
+    label: eca management name
+    description: eca management name
+  eca_mgmt_start:
+    type: string
+    label: eca management start
+    description: eca management start
+  eca_mgmt_end:
+    type: string
+    label: eca management end
+    description: eca management end
+  eca_mgmt_cidr:
+    type: string
+    label: eca management cidr
+    description: eca management cidr
+  eca_mgmt_netmask:
+    type: string
+    description: ECA mgmt network subnet mask
+  ha_net_name:
+    type: string
+    label: ha_failover network name
+    description: ha_failover network name
+  ha_net_start:
+    type: string
+    label: ha net start
+    description: ha net start
+  ha_net_end:
+    type: string
+    label: ha net end
+    description: ha net end
+  ha_net_cidr:
+    type: string
+    label: ha net cidr
+    description: ha net cidr
+  ha_net_local_ip1:
+    type: string
+    label: ha net network local ip1
+    description: the local ip1 of the ha network
+  ha_net_local_ip2:
+    type: string
+    label: ha net network local ip2
+    description: the local ip2 of the ha network
+  lb1_name:
+    type: string
+    label: MMSC load balancer instance name
+    description: MMSC load balancer instance name
+  lb_image_name:
+    type: string
+    label: MMSC load balancer image name
+    description: MMSC load balancer image name
+  lb_flavor_name:
+    type: string
+    label: Load balancer flavor name
+    description: the flavor name of MMSC load balancer instance
+  lb1_name:
+    type: string
+    label: MMSC load balancer1 instance name
+    description: MMSC load balancer1 instance name
+  lb2_name:
+    type: string
+    label: MMSC load balancer2 instance name
+    description: MMSC load balancer2 instance name
+  availabilityzone_name:
+    type: string
+    label: MMSC availabilityzone name
+    description: MMSC availabilityzone name
+  security_group_name:
+    type: string
+    label: MMSC security group name
+    description: MMSC security group name
+  mmsc_image:
+    type: string
+    description: Image for MMSC server
+  mmsc_flavor:
+    type: string
+    description: Flavor for MMSC server
+#  mmsc_cinder_volume_size:
+#    type: number
+#    label: MMSC Cinder volume size
+#    description: the size of the MMSC Cinder volume
+  nems_fe_image:
+    type: string
+    description: Image for NEMS FE server
+  nems_fe_flavor:
+    type: string
+    description: Flavor for NEMS FE server
+  nems_be_image:
+    type: string
+    description: Image for NEMS BE server
+  nems_be_flavor:
+    type: string
+    description: Flavor for NEMS BE server
+  eca_trx_image:
+    type: string
+    description: Image for ECA TRX server
+  eca_trx_flavor:
+    type: string
+    description: Flavor for ECA TRX server
+  eca_oam_image:
+    type: string
+    description: Image for ECA OAM server
+  eca_oam_flavor:
+    type: string
+    description: Flavor for ECA OAM server
+  cmaui_name:
+    type: string
+    description: CMAUI server name
+  cmaui_image:
+    type: string
+    description: Image for CMAUI server
+  cmaui_flavor:
+    type: string
+    description: Flavor for CMAUI server  
+#  cmaui_cinder_volume_size:
+#    type: number
+#    label: CMAUI Cinder volume size
+#    description: the size of the CMAUI Cinder volume
+  mmsc1_name:
+    type: string
+    description: MMSC1 server name
+  mmsc1_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC1
+  mmsc1_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC1
+  mmsc2_name:
+    type: string
+    description: MMSC2 server name
+  mmsc2_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC2
+  mmsc2_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC2
+  mmsc3_name:
+    type: string
+    description: MMSC3 server name
+  mmsc3_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC3
+  mmsc3_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC3
+  mmsc4_name:
+    type: string
+    description: MMSC4 server name
+  mmsc4_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC4
+  mmsc4_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC4
+  mmsc5_name:
+    type: string
+    description: MMSC5 server name
+  mmsc5_oam_net_ip:
+    type: string
+    description: OAM_net IP for MMSC5
+  mmsc5_mms_traffic_net_ip:
+    type: string
+    description: mms_traffic_net IP for MMSC5
+  nems_fe1_name:
+    type: string
+    description: NEMS_FE1 server name
+  nems_fe1_node_role:
+    type: string
+    label: nems node role
+    description: nems node role
+  nems_fe1_oam_net_ip:
+    type: string
+    description: OAM_net IP for NEMS_FE1
+  nems_fe1_nems_traffic_net_ip:
+    type: string
+    description: nems_traffic_net IP for NEMS_FE1
+  nems_fe1_nems_user_web_net_ip:
+    type: string
+    description: nems_web_user_net IP for NEMS_FE1
+  nems_fe1_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_FE1
+  nems_fe1_nems_imap_net_ip:
+    type: string
+    description: nems_imap_net IP for NEMS_FE1  
+  nems_fe2_name:
+    type: string
+    description: NEMS_FE2 server name
+  nems_fe2_node_role:
+    type: string
+    label: nems node role
+    description: nems node role
+  nems_fe2_oam_net_ip:
+    type: string
+    description: OAM_net IP for NEMS_FE2
+  nems_fe2_nems_traffic_net_ip:
+    type: string
+    description: nems_traffic_net IP for NEMS_FE2
+  nems_fe2_nems_user_web_net_ip:
+    type: string
+    description: nems_web_user_net IP for NEMS_FE2
+  nems_fe2_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_FE2
+  nems_fe2_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_FE2
+  nems_fe2_nems_imap_net_ip:
+    type: string
+    description: nems_imap_net IP for NEMS_FE2  
+  nems_be1_name:
+    type: string
+    description: NEMS_BE2 server name
+  nems_be1_node_role:
+    type: string
+    label: nems node role
+    description: nems node role
+  nems_be1_oam_net_ip:
+    type: string
+    description: OAM_net IP for NEMS_BE1
+  nems_be1_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_BE1
+  nems_be1_nems_imap_net_ip:
+    type: string
+    description: nems_imap_net IP for NEMS_BE1  
+  nems_be2_name:
+    type: string
+    description: NEMS_BE2 server name
+  nems_be2_node_role:
+    type: string
+    label: nems node role
+    description: nems node role
+  nems_be2_oam_net_ip:
+    type: string
+    description: OAM_net IP for NEMS_BE2
+  nems_be2_nems_internal_net_ip:
+    type: string
+    description: nems_internal_net IP for NEMS_BE2
+  nems_be2_nems_imap_net_ip:
+    type: string
+    description: nems_imap_net IP for NEMS_BE2
+  eca_oam1_name:
+    type: string
+    description: ECA_OAM1 server name
+  eca_oam1_oam_net_ip:
+    type: string
+    description: OAM_net IP for ECA_OAM1
+  eca_oam1_eca_mgmt_net_ip:
+    type: string
+    description: eca_mgmt_net IP for ECA_OAM1
+  eca_oam2_name:
+    type: string
+    description: ECA_OAM2 server name
+  eca_oam2_oam_net_ip:
+    type: string
+    description: OAM_net IP for ECA_OAM2
+  eca_oam2_eca_mgmt_net_ip:
+    type: string
+    description: eca_mgmt_net IP for ECA_OAM2
+  eca_trx1_name:
+    type: string
+    description: ECA_TRX1 server name
+  eca_trx1_oam_net_ip:
+    type: string
+    description: OAM_net IP for ECA_TRX1
+  eca_trx1_eca_mgmt_net_ip:
+    type: string
+    description: eca_mgmt_net IP for ECA_TRX1
+  eca_trx1_eca_traffic_net_ip:
+    type: string
+    description: eca_traffic_net IP for ECA_TRX1
+  cmaui_oam_net_ip:
+    type: string
+    description: eca_mgmt_net IP for CMAUI
+
+resources:
+  mms_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: mmsc security group
+      name: {get_param: security_group_name}
+      rules: [{"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0}
+              ]
+
+  lb1_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: lb1_name}
+      image: {get_param: lb_image_name}
+      flavor: {get_param: lb_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: lb1_mgmt_port}
+        - port: {get_resource: lb1_dmz_protected_port}
+        - port: {get_resource: lb1_cor_direct_port}
+        - port: {get_resource: lb1_mms_traffic_port}
+        - port: {get_resource: lb1_nems_traffic_port}
+        - port: {get_resource: lb1_nems_user_web_port}
+        - port: {get_resource: lb1_eca_traffic_port}
+        - port: {get_resource: lb1_ha_net_port}
+
+  lb1_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: lb1_oam_net_ip}}]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_mms_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: mms_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: mms_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_dmz_protected_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: dmz_protected_net}
+      fixed_ips: [{"ip_address": {get_param: dmz_protected_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: dmz_protected_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_cor_direct_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: cor_direct_net}
+      fixed_ips: [{"ip_address": {get_param: cor_direct_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: cor_direct_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_nems_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: nems_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_nems_user_web_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_user_web_net}
+      fixed_ips: [{"ip_address": {get_param: nems_user_web_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_user_web_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb1_ha_net_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: ha_net}
+      fixed_ips: [{"ip_address": {get_param: ha_net_local_ip1}}]
+
+  lb1_eca_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: eca_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: eca_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: eca_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: lb2_name}
+      image: {get_param: lb_image_name}
+      flavor: {get_param: lb_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: lb2_mgmt_port}
+        - port: {get_resource: lb2_dmz_protected_port}
+        - port: {get_resource: lb2_cor_direct_port}
+        - port: {get_resource: lb2_mms_traffic_port}
+        - port: {get_resource: lb2_nems_traffic_port}
+        - port: {get_resource: lb2_nems_user_web_port}
+        - port: {get_resource: lb2_eca_traffic_port}
+        - port: {get_resource: lb2_ha_net_port}
+
+  lb2_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: lb2_oam_net_ip}}]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_mms_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: mms_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: mms_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_dmz_protected_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: dmz_protected_net}
+      fixed_ips: [{"ip_address": {get_param: dmz_protected_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: dmz_protected_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_cor_direct_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_param: cor_direct_net}
+      fixed_ips: [{"ip_address": {get_param: cor_direct_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: cor_direct_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_nems_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: nems_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_nems_user_web_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_user_web_net}
+      fixed_ips: [{"ip_address": {get_param: nems_user_web_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_user_web_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  lb2_ha_net_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: ha_net}
+      fixed_ips: [{"ip_address": {get_param: ha_net_local_ip2}}]
+
+  lb2_eca_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: eca_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: eca_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: eca_traffic_net_floating_ip} }]
+      security_groups: [{get_resource: mms_security_group}]
+
+  server_mmsc1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc1_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc1_port_0 }
+      - port: { get_resource: mmsc1_port_1 }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: mmsc1_oam_net_ip}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param:  mmsc1_mms_traffic_net_ip}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp} 
+      user_data_format: RAW
+#  mmsc1_volume:
+#    type: OS::Cinder::Volume
+#    properties:
+#      size: {get_param: mmsc_cinder_volume_size}
+
+#  mmsc1_volume_attachment:
+#    type: OS::Cinder::VolumeAttachment
+#    properties:
+#      volume_id: {get_resource: mmsc1_volume}
+#      instance_uuid: {get_resource: server_mmsc1}
+
+  mmsc1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc1_oam_net_ip }
+      ]
+
+  mmsc1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc1_mms_traffic_net_ip }
+      ]
+
+  server_mmsc2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc2_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc2_port_0 }
+      - port: { get_resource: mmsc2_port_1 }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: mmsc2_oam_net_ip}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param: mmsc2_mms_traffic_net_ip}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp} 
+      user_data_format: RAW
+#  mmsc2_volume:
+#    type: OS::Cinder::Volume
+#    properties:
+#      size: {get_param: mmsc_cinder_volume_size}
+
+#  mmsc2_volume_attachment:
+#    type: OS::Cinder::VolumeAttachment
+#    properties:
+#      volume_id: {get_resource: mmsc2_volume}
+#      instance_uuid: {get_resource: server_mmsc2}
+
+  mmsc2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc2_oam_net_ip }
+      ]
+
+  mmsc2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc2_mms_traffic_net_ip }
+      ]
+
+  server_mmsc3:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc3_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc3_port_0 }
+      - port: { get_resource: mmsc3_port_1 }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: mmsc3_oam_net_ip}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param:  mmsc3_mms_traffic_net_ip}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp}
+      user_data_format: RAW
+
+  mmsc3_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc3_oam_net_ip }
+      ]
+
+  mmsc3_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc3_mms_traffic_net_ip }
+      ]
+
+  server_mmsc4:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc4_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc4_port_0 }
+      - port: { get_resource: mmsc4_port_1 }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: mmsc4_oam_net_ip}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param:  mmsc4_mms_traffic_net_ip}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp}
+      user_data_format: RAW
+
+  mmsc4_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc4_oam_net_ip }
+      ]
+
+  mmsc4_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc4_mms_traffic_net_ip }
+      ]
+
+  server_mmsc5:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: mmsc5_name }
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc5_port_0 }
+      - port: { get_resource: mmsc5_port_1 }
+
+  mmsc5_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc5_oam_net_ip }
+      ]
+
+  mmsc5_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: mms_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: mmsc5_mms_traffic_net_ip }
+      ]
+
+  server_nems_fe1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_fe1_name }
+      image: { get_param: nems_fe_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: nems_fe_flavor }
+      networks:
+      - port: { get_resource: nems_fe1_port_0 }
+      - port: { get_resource: nems_fe1_port_1 }
+      - port: { get_resource: nems_fe1_port_2 }
+      - port: { get_resource: nems_fe1_port_3 }
+      - port: { get_resource: nems_fe1_port_4 }
+      user_data:
+        str_replace:
+          template: |
+            nems.mgmt.ip=${nems.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.traffic.ip=${nems.traffic.ip}
+            nems.traffic.netmask=${nems.traffic.netmask}
+            nems.traffic.gateway=${nems.traffic.gateway}
+            nems.fe0.internal.ip=${nems.fe0.internal.ip}
+            nems.fe1.internal.ip=${nems.fe1.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.internal.gateway=${nems.internal.gateway}
+            nems.userweb.ip=${nems.userweb.ip}
+            nems.userweb.netmask=${nems.userweb.netmask}
+            nems.userweb.gateway=${nems.userweb.gateway}
+            nems.imap.ip=${nems.imap.ip}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.imap.gateway=${nems.imap.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+          params:
+            ${nems.mgmt.ip}: {get_param: nems_fe1_oam_net_ip}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.traffic.ip}: {get_param: nems_fe1_nems_traffic_net_ip}
+            ${nems.traffic.netmask}: {get_param: nems_traffic_netmask}
+            ${nems.traffic.gateway}: {get_param: nems_traffic_gateway}
+            ${nems.fe0.internal.ip}: {get_param: nems_fe1_nems_internal_net_ip}
+            ${nems.fe1.internal.ip}: {get_param: nems_fe2_nems_internal_net_ip}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.internal.gateway}: {get_param: nems_internal_gateway}
+            ${nems.userweb.ip}: {get_param: nems_fe1_nems_user_web_net_ip}
+            ${nems.userweb.netmask}: {get_param: nems_user_web_netmask}
+            ${nems.userweb.gateway}: {get_param: nems_user_web_gateway}
+            ${nems.imap.ip}: {get_param: nems_fe1_nems_imap_net_ip}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.imap.gateway}: {get_param: nems_imap_gateway}  
+            ${nems.be.internal.ip}: {get_param: nems_be1_nems_internal_net_ip}
+            ${nems.be.imap.ip}: {get_param: nems_be1_nems_imap_net_ip}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_fe1_node_role} 
+      user_data_format: RAW
+
+  nems_fe1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_oam_net_ip }
+      ]
+
+  nems_fe_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: {get_param: oam_net_name}
+      port_id: {get_resource: nems_fe1_port_0}
+
+  nems_fe1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_nems_traffic_net_ip }
+      ]
+
+  nems_fe1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_user_web_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_nems_user_web_net_ip }
+      ]
+
+  nems_fe1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_nems_internal_net_ip }
+      ]
+
+  nems_fe1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe1_nems_imap_net_ip }
+      ]
+
+  server_nems_fe2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_fe2_name }
+      image: { get_param: nems_fe_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: nems_fe_flavor }
+      networks:
+      - port: { get_resource: nems_fe2_port_0 }
+      - port: { get_resource: nems_fe2_port_1 }
+      - port: { get_resource: nems_fe2_port_2 }
+      - port: { get_resource: nems_fe2_port_3 }
+      - port: { get_resource: nems_fe2_port_4 }
+      user_data:
+        str_replace:
+          template: |
+            nems.mgmt.ip=${nems.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.traffic.ip=${nems.traffic.ip}
+            nems.traffic.netmask=${nems.traffic.netmask}
+            nems.traffic.gateway=${nems.traffic.gateway}
+            nems.fe0.internal.ip=${nems.fe0.internal.ip}
+            nems.fe1.internal.ip=${nems.fe1.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.internal.gateway=${nems.internal.gateway}
+            nems.userweb.ip=${nems.userweb.ip}
+            nems.userweb.netmask=${nems.userweb.netmask}
+            nems.userweb.gateway=${nems.userweb.gateway}
+            nems.imap.ip=${nems.imap.ip}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.imap.gateway=${nems.imap.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+          params:
+            ${nems.mgmt.ip}: {get_param: nems_fe2_oam_net_ip}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.traffic.ip}: {get_param: nems_fe2_nems_traffic_net_ip}
+            ${nems.traffic.netmask}: {get_param: nems_traffic_netmask}
+            ${nems.traffic.gateway}: {get_param: nems_traffic_gateway}
+            ${nems.fe0.internal.ip}: {get_param: nems_fe1_nems_internal_net_ip}
+            ${nems.fe1.internal.ip}: {get_param: nems_fe2_nems_internal_net_ip}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.internal.gateway}: {get_param: nems_internal_gateway}
+            ${nems.userweb.ip}: {get_param: nems_fe2_nems_user_web_net_ip}
+            ${nems.userweb.netmask}: {get_param: nems_user_web_netmask}
+            ${nems.userweb.gateway}: {get_param: nems_user_web_gateway}
+            ${nems.imap.ip}: {get_param: nems_fe2_nems_imap_net_ip}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.imap.gateway}: {get_param: nems_imap_gateway}
+            ${nems.be.internal.ip}: {get_param: nems_be2_nems_internal_net_ip}
+            ${nems.be.imap.ip}: {get_param: nems_be2_nems_imap_net_ip}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_fe2_node_role}
+      user_data_format: RAW
+
+  nems_fe2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_oam_net_ip }
+      ]
+
+  nems_fe_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: {get_param: oam_net_name}
+      port_id: {get_resource: nems_fe2_port_0}
+
+  nems_fe2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_nems_traffic_net_ip }
+      ]
+
+  nems_fe2_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_user_web_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_nems_user_web_net_ip }
+      ]
+
+  nems_fe2_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_nems_internal_net_ip }
+      ]
+
+  nems_fe2_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_fe2_nems_imap_net_ip }
+      ]
+
+  server_nems_be1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_be1_name }
+      image: { get_param: nems_be_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: nems_be_flavor }
+      networks:
+      - port: { get_resource: nems_be1_port_0 }
+      - port: { get_resource: nems_be1_port_1 }
+      - port: { get_resource: nems_be1_port_2 }
+      user_data:
+        str_replace:
+          template: |
+            nems.be.mgmt.ip=${nems.be.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.internal.gateway=${nems.internal.gateway}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.imap.gateway=${nems.imap.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+          params:
+            ${nems.be.mgmt.ip}: {get_param: nems_be1_oam_net_ip}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.be.internal.ip}: {get_param: nems_be1_nems_internal_net_ip}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.internal.gateway}: {get_param: nems_internal_gateway}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.imap.gateway}: {get_param: nems_imap_gateway}  
+            ${nems.be.imap.ip}: {get_param: nems_be1_nems_imap_net_ip}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_be1_node_role} 
+      user_data_format: RAW
+
+  nems_be1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be1_oam_net_ip }
+      ]
+
+  nems_be_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: {get_param: oam_net_name}
+      port_id: {get_resource: nems_be1_port_0}
+
+  nems_be1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be1_nems_internal_net_ip }
+      ]
+
+  nems_be1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be1_nems_imap_net_ip }
+      ]
+
+  server_nems_be2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_be2_name }
+      image: { get_param: nems_be_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: nems_be_flavor }
+      networks:
+      - port: { get_resource: nems_be2_port_0 }
+      - port: { get_resource: nems_be2_port_1 }
+      - port: { get_resource: nems_be2_port_2 }
+      user_data:
+        str_replace:
+          template: |
+            nems.be.mgmt.ip=${nems.be.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.internal.gateway=${nems.internal.gateway}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.imap.gateway=${nems.imap.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+          params:
+            ${nems.be.mgmt.ip}: {get_param: nems_be2_oam_net_ip}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.be.internal.ip}: {get_param: nems_be2_nems_internal_net_ip}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.internal.gateway}: {get_param: nems_internal_gateway}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.imap.gateway}: {get_param: nems_imap_gateway}
+            ${nems.be.imap.ip}: {get_param: nems_be2_nems_imap_net_ip}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_be1_node_role}
+      user_data_format: RAW
+
+  nems_be2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be2_oam_net_ip }
+      ]
+
+  nems_be_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: {get_param: oam_net_name}
+      port_id: {get_resource: nems_be2_port_0}
+
+  nems_be2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be2_nems_internal_net_ip }
+      ]
+
+  nems_be2_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be2_nems_imap_net_ip }
+      ]
+
+  server_eca_oam1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: eca_oam1_name }
+      image: { get_param: eca_oam_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: eca_oam_flavor }
+      networks:
+      - port: { get_resource: eca_oam1_port_0 }
+      - port: { get_resource: eca_oam1_port_1 }
+
+  eca_oam1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: eca_oam1_oam_net_ip }
+      ]
+
+  eca_oam1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_mgmt_net }
+      fixed_ips: [
+        "ip_address": { get_param: eca_oam1_eca_mgmt_net_ip }
+      ]
+
+  server_eca_oam2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: eca_oam2_name }
+      image: { get_param: eca_oam_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: eca_oam_flavor }
+      networks:
+      - port: { get_resource: eca_oam2_port_0 }
+      - port: { get_resource: eca_oam2_port_1 }
+
+  eca_oam2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: eca_oam2_oam_net_ip }
+      ]
+
+  eca_oam2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_mgmt_net }
+      fixed_ips: [
+        "ip_address": { get_param: eca_oam2_eca_mgmt_net_ip }
+      ]
+
+  server_eca_trx1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: eca_trx1_name }
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx1_port_0 }
+      - port: { get_resource: eca_trx1_port_1 }
+      - port: { get_resource: eca_trx1_port_2 }
+
+
+  eca_trx1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: eca_trx1_oam_net_ip }
+      ]
+
+  eca_trx1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_mgmt_net }
+      fixed_ips: [
+        "ip_address": { get_param: eca_trx1_eca_mgmt_net_ip }
+      ]
+
+  eca_trx1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: eca_trx1_eca_traffic_net_ip }
+      ]
+
+  server_cmaui:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: cmaui_name }
+      image: { get_param: cmaui_image }
+      availability_zone: { get_param: availabilityzone_name }
+      flavor: { get_param: cmaui_flavor }
+      networks:
+      - port: { get_resource: cmaui_port_0 }
+
+#  cmaui_volume:
+#    type: OS::Cinder::Volume
+#    properties:
+#      size: {get_param: cmaui_cinder_volume_size}
+
+#  cmaui_volume_attachment:
+#    type: OS::Cinder::VolumeAttachment
+#    properties:
+#      volume_id: {get_resource: cmaui_volume}
+#      instance_uuid: {get_resource: server_cmaui}
+
+  cmaui_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: cmaui_oam_net_ip }
+      ]
+