腳本内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<code>#!/usr/bin/python</code>
<code>#-*- coding:utf8 -*-</code>
<code>import</code> <code>json,sys,argparse</code>
<code>from zabbix_api </code><code>import</code> <code>ZabbixAPI</code>
<code>server = </code><code>"http://172.16.206.128/zabbix"</code>
<code>username = </code><code>"Admin"</code>
<code>password = </code><code>"zabbix"</code>
<code>zapi = ZabbixAPI(server=server, path=</code><code>""</code><code>, log_level=0)</code>
<code>zapi.login(username, password)</code>
<code>def get_args():</code>
<code> </code><code>parser = argparse.ArgumentParser()</code>
<code> </code><code>parser.add_argument(</code><code>"-H"</code><code>, </code><code>"--host"</code><code>, help=</code><code>"host name"</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>"-i"</code><code>, </code><code>"--ip"</code><code>, help=</code><code>"host ip"</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>"-g"</code><code>, </code><code>"--group"</code><code>, help=</code><code>"group name"</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>"-p"</code><code>, </code><code>"--proxy"</code><code>, help=</code><code>"proxy host name"</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>"-t"</code><code>, </code><code>"--templates"</code><code>, help=</code><code>"template name"</code><code>)</code>
<code> </code><code># 解析所傳入的參數</code>
<code> </code><code>args = parser.parse_args()</code>
<code> </code>
<code> </code><code>if</code> <code>not args.host:</code>
<code> </code><code>args.host = raw_input(</code><code>'host: '</code><code>)</code>
<code> </code><code>if</code> <code>not args.ip:</code>
<code> </code><code>args.ip = raw_input(</code><code>'ip: '</code><code>)</code>
<code> </code><code>if</code> <code>not args.templates:</code>
<code> </code><code>args.templates = raw_input(</code><code>'templates: '</code><code>)</code>
<code> </code><code>return</code> <code>args</code>
<code>def get_proxy_id(proxy):</code>
<code> </code><code>get_proxy_id = zapi.proxy.get(</code>
<code> </code><code>{</code>
<code> </code><code>"output"</code><code>: </code><code>"proxyid"</code><code>,</code>
<code> </code><code>"selectInterface"</code><code>: </code><code>"extend"</code><code>,</code>
<code> </code><code>"filter"</code><code>: {</code>
<code> </code><code>"host"</code><code>: proxy</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code>)</code>
<code> </code><code>proxy_id=get_proxy_id[0][</code><code>'proxyid'</code><code>]</code>
<code> </code><code>return</code> <code>proxy_id</code>
<code>def get_group_id(</code><code>groups</code><code>):</code>
<code> </code><code>group_id = zapi.hostgroup.get(</code>
<code> </code><code>{</code>
<code> </code><code>"output"</code><code>: </code><code>"groupid"</code><code>,</code>
<code> </code><code>"filter"</code><code>: {</code>
<code> </code><code>"name"</code><code>:</code><code>groups</code><code>.</code><code>split</code><code>(</code><code>","</code><code>)</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>group_id</code>
<code>def get_templates_id(templates):</code>
<code> </code><code>templates_id = zapi.template.get(</code>
<code> </code><code>"output"</code><code>: </code><code>"templateid"</code><code>,</code>
<code> </code><code>"host"</code><code>:templates.</code><code>split</code><code>(</code><code>","</code><code>)</code>
<code> </code><code>return</code> <code>templates_id</code>
<code>def create_host_with_proxy(</code><code>hostname</code><code>,group_id,templates_id,ip,proxy_id):</code>
<code> </code><code>host_create = zapi.host.create(</code>
<code> </code><code>"host"</code><code>:</code><code>hostname</code><code>,</code>
<code> </code><code>"groups"</code><code>:group_id,</code>
<code> </code><code>"templates"</code><code>:templates_id,</code>
<code> </code><code>"interfaces"</code><code>:[</code>
<code> </code><code>{</code>
<code> </code><code>"type"</code><code>:1,</code>
<code> </code><code>"main"</code><code>:1,</code>
<code> </code><code>"useip"</code><code>:1,</code>
<code> </code><code>"ip"</code><code>:ip,</code>
<code> </code><code>"dns"</code><code>:</code><code>""</code><code>,</code>
<code> </code><code>"port"</code><code>:</code><code>"10050"</code>
<code> </code><code>}</code>
<code> </code><code>],</code>
<code> </code><code>"proxy_hostid"</code><code>:proxy_id,</code>
<code> </code><code>"status"</code><code>:0</code>
<code> </code><code>return</code> <code>"host add success!"</code>
<code>def create_host_without_proxy(</code><code>hostname</code><code>,group_id,templates_id,ip):</code>
<code> </code><code>"host"</code><code>: </code><code>hostname</code><code>,</code>
<code> </code><code>"groups"</code><code>: group_id,</code>
<code> </code><code>"templates"</code><code>: templates_id,</code>
<code> </code><code>"main"</code><code>:1,</code>
<code> </code><code>"useip"</code><code>:1,</code>
<code> </code><code>"ip"</code><code>:ip,</code>
<code> </code><code>"dns"</code><code>:</code><code>""</code><code>,</code>
<code> </code><code>"port"</code><code>:</code><code>"10050"</code>
<code> </code><code>}</code>
<code>if</code> <code>__name__ == </code><code>"__main__"</code><code>:</code>
<code> </code><code>args = get_args()</code>
<code> </code><code>hostname</code> <code>= args.host</code>
<code> </code><code>ip = args.ip</code>
<code> </code><code>group_id = get_group_id(args.group)</code>
<code> </code><code>templates_id = get_templates_id(args.templates)</code>
<code> </code><code>if</code> <code>args.proxy:</code>
<code> </code><code>proxy_id = get_proxy_id(args.proxy)</code>
<code> </code><code>print create_host_with_proxy(</code><code>hostname</code><code>,group_id,templates_id,ip,proxy_id)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print create_host_without_proxy(</code><code>hostname</code><code>,group_id,templates_id,ip)</code>
腳本内容解釋:
要使用本腳本,需要安裝zabbix-api子產品
腳本思路:
通過zabbix API添加host,需要知道以下資訊:
hostname:主機名(不是可見名)
ip:主機IP
group_id:host所屬組的組id
templates_id:host關聯模闆的模闆id
proxy_id:如果是通過proxy添加主機,則需要給出proxy_id,這個是可選項,是以我寫了兩個函數來區分有proxy和沒有proxy的情況
hostname、ip這些可以直接通過指令行傳參擷取到,但是group_id、templates_id、proxy_id需要通過zabbix API的方法去擷取到,比如:group_id需要事先知道group name,才能通過api查詢到,腳本中我對于如何擷取group_id、templates_id、proxy_id都用函數去實作了,是以在指令行傳參時,隻需要傳遞group name、templates name、proxy name就可以擷取到對應的id了。
如果不清楚參數是怎麼擷取的,請查閱argparse子產品相關資料
參考資料:https://github.com/CNSRE/Zabbix-PyZabbix/blob/master/zabbix_host_add.py
本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1850578,如需轉載請自行聯系原作者