• 调用API自动配置zabbix version 3.0


    __author__ = 'eliaten'
    
    import json
    import urllib2
    from lib import helper
    
    
    class ZabbixServerConfigure:
        """
        This class is used to configure zabbix server
        ZABBIX API 3.0
        """
        _PARAs = {
            "authid": -1,
            "zabbix_user_name": "bmc_wpst",
            "zabbix_user_password": "wpst1234",
            "template_name": "Template OS Linux",
            "templateid": -1,
            "user_group_name": "eMBMS",
            "user_group_id": -1,
            "host_id": -1,
            "interface_id": -1,
            "screen_name_prefix": "bmcwpst1",
            "screen_id": -1,
            "zabbix_server_API_url": "http://10.170.65.231/zabbix/api_jsonrpc.php",
            "graph_names": ('Total memory', 'Available memory', 'CPU jumps', 'CPU utilization', 'Swap usage'),
            "graph_ids": []
        }
    
        def __init__(self, hostname, ip):
            self.hostname = hostname
            self.ip = ip
            self.screen_name = self._PARAs['screen_name_prefix'] + "_" + self.hostname
            helper.info('start to configure zabbix server for host %s !' % self.hostname)
    
        def _send_request_to_zabbixServer(self, vdata):
            header = {"Content-Type": "application/json"}
            data = {
                "jsonrpc": "2.0",
                "method": vdata['method'],
                "params": vdata['params'],
                "id": 0
            }
            if vdata['method'] != "user.login":
                data['auth'] = self._PARAs['authID']
            dump = json.dumps(data)
            request = urllib2.Request(self._PARAs['zabbix_server_API_url'], dump)
            for key in header:
                request.add_header(key, header[key])
            try:
                result = urllib2.urlopen(request)
            except urllib2.URLError as e:
                helper.error(e)
                result.close()
                return 0
            else:
                response = json.loads(result.read())
                result.close()
                if 'error' in response:
                    helper.info('send request %s and get ERROR result %s %s' %
                                (vdata['method'], response['error']['code'], response['error']['data']))
                    return response['error']['code']
                else:
                    return response
    
        def _authentication_on_zabbix_server(self):
            # auth user and password
            data = {
                "method": "user.login",
                "params": {
                "user": self._PARAs["zabbix_user_name"],
                "password": self._PARAs["zabbix_user_password"]
            }}
            # send request to zabbix server
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("Zabbix Server authentication failed!")
            else:
                self._PARAs['authID'] = result['result']
                helper.info('Zabbix server Auth Successful.')
    
        def _get_groupID(self):
            # get user's groupID from groupName
            data = {
                "method": "hostgroup.get",
                "params": {
                    "name": self._PARAs["user_group_name"]
                }
            }
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("Get user's groupID failed!")
            else:
                self._PARAs['user_group_ID'] = result['result'][0]['groupid']
                helper.info('Get user group ID Successful.')
    
        def _get_templateID(self):
            # get templateID from templateName
            data = {
                "method": "template.get",
                "params": {
                    "host": self._PARAs['template_name']}
            }
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("Get templateID failed!")
            else:
                self._PARAs['templateID'] = result['result'][0]['templateid']
                helper.info('Get template ID Successful.')
    
        def _create_host(self):
            # create host
            data = {
                "method": "host.create",
                "params": {
                    "host": self.hostname,
                    "interfaces": [
                        {
                            "type": 1,
                            "main": 1,
                            "useip": 1,
                            "ip": self.ip,
                            "dns": "",
                            "port": "10050"
                        }
                    ],
                    "groups": [
                        {
                            "groupid": self._PARAs['user_group_ID']
                        }
                    ],
                    "templates": [
                        {
                            "templateid": self._PARAs['templateID']
                        }
                    ]
                }
            }
            result = self._send_request_to_zabbixServer(data)
            if result == -32602:
                helper.info('the host %s exists, go to update its host IP' % self.hostname)
                self._get_hostID()
                self._get_interface_id()
                self._update_interface_ip()
            elif result <= 0:
                helper.error("create host failed!")
            else:
                self._PARAs['host_id'] = result['result']['hostids'][0]
                helper.info('create Host Successful.')
    
        def _get_hostID(self):
            # get hostID from hostname
            data = {
                "method": "host.get",
                "params": {
                    "output": "extend",
                    "filter": {
                        "host": [
                            self.hostname
                        ]
                    }}}
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("get host ID failed!")
            else:
                self._PARAs['host_id'] = result['result'][0]['hostid']
                helper.info('get host ID Successful.')
    
        def _get_interface_id(self):
            # get host's interfaceID, then update the IP of interface
            data = {
                "method": "hostinterface.get",
                "params": {
                    "output": "extend",
                    "hostids": self._PARAs['host_id']
                }}
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("get host interface ID failed!")
            else:
                self._PARAs['interface_id'] = result['result'][0]['interfaceid']
                helper.info('get host interface ID Successful.')
    
        def _update_interface_ip(self):
            # update the IP of interface
            data = {
                "method": "hostinterface.update",
                "params": {
                    "interfaceid": self._PARAs['interface_id'],
                    "ip": self.ip
                }}
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("update host interface failed!")
            else:
                helper.info("update host interface Successful.")
    
        def _get_graphID_from_host(self):
            data = {
                "method": "graph.get",
                "params": {
                    "hostids": self._PARAs['host_id']}
            }
            result = self._send_request_to_zabbixServer(data)
            if result == 0:
                helper.error("Get GraphIDs failed!")
            else:
                self._PARAs['graph_ids'] = []
                for i in range(0, len(result['result'])):
                    if result['result'][i]['name'] in self._PARAs['graph_names']:
                        self._PARAs['graph_ids'].append(result['result'][i]['graphid'])
                helper.info("get graphsIDs Successful.")
    
        def _get_and_recreate_screen(self):
            data = {
                "method": "screen.get",
                "params": {}  # get all of screens of current user
            }
            result = self._send_request_to_zabbixServer(data)
            if not len(result['result']):
                helper.info("the screen does not exist, create it now.")
                self._create_screen()
            elif result <= 0:
                helper.error("Get screenID failed!")
            else:
                for i in range(0, len(result['result'])):
                    if result['result'][i]['name'] == self.screen_name:
                        self._PARAs['screen_id'] = result['result'][i]['screenid']
                        helper.info('get remaining Screen Successful, recreate it now.')
                        # recreate screen
                        self._delete_screen()
                        self._create_screen()
                        break
                else:
                    helper.info('did not get remaining screen, create it now.')
                    self._create_screen()
    
        def _delete_screen(self):
            data = {
                "method": "screen.delete",
                "params": [self._PARAs['screen_id']]
            }
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("deleting screen failed!")
            else:
                helper.info("delete screen Successful.")
    
        def _create_screen(self):
            screenitems = []
            for i in range(0, len(self._PARAs['graph_ids'])):
                screenitem= {
                        "resourcetype": 0,
                        "resourceid": self._PARAs['graph_ids'][i],
                        "x": 0,
                        "y": i
                }
                screenitems.append(screenitem)
            data = {
                "method": "screen.create",
                "params": {
                    "name": self.screen_name,
                    "hsize": 2,
                    "vsize": 12,
                    "screenitems": screenitems
                }}
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("create screen failed!")
            else:
                self._PARAs['screen_id'] = result['result']['screenids']
                helper.info("create screen Successful.")
    
        # below function is not using, leave here in case needed in future
        def _update_screen_items(self):
            screenitems = []
            if "1" in self.hostname:
                x = 0
            elif "2" in self.hostname:
                x = 1
            else:
                x = 2
            for i in range(0, len(self._PARAs['graph_ids'])):
                screenitem= {
                        "screenid": self._PARAs['screen_id'],
                        "resourceid": self._PARAs['graph_ids'][i],
                        "x": x,
                        "y": i
                }
                screenitems.append(screenitem)
            data = {
                "method": "screenitem.updatebyposition",
                "params": screenitems
            }
            result = self._send_request_to_zabbixServer(data)
            if result <= 0:
                helper.error("update screen failed!")
            else:
                helper.info("update screen Successful.")
    
        def start_zabbixServer_configure(self):
            self._authentication_on_zabbix_server()
            self._get_groupID()
            self._get_templateID()
            self._create_host()
            self._get_graphID_from_host()
            self._get_and_recreate_screen()
    
    
    if __name__ == '__main__':
        bmcinstasnce = ZabbixServerConfigure("simulator", "10.175.183.250")
        bmcinstasnce.start_zabbixServer_configure()
       # print(ZabbixServerConfigure()._start_zabbixServer_configure())
  • 相关阅读:
    postgres导入和导出
    postgres日常操作
    NumPy Ndarray 对象
    NumPy 简介及安装
    Python两个内置函数locals 和globals
    python之multiprocessing多进程
    postgres外部表
    css中文本超出部分省略号代替
    js中的作用域链
    css中clip:rect矩形剪裁功能
  • 原文地址:https://www.cnblogs.com/tlmn2008/p/5363168.html
Copyright © 2020-2023  润新知