def gen_args(module, state, action, dnsconfig, forwarders, forward_policy, allow_sync_ptr): _args = {} if forwarders: _forwarders = [] for forwarder in forwarders: ip_address = forwarder.get('ip_address') port = forwarder.get('port') if not (is_ipv4_addr(ip_address) or is_ipv6_addr(ip_address)): module.fail_json(msg="Invalid IP for DNS forwarder: %s" % ip_address) if port is None: _forwarders.append(ip_address) else: _forwarders.append('%s port %d' % (ip_address, port)) global_forwarders = dnsconfig.get('idnsforwarders', []) if state == 'absent': if action == "member": _args['idnsforwarders'] = [ fwd for fwd in global_forwarders if fwd not in _forwarders ] # When all forwarders should be excluded, # use an empty string (''). if not _args['idnsforwarders']: _args['idnsforwarders'] = [''] elif state == 'present': if action == "member": _args['idnsforwarders'] = \ list(set(list(_forwarders) + list(global_forwarders))) else: _args['idnsforwarders'] = _forwarders # If no forwarders should be added, remove argument. if not _args['idnsforwarders']: del _args['idnsforwarders'] else: # shouldn't happen, but let's be paranoid. module.fail_json(msg="Invalid state: %s" % state) if forward_policy is not None: _args['idnsforwardpolicy'] = forward_policy if allow_sync_ptr is not None: _args['idnsallowsyncptr'] = 'TRUE' if allow_sync_ptr else 'FALSE' return _args
def gen_args(entry): """Generate IPA API arguments for a given `entry`.""" args = {'idnsname': to_text(entry['name'])} if 'del_all' in entry: args['del_all'] = entry['del_all'] record_value = entry.get('record_value', None) if record_value is not None: record_type = entry['record_type'] rec = "{}record".format(record_type.lower()) args[rec] = ensure_data_is_list(record_value) else: for field in _RECORD_FIELDS: record_value = entry.get(field) or entry.get("%sord" % field) if record_value is not None: record_type = field.split('_')[0] rec = "{}record".format(record_type.lower()) args[rec] = ensure_data_is_list(record_value) records = { key: rec for key, rec in _PART_MAP.items() if key in entry } for key, rec in records.items(): args[rec] = entry[key] if 'ip_address' in entry: ip_address = entry['ip_address'] if is_ipv4_addr(ip_address): args['a_part_ip_address'] = ip_address if is_ipv6_addr(ip_address): args['aaaa_part_ip_address'] = ip_address if entry.get('create_reverse', False): if 'a_part_ip_address' in args or 'arecord' in args: args['a_extra_create_reverse'] = True if 'aaaa_part_ip_address' in args or 'aaaarecord' in args: args['aaaa_extra_create_reverse'] = True if 'record_ttl' in entry: args['dnsttl'] = entry['record_ttl'] return args
def get_ipa_idnsforwarders(self, **kwargs): if self.ipa_params.forwarders is not None: forwarders = [] for forwarder in self.ipa_params.forwarders: ip_address = forwarder.get("ip_address") if not (is_ipv4_addr(ip_address) or is_ipv6_addr(ip_address)): self.fail_json(msg="Invalid IP for DNS forwarder: %s" % ip_address) port = forwarder.get("port", None) if port and not is_valid_port(port): self.fail_json( msg="Invalid port number for DNS forwarder: %s %s" % (ip_address, port)) formatted_forwarder = ip_address port = forwarder.get("port") if port: formatted_forwarder += " port %d" % port forwarders.append(formatted_forwarder) return forwarders
def validate_ips(self, ips, error_msg): invalid_ips = [ ip for ip in ips if not is_ipv4_addr(ip) or is_ipv6_addr(ip) ] if any(invalid_ips): self.fail_json(msg=error_msg % invalid_ips)