heat_template_version: 2014-10-16 description: > HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs parameters: subinterface_instance_index: type: number description: Index of instance among multiple instances. Use to retrieve correct parameter for this instance when passed all parameters for all instances. subinterface_name_prefix: type: string description: Combined with subinterface_instance_index, this is used as the name of the subinterface resource parent_interface: type: string description: Parent Contrail interface mac_address: type: string description: MAC address to use for subinterface ip_address: type: string description: IPv4 address associated with subinterfaces ipv6_address: type: string description: IPv6 address associated with subinterfaces virtual_ip_address: type: string description: virtual IPv4 address associated with subinterfaces virtual_ipv6_address: type: string description: virtual IPv6 address associated with subinterfaces vlan_ids: type: comma_delimited_list description: List of VLAN IDs to use for subinterfaces vlan_networks: type: comma_delimited_list description: List of Contrail VLAN networks to use for the subinterfaces. The order and number of these must match the VLAN ID list resources: contrail_vmi_subinterface: type: OS::ContrailV2::VirtualMachineInterface properties: name: str_replace: template: $NAME$VLAN params: $NAME: { get_param: subinterface_name_prefix } $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } virtual_machine_interface_properties: { virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } } virtual_machine_interface_mac_addresses: { virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], } virtual_machine_interface_allowed_address_pairs: { virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ { virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: { virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 } }, { virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: { virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 } } ] } virtual_network_refs: [{ get_param: [ vlan_networks, { get_param: subinterface_instance_index } ] }] virtual_machine_interface_refs: [{ get_param: parent_interface }] contrail_vmi_ip: type: OS::ContrailV2::InstanceIp depends_on: [ contrail_vmi_subinterface ] properties: virtual_machine_interface_refs: [{ get_resource: contrail_vmi_subinterface }] virtual_network_refs: [{ get_param: [ vlan_networks, { get_param: subinterface_instance_index } ] }] instance_ip_address: { get_param: ip_address } instance_ip_family: v4 contrail_vmi_ipv6: type: OS::ContrailV2::InstanceIp depends_on: [ contrail_vmi_subinterface ] properties: virtual_machine_interface_refs: [{ get_resource: contrail_vmi_subinterface }] virtual_network_refs: [{ get_param: [ vlan_networks, { get_param: subinterface_instance_index } ] }] instance_ip_address: { get_param: ipv6_address } instance_ip_family: v6