Add virtual IPs for split out networks
authorDan Prince <dprince@redhat.com>
Thu, 28 May 2015 02:27:32 +0000 (22:27 -0400)
committerDan Prince <dprince@redhat.com>
Wed, 3 Jun 2015 12:58:13 +0000 (08:58 -0400)
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

overcloud-resource-registry-puppet.yaml
overcloud-resource-registry.yaml
overcloud-without-mergepy.yaml
puppet/vip-config.yaml [new file with mode: 0644]
vip-config.yaml [new file with mode: 0644]

index f2f1eee..b7e0c1f 100644 (file)
@@ -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
index b385c64..3d92082 100644 (file)
@@ -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
index 022e90b..c66becc 100644 (file)
@@ -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 (file)
index 0000000..a84def5
--- /dev/null
@@ -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 (file)
index 0000000..8f984ab
--- /dev/null
@@ -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}