python zabbix批量添加主機(jī) 腳本

轉(zhuǎn)載:https://www.cnblogs.com/momoshouhu/p/8053907.html
1.安裝xlrd讀取Excel文件

1.1. 下載setuptools-38.2.4.zip派哲,上傳至zabbix服務(wù)器解壓安裝跨扮,下載地址:https://pypi.python.org/packages/69/56/f0f52281b5175e3d9ca8623dadbc3b684e66350ea9e0006736194b265e99/setuptools-38.2.4.zip#md5=e8e05d4f8162c9341e1089c80f742f64

[root@localhost temp]# ll #上傳文件setuptools-38.2.4.zip
total 724
-rw-r--r-- 1 root root 736683 Dec 17 22:37 setuptools-38.2.4.zip

[root@localhost temp]# unzip setuptools-38.2.4.zip #解壓setuptools-38.2.4.zip

[root@localhost temp]# cd setuptools-38.2.4 #進(jìn)入setuptools-38.2.4目錄

[root@localhost temp]# cd setuptools-38.2.4 #安裝

1.2下載pip-9.0.1.tar.gz,上傳至zabbix服務(wù)器解壓安裝,下載地址:https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9

[root@localhost temp]# ll
total 1896
-rw-r--r-- 1 root root 1197370 Dec 17 22:53 pip-9.0.1.tar.gz #上傳文件pip-9.0.1.tar.gz
drwxr-xr-x 9 root root 4096 Dec 17 22:55 setuptools-38.2.4
-rw-r--r-- 1 root root 736683 Dec 17 22:37 setuptools-38.2.4.zip

[root@localhost temp]# tar -xzvf pip-9.0.1.tar.gz #解壓pip-9.0.1.tar.gz

[root@localhost pip-9.0.1]# python setup.py build #編譯
[root@localhost pip-9.0.1]# python setup.py install #安裝

[root@localhost pip-9.0.1]# pip install xlrd #安裝xlrd

3.編輯Excel模板

3.1主機(jī)名、顯示名、IP、主機(jī)組、模板

image

3.2將Execle表zabbix_host_add.xlsx上傳至zabbix服務(wù)器

[root@localhost temp]# ll
total 1964
-rw-r--r-- 1 root root 46079 Dec 17 23:28 zabbix_host_add.xlsx

4.編寫Python腳本呀狼,參考http://www.361way.com/zabbix-api-2/3681.html

#!/usr/bin/python

#coding:utf-8

import json

import urllib2

from urllib2 ``import URLError

import sys,argparse

import xlrd

defaultencoding ``= 'utf-8'

if sys.getdefaultencoding() !``= defaultencoding:

reload``(sys)

sys.setdefaultencoding(defaultencoding)

class zabbix_api:

def __init__(``self``):

self``.url ``= 'http://zabbix服務(wù)器IP地址/zabbix/api_jsonrpc.php' #修改URL

self``.header ``= {``"Content-Type"``:``"application/json"``}

def user_login(``self``):

data ``= json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"user.login"``,

"params"``: {

"user"``: ``"Admin"``, ``#web頁面登錄用戶名

"password"``: ``"zabbix" #web頁面登錄密碼

},

"id"``: ``0

})

request ``= urllib2.Request(``self``.url, data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "\033[041m 用戶認(rèn)證失敗,請檢查 !\033[0m"``, e.code

else``:

response ``= json.loads(result.read())

result.close()

#print response['result']

self``.authID ``= response[``'result'``]

return self``.authID

def host_get(``self``,hostName``=``''):

data``=``json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"host.get"``,

"params"``: {

"output"``: ``"extend"``,

"filter"``:{``"host"``:hostName}

},

"auth"``: ``self``.user_login(),

"id"``: ``1

})

request ``= urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

if hasattr``(e, ``'reason'``):

print 'We failed to reach a server.'

print 'Reason: '``, e.reason

elif hasattr``(e, ``'code'``):

print 'The server could not fulfill the request.'

print 'Error code: '``, e.code

else``:

response ``= json.loads(result.read())

#print response

result.close()

print "主機(jī)數(shù)量: \033[31m%s\033[0m"``%``(``len``(response[``'result'``]))

for host ``in response[``'result'``]:

status``=``{``"0"``:``"OK"``,``"1"``:``"Disabled"``}

available``=``{``"0"``:``"Unknown"``,``"1"``:``"available"``,``"2"``:``"Unavailable"``}

#print host

if len``(hostName)``=``=``0``:

print "HostID : %s\t HostName : %s\t Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m"``%``(host[``'hostid'``],host[``'name'``],status[host[``'status'``]],available[host[``'available'``]])

else``:

print "HostID : %s\t HostName : %s\t Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m"``%``(host[``'hostid'``],host[``'name'``],status[host[``'status'``]],available[host[``'available'``]])

return host[``'hostid'``]

def hostgroup_get(``self``, hostgroupName``=``''):

data ``= json.dumps({

"jsonrpc"``:``"2.0"``,

"method"``:``"hostgroup.get"``,

"params"``:{

"output"``: ``"extend"``,

"filter"``: {

"name"``: hostgroupName

}

},

"auth"``:``self``.user_login(),

"id"``:``1``,

})

request ``= urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

#print result.read()

response ``= json.loads(result.read())

result.close()

#print response()

for group ``in response[``'result'``]:

if len``(hostgroupName)``=``=``0``:

print "hostgroup: \033[31m%s\033[0m \tgroupid : %s" %``(group[``'name'``],group[``'groupid'``])

else``:

print "hostgroup: \033[31m%s\033[0m\tgroupid : %s" %``(group[``'name'``],group[``'groupid'``])

self``.hostgroupID ``= group[``'groupid'``]

return group[``'groupid'``]

def template_get(``self``,templateName``=``''):

data ``= json.dumps({

"jsonrpc"``:``"2.0"``,

"method"``: ``"template.get"``,

"params"``: {

"output"``: ``"extend"``,

"filter"``: {

"name"``:templateName

}

},

"auth"``:``self``.user_login(),

"id"``:``1``,

})

request ``= urllib2.Request(``self``.url, data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

#print response

for template ``in response[``'result'``]:

if len``(templateName)``=``=``0``:

print "template : \033[31m%s\033[0m\t id : %s" % (template[``'name'``], template[``'templateid'``])

else``:

self``.templateID ``= response[``'result'``][``0``][``'templateid'``]

print "Template Name : \033[31m%s\033[0m "``%``templateName

return response[``'result'``][``0``][``'templateid'``]

def hostgroup_create(``self``,hostgroupName):

if self``.hostgroup_get(hostgroupName):

print "hostgroup \033[42m%s\033[0m is exist !"``%``hostgroupName

sys.exit(``1``)

data ``= json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"hostgroup.create"``,

"params"``: {

"name"``: hostgroupName

},

"auth"``: ``self``.user_login(),

"id"``: ``1

})

request``=``urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

print "\033[042m 添加主機(jī)組:%s\033[0m hostgroupID : %s"``%``(hostgroupName,response[``'result'``][``'groupids'``])

def host_create_andy(``self``,hostName,visibleName, hostip, hostgroupName, templateName):

if self``.host_get(hostip):

print "\033[041m該主機(jī)已經(jīng)添加!\033[0m"

sys.exit(``1``)

group_list``=``[]

template_list``=``[]

for i ``in hostgroupName.split(``','``):

var ``= {}

var[``'groupid'``] ``= self``.hostgroup_get(i)

group_list.append(var)

for i ``in templateName.split(``','``):

var``=``{}

var[``'templateid'``]``=``self``.template_get(i)

template_list.append(var)

data ``= json.dumps({

"jsonrpc"``:``"2.0"``,

"method"``:``"host.create"``,

"params"``:{

"host"``: hostName,

"name"``: visibleName,

"interfaces"``: [

{

"type"``: ``2``, ``#1:表示IP损离;2表示SNMP

"main"``: ``1``,

"useip"``: ``1``,

"ip"``: hostip,

"dns"``: "",

"port"``: ``"161" #IP端口10051哥艇;SNMP端口161

}

],

"groups"``: group_list,

"templates"``: template_list,

},

"auth"``: ``self``.user_login(),

"id"``:``1

})

request ``= urllib2.Request(``self``.url, data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

print "添加主機(jī) : \033[42m%s\031[0m \tid :\033[31m%s\033[0m" % (hostip, response[``'result'``][``'hostids'``])

def host_create(``self``, hostip, hostgroupName, templateName):

if self``.host_get(hostip):

print "\033[041m該主機(jī)已經(jīng)添加!\033[0m"

sys.exit(``1``)

group_list``=``[]

template_list``=``[]

for i ``in hostgroupName.split(``','``):

var ``= {}

var[``'groupid'``] ``= self``.hostgroup_get(i)

group_list.append(var)

for i ``in templateName.split(``','``):

var``=``{}

var[``'templateid'``]``=``self``.template_get(i)

template_list.append(var)

data ``= json.dumps({

"jsonrpc"``:``"2.0"``,

"method"``:``"host.create"``,

"params"``:{

"host"``: hostip,

"interfaces"``: [

{

"type"``: ``2``,

"main"``: ``1``,

"useip"``: ``1``,

"ip"``: hostip,

"dns"``: "",

"port"``: ``"161"

}

],

"groups"``: group_list,

"templates"``: template_list,

},

"auth"``: ``self``.user_login(),

"id"``:``1

})

request ``= urllib2.Request(``self``.url, data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

print "添加主機(jī) : \033[42m%s\031[0m \tid :\033[31m%s\033[0m" % (hostip, response[``'result'``][``'hostids'``])

def host_disable(``self``,hostip):

data``=``json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"host.update"``,

"params"``: {

"hostid"``: ``self``.host_get(hostip),

"status"``: ``1

},

"auth"``: ``self``.user_login(),

"id"``: ``1

})

request ``= urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

print '----主機(jī)現(xiàn)在狀態(tài)------------'

print self``.host_get(hostip)

def host_delete(``self``,hostid):

hostid_list``=``[]

#print type(hostid)

for i ``in hostid.split(``','``):

var ``= {}

var[``'hostid'``] ``= self``.host_get(i)

hostid_list.append(var)

data``=``json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"host.delete"``,

"params"``: hostid_list,

"auth"``: ``self``.user_login(),

"id"``: ``1

})

request ``= urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except Exception,e:

print e

else``:

result.close()

print "主機(jī) \033[041m %s\033[0m 已經(jīng)刪除 !"``%``hostid

if __name__ ``=``= "__main__"``:

zabbix``=``zabbix_api()

parser``=``argparse.ArgumentParser(description``=``'zabbix api '``,usage``=``'%(prog)s [options]'``)

parser.add_argument(``'-H'``,``'--host'``,nargs``=``'?'``,dest``=``'listhost'``,default``=``'host'``,``help``=``'查詢主機(jī)'``)

parser.add_argument(``'-G'``,``'--group'``,nargs``=``'?'``,dest``=``'listgroup'``,default``=``'group'``,``help``=``'查詢主機(jī)組'``)

parser.add_argument(``'-T'``,``'--template'``,nargs``=``'?'``,dest``=``'listtemp'``,default``=``'template'``,``help``=``'查詢模板信息'``)

parser.add_argument(``'-A'``,``'--add-group'``,nargs``=``1``,dest``=``'addgroup'``,``help``=``'添加主機(jī)組'``)

parser.add_argument(``'-C'``,``'--add-host'``,dest``=``'addhost'``,nargs``=``3``,metavar``=``(``'192.168.2.1'``, ``'test01,test02'``, ``'Template01,Template02'``),``help``=``'添加主機(jī),多個主機(jī)組或模板使用分號'``)

parser.add_argument(``'-d'``,``'--disable'``,dest``=``'disablehost'``,nargs``=``1``,metavar``=``(``'192.168.2.1'``),``help``=``'禁用主機(jī)'``)

parser.add_argument(``'-L'``,``'--allin'``,dest``=``'allin'``,nargs``=``'?'``,default``=``'allin'``,``help``=``'從Excel批量導(dǎo)入主機(jī)'``)

parser.add_argument(``'-D'``,``'--delete'``,dest``=``'deletehost'``,nargs``=``'+'``,metavar``=``(``'192.168.2.1'``),``help``=``'刪除主機(jī),多個主機(jī)之間用分號'``)

parser.add_argument(``'-v'``,``'--version'``, action``=``'version'``, version``=``'%(prog)s 1.0'``)

if len``(sys.argv)``=``=``1``:

print parser.print_help()

else``:

args``=``parser.parse_args()

if args.listhost !``= 'host' :

if args.listhost:

zabbix.host_get(args.listhost)

else``:

zabbix.host_get()

if args.listgroup !``=``'group'``:

if args.listgroup:

zabbix.hostgroup_get(args.listgroup)

else``:

zabbix.hostgroup_get()

if args.listtemp !``= 'template'``:

if args.listtemp:

zabbix.template_get(args.listtemp)

else``:

zabbix.template_get()

if args.addgroup:

zabbix.hostgroup_create(args.addgroup[``0``])

if args.addhost:

zabbix.host_create(args.addhost[``0``], args.addhost[``1``], args.addhost[``2``])

if args.disablehost:

zabbix.host_disable(args.disablehost)

if args.deletehost:

zabbix.host_delete(args.deletehost[``0``])

if args.allin !``= 'allin'``:

workbook ``= xlrd.open_workbook(``'zabbix_host_add.xlsx'``) ``#Excel名

for row ``in xrange``(workbook.sheets()[``0``].nrows):

hostname ``= workbook.sheets()[``0``].cell(row, ``0``).value

visible ``= workbook.sheets()[``0``].cell(row, ``1``).value

hostip ``= workbook.sheets()[``0``].cell(row, ``2``).value

hostgroup ``= workbook.sheets()[``0``].cell(row, ``3``).value

hosttemp ``= workbook.sheets()[``0``].cell(row, ``4``).value

zabbix.host_create_andy(hostname,visible,hostip,hostgroup, hosttemp)

|

上面紅色標(biāo)注,請根據(jù)實(shí)際情況修改僻澎。

上傳Python腳本zabbix_host.py至zabbix服務(wù)器

[root@localhost temp]# ll
total 1964
-rwxr-xr-x 1 root root 14644 Dec 17 23:28 zabbix_host.py

[root@localhost temp]# chown zabbix:zabbix zabbix_host.py #修改屬組屬主
[root@localhost temp]# chmod +x zabbix_host.py #添加執(zhí)行權(quán)限

[root@localhost temp]# python zabbix_host.py -L #執(zhí)行zabbix_host.py進(jìn)行主機(jī)添加

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末貌踏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子窟勃,更是在濱河造成了極大的恐慌祖乳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秉氧,死亡現(xiàn)場離奇詭異眷昆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)汁咏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門亚斋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人攘滩,你說我怎么就攤上這事帅刊。” “怎么了漂问?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵赖瞒,是天一觀的道長。 經(jīng)常有香客問我级解,道長冒黑,這世上最難降的妖魔是什么田绑? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任勤哗,我火速辦了婚禮,結(jié)果婚禮上掩驱,老公的妹妹穿的比我還像新娘芒划。我一直安慰自己冬竟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布民逼。 她就那樣靜靜地躺著泵殴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拼苍。 梳的紋絲不亂的頭發(fā)上笑诅,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音疮鲫,去河邊找鬼吆你。 笑死,一個胖子當(dāng)著我的面吹牛俊犯,可吹牛的內(nèi)容都是我干的妇多。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼燕侠,長吁一口氣:“原來是場噩夢啊……” “哼者祖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绢彤,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤七问,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茫舶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烂瘫,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年奇适,在試婚紗的時候發(fā)現(xiàn)自己被綠了坟比。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡嚷往,死狀恐怖葛账,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情皮仁,我是刑警寧澤籍琳,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站贷祈,受9級特大地震影響趋急,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜势誊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一呜达、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粟耻,春花似錦查近、人聲如沸眉踱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈喳。三九已至,卻和暖如春戈泼,著一層夾襖步出監(jiān)牢的瞬間婿禽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工大猛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谈宛,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓胎署,卻偏偏與公主長得像吆录,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子琼牧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348