Browse Source

Add IPv6 Support to Isolated Networks

This change adds a new set of network templates with IPv6 subnets
that can be used instead of the existing IPv4 networks. Each network
can use either the IPv4 or IPv6 template, and the Neutron subnet will
be created with the specified IP version.

The default addresses used for the IPv6 networks use the fd00::/8
prefix for the internal isolated networks (this range is reserved
for private use similar to 10.0.0.0/8), and 2001:db8:fd00:1000::/64
is used as an example default for the External network
(2001:db8::/32 are the documentation addresses [RFC3849]), but this
would ordinarily be a globally addressable subnet. These
parameters may be overridden in an environment file.

This change will require updates to the OpenStack Puppet
Modules to support IPv6 addresses in some of the hieradata values.
Many of the OPM modules already have IPv6 support to support IPv6
deployments in Packstack, but some OPM packages that apply only to
Instack/TripleO deployments need to be updated.

IPv6 addresses used in URLs need to be surrounded by brackets in
order to differentiate IP address from port number. This change
adds a new output to the network/ports resources for
ip_address_uri, which is an IP address with brackets in the case
of IPv6, and a raw IP address without brackets for IPv4 ports.
This change also updates some URLs which are constructed in Heat.

This has been tested and problems were found with Puppet not
accepting IPv6 addresses. This is addressed in the latest Puppet.
Additional changes were required to make this work with Ceph.

IPv6 tunnel endpoints with Open vSwitch are not yet supported
(although support is coming soon), so this review leaves the
Tenant network as an isolated IPv4 network for the time being.

Change-Id: Ie7a742bdf1db533edda2998a53d28528f80ef8e2
changes/23/235423/48
Dan Sneddon 7 years ago committed by Giulio Fidente
parent
commit
321e605a0a
  1. 49
      environments/network-isolation-v6.yaml
  2. 5
      network/endpoints/build_endpoint_map.py
  3. 5
      network/endpoints/endpoint_map.yaml
  4. 61
      network/external_v6.yaml
  5. 61
      network/internal_api_v6.yaml
  6. 3
      network/ports/ctlplane_vip.yaml
  7. 3
      network/ports/external.yaml
  8. 3
      network/ports/external_from_pool.yaml
  9. 68
      network/ports/external_v6.yaml
  10. 3
      network/ports/from_service.yaml
  11. 4
      network/ports/internal_api.yaml
  12. 3
      network/ports/internal_api_from_pool.yaml
  13. 63
      network/ports/internal_api_v6.yaml
  14. 3
      network/ports/management.yaml
  15. 3
      network/ports/management_from_pool.yaml
  16. 54
      network/ports/management_v6.yaml
  17. 36
      network/ports/net_ip_map.yaml
  18. 25
      network/ports/net_vip_map_external.yaml
  19. 3
      network/ports/noop.yaml
  20. 3
      network/ports/storage.yaml
  21. 3
      network/ports/storage_from_pool.yaml
  22. 4
      network/ports/storage_mgmt.yaml
  23. 3
      network/ports/storage_mgmt_from_pool.yaml
  24. 63
      network/ports/storage_mgmt_v6.yaml
  25. 63
      network/ports/storage_v6.yaml
  26. 3
      network/ports/tenant.yaml
  27. 3
      network/ports/tenant_from_pool.yaml
  28. 63
      network/ports/tenant_v6.yaml
  29. 3
      network/ports/vip.yaml
  30. 65
      network/ports/vip_v6.yaml
  31. 61
      network/storage_mgmt_v6.yaml
  32. 61
      network/storage_v6.yaml
  33. 61
      network/tenant_v6.yaml
  34. 47
      overcloud.yaml
  35. 6
      puppet/ceph-storage.yaml
  36. 10
      puppet/cinder-storage.yaml
  37. 6
      puppet/compute.yaml
  38. 50
      puppet/controller.yaml
  39. 6
      puppet/swift-storage.yaml

49
environments/network-isolation-v6.yaml

@ -0,0 +1,49 @@
# Enable the creation of IPv6 Neutron networks for isolated Overcloud
# traffic and configure each role to assign ports (related
# to that role) on these networks.
resource_registry:
OS::TripleO::Network::External: ../network/external_v6.yaml
OS::TripleO::Network::InternalApi: ../network/internal_api_v6.yaml
OS::TripleO::Network::StorageMgmt: ../network/storage_mgmt_v6.yaml
OS::TripleO::Network::Storage: ../network/storage_v6.yaml
# IPv4 until OVS and Neutron support IPv6 tunnel endpoints
OS::TripleO::Network::Tenant: ../network/tenant.yaml
# Port assignments for the VIPs
OS::TripleO::Network::Ports::ExternalVipPort: ../network/ports/external_v6.yaml
OS::TripleO::Network::Ports::InternalApiVipPort: ../network/ports/internal_api_v6.yaml
OS::TripleO::Network::Ports::StorageVipPort: ../network/ports/storage_v6.yaml
OS::TripleO::Network::Ports::StorageMgmtVipPort: ../network/ports/storage_mgmt_v6.yaml
OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip_v6.yaml
# Port assignments for the controller role
OS::TripleO::Controller::Ports::ExternalPort: ../network/ports/external_v6.yaml
OS::TripleO::Controller::Ports::InternalApiPort: ../network/ports/internal_api_v6.yaml
OS::TripleO::Controller::Ports::StoragePort: ../network/ports/storage_v6.yaml
OS::TripleO::Controller::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_v6.yaml
OS::TripleO::Controller::Ports::TenantPort: ../network/ports/tenant.yaml
# Port assignments for the compute role
OS::TripleO::Compute::Ports::InternalApiPort: ../network/ports/internal_api_v6.yaml
OS::TripleO::Compute::Ports::StoragePort: ../network/ports/storage_v6.yaml
OS::TripleO::Compute::Ports::TenantPort: ../network/ports/tenant.yaml
# Port assignments for the ceph storage role
OS::TripleO::CephStorage::Ports::StoragePort: ../network/ports/storage_v6.yaml
OS::TripleO::CephStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_v6.yaml
# Port assignments for the swift storage role
OS::TripleO::SwiftStorage::Ports::InternalApiPort: ../network/ports/internal_api_v6.yaml
OS::TripleO::SwiftStorage::Ports::StoragePort: ../network/ports/storage_v6.yaml
OS::TripleO::SwiftStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_v6.yaml
# Port assignments for the block storage role
OS::TripleO::BlockStorage::Ports::InternalApiPort: ../network/ports/internal_api_v6.yaml
OS::TripleO::BlockStorage::Ports::StoragePort: ../network/ports/storage_v6.yaml
OS::TripleO::BlockStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_v6.yaml
parameter_defaults:
# Enable IPv6 for MongoDB. This is required when MongoDB is using an IPv6 IP.
MongoDbIPv6: True
# Enable various IPv6 features in Nova.
NovaIPv6: True

5
network/endpoints/build_endpoint_map.py

@ -173,7 +173,10 @@ def template_endpoint_items(config):
def generate_endpoint_map_template(config):
return collections.OrderedDict([
('heat_template_version', '2015-04-30'),
('description', 'A map of OpenStack endpoints.'),
('description', 'A map of OpenStack endpoints. Since the endpoints '
'are URLs, we need to have brackets around IPv6 IP addresses. The '
'inputs to these parameters come from net_ip_uri_map, which will '
'include these brackets in IPv6 addresses.'),
('parameters', template_parameters(config)),
('outputs', {
'endpoint_map': {

5
network/endpoints/endpoint_map.yaml

@ -3,7 +3,10 @@
### by the script build_endpoint_map.py
heat_template_version: '2015-04-30'
description: A map of OpenStack endpoints.
description: A map of OpenStack endpoints. Since the endpoints are URLs,
we need to have brackets around IPv6 IP addresses. The inputs to these
parameters come from net_ip_uri_map, which will include these brackets
in IPv6 addresses.
parameters:
AodhApiVirtualIP: {type: string, default: ''}
CeilometerApiVirtualIP: {type: string, default: ''}

61
network/external_v6.yaml

@ -0,0 +1,61 @@
heat_template_version: 2015-04-30
description: >
External network. Public traffic, Neutron l3router for floating IPs/SNAT, etc.
parameters:
# the defaults here work for static IP assignment (IPAM) only
ExternalNetCidr:
# OpenStack uses the EUI-64 address format, which requires a /64 prefix
default: '2001:db8:fd00:1000::/64'
description: Cidr for the external network.
type: string
ExternalNetValueSpecs:
default: {'provider:physical_network': 'external', 'provider:network_type': 'flat'}
description: Value specs for the external network.
type: json
ExternalNetAdminStateUp:
default: false
description: This admin state of of the network.
type: boolean
ExternalNetShared:
default: false
description: Whether this network is shared across all tenants.
type: boolean
ExternalNetName:
default: external
description: The name of the external network.
type: string
ExternalSubnetName:
default: external_subnet
description: The name of the external subnet in Neutron.
type: string
ExternalAllocationPools:
default: [{'start': '2001:db8:fd00:1000::10', 'end': '2001:db8:fd00:1000:ffff:ffff:ffff:fffe'}]
description: Ip allocation pool range for the external network.
type: json
resources:
ExternalNetwork:
type: OS::Neutron::Net
properties:
admin_state_up: {get_param: ExternalNetAdminStateUp}
name: {get_param: ExternalNetName}
shared: {get_param: ExternalNetShared}
value_specs: {get_param: ExternalNetValueSpecs}
ExternalSubnet:
type: OS::Neutron::Subnet
properties:
ip_version: 6
ipv6_address_mode: slaac
ipv6_ra_mode: slaac
cidr: {get_param: ExternalNetCidr}
name: {get_param: ExternalSubnetName}
network: {get_resource: ExternalNetwork}
allocation_pools: {get_param: ExternalAllocationPools}
outputs:
OS::stack_id:
description: Neutron external network
value: {get_resource: ExternalNetwork}

61
network/internal_api_v6.yaml

@ -0,0 +1,61 @@
heat_template_version: 2015-04-30
description: >
Internal API network. Used for most APIs, Database, RPC.
parameters:
# the defaults here work for static IP assignment (IPAM) only
InternalApiNetCidr:
# OpenStack uses the EUI-64 address format, which requires a /64 prefix
default: 'fd00:fd00:fd00:2000::/64'
description: Cidr for the internal API network.
type: string
InternalApiNetValueSpecs:
default: {'provider:physical_network': 'internal_api', 'provider:network_type': 'flat'}
description: Value specs for the internal API network.
type: json
InternalApiNetAdminStateUp:
default: false
description: This admin state of of the network.
type: boolean
InternalApiNetShared:
default: false
description: Whether this network is shared across all tenants.
type: boolean
InternalApiNetName:
default: internal_api
description: The name of the internal API network.
type: string
InternalApiSubnetName:
default: internal_api_subnet
description: The name of the internal API subnet in Neutron.
type: string
InternalApiAllocationPools:
default: [{'start': 'fd00:fd00:fd00:2000::10', 'end': 'fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe'}]
description: Ip allocation pool range for the internal API network.
type: json
resources:
InternalApiNetwork:
type: OS::Neutron::Net
properties:
admin_state_up: {get_param: InternalApiNetAdminStateUp}
name: {get_param: InternalApiNetName}
shared: {get_param: InternalApiNetShared}
value_specs: {get_param: InternalApiNetValueSpecs}
InternalApiSubnet:
type: OS::Neutron::Subnet
properties:
ip_version: 6
ipv6_address_mode: slaac
ipv6_ra_mode: slaac
cidr: {get_param: InternalApiNetCidr}
name: {get_param: InternalApiSubnetName}
network: {get_resource: InternalApiNetwork}
allocation_pools: {get_param: InternalApiAllocationPools}
outputs:
OS::stack_id:
description: Neutron internal network
value: {get_resource: InternalApiNetwork}

3
network/ports/ctlplane_vip.yaml

@ -45,6 +45,9 @@ outputs:
ip_address:
description: Virtual IP network IP
value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: Virtual IP network IP (for compatibility with vip_v6.yaml)
value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
ip_subnet:
description: IP/Subnet CIDR for the ctlplane network.
value:

3
network/ports/external.yaml

@ -48,6 +48,9 @@ outputs:
ip_address:
description: external network IP
value: {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: external network IP (for compatibility with external_v6.yaml)
value: {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
ip_subnet:
description: IP/Subnet CIDR for the external network IP
value:

3
network/ports/external_from_pool.yaml

@ -33,6 +33,9 @@ outputs:
ip_address:
description: external network IP
value: {get_param: [IPPool, {get_param: ExternalNetName}, {get_param: NodeIndex}]}
ip_address_uri:
description: external network IP (for compatibility with IPv6)
value: {get_param: [IPPool, {get_param: ExternalNetName}, {get_param: NodeIndex}]}
ip_subnet:
description: IP/Subnet CIDR for the external network IP
value:

68
network/ports/external_v6.yaml

@ -0,0 +1,68 @@
heat_template_version: 2015-04-30
description: >
Creates a port on the external network. The IP address will be chosen
automatically if FixedIPs is empty.
parameters:
ExternalNetName:
description: Name of the external neutron network
default: external
type: string
PortName:
description: Name of the port
default: ''
type: string
ControlPlaneIP: # Here for compatability with noop.yaml
description: IP address on the control plane
default: ''
type: string
ControlPlaneNetwork: # Here for compatibility with ctlplane_vip.yaml
description: The name of the undercloud Neutron control plane
default: ctlplane
type: string
FixedIPs:
description: >
Control the IP allocation for the VIP port. E.g.
[{'ip_address':'1.2.3.4'}]
default: []
type: json
IPPool: # Here for compatibility with from_pool.yaml
default: {}
type: json
NodeIndex: # Here for compatibility with from_pool.yaml
default: 0
type: number
resources:
ExternalPort:
type: OS::Neutron::Port
properties:
network: {get_param: ExternalNetName}
name: {get_param: PortName}
fixed_ips: {get_param: FixedIPs}
replacement_policy: AUTO
outputs:
ip_address:
description: external network IP
value: {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: external network IP with brackets suitable for a URL
value:
list_join:
- ''
- - '['
- {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
- ']'
ip_subnet:
# FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the external network IP
value:
list_join:
- ''
- - {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
- '/'
- {get_attr: [ExternalPort, subnets, 0, cidr, -2]}
- {get_attr: [ExternalPort, subnets, 0, cidr, -1]}

3
network/ports/from_service.yaml

@ -32,3 +32,6 @@ outputs:
ip_address:
description: network IP
value: {get_param: [ServiceVips, {get_param: ServiceName}]}
ip_address_uri:
description: network IP (for compatibility with IPv6)
value: {get_param: [ServiceVips, {get_param: ServiceName}]}

4
network/ports/internal_api.yaml

@ -43,6 +43,10 @@ outputs:
ip_address:
description: internal API network IP
value: {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: |
internal API network IP (for compatibility with internal_api_v6.yaml)
value: {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
ip_subnet:
description: IP/Subnet CIDR for the internal API network IP
value:

3
network/ports/internal_api_from_pool.yaml

@ -33,6 +33,9 @@ outputs:
ip_address:
description: internal API network IP
value: {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
ip_address_uri:
description: internal API network IP (for compatibility with internal_api_v6.yaml)
value: {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
ip_subnet:
description: IP/Subnet CIDR for the internal API network IP
value:

63
network/ports/internal_api_v6.yaml

@ -0,0 +1,63 @@
heat_template_version: 2015-04-30
description: >
Creates a port on the internal_api network.
parameters:
InternalApiNetName:
description: Name of the internal API neutron network
default: internal_api
type: string
PortName:
description: Name of the port
default: ''
type: string
ControlPlaneIP: # Here for compatability with noop.yaml
description: IP address on the control plane
default: ''
type: string
FixedIPs:
description: >
Control the IP allocation for the VIP port. E.g.
[{'ip_address':'1.2.3.4'}]
default: []
type: json
IPPool: # Here for compatibility with from_pool.yaml
default: {}
type: json
NodeIndex: # Here for compatibility with from_pool.yaml
default: 0
type: number
resources:
InternalApiPort:
type: OS::Neutron::Port
properties:
network: {get_param: InternalApiNetName}
name: {get_param: PortName}
fixed_ips: {get_param: FixedIPs}
replacement_policy: AUTO
outputs:
ip_address:
description: internal API network IP
value: {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: internal api network IP with brackets suitable for a URL
value:
list_join:
- ''
- - '['
- {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
- ']'
ip_subnet:
# FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the internal API network IP
value:
list_join:
- ''
- - {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
- '/'
- {get_attr: [InternalApiPort, subnets, 0, cidr, -2]}
- {get_attr: [InternalApiPort, subnets, 0, cidr, -1]}

3
network/ports/management.yaml

@ -36,6 +36,9 @@ outputs:
ip_address:
description: management network IP
value: {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: management network IP (for compatibility with management_v6.yaml)
value: {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
ip_subnet:
description: IP/Subnet CIDR for the management network IP
value:

3
network/ports/management_from_pool.yaml

@ -33,6 +33,9 @@ outputs:
ip_address:
description: management network IP
value: {get_param: [IPPool, {get_param: ManagementNetName}, {get_param: NodeIndex}]}
ip_address_uri:
description: management network IP (for compatibility with management_v6.yaml)
value: {get_param: [IPPool, {get_param: ManagementNetName}, {get_param: NodeIndex}]}
ip_subnet:
description: IP/Subnet CIDR for the management network IP
value:

54
network/ports/management_v6.yaml

@ -0,0 +1,54 @@
heat_template_version: 2015-10-15
description: >
Creates a port on the management network. The IP address will be chosen
automatically if FixedIPs is empty.
parameters:
ManagementNetName:
description: Name of the management neutron network
default: management
type: string
PortName:
description: Name of the port
default: ''
type: string
ControlPlaneIP: # Here for compatibility with noop.yaml
description: IP address on the control plane
type: string
IPPool: # Here for compatibility with from_pool.yaml
default: {}
type: json
NodeIndex: # Here for compatibility with from_pool.yaml
default: 0
type: number
resources:
ManagementPort:
type: OS::Neutron::Port
properties:
network: {get_param: ManagementNetName}
name: {get_param: PortName}
replacement_policy: AUTO
outputs:
ip_address:
description: management network IP
value: {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: management network IP with brackets suitable for a URL
value:
list_join:
- ''
- - '['
- {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
- ']'
ip_subnet:
description: IP/Subnet CIDR for the management network IP
value:
list_join:
- ''
- - {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
- '/'
- {str_split: ['/', {get_attr: [ManagementPort, subnets, 0, cidr]}, 1]}

36
network/ports/net_ip_map.yaml

@ -7,21 +7,45 @@ parameters:
ExternalIp:
default: ''
type: string
ExternalIpUri:
default: ''
type: string
description: IP address with brackets in case of IPv6
InternalApiIp:
default: ''
type: string
InternalApiIpUri:
default: ''
type: string
description: IP address with brackets in case of IPv6
StorageIp:
default: ''
type: string
StorageIpUri:
default: ''
type: string
description: IP address with brackets in case of IPv6
StorageMgmtIp:
default: ''
type: string
StorageMgmtIpUri:
default: ''
type: string
description: IP address with brackets in case of IPv6
TenantIp:
default: ''
type: string
TenantIpUri:
default: ''
type: string
description: IP address with brackets in case of IPv6
ManagementIp:
default: ''
type: string
ManagementIpUri:
default: ''
type: string
description: IP address with brackets in case of IPv6
outputs:
net_ip_map:
@ -36,3 +60,15 @@ outputs:
storage_mgmt: {get_param: StorageMgmtIp}
tenant: {get_param: TenantIp}
management: {get_param: ManagementIp}
net_ip_uri_map:
description: >
A Hash containing a mapping of netowrk names to assigned IPs for a
specific machine with brackets around IPv6 addresses for use in URLs.
value:
ctlplane: {get_param: ControlPlaneIp}
external: {get_param: ExternalIpUri}
internal_api: {get_param: InternalApiIpUri}
storage: {get_param: StorageIpUri}
storage_mgmt: {get_param: StorageMgmtIpUri}
tenant: {get_param: TenantIpUri}
management: {get_param: ManagementIpUri}

25
network/ports/net_vip_map_external.yaml

@ -24,18 +24,33 @@ parameters:
ExternalIp:
default: ''
type: string
ExternalIpUri:
default: ''
type: string
InternalApiIp:
default: ''
type: string
InternalApiIpUri:
default: ''
type: string
StorageIp:
default: ''
type: string
StorageIpUri:
default: ''
type: string
StorageMgmtIp:
default: ''
type: string
StorageMgmtIpUri:
default: ''
type: string
TenantIp:
default: ''
type: string
TenantIpUri:
default: ''
type: string
outputs:
net_ip_map:
@ -48,3 +63,13 @@ outputs:
internal_api: {get_param: InternalApiNetworkVip}
storage: {get_param: StorageNetworkVip}
storage_mgmt: {get_param: StorageMgmtNetworkVip}
net_ip_uri_map:
description: >
A Hash containing a mapping of netowrk names to assigned IPs for a
specific machine with brackets around IPv6 addresses for use in URLs.
value:
ctlplane: {get_param: ControlPlaneIP}
external: {get_param: ExternalNetworkVip}
internal_api: {get_param: InternalApiNetworkVip}
storage: {get_param: StorageNetworkVip}
storage_mgmt: {get_param: StorageMgmtNetworkVip}

3
network/ports/noop.yaml

@ -44,6 +44,9 @@ outputs:
ip_address:
description: pass thru network IP
value: {get_param: ControlPlaneIP}
ip_address_uri:
description: pass thru network IP (for compatibility with vip_v6.yaml)
value: {get_param: ControlPlaneIP}
ip_subnet:
description: IP/Subnet CIDR for the pass thru network IP
value:

3
network/ports/storage.yaml

@ -43,6 +43,9 @@ outputs:
ip_address:
description: storage network IP
value: {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: storage network IP (for compatibility with storage_v6.yaml)
value: {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
ip_subnet:
description: IP/Subnet CIDR for the storage network IP
value:

3
network/ports/storage_from_pool.yaml

@ -33,6 +33,9 @@ outputs:
ip_address:
description: storage network IP
value: {get_param: [IPPool, {get_param: StorageNetName}, {get_param: NodeIndex}]}
ip_address_uri:
description: storage network IP (for compatibility with storage_v6.yaml)
value: {get_param: [IPPool, {get_param: StorageNetName}, {get_param: NodeIndex}]}
ip_subnet:
description: IP/Subnet CIDR for the storage network IP
value:

4
network/ports/storage_mgmt.yaml

@ -43,6 +43,10 @@ outputs:
ip_address:
description: storage_mgmt network IP
value: {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: |
storage_mgmt network IP (for compatibility with storage_mgmt_v6.yaml)
value: {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
ip_subnet:
description: IP/Subnet CIDR for the storage_mgmt network IP
value:

3
network/ports/storage_mgmt_from_pool.yaml

@ -33,6 +33,9 @@ outputs:
ip_address:
description: storage MGMT network IP
value: {get_param: [IPPool, {get_param: StorageMgmtNetName}, {get_param: NodeIndex}]}
ip_address_uri:
description: storage MGMT network IP (for compatibility with storage_mgmt_v6.yaml)
value: {get_param: [IPPool, {get_param: StorageMgmtNetName}, {get_param: NodeIndex}]}
ip_subnet:
description: IP/Subnet CIDR for the storage MGMT network IP
value:

63
network/ports/storage_mgmt_v6.yaml

@ -0,0 +1,63 @@
heat_template_version: 2015-04-30
description: >
Creates a port on the storage_mgmt API network.
parameters:
StorageMgmtNetName:
description: Name of the storage_mgmt API neutron network
default: storage_mgmt
type: string
PortName:
description: Name of the port
default: ''
type: string
ControlPlaneIP: # Here for compatability with noop.yaml
description: IP address on the control plane
default: ''
type: string
FixedIPs:
description: >
Control the IP allocation for the VIP port. E.g.
[{'ip_address':'1.2.3.4'}]
default: []
type: json
IPPool: # Here for compatibility with from_pool.yaml
default: {}
type: json
NodeIndex: # Here for compatibility with from_pool.yaml
default: 0
type: number
resources:
StorageMgmtPort:
type: OS::Neutron::Port
properties:
network: {get_param: StorageMgmtNetName}
name: {get_param: PortName}
fixed_ips: {get_param: FixedIPs}
replacement_policy: AUTO
outputs:
ip_address:
description: storage_mgmt network IP
value: {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: storage_mgmt network IP with brackets suitable for a URI
value:
list_join:
- ''
- - '['
- {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
- ']'
ip_subnet:
# FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the storage_mgmt network IP
value:
list_join:
- ''
- - {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
- '/'
- {get_attr: [StorageMgmtPort, subnets, 0, cidr, -2]}
- {get_attr: [StorageMgmtPort, subnets, 0, cidr, -1]}

63
network/ports/storage_v6.yaml

@ -0,0 +1,63 @@
heat_template_version: 2015-04-30
description: >
Creates a port on the storage network.
parameters:
StorageNetName:
description: Name of the storage neutron network
default: storage
type: string
PortName:
description: Name of the port
default: ''
type: string
ControlPlaneIP: # Here for compatability with noop.yaml
description: IP address on the control plane
default: ''
type: string
FixedIPs:
description: >
Control the IP allocation for the VIP port. E.g.
[{'ip_address':'1.2.3.4'}]
default: []
type: json
IPPool: # Here for compatibility with from_pool.yaml
default: {}
type: json
NodeIndex: # Here for compatibility with from_pool.yaml
default: 0
type: number
resources:
StoragePort:
type: OS::Neutron::Port
properties:
network: {get_param: StorageNetName}
name: {get_param: PortName}
fixed_ips: {get_param: FixedIPs}
replacement_policy: AUTO
outputs:
ip_address:
description: storage network IP
value: {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: storage network IP with brackets suitable for a URL
value:
list_join:
- ''
- - '['
- {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
- ']'
ip_subnet:
# FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the storage network IP
value:
list_join:
- ''
- - {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
- '/'
- {get_attr: [StoragePort, subnets, 0, cidr, -2]}
- {get_attr: [StoragePort, subnets, 0, cidr, -1]}

3
network/ports/tenant.yaml

@ -43,6 +43,9 @@ outputs:
ip_address:
description: tenant network IP
value: {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: tenant network IP (for compatibility with tenant_v6.yaml)
value: {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
ip_subnet:
description: IP/Subnet CIDR for the tenant network IP
value:

3
network/ports/tenant_from_pool.yaml

@ -33,6 +33,9 @@ outputs:
ip_address:
description: tenant network IP
value: {get_param: [IPPool, {get_param: TenantNetName}, {get_param: NodeIndex}]}
ip_address_uri:
description: tenant network IP (for compatibility with tenant_v6.yaml)
value: {get_param: [IPPool, {get_param: TenantNetName}, {get_param: NodeIndex}]}
ip_subnet:
description: IP/Subnet CIDR for the tenant network IP
value:

63
network/ports/tenant_v6.yaml

@ -0,0 +1,63 @@
heat_template_version: 2015-04-30
description: >
Creates a port on the tenant network.
parameters:
TenantNetName:
description: Name of the tenant neutron network
default: tenant
type: string
PortName:
description: Name of the port
default: ''
type: string
ControlPlaneIP: # Here for compatability with noop.yaml
description: IP address on the control plane
default: ''
type: string
FixedIPs:
description: >
Control the IP allocation for the VIP port. E.g.
[{'ip_address':'1.2.3.4'}]
default: []
type: json
IPPool: # Here for compatibility with from_pool.yaml
default: {}
type: json
NodeIndex: # Here for compatibility with from_pool.yaml
default: 0
type: number
resources:
TenantPort:
type: OS::Neutron::Port
properties:
network: {get_param: TenantNetName}
name: {get_param: PortName}
fixed_ips: {get_param: FixedIPs}
replacement_policy: AUTO
outputs:
ip_address:
description: tenant network IP
value: {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: tenant network IP with brackets suitable for a URL
value:
list_join:
- ''
- - '['
- {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
- ']'
ip_subnet:
# FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the tenant network IP
value:
list_join:
- ''
- - {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
- '/'
- {get_attr: [TenantPort, subnets, 0, cidr, -2]}
- {get_attr: [TenantPort, subnets, 0, cidr, -1]}

3
network/ports/vip.yaml

@ -45,6 +45,9 @@ outputs:
ip_address:
description: Virtual IP network IP
value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: Virtual IP network IP (for compatibility with vip.yaml)
value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
ip_subnet:
description: IP/Subnet CIDR for the network associated with this IP
value:

65
network/ports/vip_v6.yaml

@ -0,0 +1,65 @@
heat_template_version: 2015-04-30
description: >
Creates a port for a VIP on the isolated network NetworkName.
The IP address will be chosen automatically if FixedIPs is empty.
parameters:
ServiceName: # Here for compatibility with from_service.yaml
description: Name of the service to lookup
default: ''
type: string
NetworkName:
description: Name of the network where the VIP will be created
default: internal_api
type: string
PortName:
description: Name of the port
default: ''
type: string
ControlPlaneIP: # Here for compatability with noop.yaml
description: IP address on the control plane
default: ''
type: string
ControlPlaneNetwork:
description: The name of the undercloud Neutron control plane
default: ctlplane
type: string
FixedIPs:
description: >
Control the IP allocation for the VIP port. E.g.
[{'ip_address':'1.2.3.4'}]
default: []
type: json
resources:
VipPort:
type: OS::Neutron::Port
properties:
network: {get_param: NetworkName}
name: {get_param: PortName}
fixed_ips: {get_param: FixedIPs}
replacement_policy: AUTO
outputs:
ip_address:
description: Virtual IP network IP
value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
ip_address_uri:
description: Virtual IP with brackets suitable for a URL
value:
list_join:
- ''
- - '['
- {get_attr: [VipPort, fixed_ips, 0, ip_address]}
- ']'
ip_subnet:
# FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the network associated with this IP
value:
list_join:
- ''
- - {get_attr: [VipPort, fixed_ips, 0, ip_address]}
- '/'
- {get_attr: [VipPort, subnets, 0, cidr, -2]}
- {get_attr: [VipPort, subnets, 0, cidr, -1]}

61
network/storage_mgmt_v6.yaml

@ -0,0 +1,61 @@
heat_template_version: 2015-04-30
description: >
Storage management network. Storage replication, etc.
parameters:
# the defaults here work for static IP assignment (IPAM) only
StorageMgmtNetCidr:
# OpenStack uses the EUI-64 address format, which requires a /64 prefix
default: 'fd00:fd00:fd00:4000::/64'
description: Cidr for the storage management network.
type: string
StorageMgmtNetValueSpecs:
default: {'provider:physical_network': 'storage_mgmt', 'provider:network_type': 'flat'}
description: Value specs for the storage_mgmt network.
type: json
StorageMgmtNetAdminStateUp:
default: false
description: This admin state of of the network.
type: boolean
StorageMgmtNetShared:
default: false
description: Whether this network is shared across all tenants.
type: boolean
StorageMgmtNetName:
default: storage_mgmt
description: The name of the Storage management network.
type: string
StorageMgmtSubnetName:
default: storage_mgmt_subnet
description: The name of the Storage management subnet in Neutron.
type: string
StorageMgmtAllocationPools:
default: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
description: Ip allocation pool range for the storage mgmt network.
type: json
resources:
StorageMgmtNetwork:
type: OS::Neutron::Net
properties:
admin_state_up: {get_param: StorageMgmtNetAdminStateUp}
name: {get_param: StorageMgmtNetName}
shared: {get_param: StorageMgmtNetShared}
value_specs: {get_param: StorageMgmtNetValueSpecs}
StorageMgmtSubnet:
type: OS::Neutron::Subnet
properties:
ip_version: 6
ipv6_address_mode: slaac
ipv6_ra_mode: slaac
cidr: {get_param: StorageMgmtNetCidr}
name: {get_param: StorageMgmtSubnetName}
network: {get_resource: StorageMgmtNetwork}
allocation_pools: {get_param: StorageMgmtAllocationPools}
outputs:
OS::stack_id:
description: Neutron storage management network
value: {get_resource: StorageMgmtNetwork}

61
network/storage_v6.yaml

@ -0,0 +1,61 @@
heat_template_version: 2015-04-30
description: >
Storage network.
parameters:
# the defaults here work for static IP assignment (IPAM) only
StorageNetCidr:
# OpenStack uses the EUI-64 address format, which requires a /64 prefix
default: 'fd00:fd00:fd00:3000::/64'
description: Cidr for the storage network.
type: string
StorageNetValueSpecs:
default: {'provider:physical_network': 'storage', 'provider:network_type': 'flat'}
description: Value specs for the storage network.
type: json
StorageNetAdminStateUp:
default: false
description: This admin state of of the network.
type: boolean
StorageNetShared:
default: false
description: Whether this network is shared across all tenants.
type: boolean
StorageNetName:
default: storage
description: The name of the storage network.
type: string
StorageSubnetName:
default: storage_subnet
description: The name of the storage subnet in Neutron.
type: string
StorageAllocationPools:
default: [{'start': 'fd00:fd00:fd00:3000::10', 'end': 'fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe'}]
description: Ip allocation pool range for the storage network.
type: json
resources:
StorageNetwork:
type: OS::Neutron::Net
properties:
admin_state_up: {get_param: StorageNetAdminStateUp}
name: {get_param: StorageNetName}
shared: {get_param: StorageNetShared}
value_specs: {get_param: StorageNetValueSpecs}
StorageSubnet:
type: OS::Neutron::Subnet
properties:
ip_version: 6
ipv6_address_mode: slaac
ipv6_ra_mode: slaac
cidr: {get_param: StorageNetCidr}
name: {get_param: StorageSubnetName}
network: {get_resource: StorageNetwork}
allocation_pools: {get_param: StorageAllocationPools}
outputs:
OS::stack_id:
description: Neutron storage network
value: {get_resource: StorageNetwork}

61
network/tenant_v6.yaml

@ -0,0 +1,61 @@
heat_template_version: 2015-04-30
description: >
Tenant IPv6 network.
parameters:
# the defaults here work for static IP assignment (IPAM) only
TenantNetCidr:
# OpenStack uses the EUI-64 address format, which requires a /64 prefix
default: 'fd00:fd00:fd00:5000::/64'
description: Cidr for the tenant network.
type: string
TenantNetValueSpecs:
default: {'provider:physical_network': 'tenant', 'provider:network_type': 'flat'}
description: Value specs for the tenant network.
type: json
TenantNetAdminStateUp:
default: false
description: This admin state of of the network.
type: boolean
TenantNetShared:
default: false
description: Whether this network is shared across all tenants.
type: boolean
TenantNetName:
default: tenant
description: The name of the tenant network.
type: string
TenantSubnetName:
default: tenant_subnet
description: The name of the tenant subnet in Neutron.
type: string
TenantAllocationPools:
default: [{'start': 'fd00:fd00:fd00:5000::10', 'end': 'fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe'}]
description: Ip allocation pool range for the tenant network.
type: json
resources:
TenantNetwork:
type: OS::Neutron::Net
properties:
admin_state_up: {get_param: TenantNetAdminStateUp}
name: {get_param: TenantNetName}
shared: {get_param: TenantNetShared}
value_specs: {get_param: TenantNetValueSpecs}
TenantSubnet:
type: OS::Neutron::Subnet
properties:
ip_version: 6
ipv6_address_mode: slaac
ipv6_ra_mode: slaac
cidr: {get_param: TenantNetCidr}
name: {get_param: TenantSubnetName}
network: {get_resource: TenantNetwork}
allocation_pools: {get_param: TenantAllocationPools}
outputs:
OS::stack_id:
description: Neutron tenant network
value: {get_resource: TenantNetwork}

47
overcloud.yaml

@ -249,6 +249,10 @@ parameters:
type: number
default: 1
description: The number of neutron dhcp agents to schedule per network
NovaIPv6:
default: false
description: Enable IPv6 features in Nova
type: boolean
NovaPassword:
description: The password for the nova service account, used by nova-api.
type: string
@ -261,6 +265,10 @@ parameters:
default: false
description: Should MongoDb journaling be disabled
type: boolean
MongoDbIPv6:
default: false
description: Enable IPv6 if MongoDB VIP is IPv6
type: boolean
PublicVirtualFixedIPs:
default: []
description: >
@ -857,20 +865,20 @@ resources:
type: OS::TripleO::EndpointMap
properties:
CloudName: {get_param: CloudName}
CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
Controller:
type: OS::Heat::ResourceGroup
@ -965,9 +973,11 @@ resources:
NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
NeutronNetworkType: {get_param: NeutronNetworkType}
NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
NovaIPv6: {get_param: NovaIPv6}
NovaPassword: {get_param: NovaPassword}
NtpServer: {get_param: NtpServer}
MongoDbNoJournal: {get_param: MongoDbNoJournal}
MongoDbIPv6: {get_param: MongoDbIPv6}
PcsdPassword: {get_resource: PcsdPassword}
PublicVirtualInterface: {get_param: PublicVirtualInterface}
RabbitPassword: {get_param: RabbitPassword}
@ -980,6 +990,7 @@ resources:
SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
SwiftHashSuffix: {get_param: SwiftHashSuffix}
SwiftMountCheck: {get_param: SwiftMountCheck}
SwiftMinPartHours: {get_param: SwiftMinPartHours}
@ -995,11 +1006,13 @@ resources:
AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
@ -1128,7 +1141,7 @@ resources:
'%stackname%': {get_param: 'OS::stack_name'}
ServiceNetMap: {get_param: ServiceNetMap}
EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
ExtraConfig: {get_param: ExtraConfig}
BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
CloudDomain: {get_param: CloudDomain}
@ -1315,9 +1328,13 @@ resources:
properties:
ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
# No tenant or management VIP required
VipConfig:

6
puppet/ceph-storage.yaml

@ -177,11 +177,17 @@ resources:
properties:
ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
ExternalIp: {get_attr: [ExternalPort, ip_address]}
ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
StorageIp: {get_attr: [StoragePort, ip_address]}
StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
TenantIp: {get_attr: [TenantPort, ip_address]}
TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
ManagementIp: {get_attr: [ManagementPort, ip_address]}
ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
NetIpSubnetMap:
type: OS::TripleO::Network::Ports::NetIpSubnetMap

10
puppet/cinder-storage.yaml

@ -110,7 +110,7 @@ parameters:
GlanceApiVirtualIP:
type: string
default: ''
MysqlVirtualIP:
MysqlVirtualIPUri:
type: string
default: ''
NetworkDeploymentActions:
@ -229,11 +229,17 @@ resources:
properties:
ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
ExternalIp: {get_attr: [ExternalPort, ip_address]}
ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
StorageIp: {get_attr: [StoragePort, ip_address]}
StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
TenantIp: {get_attr: [TenantPort, ip_address]}
TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
ManagementIp: {get_attr: [ManagementPort, ip_address]}