1 # Heat template which intstantiates a 1+1 HA Perimeta instance with 4 or 5
4 # This is designed to be included in a higher level template.
6 # This template puts the Perimeta configuration in place using userdata
7 # injected via OpenStack's ConfigDrive mechanism.
9 # Host anti-affinity is achieved using different availability zones for
10 # the Perimeta instance or server group anti-affinity if they are in the
11 # same availability zone.
13 # Template requires Juno or above and has been tested on Kilo.
15 heat_template_version: 2014-10-16
18 HOT template to instantiate a Perimeta 1+1 HA instance with 4vNICs as part of a nested template
23 description: VNF ID of this deployment
26 description: Role of these VMs
29 description: Unique ID for this VF Module instance
31 type: comma_delimited_list
32 description: List of system names of Perimeta instances. Name of a specific instance is indexed by perimeta_instance_index
34 type: comma_delimited_list
35 description: List of names of Perimeta VM A instances, indexed by perimeta_instance_index
37 type: comma_delimited_list
38 description: List of names of Perimeta VM A instances, indexed by perimeta_instance_index
39 perimeta_instance_index:
41 description: Index of instance among multiple instances. Use to retrieve correct parameter for this instance when passed all parameters for all instances.
44 description: Glance image for Perimeta instance
46 - custom_constraint: glance.image
49 description: Flavor to use for creating VM instances
51 - custom_constraint: nova.flavor
54 description: Keypair to use for accessing this Perimeta instance
56 - custom_constraint: nova.keypair
58 # Can be commented out along with references if always using a single availability zone
60 description: Availability zone for A instances.
62 # Can be commented out along with references if always using a single availability zone
64 description: Availability zone for B instances. May be the same as A instance.
67 description: Management network id
69 - custom_constraint: neutron.network
72 description: Prefix length of management network
73 mgmt_net_default_gateway:
75 description: IP address of management default gateway
77 type: comma_delimited_list
78 description: List of management virtual IP addresses for all instances.
80 type: comma_delimited_list
81 description: List of fixed IP addresses to use as management IPs of A instances.
83 type: comma_delimited_list
84 description: List of fixed IP addresses to use as management IPs of B instances.
86 type: comma_delimited_list
87 description: List of security groups to add on management interfaces.
90 description: HA network id
92 - custom_constraint: neutron.network
96 - range: { min: 0, max: 32 }
97 description: ha_network_plen must be between 0 and 32
99 type: comma_delimited_list
100 description: List of fixed IP addresses to use as HA IPs of A instances.
102 type: comma_delimited_list
103 description: List of fixed IP addresses to use as HA IPs of B instances.
105 type: comma_delimited_list
106 description: List of security groups to add on HA interfaces.
109 description: Service network 1 network UUID
111 - custom_constraint: neutron.network
113 type: comma_delimited_list
114 description: List of service network 1 virtual IP addresses for all instances.
116 type: comma_delimited_list
117 description: List of fixed IP addresses to use as trusted fixed IPs of A instances.
119 type: comma_delimited_list
120 description: List of fixed IP addresses to use as trusted fixed IPs of B instances.
122 type: comma_delimited_list
123 description: List of security groups to add on trusted interfaces.
126 description: Service network 2 network UUID
128 - custom_constraint: neutron.network
130 type: comma_delimited_list
131 description: List of service network 2 virtual IP addresses for all instances.
133 type: comma_delimited_list
134 description: List of service network 2 alternate virtual IP addresses for all instances.
136 type: comma_delimited_list
137 description: List of fixed IP addresses to use as untrusted fixed IPs of A instances.
139 type: comma_delimited_list
140 description: List of fixed IP addresses to use as untrusted alternate fixed IPs of A instances.
142 type: comma_delimited_list
143 description: List of fixed IP addresses to use as untrusted fixed IPs of B instances.
145 type: comma_delimited_list
146 description: List of fixed IP addresses to use as untrusted alternate fixed IPs of B instances.
147 untrusted_sec_groups:
148 type: comma_delimited_list
149 description: List of security groups to add on untrusted interfaces.
152 description: Number of VLANs to connect to on the untrusted/access network
154 type: comma_delimited_list
155 description: List of VLAN IDs to use on the untrusted/access network
156 untrusted_vlan_networks:
157 type: comma_delimited_list
158 description: List of Contrail VLAN networks to use on the untrusted/access network. The order and number of these must match the VLAN ID list.
159 perimeta_param_server_group:
161 description: Server group to use for these VMs - ignored
164 description: Orchestration template configuration for instance.
168 # Perimeta management ports
169 perimeta_a_mgmt_0_port:
170 type: OS::Neutron::Port
174 template: $VM_mgmt_port
176 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
177 network_id: { get_param: mgmt_net_id }
179 - ip_address: { get_param: [ mgmt_a_ips, { get_param: perimeta_instance_index } ] }
180 security_groups: { get_param: mgmt_sec_groups }
181 allowed_address_pairs:
182 - ip_address: { get_param: [ mgmt_vips, { get_param: perimeta_instance_index } ] }
184 perimeta_b_mgmt_0_port:
185 type: OS::Neutron::Port
189 template: $VM_mgmt_port
191 $VM: { get_param: [ vm_b_names, { get_param: perimeta_instance_index } ] }
192 network_id: { get_param: mgmt_net_id }
194 - ip_address: { get_param: [ mgmt_b_ips, { get_param: perimeta_instance_index } ] }
195 security_groups: { get_param: mgmt_sec_groups }
196 allowed_address_pairs:
197 - ip_address: { get_param: [ mgmt_vips, { get_param: perimeta_instance_index } ] }
200 perimeta_a_ha_0_port:
201 type: OS::Neutron::Port
205 template: $VM_ha_port
207 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
208 network_id: { get_param: ha_net_id }
210 - ip_address: { get_param: [ ha_a_ips, { get_param: perimeta_instance_index } ] }
211 security_groups: { get_param: ha_sec_groups }
213 perimeta_b_ha_0_port:
214 type: OS::Neutron::Port
218 template: $VM_ha_port
220 $VM: { get_param: [ vm_b_names, { get_param: perimeta_instance_index } ] }
221 network_id: { get_param: ha_net_id }
223 - ip_address: { get_param: [ ha_b_ips, { get_param: perimeta_instance_index } ] }
224 security_groups: { get_param: ha_sec_groups }
226 # Perimeta core/trusted service network ports
228 # Dual stack core network - if only IPv4 required, comment out second entry
229 # in fixed_ips and allowed_addrsess_pairs parameters.
230 perimeta_a_trusted_0_port:
231 type: OS::Neutron::Port
235 template: $VM_trusted_port
237 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
238 network_id: { get_param: trusted_net_id }
240 - ip_address: { get_param: [ trusted_a_ips, { get_param: perimeta_instance_index } ] }
241 security_groups: { get_param: trusted_sec_groups }
242 allowed_address_pairs:
243 - ip_address: { get_param: [ trusted_vips, { get_param: perimeta_instance_index } ] }
245 perimeta_b_trusted_0_port:
246 type: OS::Neutron::Port
250 template: $VM_trusted_port
252 $VM: { get_param: [ vm_b_names, { get_param: perimeta_instance_index } ] }
253 network_id: { get_param: trusted_net_id }
255 - ip_address: { get_param: [ trusted_b_ips, { get_param: perimeta_instance_index } ] }
256 security_groups: { get_param: trusted_sec_groups }
257 allowed_address_pairs:
258 - ip_address: { get_param: [ trusted_vips, { get_param: perimeta_instance_index } ] }
260 # Perimeta access/untrusted service network ports
262 # Dual stack access network - if only IPv4 required, comment out second entry
263 # in fixed_ips and allowed_addrsess_pairs parameters.
264 perimeta_a_untrusted_0_port:
265 type: OS::Neutron::Port
269 template: $VM_untrusted_port
271 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
272 network_id: { get_param: untrusted_net_id }
274 - ip_address: { get_param: [ untrusted_a_ips, { get_param: perimeta_instance_index } ] }
275 - ip_address: { get_param: [ untrusted_a_v6_ips, { get_param: perimeta_instance_index } ] }
276 security_groups: { get_param: untrusted_sec_groups }
277 allowed_address_pairs:
278 - ip_address: { get_param: [ untrusted_vips, { get_param: perimeta_instance_index } ] }
279 - ip_address: { get_param: [ untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
281 # Contrail VLAN subinterfaces
282 perimeta_a_untrusted_0_vlan_ports:
283 type: OS::Heat::ResourceGroup
285 count: { get_param: untrusted_num_vlans }
287 type: vlan_subinterface_dual.yaml
289 subinterface_instance_index: "%index%"
290 subinterface_name_prefix:
292 template: $VM_untrusted_port_vlan_
294 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
295 parent_interface: { get_resource: perimeta_a_untrusted_0_port }
296 mac_address: { get_attr: [ perimeta_a_untrusted_0_port, mac_address ] }
297 ip_address: { get_param: [ untrusted_a_ips, { get_param: perimeta_instance_index } ] }
298 ipv6_address: { get_param: [ untrusted_a_v6_ips, { get_param: perimeta_instance_index } ] }
299 virtual_ip_address: { get_param: [ untrusted_vips, { get_param: perimeta_instance_index } ] }
300 virtual_ipv6_address: { get_param: [ untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
301 vlan_ids: { get_param: untrusted_vlan_ids }
302 vlan_networks: { get_param: untrusted_vlan_networks }
304 perimeta_b_untrusted_0_port:
305 type: OS::Neutron::Port
309 template: $VM_untrusted_port
311 $VM: { get_param: [ vm_b_names, { get_param: perimeta_instance_index } ] }
312 network_id: { get_param: untrusted_net_id }
314 - ip_address: { get_param: [ untrusted_b_ips, { get_param: perimeta_instance_index } ] }
315 - ip_address: { get_param: [ untrusted_b_v6_ips, { get_param: perimeta_instance_index } ] }
316 security_groups: { get_param: untrusted_sec_groups }
317 allowed_address_pairs:
318 - ip_address: { get_param: [ untrusted_vips, { get_param: perimeta_instance_index } ] }
319 - ip_address: { get_param: [ untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
321 # Contrail VLAN subinterfaces
322 perimeta_b_untrusted_0_vlan_ports:
323 type: OS::Heat::ResourceGroup
325 count: { get_param: untrusted_num_vlans }
327 type: vlan_subinterface_dual.yaml
329 subinterface_instance_index: "%index%"
330 subinterface_name_prefix:
332 template: $VM_untrusted_port_vlan_
334 $VM: { get_param: [ vm_b_names, { get_param: perimeta_instance_index } ] }
335 parent_interface: { get_resource: perimeta_b_untrusted_0_port }
336 mac_address: { get_attr: [ perimeta_b_untrusted_0_port, mac_address ] }
337 ip_address: { get_param: [ untrusted_b_ips, { get_param: perimeta_instance_index } ] }
338 ipv6_address: { get_param: [ untrusted_b_v6_ips, { get_param: perimeta_instance_index } ] }
339 virtual_ip_address: { get_param: [ untrusted_vips, { get_param: perimeta_instance_index } ] }
340 virtual_ipv6_address: { get_param: [ untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
341 vlan_ids: { get_param: untrusted_vlan_ids }
342 vlan_networks: { get_param: untrusted_vlan_networks }
344 # Perimeta Rf service network ports (SSC only)
346 # Dual stack access network - if only IPv4 required, comment out second entry
347 # in fixed_ips and allowed_addrsess_pairs parameters.
348 # Add any additional service ports here.
350 # Only supported in Juno and beyond - used to enforce host anti-affinity
351 # Can be commented out along with references to it if always using
352 # different availability zones.
353 perimeta_server_group:
354 type: OS::Nova::ServerGroup
358 template: $SYSTEM_server_group
360 $SYSTEM: { get_param: [ system_names, { get_param: perimeta_instance_index } ] }
361 policies: ['anti-affinity']
364 type: OS::Nova::Server
365 depends_on: perimeta_b_server_0
367 name: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
368 image: { get_param: perimeta_image_name }
369 flavor: { get_param: perimeta_flavor_name }
370 key_name: { get_param: perimeta_keypair }
371 scheduler_hints: { group: { get_resource: perimeta_server_group } }
373 'vnf_id': { get_param: vnf_id }
378 $ROLE: { get_param: vm_role }
379 'vf_module_id': { get_param: vf_module_id }
381 '/opt/MetaSwitch/init/custom.ini': { get_file: custom.ini }
384 - port: { get_resource: perimeta_a_mgmt_0_port }
385 - port: { get_resource: perimeta_a_ha_0_port }
386 - port: { get_resource: perimeta_a_trusted_0_port }
387 - port: { get_resource: perimeta_a_untrusted_0_port }
388 availability_zone: { get_param: availability_zone_0 }
390 user_data_format: RAW
393 template: { get_param: perimeta_config }
395 $MGMT_MACADDR: { get_attr: [perimeta_a_mgmt_0_port, mac_address] }
396 $HA_MACADDR: { get_attr: [perimeta_a_ha_0_port, mac_address] }
397 $TRUSTED_MACADDR: { get_attr: [perimeta_a_trusted_0_port, mac_address] }
398 $UNTRUSTED_MACADDR: { get_attr: [perimeta_a_untrusted_0_port, mac_address] }
399 $LOCAL_HA_IP_ADDR: { get_param: [ ha_a_ips, { get_param: perimeta_instance_index } ] }
400 $REMOTE_HA_IP_ADDR: { get_param: [ ha_b_ips, { get_param: perimeta_instance_index } ] }
401 $HA_NETWORK_PLEN: { get_param: ha_network_plen }
402 $LOCAL_MGMT_IP_ADDR: { get_param: [ mgmt_a_ips, { get_param: perimeta_instance_index } ] }
403 $REMOTE_MGMT_IP_ADDR: { get_param: [ mgmt_b_ips, { get_param: perimeta_instance_index } ] }
404 $MGMT_NETWORK_PLEN: { get_param: mgmt_net_plen }
405 $MGMT_NETWORK_DEFAULT_GATEWAY: { get_param: mgmt_net_default_gateway }
406 $VIRT_MGMT_IP_ADDR: { get_param: [ mgmt_vips, { get_param: perimeta_instance_index } ] }
407 $VIRT_TRUSTED_IP_ADDR: { get_param: [ trusted_vips, { get_param: perimeta_instance_index } ] }
408 $LOCAL_TRUSTED_IP_ADDR: { get_param: [ trusted_a_ips, { get_param: perimeta_instance_index } ] }
409 $REMOTE_TRUSTED_IP_ADDR: { get_param: [ trusted_b_ips, { get_param: perimeta_instance_index } ] }
410 $VIRT_UNTRUSTED_IP_ADDR: { get_param: [ untrusted_vips, { get_param: perimeta_instance_index } ] }
411 $VIRT_UNTRUSTED_ALT_IP_ADDR: { get_param: [ untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
412 $LOCAL_UNTRUSTED_IP_ADDR: { get_param: [ untrusted_a_ips, { get_param: perimeta_instance_index } ] }
413 $LOCAL_UNTRUSTED_ALT_IP_ADDR: { get_param: [ untrusted_a_v6_ips, { get_param: perimeta_instance_index } ] }
414 $REMOTE_UNTRUSTED_IP_ADDR: { get_param: [ untrusted_b_ips, { get_param: perimeta_instance_index } ] }
415 $REMOTE_UNTRUSTED_ALT_IP_ADDR: { get_param: [ untrusted_b_v6_ips, { get_param: perimeta_instance_index } ] }
416 $VM_NAME_A: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
417 $VM_NAME_B: { get_param: [ vm_b_names, { get_param: perimeta_instance_index } ] }
418 $SYSTEM_NAME: { get_param: [ system_names, { get_param: perimeta_instance_index } ] }
421 type: OS::Nova::Server
423 name: { get_param: [ vm_b_names, { get_param: perimeta_instance_index } ] }
424 image: { get_param: perimeta_image_name }
425 flavor: { get_param: perimeta_flavor_name }
426 key_name: { get_param: perimeta_keypair }
427 scheduler_hints: { group: { get_resource: perimeta_server_group } }
429 'vnf_id': { get_param: vnf_id }
434 $ROLE: { get_param: vm_role }
435 'vf_module_id': { get_param: vf_module_id }
437 - port: { get_resource: perimeta_b_mgmt_0_port }
438 - port: { get_resource: perimeta_b_ha_0_port }
439 - port: { get_resource: perimeta_b_trusted_0_port }
440 - port: { get_resource: perimeta_b_untrusted_0_port }
441 availability_zone: { get_param: availability_zone_1 }
443 user_data_format: RAW
449 "IBG1mgmt": {"mac": "$MGMT_MACADDR"},
450 "IPG1": {"mac": "$HA_MACADDR"},
451 "RPG1": {"mac": "$TRUSTED_MACADDR"},
452 "RPG2": {"mac": "$UNTRUSTED_MACADDR"}
454 "ip_ha_local": "$LOCAL_HA_IP_ADDR",
455 "ip_ha_remote": "$REMOTE_HA_IP_ADDR",
456 "ip_ha_plen": "$HA_NETWORK_PLEN"
457 //"ip_mgmt_local": "$LOCAL_MGMT_IP_ADDR",
458 //"ip_mgmt_remote": "$REMOTE_MGMT_IP_ADDR",
459 //"ip_mgmt_plen": "$MGMT_NETWORK_PLEN",
460 //"ip_mgmt_gway": "$MGMT_NETWORK_DEFAULT_GATEWAY"
464 $MGMT_MACADDR: { get_attr: [perimeta_b_mgmt_0_port, mac_address] }
465 $HA_MACADDR: { get_attr: [perimeta_b_ha_0_port, mac_address] }
466 $TRUSTED_MACADDR: { get_attr: [perimeta_b_trusted_0_port, mac_address] }
467 $UNTRUSTED_MACADDR: { get_attr: [perimeta_b_untrusted_0_port, mac_address] }
468 $LOCAL_HA_IP_ADDR: { get_param: [ ha_b_ips, { get_param: perimeta_instance_index } ] }
469 $REMOTE_HA_IP_ADDR: { get_param: [ ha_a_ips, { get_param: perimeta_instance_index } ] }
470 $HA_NETWORK_PLEN: { get_param: ha_network_plen }
471 $LOCAL_MGMT_IP_ADDR: { get_param: [ mgmt_b_ips, { get_param: perimeta_instance_index } ] }
472 $REMOTE_MGMT_IP_ADDR: { get_param: [ mgmt_a_ips, { get_param: perimeta_instance_index } ] }
473 $MGMT_NETWORK_PLEN: { get_param: mgmt_net_plen }
474 $MGMT_NETWORK_DEFAULT_GATEWAY: { get_param: mgmt_net_default_gateway }
479 description: Server group used for these VMs
480 value: { get_resource: perimeta_server_group }