def cert_key_chain(self): if self._values['cert_key_chain'] is None: return None result = [] for item in self._values['cert_key_chain']: if 'key' in item and 'cert' not in item: raise F5ModuleError( "When providing a 'key', you must also provide a 'cert'" ) if 'cert' in item and 'key' not in item: raise F5ModuleError( "When providing a 'cert', you must also provide a 'key'" ) key = self._key_filename(item['key']) cert = self._cert_filename(item['cert']) chain = self._get_chain_value(item) name = os.path.basename(cert) filename, ex = os.path.splitext(name) tmp = { 'name': filename, 'cert': fq_name(self.partition, cert), 'key': fq_name(self.partition, key), 'chain': chain } if 'passphrase' in item: tmp['passphrase'] = item['passphrase'] result.append(tmp) result = sorted(result, key=lambda x: x['name']) return result
def members(self): results = [] if self._values['members'] is None: return None for member in self._values['members']: parts = member.split(':') results.append(dict( server=fq_name(self.partition, parts[0]), virtual_server=fq_name(self.partition, parts[1]) )) return results
def forward_to(self): if self._values['syslog_settings'] is None: return None result = self._values['syslog_settings'].get('forward_to', None) if result: result = fq_name(self.partition, result) return result
def pool(self): if self._values['pool_settings'] is None: return None result = self._values['pool_settings'].get('pool', None) if result: result = fq_name(self.partition, result) return result
def issuer_cert(self): if self._values['issuer_cert'] is None: return None name = fq_name(self.partition, self._values['issuer_cert']) if name.endswith('.crt'): return name else: return name + '.crt'
def port_lists(self): if self._values['port_lists'] is None: return None result = [] for x in self._values['port_lists']: item = fq_name(self.partition, x) result.append(item) return result
def destinations(self): if self._values['destinations'] is None: return None if len(self._values['destinations']) == 1 and self._values['destinations'][0] == '': return '' result = [fq_name(self.partition, x) for x in self._values['destinations']] result = list(set(result)) result.sort() return result
def destinations(self): if self._values['destinations'] is None: return None results = [] for destination in self._values['destinations']: result = fq_name(destination['partition'], destination['name']) results.append(result) results.sort() return results
def client_key(self): if self._values['client_key'] is None: return None if self._values['client_key'] == '': return '' result = fq_name(self.partition, self._values['client_key']) if not result.endswith('.key'): result += '.key' return result
def irules(self): results = [] if self._values['irules'] is None: return None if len(self._values['irules']) == 1 and self._values['irules'][0] == '': return '' for irule in self._values['irules']: result = fq_name(self.partition, irule) results.append(result) return results
def monitors(self): if self._values['monitors'] is None: return None monitors = [fq_name(self.partition, x) for x in self.monitors_list] if self.monitor_type == 'm_of_n': monitors = ' '.join(monitors) result = 'min %s of { %s }' % (self.quorum, monitors) else: result = ' and '.join(monitors).strip() return result
def traffic_group(self): if self._values['traffic_group'] is None and self.trafficGroup is None: return None # Specifying the value overrides any associated value in the payload elif self._values['traffic_group']: result = fq_name(self.partition, self._values['traffic_group']) # This will be automatically `None` if it was not set by the # `parameters` setter elif self.trafficGroup: result = fq_name(self.partition, self.trafficGroup) else: result = fq_name(self.partition, self._values['traffic_group']) if result.startswith('/Common/'): return result else: raise F5ModuleError( "Traffic groups can only exist in /Common" )
def traffic_group(self): if self._values['traffic_group'] is None: return None else: result = fq_name(self.partition, self._values['traffic_group']) if result.startswith('/Common/'): return result else: raise F5ModuleError( "Traffic groups can only exist in /Common" )
def virtual_server_dependencies(self): if self._values['virtual_server_dependencies'] is None: return None results = [] for dependency in self._values['virtual_server_dependencies']: result = dict( server=fq_name(self.partition, dependency['server']), virtual_server=os.path.basename(dependency['virtual_server']) ) results.append(result) if results: results = sorted(results, key=lambda k: k['server']) return results
def monitors(self): if self._values['monitors'] is None: return None monitors = [fq_name(self.partition, x) for x in self.monitors_list] if self.availability_requirement_type == 'at_least': monitors = ' '.join(monitors) result = 'min {0} of {{ {1} }}'.format(self.at_least, monitors) elif self.availability_requirement_type == 'require': monitors = ' '.join(monitors) result = 'require {0} from {1} {{ {2} }}'.format(self.number_of_probes, self.number_of_probers, monitors) else: result = ' and '.join(monitors).strip() return result
def pools(self): result = [] if self._values['pools'] is None: return None for item in self._values['pools']: pool = dict() if 'name' not in item: raise F5ModuleError( "'name' is a required key for items in the list of pools." ) if 'ratio' in item: pool['ratio'] = item['ratio'] pool['name'] = fq_name(self.partition, item['name']) result.append(pool) return result
def _handle_enable_action(self, action, item): """Handle the nuances of the enable type :param action: :param item: :return: """ action['type'] = 'enable' if 'asm_policy' not in item: raise F5ModuleError( "An 'asm_policy' must be specified when the 'enable' type is used." ) action.update(dict( policy=fq_name(self.partition, item['asm_policy']), asm=True ))
def _handle_forward_action(self, action, item): """Handle the nuances of the forwarding type Right now there is only a single type of forwarding that can be done. As that functionality expands, so-to will the behavior of this, and other, methods. Therefore, do not be surprised that the logic here is so rigid. It's deliberate. :param action: :param item: :return: """ action['type'] = 'forward' if 'pool' not in item: raise F5ModuleError( "A 'pool' must be specified when the 'forward' type is used." ) action['pool'] = fq_name(self.partition, item['pool'])
def monitors(self): if self._values['monitors'] is None: return None monitors = [fq_name(self.partition, x) for x in self.monitors_list] if self.availability_requirement_type == 'at_least': if self.at_least > len(self.monitors_list): raise F5ModuleError( "The 'at_least' value must not exceed the number of 'monitors'." ) monitors = ' '.join(monitors) result = 'min {0} of {{ {1} }}'.format(self.at_least, monitors) elif self.availability_requirement_type == 'require': monitors = ' '.join(monitors) if self.number_of_probes > self.number_of_probers: raise F5ModuleError( "The 'number_of_probes' must not exceed the 'number_of_probers'." ) result = 'require {0} from {1} {{ {2} }}'.format(self.number_of_probes, self.number_of_probers, monitors) else: result = ' and '.join(monitors).strip() return result
def members(self): if self._values['members'] is None: return None if len(self._values['members']) == 1 and self._values['members'][0] == '': return [] result = [] for member in self._values['members']: if 'server' not in member: raise F5ModuleError( "One of the provided members is missing a 'server' sub-option." ) if 'virtual_server' not in member: raise F5ModuleError( "One of the provided members is missing a 'virtual_server' sub-option." ) name = '{0}:{1}'.format(member['server'], member['virtual_server']) name = fq_name(self.partition, name) if name in result: continue result.append(name) result = list(result) return result
def flow_eviction_policy(self): if self._values['flow_eviction_policy'] is None: return None return fq_name(self.partition, self._values['flow_eviction_policy'])
def vlan(self): if self._values['vlan'] is None: return None return fq_name(self.partition, self._values['vlan'])
def template(self): if self._values['template'] is None: return None return fq_name(self.partition, self._values['template'])
def traffic_group(self): if self._values['traffic_group'] is None: return None return fq_name(self.partition, self._values['traffic_group'])
def external_program(self): if self._values['external_program'] is None: return None return fq_name(self.partition, self._values['external_program'])
def rule_list(self): if self._values['rule_list'] is None: return None if self._values['parent_policy'] is not None: return fq_name(self.partition, self._values['rule_list']) return None
def dst_region(self): dst_region = self._values['destination'].get('region', None) if dst_region is None: return None return fq_name(self.partition, dst_region)
def link(self): if self._values['link'] is None: return None return fq_name(self.partition, self._values['link'])
def tsig_key(self): if self._values['tsig_key'] in [None, '']: return self._values['tsig_key'] return fq_name(self.partition, self._values['tsig_key'])
def last_resort_pool(self): if self._values['last_resort_pool'] in [None, '', 'none']: return '' return '{0} {1}'.format( self.type, fq_name(self.partition, self._values['last_resort_pool']))
def profiles(self): if self._values['profiles'] is None: return None result = [fq_name(self.partition, p) for p in self._values['profiles']] return result
def dst_pool(self): dst_pool = self._values['destination'].get('pool', None) if dst_pool is None: return None return fq_name(self.partition, dst_pool)
def port_misuse_policy(self): if self._values['port_misuse_policy'] is None: return None if self._values['port_misuse_policy'] == '': return '' return fq_name(self.partition, self._values['port_misuse_policy'])
def schedule(self): if self._values['schedule'] is None: return None if self._values['schedule'] == '': return '' return fq_name(self.partition, self._values['schedule'])
def vlans(self): if self._values['vlans'] is None: return None result = [fq_name(self.partition, x) for x in self._values['vlans']] result.sort() return result
def parent(self): if self._values['parent'] is None: return None result = fq_name(self.partition, self._values['parent']) return result
def default_whitelist(self): if self._values['default_whitelist'] is None: return None return fq_name(self.partition, self._values['default_whitelist'])
def monitor(self): if self._values['monitor'] is None: return None elif self._values['monitor'] in ['default', '']: return 'default' return fq_name(self.partition, self._values['monitor'])
def ipsec_policy(self): if self._values['ipsec_policy'] is None: return None return fq_name(self.partition, self._values['ipsec_policy'])
def dns_resolver(self): if self._values['dns_resolver'] is None: return None result = fq_name(self.partition, self._values['dns_resolver']) return result
def proxy_server_pool(self): if self._values['proxy_server_pool'] is None: return None result = fq_name(self.partition, self._values['proxy_server_pool']) return result
def vlans(self): if self._values['vlans'] is None: return None if len(self._values['vlans']) == 1 and self._values['vlans'][0] == '': return '' return [fq_name(self.partition, x) for x in self._values['vlans']]
def phase1_key(self): if self._values['phase1_key'] is None: return None if self._values['phase1_key'] in ['', 'none']: return '' return fq_name(self.partition, self._values['phase1_key'])
def service_policy(self): if self._values['service_policy'] is None: return None return fq_name(self.partition, self._values['service_policy'])
def dst_datacenter(self): dst_datacenter = self._values['destination'].get('datacenter', None) if dst_datacenter is None: return None return fq_name(self.partition, dst_datacenter)
def tsig_server_key(self): if self._values['tsig_server_key'] is None: return None if self._values['tsig_server_key'] in ['', 'none']: return '' return fq_name(self.partition, self._values['tsig_server_key'])
def timer_policy(self): if self._values['timer_policy'] is None: return None if self._values['timer_policy'] == '': return '' return fq_name(self.partition, self._values['timer_policy'])
def dst_isp(self): dst_isp = self._values['destination'].get('isp', None) if dst_isp is None: return None return fq_name('Common', dst_isp)
def src_isp(self): src_isp = self._values['source'].get('isp', None) if src_isp is None: return None return fq_name('Common', src_isp)
def full_path(self): return fq_name(self.name)
def _get_chain_value(self, item): if 'chain' not in item or item['chain'] == 'none': result = 'none' else: result = self._cert_filename(fq_name(self.partition, item['chain'])) return result
def route_domain(self): if self._values['route_domain'] is None: return None result = fq_name(self.partition, self._values['route_domain']) return result