Beispiel #1
0
    def set_production_state(self, ip=None, state=None):
        """
        Set device <uid> in production state <state>
        """
        if not is_valid_ip(ip):
            status = False
            data = "Not a valid IP address: %s" % ip
            return status, data

        if state not in PRODUCTION_STATES:
            status = False
            data = "Not a valid production state: %s\nPlease use one of: %s" % (state, PRODUCTION_STATES.keys())
            return status, data

        status, data = self.get_uid_by_ip(ip)
        if status:
            params = {'productionState': PRODUCTION_STATES[state]}
            resp = self._set_info(data, params)['result']
            if resp['success']:
                status = True
                data = []
            else:
                status = False
                data = resp['msg']

        return status, data
Beispiel #2
0
    def update_device(self, uid=None, ip=None, hostname=None, device_class=None, snmp_port=161, snmp_community="public",
                      hw_manufacturer="", hw_productname="", os_manufacturer="", os_productname="",
                      production_state="production", comments="", collector="localhost", location="", systems=[], groups=[]):
        """
        Update device registration
        """
        if not is_valid_ip(ip):
            status = False
            data = "Not a valid IP address: %s" % ip
            return status, data

        if production_state not in PRODUCTION_STATES:
            status = False
            data = "Not a valid production state: %s\nPlease use one of: %s" % (production_state, PRODUCTION_STATES.keys())
            return status, data

        # check if IP address is already known to zenoss, if not bail out
        status, data = self.get_devices_by_ip(ip)
        if status:
            data_len = len(data)
            if data_len == 0:
                status = False
                data = "IP address (%s) not found\nYou can't change a nodes IP address with zenossctl" % ip
                return status, data
            elif data_len == 1:
                # setup the uid as it was in the first place
                uid = data[0]['uid'].rsplit("/", 1)[1]
            else:
                status = False
                data = "Expected 1 device but found %s devices" % data_len
                return status, data
        else:
            return status, data

        # FIXME
        # check if device class exists

        status, data = self.remove_device(ip, keep_data=True)
        if status and uid is not None:
            status, data = self.add_device(uid, ip, hostname, device_class, snmp_port, snmp_community,
                                           hw_manufacturer, hw_productname, os_manufacturer, os_productname,
                                           production_state, comments, collector, location, systems, groups)

        return status, data
Beispiel #3
0
    def add_device(self, uid=None, ip=None, hostname=None, device_class=None, snmp_port=161, snmp_community="public",
                   hw_manufacturer="", hw_productname="", os_manufacturer="", os_productname="",
                   production_state="production", comments="", collector="localhost", location="", systems=[], groups=[]):
        """
        Add a device
        """
        if uid is None:
            status = False
            data = "Invalid uid: None"
            return status, data
        else:
            if not is_valid_ip(uid) and not is_valid_hostname(uid):
                status = False
                data = "Uid is not a valid IP address or FQDN"
                return status, data
            else:
                device_name = uid

        if not is_valid_ip(ip):
            status = False
            data = "Not a valid IP address: %s" % ip
            return status, data

        if production_state not in PRODUCTION_STATES:
            status = False
            data = "Not a valid production state: %s\nPlease use one of: %s" % (production_state, PRODUCTION_STATES.keys())
            return status, data
        else:
            production_state = PRODUCTION_STATES[production_state]

        # FIXME: need to check for existence of the device class
        # Should prevent ObjectNotFoundExceptions from ZenOSS

        params = {
            'title': hostname,
            'manageIp': ip,
            'model': True,
            'productionState': production_state,
            'comments': comments,
            'collector': collector,
            'snmpPort': snmp_port,
            'snmpCommunity': snmp_community,
            'hwManufacturer': hw_manufacturer,
            'hwProductName': hw_productname,
            'osManufacturer': os_manufacturer,
            'osProductName': os_productname,
            'locationPath': location,
            'systemPaths': systems,
            'groupPaths': groups,
        }
        resp = self._add_device(device_name, device_class, params)
        if resp['success']:
            status = True
            data = []
        else:
            status = False
            data = resp['msg']

        return status, data
Beispiel #4
0
    def set_production_state(self, ip=None, state=None):
        """
        Set device <uid> in production state <state>
        """
        if not is_valid_ip(ip):
            status = False
            data = "Not a valid IP address: %s" % ip
            return status, data

        if state not in PRODUCTION_STATES:
            status = False
            data = "Not a valid production state: %s\nPlease use one of: %s" % (state, PRODUCTION_STATES.keys())
            return status, data

        status, data = self.get_uid_by_ip(ip)
        if status:
            params = {'productionState': PRODUCTION_STATES[state]}
            resp = self._set_info(data, params)['result']
            if resp['success']:
                status = True
                data = []
            else:
                status = False
                data = resp['msg']

        return status, data
Beispiel #5
0
    def update_device(self, uid=None, ip=None, hostname=None, device_class=None, snmp_port=161, snmp_community="public",
                      hw_manufacturer="", hw_productname="", os_manufacturer="", os_productname="",
                      production_state="production", comments="", collector="localhost", location="", systems=[], groups=[]):
        """
        Update device registration
        """
        if not is_valid_ip(ip):
            status = False
            data = "Not a valid IP address: %s" % ip
            return status, data

        if production_state not in PRODUCTION_STATES:
            status = False
            data = "Not a valid production state: %s\nPlease use one of: %s" % (production_state, PRODUCTION_STATES.keys())
            return status, data

        # check if IP address is already known to zenoss, if not bail out
        status, data = self.get_devices_by_ip(ip)
        if status:
            data_len = len(data)
            if data_len == 0:
                status = False
                data = "IP address (%s) not found\nYou can't change a nodes IP address with zenossctl" % ip
                return status, data
            elif data_len == 1:
                # setup the uid as it was in the first place
                uid = data[0]['uid'].rsplit("/", 1)[1]
            else:
                status = False
                data = "Expected 1 device but found %s devices" % data_len
                return status, data
        else:
            return status, data

        # FIXME
        # check if device class exists

        status, data = self.remove_device(ip, keep_data=True)
        if status and uid is not None:
            status, data = self.add_device(uid, ip, hostname, device_class, snmp_port, snmp_community,
                                           hw_manufacturer, hw_productname, os_manufacturer, os_productname,
                                           production_state, comments, collector, location, systems, groups)

        return status, data
Beispiel #6
0
    def add_device(self, uid=None, ip=None, hostname=None, device_class=None, snmp_port=161, snmp_community="public",
                   hw_manufacturer="", hw_productname="", os_manufacturer="", os_productname="",
                   production_state="production", comments="", collector="localhost", location="", systems=[], groups=[]):
        """
        Add a device
        """
        if uid is None:
            status = False
            data = "Invalid uid: None"
            return status, data
        else:
            if not is_valid_ip(uid) and not is_valid_hostname(uid):
                status = False
                data = "Uid is not a valid IP address or FQDN"
                return status, data
            else:
                device_name = uid

        if not is_valid_ip(ip):
            status = False
            data = "Not a valid IP address: %s" % ip
            return status, data

        if production_state not in PRODUCTION_STATES:
            status = False
            data = "Not a valid production state: %s\nPlease use one of: %s" % (production_state, PRODUCTION_STATES.keys())
            return status, data
        else:
            production_state = PRODUCTION_STATES[production_state]

        # FIXME: need to check for existence of the device class
        # Should prevent ObjectNotFoundExceptions from ZenOSS

        params = {
            'title': hostname,
            'manageIp': ip,
            'model': True,
            'productionState': production_state,
            'comments': comments,
            'collector': collector,
            'snmpPort': snmp_port,
            'snmpCommunity': snmp_community,
            'hwManufacturer': hw_manufacturer,
            'hwProductName': hw_productname,
            'osManufacturer': os_manufacturer,
            'osProductName': os_productname,
            'locationPath': location,
            'systemPaths': systems,
            'groupPaths': groups,
        }
        resp = self._add_device(device_name, device_class, params)
        if resp['success']:
            status = True
            data = []
        else:
            status = False
            data = resp['msg']

        return status, data