Yuvipanda has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/208849

Change subject: zookeeper: Refactor roles to be more generic
......................................................................

zookeeper: Refactor roles to be more generic

People outside of analytics might want to use zookeeper, so
this refactors the zookeeper roles to be not specific to
analytics.

- Rename from role::analytics::* to role::*
- Use hiera for keeping list of zookeeper hosts, rather than
  realm branching
- Kill the ::config class
- Use includes rather than inheritance
- Use has_ganglia flag to enable / disable reporting to ganglia
  This enables it for prod and disables it on labs, which has
  no ganglia

Change-Id: I3bb793beb422c5d93f86a99bd703d4e4b3ff7147
---
M hieradata/eqiad.yaml
M manifests/role/analytics/hive.pp
M manifests/role/analytics/kafka.pp
D manifests/role/analytics/zookeeper.pp
A manifests/role/zookeeper.pp
M manifests/site.pp
6 files changed, 94 insertions(+), 119 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/49/208849/1

diff --git a/hieradata/eqiad.yaml b/hieradata/eqiad.yaml
index 39fe083..b66c0a1 100644
--- a/hieradata/eqiad.yaml
+++ b/hieradata/eqiad.yaml
@@ -18,3 +18,7 @@
   - '10.64.48.95:11211:1 "shard17"'
   - '10.64.48.96:11211:1 "shard18"'
 ganglia_class: "old"
+zookeeper_hosts:
+  analytics1023.eqiad.wmnet => '1023'
+  analytics1024.eqiad.wmnet => '1024'
+  analytics1025.eqiad.wmnet => '1025'
diff --git a/manifests/role/analytics/hive.pp b/manifests/role/analytics/hive.pp
index 750b1b4..0a66320 100644
--- a/manifests/role/analytics/hive.pp
+++ b/manifests/role/analytics/hive.pp
@@ -17,7 +17,6 @@
 #
 class role::analytics::hive::config {
     # require zookeeper config to get zookeeper hosts array.
-    include role::analytics::zookeeper::config
     include role::analytics::hadoop::config
 
     # Set this pretty high, to avoid limiting the number
@@ -38,7 +37,7 @@
     }
 
     # Hive uses Zookeeper for table locking.
-    $zookeeper_hosts = $role::analytics::zookeeper::config::hosts_array
+    $zookeeper_hosts = keys(hiera('zookeeper_hosts'))
 
     # We set support concurrency to false by default.
     # if someone needs to use it in their hive job, they
diff --git a/manifests/role/analytics/kafka.pp 
b/manifests/role/analytics/kafka.pp
index d63cb02..24c157f 100644
--- a/manifests/role/analytics/kafka.pp
+++ b/manifests/role/analytics/kafka.pp
@@ -15,8 +15,6 @@
 #   include role::analytics::kafka::server
 #
 class role::analytics::kafka::config {
-    require role::analytics::zookeeper::config
-
     if ($::realm == 'labs') {
         # In labs, this can be set via hiera, or default to $::instanceproject
         $kafka_cluster_name = 
hiera('role::analytics::kafka::config::kafka_cluster_name', $::instanceproject)
@@ -108,7 +106,7 @@
     } else {
         $brokers_array = []
     }
-    $zookeeper_hosts  = $role::analytics::zookeeper::config::hosts_array
+    $zookeeper_hosts  = keys(hiera('zookeeper_hosts'))
     $zookeeper_chroot = "/kafka/${kafka_cluster_name}"
     $zookeeper_url    = inline_template("<%= zookeeper_hosts.sort.join(',') 
%><%= zookeeper_chroot %>")
 }
diff --git a/manifests/role/analytics/zookeeper.pp 
b/manifests/role/analytics/zookeeper.pp
deleted file mode 100644
index 4776a76..0000000
--- a/manifests/role/analytics/zookeeper.pp
+++ /dev/null
@@ -1,113 +0,0 @@
-# role/analytics/zookeeper.pp
-#
-# Role classes for Analytics Zookeeper nodes.
-# These role classes will configure Zookeeper properly in either
-# the Analytics labs or Analytics production environments.
-#
-# Usage:
-#
-# If you only need Zookeeper client configs to talk to Zookeeper servers:
-#   include role::analytics::zookeeper::client
-#
-# If you want to set up a Zookeeper server:
-#   include role::analytics::zookeeper::server
-#
-
-# == Class role::analytics::zookeeper::config
-# Bare config role class for client and server classes.
-# You may include this class manually if you need to know use the
-# $role::analytics::zookeeper::hosts or
-# $role::analytics::zookeeper::hosts_array variables.
-#
-class role::analytics::zookeeper::config {
-
-    # Lookup labs zookeeper hosts from hiera.
-    if $::realm == 'labs' {
-        $hosts   = hiera('role::analytics::zookeeper::config::hosts', { 
"${::fqdn}" => '1' } )
-    }
-    # else production
-    else {
-        $hosts = {
-            'analytics1023.eqiad.wmnet' => '1023',
-            'analytics1024.eqiad.wmnet' => '1024',
-            'analytics1025.eqiad.wmnet' => '1025',
-        }
-    }
-
-    # maintain a $hosts_array variable here for
-    # cases where you need a list of zookeeper hosts,
-    # rather than a hash with ZK IDs.  (This is used
-    # in role/analytics/hive.pp, for example.)
-    $hosts_array = keys($hosts)
-}
-
-
-# == Class role::analytics::zookeeper::client
-#
-class role::analytics::zookeeper::client {
-    require role::analytics::zookeeper::config
-
-    $version = $::lsbdistcodename ? {
-        'trusty'  => '3.4.5+dfsg-1',
-        'precise' => '3.3.5+dfsg1-1ubuntu1',
-    }
-
-    class { '::zookeeper':
-        hosts   => $role::analytics::zookeeper::config::hosts,
-        version => $version,
-        # Default tick_time is 2000ms, this should allow a max
-        # of 16 seconds of latency for Zookeeper client sessions.
-        # See comments in role::analytics::kafka::server for more info.
-        sync_limit => 8,
-    }
-}
-
-# == Class role::analytics::zookeeper::server
-#
-class role::analytics::zookeeper::server inherits 
role::analytics::zookeeper::client {
-    system::role { 'role::analytics::zookeeper::server':
-        description => 'Analytics Cluster Zookeeper Server'
-    }
-
-    class { '::zookeeper::server': }
-
-    if ($::realm == 'labs') {
-        $ganglia_host = 'aggregator.eqiad.wmflabs'
-        $ganglia_port = 50090
-    }
-    else {
-        # TODO: use variables from new ganglia module once it is finished.
-        $ganglia_host = '239.192.1.32'
-        $ganglia_port = 8649
-
-        # Only allow hosts in the Analytics Cluster to
-        # connect to the Zookeeper admin client port.
-        #
-        # We don't include base::firewall yet, but do
-        # want to restrict access to administrative
-        # services.  We need defs.erb to be rendered
-        # so we can reference defined networks in rules.
-        # NOTE:  This should be removed if we get a useable
-        # base::firewall class.
-        include ferm
-        include network::constants
-        ferm::conf { 'defs':
-            # defs can always be present.
-            # They don't actually do firewalling.
-            ensure  => 'present',
-            prio    => '00',
-            content => template('base/firewall/defs.erb')
-        }
-
-        ferm::service { 'zookeeper':
-            proto  => 'tcp',
-            # Zookeeper client, protocol, and jmx listen ports.
-            port   => "(2181 2182 2183 ${$::zookeeper::server::jmx_port})",
-            srange => '($ANALYTICS_NETWORKS)',
-        }
-        # Use jmxtrans for sending metrics to ganglia
-        class { 'zookeeper::jmxtrans':
-            ganglia => "${ganglia_host}:${ganglia_port}",
-        }
-    }
-}
diff --git a/manifests/role/zookeeper.pp b/manifests/role/zookeeper.pp
new file mode 100644
index 0000000..8a67c0b
--- /dev/null
+++ b/manifests/role/zookeeper.pp
@@ -0,0 +1,87 @@
+# role/zookeeper.pp
+#
+# Classes for Zookeeper nodes.
+# These role classes will configure Zookeeper properly in either
+# the labs or production environments.
+#
+# Usage:
+#
+# If you only need Zookeeper client configs to talk to Zookeeper servers:
+#   include role::zookeeper::client
+#
+# If you want to set up a Zookeeper server:
+#   include role::zookeeper::server
+#
+#
+# You need to include the hiera variable 'zookeeper_hosts' as a
+# assoc array with key being name of node and value being zookeeper id
+# for the client / server roles to work.
+
+# == Class role::zookeeper::client
+#
+class role::zookeeper::client {
+
+    $version = $::lsbdistcodename ? {
+        'trusty'  => '3.4.5+dfsg-1',
+        'precise' => '3.3.5+dfsg1-1ubuntu1',
+    }
+
+    $hosts = hiera('zookeeper_hosts')
+
+    class { '::zookeeper':
+        hosts   => $hosts,
+        version => $version,
+        # Default tick_time is 2000ms, this should allow a max
+        # of 16 seconds of latency for Zookeeper client sessions.
+        # See comments in role::analytics::kafka::server for more info.
+        sync_limit => 8,
+    }
+}
+
+# == Class role::zookeeper::server
+#
+class role::zookeeper::server {
+    system::role { 'role::zookeeper::server':
+        description => 'Analytics Cluster Zookeeper Server'
+    }
+
+    include role::zookeeper::client
+
+    class { '::zookeeper::server': }
+
+    if hiera('has_ganglia', true) {
+        # TODO: use variables from new ganglia module once it is finished.
+        $ganglia_host = '239.192.1.32'
+        $ganglia_port = 8649
+
+        # Only allow hosts in the Analytics Cluster to
+        # connect to the Zookeeper admin client port.
+        #
+        # We don't include base::firewall yet, but do
+        # want to restrict access to administrative
+        # services.  We need defs.erb to be rendered
+        # so we can reference defined networks in rules.
+        # NOTE:  This should be removed if we get a useable
+        # base::firewall class.
+        include ferm
+        include network::constants
+        ferm::conf { 'defs':
+            # defs can always be present.
+            # They don't actually do firewalling.
+            ensure  => 'present',
+            prio    => '00',
+            content => template('base/firewall/defs.erb')
+        }
+
+        ferm::service { 'zookeeper':
+            proto  => 'tcp',
+            # Zookeeper client, protocol, and jmx listen ports.
+            port   => "(2181 2182 2183 ${$::zookeeper::server::jmx_port})",
+            srange => '($ANALYTICS_NETWORKS)',
+        }
+        # Use jmxtrans for sending metrics to ganglia
+        class { 'zookeeper::jmxtrans':
+            ganglia => "${ganglia_host}:${ganglia_port}",
+        }
+    }
+}
diff --git a/manifests/site.pp b/manifests/site.pp
index 02363d9..f684157 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -142,7 +142,7 @@
 node /analytics102[345].eqiad.wmnet/ {
     role analytics
     include standard
-    include role::analytics::zookeeper::server
+    include role::zookeeper::server
 }
 
 # Analytics1026 is the Impala master

-- 
To view, visit https://gerrit.wikimedia.org/r/208849
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3bb793beb422c5d93f86a99bd703d4e4b3ff7147
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Yuvipanda <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to