[MediaWiki-commits] [Gerrit] operations/puppet[production]: labstore: Check that NFS is being served over Cluster IP for...

2016-11-10 Thread Madhuvishy (Code Review)
Madhuvishy has submitted this change and it was merged.

Change subject: labstore: Check that NFS is being served over Cluster IP for 
secondary cluster
..


labstore: Check that NFS is being served over Cluster IP for secondary cluster

Bug: T144633
Change-Id: I7ba09c727be21a01746dbe5c955f2c96e3dc1dfc
---
A modules/labstore/files/monitor/check_nfs_status
R modules/labstore/manifests/monitoring/secondary.pp
M modules/role/manifests/labs/nfs/secondary.pp
3 files changed, 69 insertions(+), 10 deletions(-)

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



diff --git a/modules/labstore/files/monitor/check_nfs_status 
b/modules/labstore/files/monitor/check_nfs_status
new file mode 100644
index 000..3a2d81a
--- /dev/null
+++ b/modules/labstore/files/monitor/check_nfs_status
@@ -0,0 +1,41 @@
+#!/usr/bin/python3
+import argparse
+import os
+import subprocess
+import sys
+
+
+def check_nfs_status(cluster_ip):
+"""
+Check if NFS is served over the cluster IP
+:param cluster_ip: string
+:returns: boolean
+"""
+
+exports = [export for export in str(subprocess.check_output([
+'/sbin/showmount', '-e', cluster_ip])).split('\\n') if len(export) > 1]
+
+if len(exports) > 1:
+print('NFS served over cluster ip OK')
+return True
+
+print('No NFS exports served over Cluster IP')
+return False
+
+
+def main():
+
+if not os.geteuid() == 0:
+print('Script not run as root')
+sys.exit(1)
+
+parser = argparse.ArgumentParser('Check if NFS is served over cluster IP')
+parser.add_argument('ip', help='Cluster IP assigned to primary node')
+args = parser.parse_args()
+
+if not check_nfs_status(args.ip):
+sys.exit(1)
+
+
+if __name__ == '__main__':
+main()
diff --git a/modules/labstore/manifests/monitoring/drbd.pp 
b/modules/labstore/manifests/monitoring/secondary.pp
similarity index 64%
rename from modules/labstore/manifests/monitoring/drbd.pp
rename to modules/labstore/manifests/monitoring/secondary.pp
index cfc8266..aa73990 100644
--- a/modules/labstore/manifests/monitoring/drbd.pp
+++ b/modules/labstore/manifests/monitoring/secondary.pp
@@ -1,9 +1,13 @@
-# == Class: labstore::monitoring::drbd
+# == Class: labstore::monitoring::secondary
 #
-# Installs icinga checks to make sure resource status on a drbd node is OK,
-# and to check that the nodes conform to the expected drbd roles.
+# Installs icinga checks to
+# - make sure resource status on a drbd node is OK,
+# - check that the nodes conform to the expected drbd roles.
+# - drbd service status
+# - check that cluster ip is assigned to DRBD primary
+# - NFS is being served over cluster IP
 
-class labstore::monitoring::drbd($drbd_role, $cluster_ip, $resource = 'all') {
+class labstore::monitoring::secondary($drbd_role, $cluster_ip, $resource = 
'all') {
 
 sudo::user { 'nagios_check_drbd':
 user   => 'nagios',
@@ -11,6 +15,7 @@
   'ALL = NOPASSWD: /usr/local/sbin/check_drbd_status',
   'ALL = NOPASSWD: /usr/local/sbin/check_drbd_role',
   'ALL = NOPASSWD: /usr/local/sbin/check_drbd_cluster_ip',
+  'ALL = NOPASSWD: /usr/local/sbin/check_nfs_status',
   ],
 }
 
@@ -50,11 +55,25 @@
 nrpe::monitor_service { 'check_drbd_cluster_ip':
 description  => 'Check DRBD Cluster IP assignment',
 nrpe_command => "/usr/bin/sudo /usr/local/sbin/check_drbd_cluster_ip 
${::hostname} ${drbd_role} ${cluster_ip}",
-require  => File['/usr/local/sbin/check_drbd_role'],
+require  => File['/usr/local/sbin/check_drbd_cluster_ip'],
 }
 
 # Set up DRBD service monitoring
 nrpe::monitor_systemd_unit_state { 'drbd':
 require => Service['drbd'],
 }
+
+file { '/usr/local/sbin/check_nfs_status':
+source => 'puppet:///modules/labstore/monitor/check_nfs_status',
+mode   => '0755',
+owner  => 'root',
+group  => 'root',
+}
+
+nrpe::monitor_service { 'check_nfs_status':
+description  => 'Check if NFS is served over cluster IP',
+nrpe_command => "/usr/bin/sudo /usr/local/sbin/check_nfs_status 
${cluster_ip}",
+require  => File['/usr/local/sbin/check_nfs_status'],
+}
+
 }
diff --git a/modules/role/manifests/labs/nfs/secondary.pp 
b/modules/role/manifests/labs/nfs/secondary.pp
index c53b3c3..6bc2a7b 100644
--- a/modules/role/manifests/labs/nfs/secondary.pp
+++ b/modules/role/manifests/labs/nfs/secondary.pp
@@ -84,11 +84,6 @@
 enable => false,
 }
 
-class { 'labstore::monitoring::drbd':
-drbd_role  => $drbd_role,
-cluster_ip => $cluster_ip,
-}
-
 # state via nfs-manage
 service { 'nfs-kernel-server':
 enable => false,
@@ -101,4 +96,8 @@
 group   => 'root',
 }
 
+class { 

[MediaWiki-commits] [Gerrit] operations/puppet[production]: labstore: Check that NFS is being served over Cluster IP for...

2016-11-10 Thread Madhuvishy (Code Review)
Madhuvishy has uploaded a new change for review.

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

Change subject: labstore: Check that NFS is being served over Cluster IP for 
secondary cluster
..

labstore: Check that NFS is being served over Cluster IP for secondary cluster

Bug: T144633
Change-Id: I7ba09c727be21a01746dbe5c955f2c96e3dc1dfc
---
A modules/labstore/files/monitor/check_nfs_status
R modules/labstore/manifests/monitoring/secondary.pp
M modules/role/manifests/labs/nfs/secondary.pp
3 files changed, 69 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/46/320946/1

diff --git a/modules/labstore/files/monitor/check_nfs_status 
b/modules/labstore/files/monitor/check_nfs_status
new file mode 100644
index 000..3eba3cf
--- /dev/null
+++ b/modules/labstore/files/monitor/check_nfs_status
@@ -0,0 +1,41 @@
+#!/usr/bin/python3
+import argparse
+import os
+import subprocess
+import sys
+
+
+def check_nfs_status(cluster_ip):
+"""
+Check if NFS is served over the cluster IP
+:param cluster_ip: string
+:returns: boolean
+"""
+
+exports = [export for export in str(subprocess.check_output(
+['/sbin/showmount', '-e', cluster_ip])).split('\\n') if export]
+
+if len(exports) > 1:
+print('NFS served over cluster ip OK')
+return True
+
+print('No NFS exports served over Cluster IP')
+return False
+
+
+def main():
+
+if not os.geteuid() == 0:
+print('Script not run as root')
+sys.exit(1)
+
+parser = argparse.ArgumentParser('Check if NFS is served over cluster IP')
+parser.add_argument('ip', help='Cluster IP assigned to primary node')
+args = parser.parse_args()
+
+if not check_nfs_status(args.ip):
+sys.exit(1)
+
+
+if __name__ == '__main__':
+main()
diff --git a/modules/labstore/manifests/monitoring/drbd.pp 
b/modules/labstore/manifests/monitoring/secondary.pp
similarity index 64%
rename from modules/labstore/manifests/monitoring/drbd.pp
rename to modules/labstore/manifests/monitoring/secondary.pp
index cfc8266..aa73990 100644
--- a/modules/labstore/manifests/monitoring/drbd.pp
+++ b/modules/labstore/manifests/monitoring/secondary.pp
@@ -1,9 +1,13 @@
-# == Class: labstore::monitoring::drbd
+# == Class: labstore::monitoring::secondary
 #
-# Installs icinga checks to make sure resource status on a drbd node is OK,
-# and to check that the nodes conform to the expected drbd roles.
+# Installs icinga checks to
+# - make sure resource status on a drbd node is OK,
+# - check that the nodes conform to the expected drbd roles.
+# - drbd service status
+# - check that cluster ip is assigned to DRBD primary
+# - NFS is being served over cluster IP
 
-class labstore::monitoring::drbd($drbd_role, $cluster_ip, $resource = 'all') {
+class labstore::monitoring::secondary($drbd_role, $cluster_ip, $resource = 
'all') {
 
 sudo::user { 'nagios_check_drbd':
 user   => 'nagios',
@@ -11,6 +15,7 @@
   'ALL = NOPASSWD: /usr/local/sbin/check_drbd_status',
   'ALL = NOPASSWD: /usr/local/sbin/check_drbd_role',
   'ALL = NOPASSWD: /usr/local/sbin/check_drbd_cluster_ip',
+  'ALL = NOPASSWD: /usr/local/sbin/check_nfs_status',
   ],
 }
 
@@ -50,11 +55,25 @@
 nrpe::monitor_service { 'check_drbd_cluster_ip':
 description  => 'Check DRBD Cluster IP assignment',
 nrpe_command => "/usr/bin/sudo /usr/local/sbin/check_drbd_cluster_ip 
${::hostname} ${drbd_role} ${cluster_ip}",
-require  => File['/usr/local/sbin/check_drbd_role'],
+require  => File['/usr/local/sbin/check_drbd_cluster_ip'],
 }
 
 # Set up DRBD service monitoring
 nrpe::monitor_systemd_unit_state { 'drbd':
 require => Service['drbd'],
 }
+
+file { '/usr/local/sbin/check_nfs_status':
+source => 'puppet:///modules/labstore/monitor/check_nfs_status',
+mode   => '0755',
+owner  => 'root',
+group  => 'root',
+}
+
+nrpe::monitor_service { 'check_nfs_status':
+description  => 'Check if NFS is served over cluster IP',
+nrpe_command => "/usr/bin/sudo /usr/local/sbin/check_nfs_status 
${cluster_ip}",
+require  => File['/usr/local/sbin/check_nfs_status'],
+}
+
 }
diff --git a/modules/role/manifests/labs/nfs/secondary.pp 
b/modules/role/manifests/labs/nfs/secondary.pp
index c53b3c3..6bc2a7b 100644
--- a/modules/role/manifests/labs/nfs/secondary.pp
+++ b/modules/role/manifests/labs/nfs/secondary.pp
@@ -84,11 +84,6 @@
 enable => false,
 }
 
-class { 'labstore::monitoring::drbd':
-drbd_role  => $drbd_role,
-cluster_ip => $cluster_ip,
-}
-
 # state via nfs-manage
 service { 'nfs-kernel-server':
 enable => false,
@@ -101,4 +96,8 @@
 group   => 'root',
 }
 
+