def get_metadata(self, name=None): if not name: name = self.get_device_name() request_url = self.bigip.icr_url + '/cm/device/~Common~' request_url += name + '?$select=name,description' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) str_comment = None if response.status_code < 400: response_obj = json.loads(response.text) if response_obj['name'] == name: if 'description' in response_obj: str_comment = response_obj['description'] elif response.status_code != 404: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) if str_comment: try: return json.loads(base64.decodestring(str_comment)) except: try: return base64.decodestring(str_comment) except: return str_comment return None
def get_failover_state(self): request_url = self.bigip.icr_url + '/cm/device/~Common' request_url += '~' + self.get_device_name() request_url += '/?$select=failoverState' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) return response_obj['failoverState'] else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return None
def get_configsync_addr(self): """ Get device config sync ip """ request_url = self.bigip.icr_url + '/cm/device/~Common' request_url += '~' + self.get_device_name() request_url += '/?$select=configsyncIp' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) return response_obj['configsyncIp'] else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return None
def get_mgmt_addr_by_device(self, devicename): request_url = self.bigip.icr_url + '/cm/device' request_url += '/?$select=managementIp,name' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if 'items' in response_obj: for device in response_obj['items']: if device['name'] == devicename: return device['managementIp'] else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return None
def get_all_mgmt_addrs(self): request_url = self.bigip.icr_url + '/cm/device' request_url += '/?$select=managementIp' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if 'items' in response_obj: mgmt_addrs = [] for device in response_obj['items']: mgmt_addrs.append(device['managementIp']) return mgmt_addrs else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return None
def get_secondary_mirror_addr(self): request_url = self.bigip.icr_url + '/cm/device/~Common' request_url += '~' + self.get_device_name() request_url += '/?$select=mirrorSecondaryIp' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) secondary = response_obj['mirrorSecondaryIp'] if secondary == 'any6': return None else: return secondary else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return None
def get_all_device_names(self): request_url = self.bigip.icr_url + '/cm/device' request_filter = '/?$select=name&filter partition eq Common' request_url += request_filter response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if 'items' in response_obj: devices = response_obj['items'] device_names = [] for device in devices: device_names.append(device['name']) return device_names else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return []
def set_configsync_addr(self, ip_address=None, folder='/Common'): dev_name = self.get_device_name() request_url = self.bigip.icr_url + '/cm/device/' request_url += '~Common~' + dev_name payload = dict() if not ip_address: payload['configsyncIp'] = None else: payload['configsyncIp'] = ip_address response = self.bigip.icr_session.put(request_url, data=json.dumps(payload), timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return True else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return False
def get_device_name(self): if not self.devicename: request_url = self.bigip.icr_url + '/cm/device' request_filter = '/?$select=name,selfDevice' request_filter += '&filter partition eq Common' request_url += request_filter response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if 'items' in response_obj: devices = response_obj['items'] for device in devices: if device['selfDevice'] == 'true': self.devicename = device['name'] else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return self.devicename
def get_device_group(self): request_url = self.bigip.icr_url + '/cm/device-group' request_url += '/?$select=name,type' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if 'items' in response_obj: dsgs = response_obj['items'] for dsg in dsgs: if dsg['type'] == 'sync-failover': return dsg['name'] return None elif response.status_code == 404: return None else: Log.error('device-group', response.text) raise exceptions.DeviceQueryException(response.text) return None
def get_failover_addrs(self): request_url = self.bigip.icr_url + '/cm/device/~Common' request_url += '~' + self.get_device_name() request_url += '/?$select=unicastAddress' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) return_addresses = [] if 'unicastAddress' in response_obj: uas = response_obj['unicastAddress'] for ua in uas: return_addresses.append(ua['ip']) return return_addresses else: return [] else: Log.error('device', response.text) raise exceptions.DeviceQueryException(response.text) return []