天天看點

通過Zabbix API 添加host

腳本内容:

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,如需轉載請自行聯系原作者

繼續閱讀