def set_member_ratio(self, name=None, ip_address=None, port=None, ratio=1, folder='Common', no_checks=False): if name and ip_address and port: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/pool/' request_url += '~' + folder + '~' + name request_url += '/members/' request_url += '~' + folder + '~' request_url += urllib.quote(ip_address) + ':' + str(port) payload = dict() payload['ratio'] = ratio response = self.bigip.icr_session.put(request_url, data=json.dumps(payload), timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return True elif response.status_code == 404: Log.error('pool', 'tried to set ratio on non-existant member %s on pool %s.' % (ip_address + ':' + str(port), '/' + folder + '/' + name)) return False else: Log.error('pool', response.text) raise exceptions.PoolUpdateException(response.text) return False
def remove_monitor(self, name=None, monitor_name=None, folder='Common'): if not (name and monitor_name): return False folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/pool/' request_url += '~' + folder + '~' + name request_url += '?$select=monitor' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if 'monitor' in response_obj: w_split = response_obj['monitor'].split() existing_monitors = [] for w in w_split: if w.startswith('/'): existing_monitors.append(w) fp_monitor = '/' + folder + '/' + monitor_name monitor_string = '' if fp_monitor in existing_monitors: existing_monitors.remove(fp_monitor) new_monitor_count = len(existing_monitors) if new_monitor_count > 0: if response_obj['monitor'].startswith('min'): min_count = w_split[1] if min_count > new_monitor_count: min_count = new_monitor_count monitor_string = 'min ' + min_count + ' of { ' for monitor in existing_monitors: monitor_string += monitor + ' ' monitor_string += '}' else: for i in range(new_monitor_count): if (i + 1) < new_monitor_count: monitor_string += \ existing_monitors[i] + ' and ' else: monitor_string += \ existing_monitors[i] + ' ' request_url = self.bigip.icr_url + '/ltm/pool/' request_url += '~' + folder + '~' + name payload = dict() payload['monitor'] = monitor_string 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('pool', response.text) raise exceptions.PoolUpdateException(response.text) else: return True elif response.status_code != 404: Log.error('pool', response.text) raise exceptions.PoolQueryException(response.text) return False
def set_description(self, name=None, description=None, folder='Common'): if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/pool/' request_url += '~' + folder + '~' + name payload = dict() if description: payload['description'] = description else: payload['description'] = '' 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('pool', response.text) raise exceptions.PoolUpdateException(response.text) return False
def set_lb_method(self, name=None, lb_method=None, folder='Common'): if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/pool/' request_url += '~' + folder + '~' + name payload = dict() if lb_method: payload['loadBalancingMode'] = \ self._get_rest_lb_method_type(lb_method) else: payload['loadBalancingMode'] = 'least-connections-member' 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('pool', response.text) raise exceptions.PoolUpdateException(response.text) return False