Mark Bergsma has submitted this change and it was merged.

Change subject: LVS: Convert to a module
......................................................................


LVS: Convert to a module

Change-Id: I07cf6227f3d443df006cb18c2dbf73b9c03ad280
---
M manifests/site.pp
R modules/lvs/files/pybal/check-apache
A modules/lvs/manifests/balancer.pp
A modules/lvs/manifests/balancer/runcommand.pp
R modules/lvs/manifests/configuration.pp
A modules/lvs/manifests/init.pp
A modules/lvs/manifests/monitor.pp
A modules/lvs/manifests/realserver.pp
R modules/lvs/templates/wikimedia-lvs-realserver.erb
9 files changed, 330 insertions(+), 327 deletions(-)

Approvals:
  Mark Bergsma: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/manifests/site.pp b/manifests/site.pp
index 6484fbb..d421c42 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -14,7 +14,6 @@
 import "gerrit.pp"
 import "imagescaler.pp"
 import "iptables.pp"
-import "lvs.pp"
 import "mail.pp"
 import "memcached.pp"
 import "misc/*.pp"
diff --git a/files/pybal/check-apache b/modules/lvs/files/pybal/check-apache
similarity index 100%
rename from files/pybal/check-apache
rename to modules/lvs/files/pybal/check-apache
diff --git a/modules/lvs/manifests/balancer.pp 
b/modules/lvs/manifests/balancer.pp
new file mode 100644
index 0000000..c3118a3
--- /dev/null
+++ b/modules/lvs/manifests/balancer.pp
@@ -0,0 +1,59 @@
+# lvs/balancer.pp
+
+# Class: lvs::balancer
+# Parameters:
+#   - $service_ips: list of service IPs to bind to loopback
+#   - $lvs_services: A configuration hash of LVS services
+#   - $lvs_class_hosts: A configuration hash of PyBal class hosts
+#   - $pybal_global_options: A configuration hash of PyBal global options
+#   - $site: Site name used in PyBal configuration
+class lvs::balancer(
+    $service_ips=[],
+    $lvs_services,
+    $lvs_class_hosts,
+    $pybal_global_options,
+    $site
+    ) {
+
+    include pybal
+
+    system::role { "lvs::balancer": description => "LVS balancer", ensure => 
absent }
+
+    package { ethtool:
+        ensure => installed;
+    }
+
+    class { 'pybal::configuration':
+        global_options => $pybal_global_options,
+        lvs_services => $lvs_services,
+        lvs_class_hosts => $lvs_class_hosts,
+        site => $site
+    }
+
+    # Tune the ip_vs conn_tab_bits parameter
+    file { "/etc/modprobe.d/lvs.conf":
+        content => "# This file is managed by Puppet!\noptions ip_vs 
conn_tab_bits=20\n";
+    }
+
+    # Bind balancer IPs to the loopback interface
+    class { "lvs::realserver": realserver_ips => $service_ips }
+
+    sysctl::parameters { 'lvs':
+        values => {
+            # Turn OFF RP filter
+            'net.ipv4.conf.default.rp_filter' => 0,
+            'net.ipv4.conf.all.rp_filter'     => 0,
+
+            # Turn off IP forwarding for security
+            # LVS servers sit on all subnets
+            'net.ipv4.ip_forward'             => 0,
+
+            # Disable the route cache
+            # It is prone to DDoS attacks, and was even
+            # removed in >= 3.6 kernels.
+            'net.ipv4.rt_cache_rebuild_count' => -1,
+        },
+    }
+
+    generic::upstart_job { "enable-rps": install => "true", start => "true" }
+}
diff --git a/modules/lvs/manifests/balancer/runcommand.pp 
b/modules/lvs/manifests/balancer/runcommand.pp
new file mode 100644
index 0000000..fd57c38
--- /dev/null
+++ b/modules/lvs/manifests/balancer/runcommand.pp
@@ -0,0 +1,24 @@
+# lvs/balancer/runcommand.pp
+
+# Supporting the PyBal RunCommand monitor
+class lvs::balancer::runcommand {
+    Class[lvs::balancer] -> Class[lvs::balancer::runcommand]
+
+    file {
+        "/etc/pybal/runcommand":
+            owner => root,
+            group => root,
+            mode => 0755,
+            ensure => directory;
+        "/etc/pybal/runcommand/check-apache":
+            owner => root,
+            group => root,
+            mode => 0555,
+            source => "puppet:///modules/${module_name}/pybal/check-apache";
+        "/root/.ssh/pybal-check":
+            owner => root,
+            group => root,
+            mode => 0600,
+            source => "puppet:///private/pybal/pybal-check";
+    }
+}
diff --git a/manifests/lvs.pp b/modules/lvs/manifests/configuration.pp
similarity index 68%
rename from manifests/lvs.pp
rename to modules/lvs/manifests/configuration.pp
index 701b2ef..0c59d3f 100644
--- a/manifests/lvs.pp
+++ b/modules/lvs/manifests/configuration.pp
@@ -1,6 +1,5 @@
-# lvs.pp
+# lvs/configuration.pp
 
-# Global options
 class lvs::configuration {
 
     $lvs_class_hosts = {
@@ -797,329 +796,5 @@
                 'IdleConnection' => $idleconnection_monitor_options,
             },
         },
-    }
-}
-
-# Class: lvs::balancer
-# Parameters:
-#   - $service_ips: list of service IPs to bind to loopback
-#   - $lvs_services: A configuration hash of LVS services
-#   - $lvs_class_hosts: A configuration hash of PyBal class hosts
-#   - $pybal_global_options: A configuration hash of PyBal global options
-#   - $site: Site name used in PyBal configuration
-class lvs::balancer(
-    $service_ips=[],
-    $lvs_services,
-    $lvs_class_hosts,
-    $pybal_global_options,
-    $site
-    ) {
-
-    include pybal
-
-    system::role { "lvs::balancer": description => "LVS balancer", ensure => 
absent }
-
-    package { ethtool:
-        ensure => installed;
-    }
-
-    class { 'pybal::configuration':
-        global_options => $pybal_global_options,
-        lvs_services => $lvs_services,
-        lvs_class_hosts => $lvs_class_hosts,
-        site => $site
-    }
-
-    # Tune the ip_vs conn_tab_bits parameter
-    file { "/etc/modprobe.d/lvs.conf":
-        content => "# This file is managed by Puppet!\noptions ip_vs 
conn_tab_bits=20\n";
-    }
-
-    # Bind balancer IPs to the loopback interface
-    class { "lvs::realserver": realserver_ips => $service_ips }
-
-    sysctl::parameters { 'lvs':
-        values => {
-            # Turn OFF RP filter
-            'net.ipv4.conf.default.rp_filter' => 0,
-            'net.ipv4.conf.all.rp_filter'     => 0,
-
-            # Turn off IP forwarding for security
-            # LVS servers sit on all subnets
-            'net.ipv4.ip_forward'             => 0,
-
-            # Disable the route cache
-            # It is prone to DDoS attacks, and was even
-            # removed in >= 3.6 kernels.
-            'net.ipv4.rt_cache_rebuild_count' => -1,
-        },
-    }
-
-    generic::upstart_job { "enable-rps": install => "true", start => "true" }
-}
-
-# Supporting the PyBal RunCommand monitor
-class lvs::balancer::runcommand {
-    Class[lvs::balancer] -> Class[lvs::balancer::runcommand]
-
-    file {
-        "/etc/pybal/runcommand":
-            owner => root,
-            group => root,
-            mode => 0755,
-            ensure => directory;
-        "/etc/pybal/runcommand/check-apache":
-            owner => root,
-            group => root,
-            mode => 0755,
-            source => "puppet:///files/pybal/check-apache";
-        "/root/.ssh/pybal-check":
-            owner => root,
-            group => root,
-            mode => 0600,
-            source => "puppet:///private/pybal/pybal-check";
-    }
-}
-
-# Class: lvs::realserver
-#
-# Sets up a server to be used as a 'real server' by LVS
-#
-# Parameters:
-#   - $realserver_ips
-#       Array or hash (name => ip) of service IPs to answer on
-class lvs::realserver($realserver_ips=[]) {
-
-    file { "/etc/default/wikimedia-lvs-realserver":
-        mode => 0444,
-        owner => root,
-        group => root,
-        content => template("lvs/wikimedia-lvs-realserver.erb");
-    }
-
-    exec { "/usr/sbin/dpkg-reconfigure -p critical -f noninteractive 
wikimedia-lvs-realserver":
-        require => Package["wikimedia-lvs-realserver"],
-        path => "/bin:/sbin:/usr/bin:/usr/sbin",
-        subscribe => File["/etc/default/wikimedia-lvs-realserver"],
-        refreshonly => true;
-    }
-
-    package { wikimedia-lvs-realserver:
-        ensure => latest,
-        require => File["/etc/default/wikimedia-lvs-realserver"];
-    }
-}
-
-define lvs::monitor_service_custom ( $description="LVS", $ip_address, 
$port=80, $check_command, $retries=3 ) {
-    # Virtual resource for the monitoring host
-    @monitor_host { $title: ip_address => $ip_address, group => "lvs", 
critical => "true" }
-    @monitor_service { $title: host => $title, group => "lvs", description => 
$description, check_command => $check_command, critical => "true", retries => 
$retries }
-}
-
-define lvs::monitor_service_http ( $ip_address, $check_command, 
$critical="true", $contact_group="admins" ) {
-    # Virtual resource for the monitoring host
-    @monitor_host { $title: ip_address => $ip_address, group => "lvs", 
critical => "true", contact_group => $contact_group }
-    @monitor_service { $title: host => $title, group => "lvs", description => 
"LVS HTTP IPv4", check_command => $check_command, critical => $critical, 
contact_group => $contact_group }
-}
-
-define lvs::monitor_service_https ( $ip_address, $check_command, $port=443, 
$critical="true" ) {
-    $title_https = "${title}_https"
-    # Virtual resource for the monitoring host
-    @monitor_host { $title_https: ip_address => $ip_address, group => "lvs", 
critical => "true" }
-    @monitor_service { $title_https: host => $title, group => "lvs", 
description => "LVS HTTPS IPv4", check_command => $check_command, critical => 
$critical }
-}
-
-define lvs::monitor_service_http_https ( $ip_address, $uri, $critical="true", 
$contact_group="admins" ) {
-    # Virtual resource for the monitoring host
-    @monitor_host { $title:
-        ip_address => $ip_address,
-        group => "lvs",
-        critical => "true",
-        contact_group => $contact_group
-    }
-
-    @monitor_service { $title:
-        host => $title,
-        group => "lvs",
-        description => "LVS HTTP IPv4",
-        check_command => "check_http_lvs!${uri}",
-        critical => $critical
-    }
-
-    @monitor_service { "${title}_https":
-        host => $title,
-        group => "lvs",
-        description => "LVS HTTPS IPv4",
-        check_command => "check_https_url!${uri}",
-        critical => $critical
-    }
-}
-
-define lvs::monitor_service6_http_https ( $ip_address, $uri, $critical="true" 
) {
-    # Virtual resource for the monitoring host
-    @monitor_host { "${title}_ipv6":
-        ip_address => $ip_address,
-        group => "lvs",
-        critical => "true"
-    }
-
-    @monitor_service { "${title}_ipv6":
-        host => "${title}_ipv6",
-        group => "lvs",
-        description => "LVS HTTP IPv6",
-        check_command => "check_http_lvs!${uri}",
-        critical => $critical
-    }
-
-    @monitor_service { "${title}_ipv6_https":
-        host => "${title}_ipv6",
-        group => "lvs",
-        description => "LVS HTTPS IPv6",
-        check_command => "check_https_url!${uri}",
-        critical => $critical
-    }
-}
-
-class lvs::monitor {
-    include lvs::configuration
-
-    $ip = $lvs::configuration::lvs_service_ips['production']
-
-    # INTERNAL
-
-    lvs::monitor_service_http { "appservers.svc.pmtpa.wmnet": ip_address => 
"10.2.1.1", check_command => "check_http_lvs!en.wikipedia.org!/wiki/Main_Page" }
-    lvs::monitor_service_http { "appservers.svc.eqiad.wmnet": ip_address => 
"10.2.2.1", check_command => "check_http_lvs!en.wikipedia.org!/wiki/Main_Page" }
-    lvs::monitor_service_http { "api.svc.pmtpa.wmnet": ip_address => 
"10.2.1.22", check_command => 
"check_http_lvs!en.wikipedia.org!/w/api.php?action=query&meta=siteinfo" }
-    lvs::monitor_service_http { "api.svc.eqiad.wmnet": ip_address => 
"10.2.2.22", check_command => 
"check_http_lvs!en.wikipedia.org!/w/api.php?action=query&meta=siteinfo" }
-    lvs::monitor_service_http { "rendering.svc.pmtpa.wmnet": ip_address => 
"10.2.1.21", check_command => "check_http_lvs!en.wikipedia.org!/wiki/Main_Page" 
}
-    lvs::monitor_service_http { "rendering.svc.eqiad.wmnet": ip_address => 
"10.2.2.21", check_command => "check_http_lvs!en.wikipedia.org!/wiki/Main_Page" 
}
-    lvs::monitor_service_http { "ms-fe.pmtpa.wmnet": ip_address => 
"10.2.1.27", check_command => 
"check_http_lvs!ms-fe.pmtpa.wmnet!/monitoring/backend" }
-    lvs::monitor_service_http { "ms-fe.eqiad.wmnet": ip_address => 
"10.2.2.27", check_command => 
"check_http_lvs!ms-fe.eqiad.wmnet!/monitoring/backend" }
-    lvs::monitor_service_http { "parsoid.svc.eqiad.wmnet": ip_address => 
"10.2.2.28", check_command => "check_http_on_port!8000", contact_group => 
"admins,parsoid" }
-    lvs::monitor_service_http { "search.svc.eqiad.wmnet": ip_address => 
"10.2.2.30", check_command => "check_http_on_port!9200", contact_group => 
"admins" }
-
-    lvs::monitor_service_custom { "search-pool1.svc.eqiad.wmnet": ip_address 
=> "10.2.2.11", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
-    lvs::monitor_service_custom { "search-pool2.svc.eqiad.wmnet": ip_address 
=> "10.2.2.12", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
-    lvs::monitor_service_custom { "search-pool3.svc.eqiad.wmnet": ip_address 
=> "10.2.2.13", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
-    lvs::monitor_service_custom { "search-pool4.svc.eqiad.wmnet": ip_address 
=> "10.2.2.14", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
-    lvs::monitor_service_custom { "search-pool5.svc.eqiad.wmnet": ip_address 
=> "10.2.2.16", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
-    lvs::monitor_service_custom { "search-prefix.svc.eqiad.wmnet": ip_address 
=> "10.2.2.15", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
-
-    # PMTPA
-
-    # FIXME: remove after pmtpa decommissioning
-    lvs::monitor_service6_custom { "payments.wikimedia.org":
-        ip_address => "208.80.155.5",
-        port => 443,
-        check_command => 
"check_https_url!payments.wikimedia.org!/index.php/Special:SystemStatus",
-        retries => 20
-    }
-
-    # EQIAD
-    lvs::monitor_service_http_https {
-        'text-lb.eqiad.wikimedia.org':
-            ip_address => $ip['text']['eqiad']['textlb'],
-            uri => 'en.wikipedia.org!/wiki/Main_Page';
-        'bits-lb.eqiad.wikimedia.org':
-            ip_address => $ip['bits']['eqiad']['bitslb'],
-            uri => 
'bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png';
-        'upload-lb.eqiad.wikimedia.org':
-            ip_address => $ip['upload']['eqiad']['uploadlb'],
-            uri => 'upload.wikimedia.org!/monitoring/backend';
-        'mobile-lb.eqiad.wikimedia.org':
-            ip_address => $ip['mobile']['eqiad']['mobilelb'],
-            uri => 'en.m.wikipedia.org!/wiki/Main_Page';
-        'misc-web-lb.eqiad.wikimedia.org':
-            ip_address => $ip['misc_web']['eqiad']['misc_web'],
-            uri => 'varnishcheck!/';
-    }
-
-    lvs::monitor_service6_http_https {
-        'text-lb.eqiad.wikimedia.org':
-            ip_address => $ip['text']['eqiad']['textlb6'],
-            uri => 'en.wikipedia.org!/wiki/Main_Page';
-        'bits-lb.eqiad.wikimedia.org':
-            ip_address => $ip['bits']['eqiad']['bitslb6'],
-            uri => 
'bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png';
-        'upload-lb.eqiad.wikimedia.org':
-            ip_address => $ip['upload']['eqiad']['uploadlb6'],
-            uri => 'upload.wikimedia.org!/monitoring/backend';
-        'mobile-lb.eqiad.wikimedia.org':
-            ip_address => $ip['mobile']['eqiad']['mobilelb6'],
-            uri => 'en.m.wikipedia.org!/wiki/Main_Page';
-        'misc-web-lb.eqiad.wikimedia.org':
-            ip_address => $ip['misc_web']['eqiad']['misc_web6'],
-            uri => 'varnishcheck!/';
-    }
-
-    lvs::monitor_service_http { 'parsoid-lb.eqiad.wikimedia.org':
-        ip_address => $ip['parsoidcache']['eqiad']['parsoidlb'],
-        check_command => "check_http_on_port!80",
-        contact_group => "admins,parsoid"
-    }
-    # TODO: ipv6
-
-    # ESAMS
-
-    lvs::monitor_service_http_https {
-        "text-lb.esams.wikimedia.org":
-            ip_address => $ip['text']['esams']['textlb'],
-            uri => "en.wikipedia.org!/wiki/Main_Page";
-        "bits-lb.esams.wikimedia.org":
-            ip_address => $ip['bits']['esams']['bitslb'],
-            uri => 
"bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png";
-        "upload-lb.esams.wikimedia.org":
-            ip_address => $ip['upload']['esams']['uploadlb'],
-            uri => "upload.wikimedia.org!/monitoring/backend";
-        "mobile-lb.esams.wikimedia.org":
-            ip_address => $ip['mobile']['esams']['mobilelb'],
-            uri => "en.m.wikipedia.org!/wiki/Main_Page";
-    }
-
-    lvs::monitor_service6_http_https {
-        "text-lb.esams.wikimedia.org":
-            ip_address => $ip['text']['esams']['textlb6'],
-            uri => "en.wikipedia.org!/wiki/Main_Page";
-        "bits-lb.esams.wikimedia.org":
-            ip_address => $ip['bits']['esams']['bitslb6'],
-            uri => 
"bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png";
-        "upload-lb.esams.wikimedia.org":
-            ip_address => $ip['upload']['esams']['uploadlb6'],
-            uri => "upload.wikimedia.org!/monitoring/backend";
-        "mobile-lb.esams.wikimedia.org":
-            ip_address => $ip['mobile']['esams']['mobilelb6'],
-            uri => "en.m.wikipedia.org!/wiki/Main_Page";
-    }
-
-    # ULSFO
-
-    lvs::monitor_service6_http_https {
-        "text-lb.ulsfo.wikimedia.org":
-            ip_address => $ip['text']['ulsfo']['textlb'],
-            uri => "en.wikipedia.org!/wiki/Main_Page";
-        "bits-lb.ulsfo.wikimedia.org":
-            ip_address => $ip['bits']['ulsfo']['bitslb'],
-            uri => 
"bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png";
-        "upload-lb.ulsfo.wikimedia.org":
-            ip_address => $ip['upload']['ulsfo']['uploadlb'],
-            uri => "upload.wikimedia.org!/monitoring/backend";
-        "mobile-lb.ulsfo.wikimedia.org":
-            ip_address => $ip['mobile']['ulsfo']['mobilelb'],
-            uri => "en.m.wikipedia.org!/wiki/Main_Page";
-    }
-
-    lvs::monitor_service6_http_https {
-        "text-lb.ulsfo.wikimedia.org":
-            ip_address => $ip['text']['ulsfo']['textlb6'],
-            uri => "en.wikipedia.org!/wiki/Main_Page";
-        "bits-lb.ulsfo.wikimedia.org":
-            ip_address => $ip['bits']['ulsfo']['bitslb6'],
-            uri => 
"bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png";
-        "upload-lb.ulsfo.wikimedia.org":
-            ip_address => $ip['upload']['ulsfo']['uploadlb6'],
-            uri => "upload.wikimedia.org!/monitoring/backend";
-        "mobile-lb.ulsfo.wikimedia.org":
-            ip_address => $ip['mobile']['ulsfo']['mobilelb6'],
-            uri => "en.m.wikipedia.org!/wiki/Main_Page";
     }
 }
diff --git a/modules/lvs/manifests/init.pp b/modules/lvs/manifests/init.pp
new file mode 100644
index 0000000..143dcbf
--- /dev/null
+++ b/modules/lvs/manifests/init.pp
@@ -0,0 +1,71 @@
+# lvs/init.pp
+
+define lvs::monitor_service_custom ( $description="LVS", $ip_address, 
$port=80, $check_command, $retries=3 ) {
+    # Virtual resource for the monitoring host
+    @monitor_host { $title: ip_address => $ip_address, group => "lvs", 
critical => "true" }
+    @monitor_service { $title: host => $title, group => "lvs", description => 
$description, check_command => $check_command, critical => "true", retries => 
$retries }
+}
+
+define lvs::monitor_service_http ( $ip_address, $check_command, 
$critical="true", $contact_group="admins" ) {
+    # Virtual resource for the monitoring host
+    @monitor_host { $title: ip_address => $ip_address, group => "lvs", 
critical => "true", contact_group => $contact_group }
+    @monitor_service { $title: host => $title, group => "lvs", description => 
"LVS HTTP IPv4", check_command => $check_command, critical => $critical, 
contact_group => $contact_group }
+}
+
+define lvs::monitor_service_https ( $ip_address, $check_command, $port=443, 
$critical="true" ) {
+    $title_https = "${title}_https"
+    # Virtual resource for the monitoring host
+    @monitor_host { $title_https: ip_address => $ip_address, group => "lvs", 
critical => "true" }
+    @monitor_service { $title_https: host => $title, group => "lvs", 
description => "LVS HTTPS IPv4", check_command => $check_command, critical => 
$critical }
+}
+
+define lvs::monitor_service_http_https ( $ip_address, $uri, $critical="true", 
$contact_group="admins" ) {
+    # Virtual resource for the monitoring host
+    @monitor_host { $title:
+        ip_address => $ip_address,
+        group => "lvs",
+        critical => "true",
+        contact_group => $contact_group
+    }
+
+    @monitor_service { $title:
+        host => $title,
+        group => "lvs",
+        description => "LVS HTTP IPv4",
+        check_command => "check_http_lvs!${uri}",
+        critical => $critical
+    }
+
+    @monitor_service { "${title}_https":
+        host => $title,
+        group => "lvs",
+        description => "LVS HTTPS IPv4",
+        check_command => "check_https_url!${uri}",
+        critical => $critical
+    }
+}
+
+define lvs::monitor_service6_http_https ( $ip_address, $uri, $critical="true" 
) {
+    # Virtual resource for the monitoring host
+    @monitor_host { "${title}_ipv6":
+        ip_address => $ip_address,
+        group => "lvs",
+        critical => "true"
+    }
+
+    @monitor_service { "${title}_ipv6":
+        host => "${title}_ipv6",
+        group => "lvs",
+        description => "LVS HTTP IPv6",
+        check_command => "check_http_lvs!${uri}",
+        critical => $critical
+    }
+
+    @monitor_service { "${title}_ipv6_https":
+        host => "${title}_ipv6",
+        group => "lvs",
+        description => "LVS HTTPS IPv6",
+        check_command => "check_https_url!${uri}",
+        critical => $critical
+    }
+}
diff --git a/modules/lvs/manifests/monitor.pp b/modules/lvs/manifests/monitor.pp
new file mode 100644
index 0000000..743e11f
--- /dev/null
+++ b/modules/lvs/manifests/monitor.pp
@@ -0,0 +1,145 @@
+# lvs/monitor.pp
+
+class lvs::monitor {
+    include lvs::configuration
+
+    $ip = $lvs::configuration::lvs_service_ips['production']
+
+    # INTERNAL
+
+    lvs::monitor_service_http { "appservers.svc.pmtpa.wmnet": ip_address => 
"10.2.1.1", check_command => "check_http_lvs!en.wikipedia.org!/wiki/Main_Page" }
+    lvs::monitor_service_http { "appservers.svc.eqiad.wmnet": ip_address => 
"10.2.2.1", check_command => "check_http_lvs!en.wikipedia.org!/wiki/Main_Page" }
+    lvs::monitor_service_http { "api.svc.pmtpa.wmnet": ip_address => 
"10.2.1.22", check_command => 
"check_http_lvs!en.wikipedia.org!/w/api.php?action=query&meta=siteinfo" }
+    lvs::monitor_service_http { "api.svc.eqiad.wmnet": ip_address => 
"10.2.2.22", check_command => 
"check_http_lvs!en.wikipedia.org!/w/api.php?action=query&meta=siteinfo" }
+    lvs::monitor_service_http { "rendering.svc.pmtpa.wmnet": ip_address => 
"10.2.1.21", check_command => "check_http_lvs!en.wikipedia.org!/wiki/Main_Page" 
}
+    lvs::monitor_service_http { "rendering.svc.eqiad.wmnet": ip_address => 
"10.2.2.21", check_command => "check_http_lvs!en.wikipedia.org!/wiki/Main_Page" 
}
+    lvs::monitor_service_http { "ms-fe.pmtpa.wmnet": ip_address => 
"10.2.1.27", check_command => 
"check_http_lvs!ms-fe.pmtpa.wmnet!/monitoring/backend" }
+    lvs::monitor_service_http { "ms-fe.eqiad.wmnet": ip_address => 
"10.2.2.27", check_command => 
"check_http_lvs!ms-fe.eqiad.wmnet!/monitoring/backend" }
+    lvs::monitor_service_http { "parsoid.svc.eqiad.wmnet": ip_address => 
"10.2.2.28", check_command => "check_http_on_port!8000", contact_group => 
"admins,parsoid" }
+    lvs::monitor_service_http { "search.svc.eqiad.wmnet": ip_address => 
"10.2.2.30", check_command => "check_http_on_port!9200", contact_group => 
"admins" }
+
+    lvs::monitor_service_custom { "search-pool1.svc.eqiad.wmnet": ip_address 
=> "10.2.2.11", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
+    lvs::monitor_service_custom { "search-pool2.svc.eqiad.wmnet": ip_address 
=> "10.2.2.12", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
+    lvs::monitor_service_custom { "search-pool3.svc.eqiad.wmnet": ip_address 
=> "10.2.2.13", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
+    lvs::monitor_service_custom { "search-pool4.svc.eqiad.wmnet": ip_address 
=> "10.2.2.14", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
+    lvs::monitor_service_custom { "search-pool5.svc.eqiad.wmnet": ip_address 
=> "10.2.2.16", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
+    lvs::monitor_service_custom { "search-prefix.svc.eqiad.wmnet": ip_address 
=> "10.2.2.15", port => 8123, description => "LVS Lucene", check_command => 
"check_lucene" }
+
+    # PMTPA
+
+    # FIXME: remove after pmtpa decommissioning
+    lvs::monitor_service6_custom { "payments.wikimedia.org":
+        ip_address => "208.80.155.5",
+        port => 443,
+        check_command => 
"check_https_url!payments.wikimedia.org!/index.php/Special:SystemStatus",
+        retries => 20
+    }
+
+    # EQIAD
+    lvs::monitor_service_http_https {
+        'text-lb.eqiad.wikimedia.org':
+            ip_address => $ip['text']['eqiad']['textlb'],
+            uri => 'en.wikipedia.org!/wiki/Main_Page';
+        'bits-lb.eqiad.wikimedia.org':
+            ip_address => $ip['bits']['eqiad']['bitslb'],
+            uri => 
'bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png';
+        'upload-lb.eqiad.wikimedia.org':
+            ip_address => $ip['upload']['eqiad']['uploadlb'],
+            uri => 'upload.wikimedia.org!/monitoring/backend';
+        'mobile-lb.eqiad.wikimedia.org':
+            ip_address => $ip['mobile']['eqiad']['mobilelb'],
+            uri => 'en.m.wikipedia.org!/wiki/Main_Page';
+        'misc-web-lb.eqiad.wikimedia.org':
+            ip_address => $ip['misc_web']['eqiad']['misc_web'],
+            uri => 'varnishcheck!/';
+    }
+
+    lvs::monitor_service6_http_https {
+        'text-lb.eqiad.wikimedia.org':
+            ip_address => $ip['text']['eqiad']['textlb6'],
+            uri => 'en.wikipedia.org!/wiki/Main_Page';
+        'bits-lb.eqiad.wikimedia.org':
+            ip_address => $ip['bits']['eqiad']['bitslb6'],
+            uri => 
'bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png';
+        'upload-lb.eqiad.wikimedia.org':
+            ip_address => $ip['upload']['eqiad']['uploadlb6'],
+            uri => 'upload.wikimedia.org!/monitoring/backend';
+        'mobile-lb.eqiad.wikimedia.org':
+            ip_address => $ip['mobile']['eqiad']['mobilelb6'],
+            uri => 'en.m.wikipedia.org!/wiki/Main_Page';
+        'misc-web-lb.eqiad.wikimedia.org':
+            ip_address => $ip['misc_web']['eqiad']['misc_web6'],
+            uri => 'varnishcheck!/';
+    }
+
+    lvs::monitor_service_http { 'parsoid-lb.eqiad.wikimedia.org':
+        ip_address => $ip['parsoidcache']['eqiad']['parsoidlb'],
+        check_command => "check_http_on_port!80",
+        contact_group => "admins,parsoid"
+    }
+    # TODO: ipv6
+
+    # ESAMS
+
+    lvs::monitor_service_http_https {
+        "text-lb.esams.wikimedia.org":
+            ip_address => $ip['text']['esams']['textlb'],
+            uri => "en.wikipedia.org!/wiki/Main_Page";
+        "bits-lb.esams.wikimedia.org":
+            ip_address => $ip['bits']['esams']['bitslb'],
+            uri => 
"bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png";
+        "upload-lb.esams.wikimedia.org":
+            ip_address => $ip['upload']['esams']['uploadlb'],
+            uri => "upload.wikimedia.org!/monitoring/backend";
+        "mobile-lb.esams.wikimedia.org":
+            ip_address => $ip['mobile']['esams']['mobilelb'],
+            uri => "en.m.wikipedia.org!/wiki/Main_Page";
+    }
+
+    lvs::monitor_service6_http_https {
+        "text-lb.esams.wikimedia.org":
+            ip_address => $ip['text']['esams']['textlb6'],
+            uri => "en.wikipedia.org!/wiki/Main_Page";
+        "bits-lb.esams.wikimedia.org":
+            ip_address => $ip['bits']['esams']['bitslb6'],
+            uri => 
"bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png";
+        "upload-lb.esams.wikimedia.org":
+            ip_address => $ip['upload']['esams']['uploadlb6'],
+            uri => "upload.wikimedia.org!/monitoring/backend";
+        "mobile-lb.esams.wikimedia.org":
+            ip_address => $ip['mobile']['esams']['mobilelb6'],
+            uri => "en.m.wikipedia.org!/wiki/Main_Page";
+    }
+
+    # ULSFO
+
+    lvs::monitor_service6_http_https {
+        "text-lb.ulsfo.wikimedia.org":
+            ip_address => $ip['text']['ulsfo']['textlb'],
+            uri => "en.wikipedia.org!/wiki/Main_Page";
+        "bits-lb.ulsfo.wikimedia.org":
+            ip_address => $ip['bits']['ulsfo']['bitslb'],
+            uri => 
"bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png";
+        "upload-lb.ulsfo.wikimedia.org":
+            ip_address => $ip['upload']['ulsfo']['uploadlb'],
+            uri => "upload.wikimedia.org!/monitoring/backend";
+        "mobile-lb.ulsfo.wikimedia.org":
+            ip_address => $ip['mobile']['ulsfo']['mobilelb'],
+            uri => "en.m.wikipedia.org!/wiki/Main_Page";
+    }
+
+    lvs::monitor_service6_http_https {
+        "text-lb.ulsfo.wikimedia.org":
+            ip_address => $ip['text']['ulsfo']['textlb6'],
+            uri => "en.wikipedia.org!/wiki/Main_Page";
+        "bits-lb.ulsfo.wikimedia.org":
+            ip_address => $ip['bits']['ulsfo']['bitslb6'],
+            uri => 
"bits.wikimedia.org!/skins-1.5/common/images/poweredby_mediawiki_88x31.png";
+        "upload-lb.ulsfo.wikimedia.org":
+            ip_address => $ip['upload']['ulsfo']['uploadlb6'],
+            uri => "upload.wikimedia.org!/monitoring/backend";
+        "mobile-lb.ulsfo.wikimedia.org":
+            ip_address => $ip['mobile']['ulsfo']['mobilelb6'],
+            uri => "en.m.wikipedia.org!/wiki/Main_Page";
+    }
+}
diff --git a/modules/lvs/manifests/realserver.pp 
b/modules/lvs/manifests/realserver.pp
new file mode 100644
index 0000000..6bc045a
--- /dev/null
+++ b/modules/lvs/manifests/realserver.pp
@@ -0,0 +1,30 @@
+# lvs/realserver.pp
+
+# Class: lvs::realserver
+#
+# Sets up a server to be used as a 'real server' by LVS
+#
+# Parameters:
+#   - $realserver_ips
+#       Array or hash (name => ip) of service IPs to answer on
+class lvs::realserver($realserver_ips=[]) {
+
+    file { "/etc/default/wikimedia-lvs-realserver":
+        mode => 0444,
+        owner => root,
+        group => root,
+        content => template("${module_name}/wikimedia-lvs-realserver.erb");
+    }
+
+    exec { "/usr/sbin/dpkg-reconfigure -p critical -f noninteractive 
wikimedia-lvs-realserver":
+        require => Package["wikimedia-lvs-realserver"],
+        path => "/bin:/sbin:/usr/bin:/usr/sbin",
+        subscribe => File["/etc/default/wikimedia-lvs-realserver"],
+        refreshonly => true;
+    }
+
+    package { wikimedia-lvs-realserver:
+        ensure => latest,
+        require => File["/etc/default/wikimedia-lvs-realserver"];
+    }
+}
diff --git a/templates/lvs/wikimedia-lvs-realserver.erb 
b/modules/lvs/templates/wikimedia-lvs-realserver.erb
similarity index 100%
rename from templates/lvs/wikimedia-lvs-realserver.erb
rename to modules/lvs/templates/wikimedia-lvs-realserver.erb

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I07cf6227f3d443df006cb18c2dbf73b9c03ad280
Gerrit-PatchSet: 2
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Mark Bergsma <[email protected]>
Gerrit-Reviewer: Mark Bergsma <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to