从Nagios到check_mk配置分三步,我怎么能做得更好?

时间:2012-10-06 17:20:01

标签: vim awk

我正在使用OMD& amp;设置新的Nagios安装程序。 check_mk而不是这次手工完成所有事情。交换机在DNS中没有正确的主机名,因此check_mk提供了一种在配置文件中指定IP的方法。我昨晚转换了一些交换机的配置文件,我试了几分钟就做了一次,但随后扔了。

示例输入:

define host{
    use         generic-switch
    host_name   BAR.MDF.MODEL
    alias       BAR.MDF.MODEL
    parents     FOO.MDF.MODEL.01
    address     10.1.1.1
    }

必需的输出:

ipaddresses = {
  "BAR.MDF.MODEL" : "10.1.1.1",
}

这就是我所做的。

我知道在host_name之后IP 总是所以它是相当安全/一致的

{ awk '/host_name/ || /address/ { print $2 }' < switch.cfg; } >> out.txt

让我

BAR.MDF.MODEL
10.1.1.1

然后我做了这个

{ awk '!/^1/{ getline ip; print $0, ip; next }' < out.txt; } >> out2.txt

得到这个:

BAR.MDF.MODEL 10.1.1.1

其余的格式化是通过'norm'和vim在vim中完成的。宏等

  "BAR.MDF.MODEL" : "10.1.1.1",

1 个答案:

答案 0 :(得分:3)

尝试这可能对您有用。仅awk

假设有以下数据infile

define host{
    use         generic-switch
    host_name   BAR.MDF.MODEL
    alias       BAR.MDF.MODEL
    parents     FOO.MDF.MODEL.01
    address     10.1.1.1
    }
define host{
    use         generic-switch
    host_name   BAR.MDF.MODEL.2
    alias       BAR.MDF.MODEL
    parents     FOO.MDF.MODEL.01
    address     10.1.1.2
    }
define host{
    use         generic-switch
    host_name   BAR.MDF.MODEL.3
    alias       BAR.MDF.MODEL
    parents     FOO.MDF.MODEL.01
    address     10.1.1.3
    }

运行此awk脚本:

awk '
    BEGIN { print "ipaddresses = {"; } 
    $1 == "host_name" { 
        hostname = "\"" $2 "\""; 
        next; 
    } 
    $1 == "address" { 
        address = "\"" $2 "\"";
        printf "\t%s : %s,\n", hostname, address;
    } 
    END {
        printf "}\n";
    }
' switch.cfg

产量:

ipaddresses = {
        "BAR.MDF.MODEL" : "10.1.1.1",
        "BAR.MDF.MODEL.2" : "10.1.1.2",
        "BAR.MDF.MODEL.3" : "10.1.1.3",
}