heat_template_version: 2015-04-30

description: >
  A Map of OpenStack Endpoints

parameters:
  CeilometerApiVirtualIP:
    type: string
    default: ''
  CinderApiVirtualIP:
    type: string
    default: ''
  GlanceApiVirtualIP:
    type: string
    default: ''
  GlanceRegistryVirtualIP:
    type: string
    default: ''
  HeatApiVirtualIP:
    type: string
    default: ''
  KeystoneAdminApiVirtualIP:
    type: string
    default: ''
  KeystonePublicApiVirtualIP:
    type: string
    default: ''
  MysqlVirtualIP:
    type: string
    default: ''
  NeutronApiVirtualIP:
    type: string
    default: ''
  NovaApiVirtualIP:
    type: string
    default: ''
  PublicVirtualIP:
    type: string
    default: ''
  SwiftProxyVirtualIP:
    type: string
    default: ''
  SaharaApiVirtualIP:
    type: string
    default: ''
  EndpointMap:
    type: json
    default:
      CeilometerAdmin: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'}
      CeilometerInternal: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'}
      CeilometerPublic: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'}
      CinderAdmin: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'}
      CinderInternal: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'}
      CinderPublic: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'}
      GlanceAdmin: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'}
      GlanceInternal: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'}
      GlancePublic: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'}
      GlanceRegistryAdmin: {protocol: 'http', port: '9191', host: 'IP_ADDRESS'}
      GlanceRegistryInternal: {protocol: 'http', port: '9191', host: 'IP_ADDRESS'}
      GlanceRegistryPublic: {protocol: 'http', port: '9191', host: 'IP_ADDRESS'}
      HeatAdmin: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'}
      HeatInternal: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'}
      HeatPublic: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'}
      HorizonPublic: {protocol: 'http', port: '80', host: 'IP_ADDRESS'}
      KeystoneAdmin: {protocol: 'http', port: '35357', host: 'IP_ADDRESS'}
      KeystoneInternal: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'}
      KeystonePublic: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'}
      NeutronAdmin: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
      NeutronInternal: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
      NeutronPublic: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
      NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
      NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
      NovaPublic: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
      NovaEC2Admin: {protocol: 'http', port: '8773', host: 'IP_ADDRESS'}
      NovaEC2Internal: {protocol: 'http', port: '8773', host: 'IP_ADDRESS'}
      NovaEC2Public: {protocol: 'http', port: '8773', host: 'IP_ADDRESS'}
      SwiftAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
      SwiftInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
      SwiftPublic: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
      SaharaAdmin: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'}
      SaharaInternal: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'}
      SaharaPublic: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'}
    description: Mapping of service endpoint -> protocol. Typically set
                 via parameter_defaults in the resource registry.
  CloudName:
    type: string
    default: overcloud
    description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org

resources:

  CeilometerInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CeilometerInternal
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: CeilometerApiVirtualIP}
  CeilometerPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CeilometerPublic
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: PublicVirtualIP}
  CeilometerAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CeilometerAdmin
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: CeilometerApiVirtualIP}

  CinderInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CinderInternal
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: CinderApiVirtualIP}
      UriSuffix: '/v1/%(tenant_id)s'
  CinderPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CinderPublic
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: PublicVirtualIP}
      UriSuffix: '/v1/%(tenant_id)s'
  CinderAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CinderAdmin
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: CinderApiVirtualIP}
      UriSuffix: '/v1/%(tenant_id)s'

  CinderV2Internal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CinderInternal
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: CinderApiVirtualIP}
      UriSuffix: '/v2/%(tenant_id)s'
  CinderV2Public:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CinderPublic
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: PublicVirtualIP}
      UriSuffix: '/v2/%(tenant_id)s'
  CinderV2Admin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: CinderAdmin
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: CinderApiVirtualIP}
      UriSuffix: '/v2/%(tenant_id)s'

  GlanceInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: GlanceInternal
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: GlanceApiVirtualIP}
  GlancePublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: GlancePublic
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: PublicVirtualIP}
  GlanceAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: GlanceAdmin
      EndpointMap: { get_param: EndpointMap }
      CloudName: {get_param: CloudName}
      IP: {get_param: GlanceApiVirtualIP}
  GlanceRegistryInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: GlanceInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: GlanceRegistryVirtualIP}
  GlanceRegistryPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: GlancePublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
  GlanceRegistryAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: GlanceAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: GlanceRegistryVirtualIP}

  HeatInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: HeatInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: HeatApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v1/%(tenant_id)s'
  HeatPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: HeatPublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v1/%(tenant_id)s'
  HeatAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: HeatAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: HeatApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v1/%(tenant_id)s'

  HorizonPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: HeatPublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/dashboard'

  KeystoneInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: KeystoneInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: KeystonePublicApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v2.0'
  KeystonePublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: KeystonePublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v2.0'
  KeystoneAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: KeystoneAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: KeystoneAdminApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v2.0'
  KeystoneEC2:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: KeystoneInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: KeystonePublicApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v2.0/ec2tokens'

  NeutronInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NeutronInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: NeutronApiVirtualIP}
      CloudName: {get_param: CloudName}
  NeutronPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NeutronPublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
  NeutronAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NeutronAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: NeutronApiVirtualIP}
      CloudName: {get_param: CloudName}

  NovaInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: NovaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v2/%(tenant_id)s'
  NovaPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaPublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v2/%(tenant_id)s'
  NovaAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: NovaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v2/%(tenant_id)s'
  NovaV3Internal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: NovaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v3'
  NovaV3Public:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaPublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v3'
  NovaV3Admin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: NovaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v3'

  NovaEC2Internal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaEC2Internal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: NovaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/services/Cloud'
  NovaEC2Public:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaEC2Public
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/services/Cloud'
  NovaEC2Admin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: NovaEC2Admin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: NovaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/services/Admin'

  SwiftInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SwiftInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: SwiftProxyVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v1/AUTH_%(tenant_id)s'
  SwiftPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SwiftPublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v1/AUTH_%(tenant_id)s'
  SwiftAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SwiftAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: SwiftProxyVirtualIP}
      CloudName: {get_param: CloudName}
      # No Suffix for the Admin interface
  SwiftS3Internal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SwiftInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: SwiftProxyVirtualIP}
      CloudName: {get_param: CloudName}
  SwiftS3Public:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SwiftPublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: PublicVirtualIP}
      CloudName: {get_param: CloudName}
  SwiftS3Admin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SwiftAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: SwiftProxyVirtualIP}
      CloudName: {get_param: CloudName}

  SaharaInternal:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SaharaInternal
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: SaharaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v1.1/%(tenant_id)s'
  SaharaPublic:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SaharaPublic
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: SaharaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v1.1/%(tenant_id)s'
  SaharaAdmin:
    type: OS::TripleO::Endpoint
    properties:
      EndpointName: SaharaAdmin
      EndpointMap: { get_param: EndpointMap }
      IP: {get_param: SaharaApiVirtualIP}
      CloudName: {get_param: CloudName}
      UriSuffix: '/v1.1/%(tenant_id)s'

outputs:
  endpoint_map:
    value:
      CeilometerInternal: {get_attr: [ CeilometerInternal, endpoint] }
      CeilometerPublic: {get_attr: [ CeilometerPublic, endpoint] }
      CeilometerAdmin: {get_attr: [ CeilometerAdmin, endpoint] }
      CinderInternal: {get_attr: [ CinderInternal, endpoint] }
      CinderPublic: {get_attr: [ CinderPublic, endpoint] }
      CinderAdmin: {get_attr: [ CinderAdmin, endpoint] }
      CinderV2Internal: {get_attr: [ CinderV2Internal, endpoint] }
      CinderV2Public: {get_attr: [ CinderV2Public, endpoint] }
      CinderV2Admin: {get_attr: [ CinderV2Admin, endpoint] }
      GlanceInternal: {get_attr: [ GlanceInternal, endpoint] }
      GlancePublic: {get_attr: [ GlancePublic, endpoint] }
      GlanceAdmin: {get_attr: [ GlanceAdmin, endpoint] }
      GlanceRegistryInternal: {get_attr: [ GlanceRegistryInternal, endpoint] }
      GlanceRegistryPublic: {get_attr: [ GlanceRegistryPublic, endpoint] }
      GlanceRegistryAdmin: {get_attr: [ GlanceRegistryAdmin, endpoint] }
      HeatInternal: {get_attr: [ HeatInternal, endpoint] }
      HeatPublic: {get_attr: [ HeatPublic, endpoint] }
      HeatAdmin: {get_attr: [ HeatAdmin, endpoint] }
      HorizonPublic: {get_attr: [ HorizonPublic, endpoint] }
      KeystoneInternal: {get_attr: [ KeystoneInternal, endpoint] }
      KeystonePublic: {get_attr: [ KeystonePublic, endpoint] }
      KeystoneAdmin: {get_attr: [ KeystoneAdmin, endpoint] }
      KeystoneEC2: {get_attr: [ KeystoneEC2, endpoint] }
      NeutronInternal: {get_attr: [ NeutronInternal, endpoint] }
      NeutronPublic: {get_attr: [ NeutronPublic, endpoint] }
      NeutronAdmin: {get_attr: [ NeutronAdmin, endpoint] }
      NovaInternal: {get_attr: [ NovaInternal, endpoint] }
      NovaPublic: {get_attr: [ NovaPublic, endpoint] }
      NovaAdmin: {get_attr: [ NovaAdmin, endpoint] }
      NovaV3Internal: {get_attr: [ NovaV3Internal, endpoint] }
      NovaV3Public: {get_attr: [ NovaV3Public, endpoint] }
      NovaV3Admin: {get_attr: [ NovaV3Admin, endpoint] }
      NovaEC2Internal: {get_attr: [ NovaEC2Internal, endpoint] }
      NovaEC2Public: {get_attr: [ NovaEC2Public, endpoint] }
      NovaEC2Admin: {get_attr: [ NovaEC2Admin, endpoint] }
      SwiftInternal: {get_attr: [ SwiftInternal, endpoint] }
      SwiftPublic: {get_attr: [ SwiftPublic, endpoint] }
      SwiftAdmin: {get_attr: [ SwiftAdmin, endpoint] }
      SwiftS3Internal: {get_attr: [ SwiftS3Internal, endpoint] }
      SwiftS3Public: {get_attr: [ SwiftS3Public, endpoint] }
      SwiftS3Admin: {get_attr: [ SwiftS3Admin, endpoint] }
      SaharaInternal: {get_attr: [ SaharaInternal, endpoint] }
      SaharaPublic: {get_attr: [ SaharaPublic, endpoint] }
      SaharaAdmin: {get_attr: [ SaharaAdmin, endpoint] }