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
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
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