Parcourir la source

AMBARI-6100. Integrate Ambari with Nagios packages for Ubuntu (aonishuk)

Andrew Onishuk il y a 11 ans
Parent
commit
d7246f0957

+ 37 - 6
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/metainfo.xml

@@ -86,22 +86,53 @@
               <name>perl</name>
               <name>perl</name>
             </package>
             </package>
             <package>
             <package>
-              <name>nagios-plugins-1.4.9</name>
+              <name>fping</name>
             </package>
             </package>
             <package>
             <package>
-              <name>nagios-3.5.0-99</name>
+              <name>hdp_mon_nagios_addons</name>
             </package>
             </package>
+          </packages>
+        </osSpecific>
+        <osSpecific>
+          <osFamily>debian12</osFamily>             
+          <packages>
             <package>
             <package>
-              <name>nagios-www-3.5.0-99</name>
+              <name>nagios3</name>
             </package>
             </package>
             <package>
             <package>
-              <name>nagios-devel-3.5.0-99</name>
+              <name>nagios3-common</name>
             </package>
             </package>
             <package>
             <package>
-              <name>fping</name>
+              <name>nagios3-dbg</name>
             </package>
             </package>
             <package>
             <package>
-              <name>hdp_mon_nagios_addons</name>
+              <name>nagios3-doc</name>
+            </package>
+            <package>
+              <name>nagios-plugins-extra</name>
+            </package>
+            <package>
+              <name>php5-curl</name>
+            </package>
+            <package>
+              <name>libapache2-mod-php5</name>
+            </package>
+          </packages>
+        </osSpecific>
+        <osSpecific>
+          <osFamily>redhat5,redhat6,suse11</osFamily>
+          <packages>
+            <package>
+              <name>nagios-plugins-1.4.9</name>
+            </package>
+            <package>
+              <name>nagios-3.5.0-99</name>
+            </package>
+            <package>
+              <name>nagios-www-3.5.0-99</name>
+            </package>
+            <package>
+              <name>nagios-devel-3.5.0-99</name>
             </package>
             </package>
           </packages>
           </packages>
         </osSpecific>
         </osSpecific>

+ 6 - 4
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/nagios.py

@@ -77,13 +77,13 @@ def nagios():
 def set_web_permisssions():
 def set_web_permisssions():
   import params
   import params
 
 
-  cmd = format("{htpasswd_cmd} -c -b  /etc/nagios/htpasswd.users {nagios_web_login} {nagios_web_password!p}")
-  test = format("grep {nagios_web_login} /etc/nagios/htpasswd.users")
+  cmd = format("{htpasswd_cmd} -c -b  {conf_dir}/htpasswd.users {nagios_web_login} {nagios_web_password!p}")
+  test = format("grep {nagios_web_login} {conf_dir}/htpasswd.users")
   Execute( cmd,
   Execute( cmd,
     not_if = test
     not_if = test
   )
   )
 
 
-  File( "/etc/nagios/htpasswd.users",
+  File( format("{conf_dir}/htpasswd.users"),
     owner = params.nagios_user,
     owner = params.nagios_user,
     group = params.nagios_group,
     group = params.nagios_group,
     mode  = 0640
     mode  = 0640
@@ -91,7 +91,9 @@ def set_web_permisssions():
 
 
   if System.get_instance().os_family == "suse":
   if System.get_instance().os_family == "suse":
     command = format("usermod -G {nagios_group} wwwrun")
     command = format("usermod -G {nagios_group} wwwrun")
-  else:
+  elif System.get_instance().os_family == "debian":
+    command = format("usermod -G {nagios_group} www-data") # check -a ???
+  elif System.get_instance().os_family == "redhat":
     command = format("usermod -a -G {nagios_group} apache")
     command = format("usermod -a -G {nagios_group} apache")
   
   
   Execute( command)
   Execute( command)

+ 6 - 5
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/nagios_server.py

@@ -68,11 +68,12 @@ def remove_conflicting_packages():
   Package( 'nagios-plugins',
   Package( 'nagios-plugins',
     action = "remove"
     action = "remove"
   )
   )
-
-  Execute( "rpm -e --allmatches --nopostun nagios",
-    path    = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
-    ignore_failures = True 
-  )
+  
+  if System.get_instance().os_family in ["redhat","suse"]:
+    Execute( "rpm -e --allmatches --nopostun nagios",
+      path    = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+      ignore_failures = True 
+    )
 
 
 def update_ignorable(params):
 def update_ignorable(params):
   if not params.config.has_key('passiveInfo'):
   if not params.config.has_key('passiveInfo'):

+ 3 - 4
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/nagios_service.py

@@ -26,11 +26,10 @@ def nagios_service(action='start'): # start or stop
   import params
   import params
 
 
   if action == 'start':
   if action == 'start':
-   command = "service nagios start"
+   command = format("service {nagios_service_name} start")
   elif action == 'stop':
   elif action == 'stop':
-   command = format("service nagios stop && rm -f {nagios_pid_file}")
+   command = format("service {nagios_service_name} stop && rm -f {nagios_pid_file}")
 
 
-  Execute( command,
-     path    = "/usr/local/bin/:/bin/:/sbin/"      
+  Execute( command,      
   )
   )
   MonitorWebserver("restart")
   MonitorWebserver("restart")

+ 37 - 4
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/params.py

@@ -27,11 +27,40 @@ import status_params
 # server configurations
 # server configurations
 config = Script.get_config()
 config = Script.get_config()
 
 
-conf_dir = "/etc/nagios"
+if System.get_instance().os_family == "debian":
+  nagios_service_name = "nagios3"
+else:
+  nagios_service_name = "nagios"
+
+conf_dir = format("/etc/{nagios_service_name}")
+nagios_obj_dir = format("{conf_dir}/objects")
 nagios_var_dir = "/var/nagios"
 nagios_var_dir = "/var/nagios"
 nagios_rw_dir = "/var/nagios/rw"
 nagios_rw_dir = "/var/nagios/rw"
-plugins_dir = "/usr/lib64/nagios/plugins"
-nagios_obj_dir = "/etc/nagios/objects"
+
+if System.get_instance().os_family == "debian":
+  host_template = "generic-host"
+  plugins_dir = "/usr/lib/nagios/plugins"
+  nagios_web_dir = "/usr/share/nagios3/htdocs"
+  
+  cfg_files = [
+    format("{conf_dir}/commands.cfg"),
+    format("{conf_dir}/conf.d/contacts_nagios2.cfg"),
+    format("{conf_dir}/conf.d/generic-host_nagios2.cfg"),
+    format("{conf_dir}/conf.d/generic-service_nagios2.cfg"),
+    format("{conf_dir}/conf.d/timeperiods_nagios2.cfg"),
+  ]
+else:
+  host_template = "linux-server"
+  plugins_dir = "/usr/lib64/nagios/plugins"
+  nagios_web_dir = "/usr/share/nagios"
+  
+  cfg_files = [
+    format("{nagios_obj_dir}/commands.cfg"),
+    format("{nagios_obj_dir}/contacts.cfg"),
+    format("{nagios_obj_dir}/timeperiods.cfg"),
+    format("{nagios_obj_dir}/templates.cfg"),
+  ]
+  
 check_result_path = "/var/nagios/spool/checkresults"
 check_result_path = "/var/nagios/spool/checkresults"
 nagios_log_dir = "/var/log/nagios"
 nagios_log_dir = "/var/log/nagios"
 nagios_log_archives_dir = format("{nagios_log_dir}/archives")
 nagios_log_archives_dir = format("{nagios_log_dir}/archives")
@@ -122,7 +151,11 @@ if System.get_instance().os_family == "suse":
   nagios_p1_pl = "/usr/lib/nagios/p1.pl"
   nagios_p1_pl = "/usr/lib/nagios/p1.pl"
   htpasswd_cmd = "htpasswd2"
   htpasswd_cmd = "htpasswd2"
   nagios_httpd_config_file = format("/etc/apache2/conf.d/nagios.conf")
   nagios_httpd_config_file = format("/etc/apache2/conf.d/nagios.conf")
-else:
+elif System.get_instance().os_family == "debian":
+  nagios_p1_pl = "/usr/lib/nagios3/p1.pl"
+  htpasswd_cmd = "htpasswd"
+  nagios_httpd_config_file = format("/etc/apache2/conf.d/nagios3.conf")
+elif System.get_instance().os_family == "redhat":
   nagios_p1_pl = "/usr/bin/p1.pl"
   nagios_p1_pl = "/usr/bin/p1.pl"
   htpasswd_cmd = "htpasswd"
   htpasswd_cmd = "htpasswd"
   nagios_httpd_config_file = format("/etc/httpd/conf.d/nagios.conf")
   nagios_httpd_config_file = format("/etc/httpd/conf.d/nagios.conf")

+ 1 - 1
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/templates/hadoop-hosts.cfg.j2

@@ -38,7 +38,7 @@
 define host {
 define host {
         alias                     {{host}}
         alias                     {{host}}
         host_name                 {{host}}
         host_name                 {{host}}
-        use                       linux-server
+        use                       {{host_template}}
         address                   {{host}}
         address                   {{host}}
         check_command             check_tcp_wrapper!{{all_ping_ports[loop.index-1]}}!-w 1 -c 1
         check_command             check_tcp_wrapper!{{all_ping_ports[loop.index-1]}}!-w 1 -c 1
         check_interval            0.25
         check_interval            0.25

+ 11 - 14
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/templates/nagios.cfg.j2

@@ -57,30 +57,27 @@
 log_file=/var/log/nagios/nagios.log
 log_file=/var/log/nagios/nagios.log
 
 
 
 
-
 # OBJECT CONFIGURATION FILE(S)
 # OBJECT CONFIGURATION FILE(S)
 # These are the object configuration files in which you define hosts,
 # These are the object configuration files in which you define hosts,
 # host groups, contacts, contact groups, services, etc.
 # host groups, contacts, contact groups, services, etc.
 # You can split your object definitions across several config files
 # You can split your object definitions across several config files
 # if you wish (as shown below), or keep them all in a single config file.
 # if you wish (as shown below), or keep them all in a single config file.
 
 
-# You can specify individual object config files as shown below:
-cfg_file=/etc/nagios/objects/commands.cfg
-cfg_file=/etc/nagios/objects/contacts.cfg
-cfg_file=/etc/nagios/objects/timeperiods.cfg
-cfg_file=/etc/nagios/objects/templates.cfg
+{% for cfg_file in cfg_files %}
+cfg_file={{cfg_file}}
+{% endfor %}
 
 
 # Definitions for monitoring the local (Linux) host
 # Definitions for monitoring the local (Linux) host
-#cfg_file=/etc/nagios/objects/localhost.cfg
+#cfg_file={{conf_dir}}/objects/localhost.cfg
 
 
 # Definitions for monitoring a Windows machine
 # Definitions for monitoring a Windows machine
-#cfg_file=/etc/nagios/objects/windows.cfg
+#cfg_file={{conf_dir}}/objects/windows.cfg
 
 
 # Definitions for monitoring a router/switch
 # Definitions for monitoring a router/switch
-#cfg_file=/etc/nagios/objects/switch.cfg
+#cfg_file={{conf_dir}}/objects/switch.cfg
 
 
 # Definitions for monitoring a network printer
 # Definitions for monitoring a network printer
-#cfg_file=/etc/nagios/objects/printer.cfg
+#cfg_file={{conf_dir}}/objects/printer.cfg
 
 
 # Definitions for hadoop servers
 # Definitions for hadoop servers
 cfg_file={{nagios_host_cfg}}
 cfg_file={{nagios_host_cfg}}
@@ -94,10 +91,10 @@ cfg_file={{nagios_command_cfg}}
 # extension) in a particular directory by using the cfg_dir
 # extension) in a particular directory by using the cfg_dir
 # directive as shown below:
 # directive as shown below:
 
 
-#cfg_dir=/etc/nagios/servers
-#cfg_dir=/etc/nagios/printers
-#cfg_dir=/etc/nagios/switches
-#cfg_dir=/etc/nagios/routers
+#cfg_dir={{conf_dir}}/servers
+#cfg_dir={{conf_dir}}/printers
+#cfg_dir={{conf_dir}}/switches
+#cfg_dir={{conf_dir}}/routers
 
 
 
 
 
 

+ 4 - 4
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/templates/nagios.conf.j2

@@ -57,13 +57,13 @@ ScriptAlias /nagios/cgi-bin "/usr/lib/nagios/cgi"
 #  Allow from 127.0.0.1
 #  Allow from 127.0.0.1
    AuthName "Nagios Access"
    AuthName "Nagios Access"
    AuthType Basic
    AuthType Basic
-   AuthUserFile /etc/nagios/htpasswd.users
+   AuthUserFile {{conf_dir}}/htpasswd.users
    Require valid-user
    Require valid-user
 </Directory>
 </Directory>
 
 
-Alias /nagios "/usr/share/nagios"
+Alias /nagios "{{nagios_web_dir}}"
 
 
-<Directory "/usr/share/nagios">
+<Directory "{{nagios_web_dir}}">
 #  SSLRequireSSL
 #  SSLRequireSSL
    Options None
    Options None
    AllowOverride None
    AllowOverride None
@@ -74,7 +74,7 @@ Alias /nagios "/usr/share/nagios"
 #  Allow from 127.0.0.1
 #  Allow from 127.0.0.1
    AuthName "Nagios Access"
    AuthName "Nagios Access"
    AuthType Basic
    AuthType Basic
-   AuthUserFile /etc/nagios/htpasswd.users
+   AuthUserFile {{conf_dir}}/htpasswd.users
    Require valid-user
    Require valid-user
 </Directory>
 </Directory>
 
 

+ 1 - 1
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/templates/nagios.j2

@@ -63,7 +63,7 @@ prefix="/usr"
 exec_prefix="/usr"
 exec_prefix="/usr"
 exec="/usr/sbin/nagios"
 exec="/usr/sbin/nagios"
 prog="nagios"
 prog="nagios"
-config="/etc/nagios/nagios.cfg"
+config="{{conf_dir}}/nagios.cfg"
 pidfile="{{nagios_pid_file}}"
 pidfile="{{nagios_pid_file}}"
 user="{{nagios_user}}"
 user="{{nagios_user}}"
 
 

+ 1 - 3
ambari-server/src/test/python/stacks/2.0.6/NAGIOS/test_nagios_server.py

@@ -41,7 +41,6 @@ class TestNagiosServer(RMFTestCase):
     )
     )
     self.assert_configure_default()
     self.assert_configure_default()
     self.assertResourceCalled('Execute', 'service nagios start',
     self.assertResourceCalled('Execute', 'service nagios start',
-                              path=['/usr/local/bin/:/bin/:/sbin/']
     )
     )
     self.assertResourceCalled('MonitorWebserver', 'restart',
     self.assertResourceCalled('MonitorWebserver', 'restart',
     )
     )
@@ -56,8 +55,7 @@ class TestNagiosServer(RMFTestCase):
       config_file="default.json"
       config_file="default.json"
     )
     )
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
-                              'service nagios stop && rm -f /var/run/nagios/nagios.pid',
-                              path=['/usr/local/bin/:/bin/:/sbin/']
+                              'service nagios stop && rm -f /var/run/nagios/nagios.pid'
     )
     )
     self.assertResourceCalled('MonitorWebserver', 'restart',
     self.assertResourceCalled('MonitorWebserver', 'restart',
     )
     )

+ 2 - 2
contrib/addons/package/deb/create_nagios_addon_deb.sh

@@ -48,8 +48,8 @@ SRC_DIR="${BASEDIR}/../../src/addOns/nagios/"
 mkdir -p "${MON_TAR_DIR}/usr/lib64/nagios"
 mkdir -p "${MON_TAR_DIR}/usr/lib64/nagios"
 cp -r "${SRC_DIR}/plugins" "${MON_TAR_DIR}/usr/lib64/nagios"
 cp -r "${SRC_DIR}/plugins" "${MON_TAR_DIR}/usr/lib64/nagios"
 
 
-mkdir -p "${MON_TAR_DIR}/etc/httpd"
-cp -r "${SRC_DIR}/conf.d" "${MON_TAR_DIR}/etc/httpd"
+mkdir -p "${MON_TAR_DIR}/etc/apache2"
+cp -r "${SRC_DIR}/conf.d" "${MON_TAR_DIR}/etc/apache2"
 
 
 mkdir -p "${MON_TAR_DIR}/usr/share/hdp/nagios"
 mkdir -p "${MON_TAR_DIR}/usr/share/hdp/nagios"
 cp -r ${SRC_DIR}/scripts/* "${MON_TAR_DIR}/usr/share/hdp/nagios"
 cp -r ${SRC_DIR}/scripts/* "${MON_TAR_DIR}/usr/share/hdp/nagios"