heat_template_version: pike

parameters:
  ControlPlaneIp:
    default: ''
    description: IP address/subnet on the ctlplane network
    type: string
  ExternalIpSubnet:
    default: ''
    description: IP address/subnet on the external network
    type: string
  InternalApiIpSubnet:
    default: ''
    description: IP address/subnet on the internal_api network
    type: string
  StorageIpSubnet:
    default: ''
    description: IP address/subnet on the storage network
    type: string
  StorageMgmtIpSubnet:
    default: ''
    description: IP address/subnet on the storage_mgmt network
    type: string
  TenantIpSubnet:
    default: ''
    description: IP address/subnet on the tenant network
    type: string
  ManagementIpSubnet: # Only populated when including environments/network-management.yaml
    default: ''
    description: IP address/subnet on the management network
    type: string
  BondInterfaceOvsOptions:
    default: 'bond_mode=active-backup'
    description: The ovs_options string for the bond interface. Set things like
                 lacp=active and/or bond_mode=balance-slb using this option.
    type: string
  ExternalNetworkVlanID:
    default: 10
    description: Vlan ID for the external network traffic.
    type: number
  InternalApiNetworkVlanID:
    default: 20
    description: Vlan ID for the internal_api network traffic.
    type: number
  StorageNetworkVlanID:
    default: 30
    description: Vlan ID for the storage network traffic.
    type: number
  StorageMgmtNetworkVlanID:
    default: 40
    description: Vlan ID for the storage mgmt network traffic.
    type: number
  TenantNetworkVlanID:
    default: 50
    description: Vlan ID for the tenant network traffic.
    type: number
  ManagementNetworkVlanID:
    default: 60
    description: Vlan ID for the management network traffic.
    type: number
  ExternalInterfaceDefaultRoute:
    default: '10.0.0.1'
    description: default route for the external network
    type: string
  ControlPlaneSubnetCidr: # Override this via parameter_defaults
    default: '24'
    description: The subnet CIDR of the control plane network.
    type: string
  ControlPlaneDefaultRoute: # Override this via parameter_defaults
    description: The default route of the control plane network.
    type: string
  DnsServers: # Override this via parameter_defaults
    default: []
    description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
    type: comma_delimited_list
  EC2MetadataIp: # Override this via parameter_defaults
    description: The IP address of the EC2 metadata server.
    type: string

resources:
  OsNetConfigImpl:
    properties:
      config:
        os_net_config:
          network_config:
          - type: interface
            name: nic1
            mtu: 1350
            use_dhcp: false
            addresses:
            - ip_netmask:
                list_join:
                - /
                - - {get_param: ControlPlaneIp}
                  - {get_param: ControlPlaneSubnetCidr}
            routes:
            - ip_netmask: 169.254.169.254/32
              next_hop: {get_param: EC2MetadataIp}
          - type: ovs_bridge
            name: br-ex
            dns_servers: {get_param: DnsServers}
            use_dhcp: false
            addresses:
            - ip_netmask: {get_param: ExternalIpSubnet}
            routes:
            - ip_netmask: 0.0.0.0/0
              next_hop: {get_param: ExternalInterfaceDefaultRoute}
            members:
            - type: interface
              name: nic2
              mtu: 1350
              primary: true
          - type: interface
            name: nic3
            mtu: 1350
            use_dhcp: false
            addresses:
            - ip_netmask: {get_param: InternalApiIpSubnet}
          - type: interface
            name: nic4
            mtu: 1350
            use_dhcp: false
            addresses:
            - ip_netmask: {get_param: StorageIpSubnet}
          - type: interface
            name: nic5
            mtu: 1350
            use_dhcp: false
            addresses:
            - ip_netmask: {get_param: StorageMgmtIpSubnet}
          - type: ovs_bridge
            name: br-tenant
            dns_servers: {get_param: DnsServers}
            use_dhcp: false
            addresses:
            - ip_netmask: {get_param: TenantIpSubnet}
            members:
            - type: interface
              name: nic6
              mtu: 1350
              primary: true
      group: os-apply-config
    type: OS::Heat::StructuredConfig

outputs:
  OS::stack_id:
    description: The OsNetConfigImpl resource.
    value: {get_resource: OsNetConfigImpl}
