heat_template_version: pike

description: >
  Neutron LBaaS service configured with Puppet

parameters:
  ServiceData:
    default: {}
    description: Dictionary packing service data
    type: json
  ServiceNetMap:
    default: {}
    description: Mapping of service_name -> network name. Typically set
                 via parameter_defaults in the resource registry.  This
                 mapping overrides those in ServiceNetMapDefaults.
    type: json
  DefaultPasswords:
    default: {}
    type: json
  RoleName:
    default: ''
    description: Role name on which the service is applied
    type: string
  RoleParameters:
    default: {}
    description: Parameters specific to the role
    type: json
  EndpointMap:
    default: {}
    description: Mapping of service endpoint -> protocol. Typically set
                 via parameter_defaults in the resource registry.
    type: json
  NeutronLbaasInterfaceDriver:
    default: 'neutron.agent.linux.interface.OVSInterfaceDriver'
    type: string
  NeutronLbaasDeviceDriver:
    default: 'neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver'
    type: string
  NeutronLbaasOvsUseVeth:
    default: false
    type: boolean
    description: Uses veth for an interface or not
  NeutronServiceProviders:
    default: 'LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default'
    description: Global list of service providers used by neutron. This
                 list should be passed in to ensure all service
                 providers desired by the user are included. The
                 provided default value only set the provider for the LBaaSv2
                 subsystem.This is currently incompatible with enabling
                 octavia-api as one service or the other will break because the defaults are different.
    type: comma_delimited_list

resources:

  NeutronBase:
    type: ./neutron-base.yaml
    properties:
      ServiceData: {get_param: ServiceData}
      ServiceNetMap: {get_param: ServiceNetMap}
      DefaultPasswords: {get_param: DefaultPasswords}
      EndpointMap: {get_param: EndpointMap}
      RoleName: {get_param: RoleName}
      RoleParameters: {get_param: RoleParameters}

outputs:
  role_data:
    description: Role data for the Neutron LBaaS role.
    value:
      service_name: neutron_lbaas
      config_settings:
        map_merge:
          - get_attr: [NeutronBase, role_data, config_settings]
          - neutron::agents::lbaas::interface_driver: {get_param: NeutronLbaasInterfaceDriver}
            neutron::agents::lbaas::device_driver: {get_param: NeutronLbaasDeviceDriver}
            neutron::agents::lbaas::ovs_use_veth: {get_param: NeutronLbaasOvsUseVeth}
      step_config: |
        include ::tripleo::profile::base::neutron::lbaas
      service_config_settings:
        neutron_api:
          neutron::server::service_providers: {get_param: NeutronServiceProviders}
        horizon:
          horizon::neutron_options:
            enable_lb: True
