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 } ] }
185 perimeta_a_ha_0_port:
186 type: OS::Neutron::Port
190 template: $VM_ha_port
192 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
193 network_id: { get_param: ha_net_id }
195 - ip_address: { get_param: [ ha_a_ips, { get_param: perimeta_instance_index } ] }
196 security_groups: { get_param: ha_sec_groups }
198 # Perimeta core/trusted service network ports
200 # Dual stack core network - if only IPv4 required, comment out second entry
201 # in fixed_ips and allowed_addrsess_pairs parameters.
202 perimeta_a_trusted_0_port:
203 type: OS::Neutron::Port
207 template: $VM_trusted_port
209 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
210 network_id: { get_param: trusted_net_id }
212 - ip_address: { get_param: [ trusted_a_ips, { get_param: perimeta_instance_index } ] }
213 security_groups: { get_param: trusted_sec_groups }
214 allowed_address_pairs:
215 - ip_address: { get_param: [ trusted_vips, { get_param: perimeta_instance_index } ] }
217 # Perimeta access/untrusted service network ports
219 # Dual stack access network - if only IPv4 required, comment out second entry
220 # in fixed_ips and allowed_addrsess_pairs parameters.
221 perimeta_a_untrusted_0_port:
222 type: OS::Neutron::Port
226 template: $VM_untrusted_port
228 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
229 network_id: { get_param: untrusted_net_id }
231 - ip_address: { get_param: [ untrusted_a_ips, { get_param: perimeta_instance_index } ] }
232 - ip_address: { get_param: [ untrusted_a_v6_ips, { get_param: perimeta_instance_index } ] }
233 security_groups: { get_param: untrusted_sec_groups }
234 allowed_address_pairs:
235 - ip_address: { get_param: [ untrusted_vips, { get_param: perimeta_instance_index } ] }
236 - ip_address: { get_param: [ untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
238 # Contrail VLAN subinterfaces
239 perimeta_a_untrusted_0_vlan_ports:
240 type: OS::Heat::ResourceGroup
242 count: { get_param: untrusted_num_vlans }
244 type: vlan_subinterface_dual.yaml
246 subinterface_instance_index: "%index%"
247 subinterface_name_prefix:
249 template: $VM_untrusted_port_vlan_
251 $VM: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
252 parent_interface: { get_resource: perimeta_a_untrusted_0_port }
253 mac_address: { get_attr: [ perimeta_a_untrusted_0_port, mac_address ] }
254 ip_address: { get_param: [ untrusted_a_ips, { get_param: perimeta_instance_index } ] }
255 ipv6_address: { get_param: [ untrusted_a_v6_ips, { get_param: perimeta_instance_index } ] }
256 virtual_ip_address: { get_param: [ untrusted_vips, { get_param: perimeta_instance_index } ] }
257 virtual_ipv6_address: { get_param: [ untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
258 vlan_ids: { get_param: untrusted_vlan_ids }
259 vlan_networks: { get_param: untrusted_vlan_networks }
261 # Perimeta Rf service network ports (SSC only)
263 # Dual stack access network - if only IPv4 required, comment out second entry
264 # in fixed_ips and allowed_addrsess_pairs parameters.
265 # Add any additional service ports here.
268 type: OS::Nova::Server
269 # depends_on: perimeta_b_server_0
271 name: { get_param: [ vm_a_names, { get_param: perimeta_instance_index } ] }
272 image: { get_param: perimeta_image_name }
273 flavor: { get_param: perimeta_flavor_name }
274 key_name: { get_param: perimeta_keypair }
275 scheduler_hints: { group: { get_param: perimeta_param_server_group } }
277 'vnf_id': { get_param: vnf_id }
282 $ROLE: { get_param: vm_role }
283 'vf_module_id': { get_param: vf_module_id }
285 '/opt/MetaSwitch/init/custom.ini': { get_file: custom.ini }
288 - port: { get_resource: perimeta_a_mgmt_0_port }
289 - port: { get_resource: perimeta_a_ha_0_port }
290 - port: { get_resource: perimeta_a_trusted_0_port }
291 - port: { get_resource: perimeta_a_untrusted_0_port }
292 availability_zone: { get_param: availability_zone_0 }
294 user_data_format: RAW
300 "IBG1mgmt": {"mac": "$MGMT_MACADDR"},
301 "IPG1": {"mac": "$HA_MACADDR"},
302 "RPG1": {"mac": "$TRUSTED_MACADDR"},
303 "RPG2": {"mac": "$UNTRUSTED_MACADDR"}
305 "ip_ha_local": "$LOCAL_HA_IP_ADDR",
306 "ip_ha_remote": "$REMOTE_HA_IP_ADDR",
307 "ip_ha_plen": "$HA_NETWORK_PLEN"
308 // "ip_mgmt_local": "$LOCAL_MGMT_IP_ADDR",
309 // "ip_mgmt_remote": "$REMOTE_MGMT_IP_ADDR",
310 // "ip_mgmt_plen": "$MGMT_NETWORK_PLEN",
311 // "ip_mgmt_gway": "$MGMT_NETWORK_DEFAULT_GATEWAY"
315 $MGMT_MACADDR: { get_attr: [perimeta_a_mgmt_0_port, mac_address] }
316 $HA_MACADDR: { get_attr: [perimeta_a_ha_0_port, mac_address] }
317 $TRUSTED_MACADDR: { get_attr: [perimeta_a_trusted_0_port, mac_address] }
318 $UNTRUSTED_MACADDR: { get_attr: [perimeta_a_untrusted_0_port, mac_address] }
319 $LOCAL_HA_IP_ADDR: { get_param: [ ha_a_ips, { get_param: perimeta_instance_index } ] }
320 $REMOTE_HA_IP_ADDR: { get_param: [ ha_b_ips, { get_param: perimeta_instance_index } ] }
321 $HA_NETWORK_PLEN: { get_param: ha_network_plen }
322 $LOCAL_MGMT_IP_ADDR: { get_param: [ mgmt_a_ips, { get_param: perimeta_instance_index } ] }
323 $REMOTE_MGMT_IP_ADDR: { get_param: [ mgmt_b_ips, { get_param: perimeta_instance_index } ] }
324 $MGMT_NETWORK_PLEN: { get_param: mgmt_net_plen }
325 $MGMT_NETWORK_DEFAULT_GATEWAY: { get_param: mgmt_net_default_gateway }
331 description: Server group used for these VMs
332 value: { get_param: perimeta_param_server_group }