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
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
 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
예제 #7
0
 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
예제 #8
0
 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
예제 #10
0
 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
예제 #11
0
 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
예제 #12
0
    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"
            )
예제 #13
0
 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
예제 #16
0
 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
예제 #17
0
    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
        ))
예제 #18
0
    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
예제 #20
0
 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
예제 #21
0
 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'])
예제 #22
0
 def vlan(self):
     if self._values['vlan'] is None:
         return None
     return fq_name(self.partition, self._values['vlan'])
예제 #23
0
 def template(self):
     if self._values['template'] is None:
         return None
     return fq_name(self.partition, self._values['template'])
예제 #24
0
 def traffic_group(self):
     if self._values['traffic_group'] is None:
         return None
     return fq_name(self.partition, self._values['traffic_group'])
예제 #25
0
 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
예제 #27
0
 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)
예제 #28
0
 def link(self):
     if self._values['link'] is None:
         return None
     return fq_name(self.partition, self._values['link'])
 def template(self):
     if self._values['template'] is None:
         return None
     return fq_name(self.partition, self._values['template'])
예제 #30
0
 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'])
예제 #31
0
 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']))
예제 #32
0
 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
예제 #33
0
 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 link(self):
     if self._values['link'] is None:
         return None
     return fq_name(self.partition, self._values['link'])
예제 #35
0
 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'])
예제 #37
0
 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
예제 #39
0
 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'])
예제 #41
0
 def ipsec_policy(self):
     if self._values['ipsec_policy'] is None:
         return None
     return fq_name(self.partition, self._values['ipsec_policy'])
예제 #42
0
 def dns_resolver(self):
     if self._values['dns_resolver'] is None:
         return None
     result = fq_name(self.partition, self._values['dns_resolver'])
     return result
예제 #43
0
 def traffic_group(self):
     if self._values['traffic_group'] is None:
         return None
     return fq_name(self.partition, self._values['traffic_group'])
예제 #44
0
 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
예제 #45
0
 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'])
예제 #47
0
 def service_policy(self):
     if self._values['service_policy'] is None:
         return None
     return fq_name(self.partition, self._values['service_policy'])
 def parent(self):
     if self._values['parent'] is None:
         return None
     result = fq_name(self.partition, self._values['parent'])
     return result
예제 #49
0
 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)
예제 #50
0
 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'])
예제 #51
0
 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'])
예제 #52
0
 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'])
예제 #53
0
 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)
예제 #54
0
 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'])
예제 #55
0
 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)
예제 #56
0
 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
예제 #58
0
 def vlan(self):
     if self._values['vlan'] is None:
         return None
     return fq_name(self.partition, self._values['vlan'])
예제 #59
0
 def route_domain(self):
     if self._values['route_domain'] is None:
         return None
     result = fq_name(self.partition, self._values['route_domain'])
     return result
예제 #60
0
 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'])