check_mk conf import

User / Community contributed content: modifications, patches, extensions, modules, scripts etc.

check_mk conf import

Postby Chris oder so » Tue Sep 24, 2013 18:03

Hi @all
I'm working on a project.
I try to import check_mk configurationfiles to NConf.
The problem: After the imports I can't generate the configuration.
It only shows the nav and head of the nconfpage, but the mainpart is blanc.

waht I did:
I created a menu in NConf where I can enter a IP of a host,
wehn I do that, it executes a php-script which creates a check_mk configuration for this host (in main.mk).
after this, check_mk gets executed with the parameters -II and -U (the icinga configuration gets created).

then the script imports with the "bin/add_items_from_nagios.pl" every Conf-object one by one in nconf.

on the end it delete the icinga configuration (which check_mk has genarated).


The Host and Services and so are now all correctly in the NConf. But like I wrote, the nconf don't generate the configuration anymore.

I hope i describe it understandable for you.

Here's the Code's, sorry it is written chaotic :)

template_loader.php (loads the check_mk template to nconf):
Code: Select all
<?php

   echo "<b>Lade Konfiguration von Template.</b><br>\n";

   // Definiere Variablen

   $s="";   // <- so stehen lassen!

   $icingaconffile="/etc/icinga/objects/check_mk.d/check_mk_templates.cfg";

   $tmpdir="./conf";

   $conffile="$tmpdir/temp.cfg";

   $templateconf="/etc/icinga/objects/check_mk.d/check_mk_templates.cfg";

   $importplugin="../bin/add_items_from_nagios.pl";

   $icingaconffile=$templateconf;

   //$s=" -s"; //kommentiert für NomalModus, nicht kommentiert für simulationsmodus





   // Importiere die neuen ConfFiles

   $problem = array(

      0 => "define command {\n#  command_name   check-mk\n#  command_line /usr/bin/check_mk \$HOSTNAME$ \$HOSTADDRESS$ \n#}",

       1 => "\\\n"

   );

   $highelight = array(

      0 => "[ERROR]",

       1 => "Finished"

   );

   $class = array(

      5 => "host",

       7 => "service",

      6 => "servicedependency",

      4 => "hostgroup",

      3 => "command",

      1 => "contact",

      2 => "contactgroup",

      0 => "timeperiod"

   );

   if(file_exists($icingaconffile)){

      //Move The Icinga Conf File in tmpdir:

      shell_exec("sudo chmod 777 $icingaconffile");

      shell_exec("sudo chmod 777 $tmpdir");

      //echo shell_exec("whoami");

      shell_exec("sudo chown wwwrun $icingaconffile");

      shell_exec("sudo chown wwwrun $tmpdir");

      rename("$icingaconffile", "$tmpdir/IcingaConf.cfg");

      //shell_exec("mv $icingaconffile $tmpdir/IcingaConf.cfg");



      //Read the Conf File to a Var (& remove problems):

      $IcingaConf = file_get_contents("$tmpdir/IcingaConf.cfg");

      $i=0;

      while($problem[$i]){

         $IcingaConf = str_replace($problem[$i],"",$IcingaConf);

         $i++;

      }



      // Start the Workflow

      $i=0;   

      while($class[$i]){

         if($define_explode = explode("define ".$class[$i]." {", $IcingaConf)){

            $j=1;

            while($define_explode[$j]){

               //Aufteile, zuerst Inhalt rechts von { wählen, danach Inhalt links von }

               //$FromStart = explode("{", $define_explode[$j]);

               //$TillEnd = explode("}", $FromStart[1]);

               $TillEnd = explode("}", $define_explode[$j]);



               // Configuration neu zusammensetzten

               if($class[$i] == "contact"){

                  $ADD="email           dummy@umb.ch\n";

               }else{

                  $ADD="";

               }

               $ConfChapter="define ".$class[$i]." {".$TillEnd[0]."$ADD}\n\n";

               shell_exec("sudo rm $conffile");

               $file = fopen($conffile,"a+");

               fwrite($file,$ConfChapter);

               fclose($file);

               if(file_exists($conffile)){

                  if($class[$i]=="command"){

                     $ImportCommand="$importplugin -f $conffile -c "."checkcommand"." $s";

                  }else{

                     if($class[$i]=="host"){

                        $ImportCommand="$importplugin -f $conffile -c "."host-template"." $s";

                     }else{

                        if($class[$i]=="service"){

                           $ImportCommand="$importplugin -f $conffile -c "."service-template"." $s";

                        }else{

                           $ImportCommand="$importplugin -f $conffile -c ".$class[$i]." $s";

                        }

                     }

                  }

                  if($class[$i]=="servicedependency"){

                     $ImportCommand="$importplugin -f $conffile -c "."service-dependency"." $s";

                  }



                  echo "<b>".$class[$i].":</b><br>\n";

                  $output = str_replace("\n","<br>\n",shell_exec("sudo $ImportCommand"))."<br>\n";

                  $o=0;

                  while($highelight[$o]){

                     $output = str_replace($highelight[$o],"<b>".$highelight[$o]."</b>",$output);

                     $o++;

                  }

                  echo $output;

               }

               //count up

               $j++;

            }

         }

         $i++;

      }



      //Delete Icinga Conf

      shell_exec("rm $tmpdir/IcingaConf.cfg");   $i++;

   }

echo "<b>Ende</b><br>\n";

echo "<a href='../setHost.php'> > Gehe zur&uuml;ck zu NConf < </a><br>\n";

?>


loader.php (import the check_mk host configuration to nconf):
Code: Select all
<?php

if(isset($_GET['ip']) && $_GET['ip']!=""){

   // Die IP des Hosts

   $ip=$_GET['ip'];



   echo "<b>Lade Konfiguration von $ip.</b><br>\n";

   // Definiere Variablen
   $s="";   // <- so stehen lassen!

   $icingaconffile="/etc/icinga/objects/check_mk.d/check_mk_objects.cfg";

   $tmpdir="./conf";

   $conffile="$tmpdir/temp.cfg";

   $templateconf="/etc/icinga/objects/check_mk.d/check_mk_templates.cfg";

   $importplugin="../bin/add_items_from_nagios.pl";
   $main_mk_path="/etc/check_mk/main.mk";
   $cmk_path="/usr/bin/check_mk";
   //$s=" -s"; //kommentiert für NomalModus, nicht kommentiert für simulationsmodus



   // Editiere Check_mk Konfiguration

   $main_mk="all_hosts = ['".$ip."']";
   shell_exec("sudo rm $main_mk_path");
   shell_exec("sudo touch $main_mk_path");
   shell_exec("sudo chmod 777 $main_mk_path");
   $file = fopen($main_mk_path,"a+");

   fwrite($file,$main_mk);

   fclose($file);
   $file = fopen("./hosts.mk","a+");

   fwrite($file,",'$ip'");

   fclose($file);


   // Aktualisiere Check_mk
   echo "<b>Aktualisiere Check_mk:</b><br>\n<br>\n";

   echo shell_exec("sudo $cmk_path -II");


   // Erstelle Check_mk Konfigurations Files
   echo "<b>Erstelle Check_mk Konfigurations Files:</b><br>\n<br>\n";

   shell_exec("sudo $cmk_path -U");


   // Löschen des Templatefile

   shell_exec("sudo rm $templateconf");

   // Setzte check_mk zurück
   $ips = file_get_contents("./hosts.mk");
   $main_mk = "all_hosts = [".$ips."]";
   $file = fopen($main_mk_path,"a+");

   fwrite($file,$main_mk);

   fclose($file);


   // Splitte das Conf File

      //include('./icingaconf_split.php'); // Nun im Importteil integriert

   



   // Importiere die neuen ConfFiles

   $problem = array(

      0 => "define command {\n#  command_name   check-mk\n#  command_line /usr/bin/check_mk \$HOSTNAME$ \$HOSTADDRESS$ \n#}",

       1 => "\\\n"

   );

   $highelight = array(

      0 => "[ERROR]",

       1 => "Finished"

   );

   $class = array(

      5 => "host",

       7 => "service",

      6 => "servicedependency",

      4 => "hostgroup",

      3 => "command",

      1 => "contact",

      2 => "contactgroup",

      0 => "timeperiod"

   );

   if(file_exists($icingaconffile)){
      echo "<b>Lade Konfiguration in NConf:</b><br>\n<br>\n";

      //Move The Icinga Conf File in tmpdir:

      shell_exec("sudo chmod 777 $icingaconffile");

      shell_exec("sudo chmod 777 $tmpdir");

      //echo shell_exec("whoami");

      shell_exec("sudo chown wwwrun $icingaconffile");

      shell_exec("sudo chown wwwrun $tmpdir");
      //shell_exec("cp $icingaconffile $tmpdir/DEBUG.cfg");

      rename("$icingaconffile", "$tmpdir/IcingaConf.cfg");

      //shell_exec("mv $icingaconffile $tmpdir/IcingaConf.cfg");



      //Read the Conf File to a Var (& remove problems):

      $IcingaConf = file_get_contents("$tmpdir/IcingaConf.cfg");

      $i=0;

      while($problem[$i]){

         $IcingaConf = str_replace($problem[$i],"",$IcingaConf);

         $i++;

      }



      // Start the Workflow

      $i=0;   

      while($class[$i]){

         if($define_explode = explode("define ".$class[$i]." {", $IcingaConf)){

            $j=1;

            while($define_explode[$j]){

               //Aufteile, zuerst Inhalt rechts von { wählen, danach Inhalt links von }

               //$FromStart = explode("{", $define_explode[$j]);

               //$TillEnd = explode("}", $FromStart[1]);

               $TillEnd = explode("}", $define_explode[$j]);



               // Configuration neu zusammensetzten

               if($class[$i] == "contact"){

                  $ADD="email           dummy@umb.ch\n";

               }else{

                  if($class[$i] == "service"){         
                     if(strpos($TillEnd[0], "service_description")=== false){

                        $ADD="service_description           EvtlPing_PH".time()."\n";
                     }

                  }else{

                     $ADD="";

                  }

               }

               $ConfChapter="define ".$class[$i]." {".$TillEnd[0]."$ADD}\n\n";
//echo $ConfChapter;

               shell_exec("sudo rm $conffile");

               $file = fopen($conffile,"a+");

               fwrite($file,$ConfChapter);

               fclose($file);

               if(file_exists($conffile)){

                  if($class[$i]=="command"){

                     $ImportCommand="$importplugin -f $conffile -c "."checkcommand"." $s";

                  }else{

                     $ImportCommand="$importplugin -f $conffile -c ".$class[$i]." $s";

                  }
                  if($class[$i]=="servicedependency"){

                     $ImportCommand="$importplugin -f $conffile -c "."service-dependency"." $s";

                  }

                  echo "<b>".$class[$i].":</b><br>\n";

                  $output = str_replace("\n","<br>\n",shell_exec("sudo $ImportCommand"))."<br>\n";

                  $o=0;

                  while($highelight[$o]){

                     $output = str_replace($highelight[$o],"<b>".$highelight[$o]."</b>",$output);

                     $o++;

                  }

                  echo $output;

               }

               //count up

               $j++;

            }

         }

         $i++;

      }



      //Delete Icinga Conf

      shell_exec("rm $tmpdir/IcingaConf.cfg");   $i++;

   }

}else{

   echo "Es wurde keine IP eingetragen.<br>\n";

}

echo "<b>Ende</b><br>\n";

echo "<a href='../setHost.php'> > Gehe zur&uuml;ck zu NConf < </a><br>\n";

?>

Add to menu_administration.html:
Code: Select all
<tr>
                <td>
                    <div class="link_with_tag">check_mk</div>
                </td>
                <td align="right">
                    <div align="right"><b>
                         <a href="#" >---</a>
                         / <a href="setHost.php" >Add</a>
                    </b></div>
                </td>
            </tr>


setHost.php:
Code: Select all
<?php
require_once 'include/head.php';


?>

<!-- jQuery part -->
<script type="text/javascript">
    $(document).ready(function(){
        // highlight the previouse applied template
        $('.previously_applied').hover(function() {
            $("td[id='"+$(this).attr("id")+"_first']").toggleClass("ui-state-highlight");
        });
    });

</script>

<?php


// Set previous (referer) page if that actual item in detail view will be deleted
if ( empty($_SERVER["HTTP_REFERER"]) AND isset($_SESSION["after_delete_page"]) ) {
    message($debug, "referer not set, seems to be from a delete operation, go to after_delete_page");
    $from_url = $_SESSION["after_delete_page"];
}elseif ( isset($_SERVER["HTTP_REFERER"]) AND preg_match('/detail\.php/', $_SERVER["HTTP_REFERER"]) ){
    message($debug, "detail.php matched");
    $from_url = $_SERVER["HTTP_REFERER"];
}elseif( isset($_SERVER["HTTP_REFERER"]) AND preg_match('/modify_item\.php/', $_SERVER["HTTP_REFERER"]) ){
    # coming from editing, do still a forward to the after_delete_page
    $from_url = $_SESSION["after_delete_page"];
}elseif( isset($_SERVER["HTTP_REFERER"]) AND preg_match('/'.preg_quote("add_item_step2.php").'/', $_SERVER["HTTP_REFERER"]) ){
    # coming from an add (entry exists), do still a forward to the after_delete_page
    $from_url = $_SESSION["after_delete_page"];
}elseif( !empty($_SERVER["HTTP_REFERER"]) ){
    message($debug, "not from detail.php or modify, setting referer");
    $_SESSION["after_delete_page"] = $_SERVER["HTTP_REFERER"];
    $from_url = $_SERVER["HTTP_REFERER"];
}else{
    # direct opening of this file, or no referer, go back to overview.php
    $from_url = "index.php";
}

set_page();

# Normal detail page
echo '<div style="width: 500px;" class="relative">';

    echo '<div class="ui-nconf-header ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix">';

        echo '<div><h2>Lade Check_mk Konfiguration</h2></div>';
        echo '<div id="ui-nconf-icon-bar">';
        echo '</div>';
    echo '</div>';
    echo '<div class="ui-nconf-content ui-widget-content ui-corner-bottom">';

    $colgroup = '<colgroup>
                    <col width="150">
                    <col>
                 </colgroup>';


    echo '<table class="ui-nconf-table ui-nconf-max-width">';
    echo $colgroup;
   

    echo '<tbody>';

   
   echo "ACHTUNG: Der Host darf nicht in NConf vorhanden sein!\n";
?>
   <form action="cmkToNconf/loader.php" method="GET">
   <tr>
      <td class="color_list2">IP-Adresse:</td>
      <td class="color_list1 highlight">
            <input type="text" name="ip">
      </td>
   </tr>
   <tr>
      <td class="color_list2"><input type="reset" value=" Abbrechen"></td>
      <td class="color_list1 highlight"><input type="submit" value=" Laden "></td>
   </tr>
        </form>
       
<?php
    echo '</table>';
    echo '</div>';

echo '</div>';

mysql_close($dbh);
require_once 'include/foot.php';

?>


I hope for your help :)
Chris oder so
 

Return to Contributions

Who is online

Users browsing this forum: No registered users and 1 guest

cron