Adds etcd
authorFeng Pan <fpan@redhat.com>
Wed, 14 Dec 2016 03:36:10 +0000 (22:36 -0500)
committerFeng Pan <fpan@redhat.com>
Thu, 19 Jan 2017 04:58:11 +0000 (23:58 -0500)
etcd is used by networking-vpp ML2 driver as the messaging mechanism. This
patch adds etcd service which can be used by other services.

Implements: blueprint fdio-integration-tripleo

Change-Id: Idaa3e3deddf9be3d278e90b569466c2717e2d517
Signed-off-by: Feng Pan <fpan@redhat.com>
Puppetfile_extras
manifests/haproxy.pp
manifests/profile/base/etcd.pp [new file with mode: 0644]

index b9f664f..ce158e4 100644 (file)
@@ -29,3 +29,6 @@ mod 'datacat',
   :git => 'https://github.com/richardc/puppet-datacat',
   :ref => '0.6.2'
 
+mod 'etcd',
+  :git => 'https://github.com/cristifalcas/puppet-etcd',
+  :ref => '1.10.0'
\ No newline at end of file
index cc21e37..09bd5ec 100644 (file)
 #  (optional) Enable or not RabbitMQ binding
 #  Defaults to false
 #
+# [*etcd*]
+#  (optional) Enable or not Etcd binding
+#  Defaults to hiera('etcd_enabled', false)
+#
 # [*docker_registry*]
 #  (optional) Enable or not the Docker Registry API binding
 #  Defaults to hiera('enable_docker_registry', false)
@@ -526,6 +530,7 @@ class tripleo::haproxy (
   $mysql_clustercheck          = false,
   $mysql_member_options        = undef,
   $rabbitmq                    = false,
+  $etcd                        = hiera('etcd_enabled', false),
   $docker_registry             = hiera('enable_docker_registry', false),
   $redis                       = hiera('redis_enabled', false),
   $redis_password              = undef,
@@ -713,6 +718,11 @@ class tripleo::haproxy (
     "${redis_vip}:6379" => $haproxy_listen_bind_param,
   }
 
+  $etcd_vip = hiera('etcd_vip', $controller_virtual_ip)
+  $etcd_bind_opts = {
+    "${etcd_vip}:2379" => $haproxy_listen_bind_param,
+  }
+
   class { '::haproxy':
     service_manage   => $haproxy_service_manage,
     global_options   => {
@@ -1255,6 +1265,23 @@ class tripleo::haproxy (
     }
   }
 
+  if $etcd {
+    haproxy::listen { 'etcd':
+      bind             => $etcd_bind_opts,
+      options          => {
+        'balance' => 'source',
+      },
+      collect_exported => false,
+    }
+    haproxy::balancermember { 'etcd':
+      listening_service => 'etcd',
+      ports             => '2379',
+      ipaddresses       => hiera('etcd_node_ips', $controller_hosts_real),
+      server_names      => hiera('etcd_node_names', $controller_hosts_names_real),
+      options           => $haproxy_member_options,
+    }
+  }
+
   if $docker_registry {
     ::tripleo::haproxy::endpoint { 'docker-registry':
       public_virtual_ip => $public_virtual_ip,
diff --git a/manifests/profile/base/etcd.pp b/manifests/profile/base/etcd.pp
new file mode 100644 (file)
index 0000000..505e29f
--- /dev/null
@@ -0,0 +1,66 @@
+# Copyright 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# == Class: tripleo::profile::base::etcd
+#
+# etcd profile for tripleo
+#
+# === Parameters
+#
+# [*bind_ip*]
+#   (optional) IP to bind etcd service to.
+#   Defaults to '127.0.0.1'.
+#
+# [*client_port*]
+#   (optional) etcd client listening port.
+#   Defaults to '2379'.
+#
+# [*peer_port*]
+#   (optional) etcd peer listening port.
+#   Defaults to '2380'.
+#
+# [*nodes*]
+#   (Optional) Array of host(s) for etcd nodes.
+#   Defaults to hiera('etcd_node_ips', []).
+#
+# [*step*]
+#   (Optional) The current step in deployment. See tripleo-heat-templates
+#   for more details.
+#   Defaults to hiera('step')
+#
+class tripleo::profile::base::etcd (
+  $bind_ip     = '127.0.0.1',
+  $client_port = '2379',
+  $peer_port   = '2380',
+  $nodes       = hiera('etcd_node_names', []),
+  $step        = hiera('step'),
+) {
+  if $step >= 1 {
+    if count($nodes) > 1 {
+      $cluster_enabled = true
+    } else {
+      $cluster_enabled = false
+    }
+
+    class {'::etcd':
+      listen_client_urls          => "http://${bind_ip}:${client_port}",
+      advertise_client_urls       => "http://${bind_ip}:${client_port}",
+      listen_peer_urls            => "http://${bind_ip}:${peer_port}",
+      initial_advertise_peer_urls => "http://${bind_ip}:${peer_port}",
+      initial_cluster             => regsubst($nodes, '.+', "\\0=http://\\0:${peer_port}"),
+      cluster_enabled             => $cluster_enabled,
+      proxy                       => 'off',
+    }
+  }
+}