aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dprince@redhat.com>2015-05-27 22:27:32 -0400
committerDan Prince <dprince@redhat.com>2015-06-03 08:58:13 -0400
commit36a2aa0dd28ed664fd91b039c01c83718bf817ad (patch)
treed858e4c413d53a7615a013289be9773686480e9c
parenta3a88cd3c0c9491877c4278753ac9988a121abbb (diff)
Add virtual IPs for split out networks
This patch adds VIPs for the internal_api, storage, and storage management networks. For puppet these are persisted into a local vip-config hieradata file which is then used by puppet-tripleo's loadbalancer module to apply per-service VIP settings. Change-Id: I909c3bdc9d17a8e15351f4797287769e3f76c849
-rw-r--r--overcloud-resource-registry-puppet.yaml2
-rw-r--r--overcloud-resource-registry.yaml1
-rw-r--r--overcloud-without-mergepy.yaml73
-rw-r--r--puppet/vip-config.yaml38
-rw-r--r--vip-config.yaml16
5 files changed, 124 insertions, 6 deletions
diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml
index f2f1eee4..b7e0c1f8 100644
--- a/overcloud-resource-registry-puppet.yaml
+++ b/overcloud-resource-registry-puppet.yaml
@@ -26,6 +26,8 @@ resource_registry:
# TripleO overcloud networks
OS::TripleO::Network: network/networks.yaml
+ OS::TripleO::VipConfig: puppet/vip-config.yaml
+
OS::TripleO::Network::External: network/noop.yaml
OS::TripleO::Network::InternalApi: network/noop.yaml
diff --git a/overcloud-resource-registry.yaml b/overcloud-resource-registry.yaml
index b385c64a..3d92082c 100644
--- a/overcloud-resource-registry.yaml
+++ b/overcloud-resource-registry.yaml
@@ -24,6 +24,7 @@ resource_registry:
# TripleO overcloud networks
OS::TripleO::Network: network/networks.yaml
+ OS::TripleO::VipConfig: vip-config.yaml
OS::TripleO::Network::External: network/noop.yaml
OS::TripleO::Network::InternalApi: network/noop.yaml
diff --git a/overcloud-without-mergepy.yaml b/overcloud-without-mergepy.yaml
index 022e90b3..c66beccc 100644
--- a/overcloud-without-mergepy.yaml
+++ b/overcloud-without-mergepy.yaml
@@ -680,17 +680,17 @@ resources:
Debug: {get_param: Debug}
ExtraConfig: {get_param: ExtraConfig}
Flavor: {get_param: OvercloudComputeFlavor}
- GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
GlancePort: {get_param: GlancePort}
GlanceProtocol: {get_param: GlanceProtocol}
Image: {get_param: NovaImage}
ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
KeyName: {get_param: KeyName}
- KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ KeystoneHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
- NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
NeutronNetworkType: {get_param: NeutronNetworkType}
NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
@@ -705,7 +705,7 @@ resources:
# L3 HA and Failover is not relevant for Computes, should be removed
NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
NeutronL3HA: {get_param: NeutronL3HA}
- NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
NovaComputeDriver: {get_param: NovaComputeDriver}
NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
@@ -713,7 +713,7 @@ resources:
NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
NovaPassword: {get_param: NovaPassword}
NtpServer: {get_param: NtpServer}
- RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
RabbitPassword: {get_param: RabbitPassword}
RabbitUserName: {get_param: RabbitUserName}
RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
@@ -843,6 +843,7 @@ resources:
fixed_ips: {get_param: ControlFixedIPs}
replacement_policy: AUTO
+ # same as external
PublicVirtualIP:
type: OS::Neutron::Port
depends_on: Networks
@@ -852,6 +853,66 @@ resources:
fixed_ips: {get_param: PublicVirtualFixedIPs}
replacement_policy: AUTO
+ InternalApiVirtualIP:
+ depends_on: Networks
+ type: OS::TripleO::Controller::Ports::InternalApiPort
+ properties:
+ ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ PortName: internal_api_virtual_ip
+
+ StorageVirtualIP:
+ depends_on: Networks
+ type: OS::TripleO::Controller::Ports::StoragePort
+ properties:
+ ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ PortName: storage_virtual_ip
+
+ StorageMgmtVirtualIP:
+ depends_on: Networks
+ type: OS::TripleO::Controller::Ports::StorageMgmtPort
+ properties:
+ ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ PortName: storage_management_virtual_ip
+
+ VipMap:
+ type: OS::TripleO::Network::Ports::NetIpMap
+ properties:
+ ExternalIp: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
+ InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
+ StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
+ StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
+ # No tenant VIP required
+
+ VipConfig:
+ type: OS::TripleO::VipConfig
+
+ VipDeployment:
+ type: OS::Heat::StructuredDeployments
+ properties:
+ config: {get_resource: VipConfig}
+ servers: {get_attr: [Controller, attributes, nova_server_resource]}
+ input_values:
+ # service VIP mappings
+ keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
+ keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
+ neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
+ cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
+ glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
+ glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
+ swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
+ nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
+ nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
+ ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
+ heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
+ horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
+ redis_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
+ mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
+ rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
+ # direct configuration of Virtual IPs for each network
+ internal_api_virtual_ip: {get_attr: [InternalApiVirtualIP, ip_address]}
+ storage_virtual_ip: {get_attr: [StorageVirtualIP, ip_address]}
+ storage_mgmt_virtual_ip: {get_attr: [StorageMgmtVirtualIP, ip_address]}
+
ControllerBootstrapNodeConfig:
type: OS::TripleO::BootstrapNode::SoftwareConfig
properties:
@@ -1003,5 +1064,5 @@ outputs:
list_join:
- ''
- - http://
- - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+ - {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
- :5000/v2.0/
diff --git a/puppet/vip-config.yaml b/puppet/vip-config.yaml
new file mode 100644
index 00000000..a84def5d
--- /dev/null
+++ b/puppet/vip-config.yaml
@@ -0,0 +1,38 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Configure hieradata for service -> virtual IP mappings.
+
+resources:
+ VipConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ hiera:
+ datafiles:
+ vip_data:
+ mapped_data:
+ keystone_admin_api_vip: {get_input: keystone_admin_api_vip}
+ keystone_public_api_vip: {get_input: keystone_public_api_vip}
+ neutron_api_vip: {get_input: neutron_api_vip}
+ cinder_api_vip: {get_input: cinder_api_vip}
+ glance_api_vip: {get_input: glance_api_vip}
+ glance_registry_vip: {get_input: glance_registry_vip}
+ swift_proxy_vip: {get_input: swift_proxy_vip}
+ nova_api_vip: {get_input: nova_api_vip}
+ nova_metadata_vip: {get_input: nova_metadata_vip}
+ ceilometer_api_vip: {get_input: ceilometer_api_vip}
+ heat_api_vip: {get_input: heat_api_vip}
+ horizon_vip: {get_input: horizon_vip}
+ redis_vip: {get_input: redis_vip}
+ mysql_vip: {get_input: mysql_vip}
+ mysql_vip: {get_input: mysql_vip}
+ tripleo::loadbalancer::internal_api_virtual_ip: {get_input: internal_api_virtual_ip}
+ tripleo::loadbalancer::storage_virtual_ip: {get_input: storage_virtual_ip}
+ tripleo::loadbalancer::storage_mgmt_virtual_ip: {get_input: storage_mgmt_virtual_ip}
+
+outputs:
+ OS::stack_id:
+ description: The VipConfigImpl resource.
+ value: {get_resource: VipConfigImpl}
diff --git a/vip-config.yaml b/vip-config.yaml
new file mode 100644
index 00000000..8f984ab7
--- /dev/null
+++ b/vip-config.yaml
@@ -0,0 +1,16 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Configure hieradata for service -> virtual IP mappings.
+
+resources:
+ VipConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ # by default does nothing
+
+outputs:
+ OS::stack_id:
+ description: The VipConfigImpl resource.
+ value: {get_resource: VipConfigImpl}