将 Nagios 配置拆分为多个文件
Split Nagios configuration into multiple files
NagiosQL 创建一个名为 servicetemplates.cfg 的文件。
为了更方便地分发一些选定的模板,我想将任何服务定义拆分到一个单独的文件中。
示例 servicetemplates.cfg
define service {
name imap_service
use generic_service
check_command check_service_imap
register 0
}
define service {
name ldapserver_ldap_service
service_description LDAP
use generic_service
check_command check_service_ldap
icon_image ldapserver.png
register 0
}
我喜欢的是某种解析器,它创建类似于模板 "name" 的文件,例如。 G。 imap_service.cfg 和 ldapserver_ldap_service.cfg。
每个文件都必须包含整个定义 (define service { ... } )
以下代码是我的解决方案,它可能并不完美,因为它需要 Nagios 对象配置的特定语法。
第一个参数必须是Nagios配置文件的文件名。
<?php
if (empty($argv[1])) {
echo "First parameter: File to Nagios object configuration\n";
exit(1);
}
$starttag=0;
$outfile='';
$outtext='';
$inputfile=$argv[1];
$cfgfile = file($inputfile) or exit(2);
foreach ($cfgfile as $line_num => $line) {
# $outtext will be reset if define ... { is found
$outtext.=$line;
# Start tag of a new section "define ... {"
if (preg_match("/.*define.*{/i", $line)) {
$starttag=1;
$outtext=$line;
}
# Split the line with name. The parameter after name is the later filename
if (preg_match("/name[\s]+[\w]+/", $line) && $starttag=1) {
$keywords=preg_split("/[\s]+/", $line);
$outfile=$keywords[2];
$outfile.=".cfg";
$outfile=str_replace(' ', '_', $outfile);
}
# End tag of a new section "}"
if (preg_match("/.*}/", $line) && $starttag=1) {
$starttag=0;
echo "Writing {$outfile}\n";
file_put_contents($outfile, $outtext);
}
}
echo "Read lines {$line_num} from {$inputfile}\n";
?>
NagiosQL 创建一个名为 servicetemplates.cfg 的文件。 为了更方便地分发一些选定的模板,我想将任何服务定义拆分到一个单独的文件中。 示例 servicetemplates.cfg
define service {
name imap_service
use generic_service
check_command check_service_imap
register 0
}
define service {
name ldapserver_ldap_service
service_description LDAP
use generic_service
check_command check_service_ldap
icon_image ldapserver.png
register 0
}
我喜欢的是某种解析器,它创建类似于模板 "name" 的文件,例如。 G。 imap_service.cfg 和 ldapserver_ldap_service.cfg。 每个文件都必须包含整个定义 (define service { ... } )
以下代码是我的解决方案,它可能并不完美,因为它需要 Nagios 对象配置的特定语法。 第一个参数必须是Nagios配置文件的文件名。
<?php
if (empty($argv[1])) {
echo "First parameter: File to Nagios object configuration\n";
exit(1);
}
$starttag=0;
$outfile='';
$outtext='';
$inputfile=$argv[1];
$cfgfile = file($inputfile) or exit(2);
foreach ($cfgfile as $line_num => $line) {
# $outtext will be reset if define ... { is found
$outtext.=$line;
# Start tag of a new section "define ... {"
if (preg_match("/.*define.*{/i", $line)) {
$starttag=1;
$outtext=$line;
}
# Split the line with name. The parameter after name is the later filename
if (preg_match("/name[\s]+[\w]+/", $line) && $starttag=1) {
$keywords=preg_split("/[\s]+/", $line);
$outfile=$keywords[2];
$outfile.=".cfg";
$outfile=str_replace(' ', '_', $outfile);
}
# End tag of a new section "}"
if (preg_match("/.*}/", $line) && $starttag=1) {
$starttag=0;
echo "Writing {$outfile}\n";
file_put_contents($outfile, $outtext);
}
}
echo "Read lines {$line_num} from {$inputfile}\n";
?>