2012-10-06 16 views
1

我正在使用OMD & check_mk設置一個新的Nagios安裝,而不是這次手動執行所有操作。交換機在DNS中沒有正確的主機名,因此check_mk提供了一種在配置文件中指定IP的方法。我昨晚爲某些交換機轉換了配置文件,我嘗試了幾分鐘來完成一次鏡頭,但後來投擲了毛巾。從Nagios到check_mk配置三個步驟,我怎麼能做得更好?

例輸入:

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做&宏等

"BAR.MDF.MODEL" : "10.1.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", 
} 
+0

是'$ 1 == 「HOST_NAME」{'簡寫'如果($ 1 ==「host_name」){'?我讀的是對的嗎?它轉化爲真,然後變量「主機名」設置爲$ 2?有點像bash中的[[-e文件]] && rm文件? – Ryan

+0

oops。我沒有想到要提及它......這對於switch.cfg中的第一個主機定義有效,但其中有39個。 :s – Ryan

+1

@Ryan:更新了答案。對於你的第一個問題,是的。如果條件成功,請在花括號內執行指令。 – Birei