1

今回はすべてを手作業で行うのではなく、OMDとcheck_mkを使用して新しいNagiosインストールをセットアップしています。スイッチにはDNSに適切なホスト名がないため、check_mkは構成ファイルでIPを指定する方法を提供します。昨夜、いくつかのスイッチの構成ファイルを変換していて、数分間それを1回実行しようとしましたが、その後タオルを投げました。

入力例:

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",
}

これが私がしたことです。

IPは常にhost_nameの後にあるので、かなり安全で一貫性があることを知っていました

{ 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

残りのフォーマットは、vimで「norm」やマクロなどを介して行われました。

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

1 に答える 1

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",
}
于 2012-10-06T17:31:27.527 に答える