Skip to content
Snippets Groups Projects
Commit 1d223c2b authored by Rafael Guterres Jeffman's avatar Rafael Guterres Jeffman
Browse files

Add support for attributes `ip_address` and `port` to `forwarders`.

This patch modify the was forwarders are configured, using two attributes,
`ip_address` and `port`, instead of IPA API internal string representation
of `IP port PORT`.
parent 3f785bc0
Branches
Tags
No related merge requests found
...@@ -99,8 +99,10 @@ Variable | Description | Required ...@@ -99,8 +99,10 @@ Variable | Description | Required
`ipaadmin_principal` | The admin principal is a string and defaults to `admin` | no `ipaadmin_principal` | The admin principal is a string and defaults to `admin` | no
`ipaadmin_password` | The admin password is a string and is required if there is no admin ticket available on the node | no `ipaadmin_password` | The admin password is a string and is required if there is no admin ticket available on the node | no
`name` \| `cn` | Zone name (FQDN). | yes if `state` == `present` `name` \| `cn` | Zone name (FQDN). | yes if `state` == `present`
`forwarders` \| `idnsforwarders` | Per-zone conditional forwarding policy. Possible values are `only`, `first`, `none`) | no `forwarders` \| `idnsforwarders` | Per-zone forwarders. A custom port can be specified for each forwarder. Options | no
`forwardpolicy` \| `idnsforwardpolicy` | Per-zone conditional forwarding policy. Set to "none" to disable forwarding to global forwarder for this zone. In that case, conditional zone forwarders are disregarded. | no   | `ip_address`: The forwarder IP address. | yes
  | `port`: The forwarder IP port. | no
`forwardpolicy` \| `idnsforwardpolicy` | Per-zone conditional forwarding policy. Possible values are `only`, `first`, `none`. Set to "none" to disable forwarding to global forwarder for this zone. In that case, conditional zone forwarders are disregarded. | no
`skip_overlap_check` | Force DNS zone creation even if it will overlap with an existing zone. Defaults to False. | no `skip_overlap_check` | Force DNS zone creation even if it will overlap with an existing zone. Defaults to False. | no
`action` | Work on group or member level. It can be on of `member` or `dnsforwardzone` and defaults to `dnsforwardzone`. | no `action` | Work on group or member level. It can be on of `member` or `dnsforwardzone` and defaults to `dnsforwardzone`. | no
`state` | The state to ensure. It can be one of `present`, `absent`, `enabled` or `disabled`, default: `present`. | yes `state` | The state to ensure. It can be one of `present`, `absent`, `enabled` or `disabled`, default: `present`. | yes
......
...@@ -54,9 +54,16 @@ options: ...@@ -54,9 +54,16 @@ options:
forwarders: forwarders:
description: description:
- List of the DNS servers to forward to - List of the DNS servers to forward to
required: true
type: list
aliases: ["idnsforwarders"] aliases: ["idnsforwarders"]
options:
ip_address:
description: Forwarder IP address (either IPv4 or IPv6).
required: false
type: string
port:
description: Forwarder port.
required: false
type: int
forwardpolicy: forwardpolicy:
description: Per-zone conditional forwarding policy description: Per-zone conditional forwarding policy
required: false required: false
...@@ -128,6 +135,20 @@ def gen_args(forwarders, forwardpolicy, skip_overlap_check): ...@@ -128,6 +135,20 @@ def gen_args(forwarders, forwardpolicy, skip_overlap_check):
return _args return _args
def forwarder_list(forwarders):
"""Convert the forwarder dict into a list compatible with IPA API."""
if forwarders is None:
return None
fwd_list = []
for forwarder in forwarders:
if forwarder.get('port', None) is not None:
formatter = "{ip_address} port {port}"
else:
formatter = "{ip_address}"
fwd_list.append(formatter.format(**forwarder))
return fwd_list
def main(): def main():
ansible_module = AnsibleModule( ansible_module = AnsibleModule(
argument_spec=dict( argument_spec=dict(
...@@ -136,8 +157,13 @@ def main(): ...@@ -136,8 +157,13 @@ def main():
ipaadmin_password=dict(type="str", required=False, no_log=True), ipaadmin_password=dict(type="str", required=False, no_log=True),
name=dict(type="list", aliases=["cn"], default=None, name=dict(type="list", aliases=["cn"], default=None,
required=True), required=True),
forwarders=dict(type='list', aliases=["idnsforwarders"], forwarders=dict(type="list", default=None, required=False,
required=False), aliases=["idnsforwarders"], elements='dict',
options=dict(
ip_address=dict(type='str', required=True),
port=dict(type='int', required=False,
default=None),
)),
forwardpolicy=dict(type='str', aliases=["idnsforwardpolicy"], forwardpolicy=dict(type='str', aliases=["idnsforwardpolicy"],
required=False, required=False,
choices=['only', 'first', 'none']), choices=['only', 'first', 'none']),
...@@ -160,7 +186,8 @@ def main(): ...@@ -160,7 +186,8 @@ def main():
"ipaadmin_password") "ipaadmin_password")
names = module_params_get(ansible_module, "name") names = module_params_get(ansible_module, "name")
action = module_params_get(ansible_module, "action") action = module_params_get(ansible_module, "action")
forwarders = module_params_get(ansible_module, "forwarders") forwarders = forwarder_list(
module_params_get(ansible_module, "forwarders"))
forwardpolicy = module_params_get(ansible_module, "forwardpolicy") forwardpolicy = module_params_get(ansible_module, "forwardpolicy")
skip_overlap_check = module_params_get(ansible_module, skip_overlap_check = module_params_get(ansible_module,
"skip_overlap_check") "skip_overlap_check")
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
gather_facts: false gather_facts: false
tasks: tasks:
- name: ensure test forwardzones are absent - prep - name: ensure test forwardzones are absent
ipadnsforwardzone: ipadnsforwardzone:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
name: name:
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
state: present state: present
name: example.com name: example.com
forwarders: forwarders:
- 8.8.8.8 - ip_address: 8.8.8.8
forwardpolicy: first forwardpolicy: first
skip_overlap_check: true skip_overlap_check: true
register: result register: result
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
state: present state: present
name: example.com name: example.com
forwarders: forwarders:
- 8.8.8.8 - ip_address: 8.8.8.8
forwardpolicy: first forwardpolicy: first
skip_overlap_check: true skip_overlap_check: true
register: result register: result
...@@ -43,19 +43,22 @@ ...@@ -43,19 +43,22 @@
state: present state: present
name: example.com name: example.com
forwarders: forwarders:
- 8.8.8.8 - ip_address: 8.8.8.8
- 4.4.4.4 - ip_address: 4.4.4.4
port: 8053
forwardpolicy: first forwardpolicy: first
skip_overlap_check: true skip_overlap_check: true
register: result register: result
failed_when: not result.changed failed_when: not result.changed
- pause:
- name: ensure forwardzone example.com has one forwarder again - name: ensure forwardzone example.com has one forwarder again
ipadnsforwardzone: ipadnsforwardzone:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
name: example.com name: example.com
forwarders: forwarders:
- 8.8.8.8 - ip_address: 8.8.8.8
forwardpolicy: first forwardpolicy: first
skip_overlap_check: true skip_overlap_check: true
state: present state: present
...@@ -67,7 +70,7 @@ ...@@ -67,7 +70,7 @@
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
name: example.com name: example.com
forwarders: forwarders:
- 8.8.8.8 - ip_address: 8.8.8.8
forwardpolicy: first forwardpolicy: first
skip_overlap_check: false skip_overlap_check: false
state: present state: present
...@@ -80,8 +83,9 @@ ...@@ -80,8 +83,9 @@
state: present state: present
name: example.com name: example.com
forwarders: forwarders:
- 8.8.8.8 - ip_address: 8.8.8.8
- 4.4.4.4 - ip_address: 4.4.4.4
port: 8053
forwardpolicy: only forwardpolicy: only
skip_overlap_check: false skip_overlap_check: false
register: result register: result
...@@ -100,7 +104,7 @@ ...@@ -100,7 +104,7 @@
name: example.com name: example.com
skip_overlap_check: true skip_overlap_check: true
forwarders: forwarders:
- 8.8.8.8 - ip_address: 8.8.8.8
register: result register: result
failed_when: not result.changed failed_when: not result.changed
...@@ -110,7 +114,8 @@ ...@@ -110,7 +114,8 @@
state: present state: present
name: example.com name: example.com
forwarders: forwarders:
- 4.4.4.4 - ip_address: 4.4.4.4
port: 8053
action: member action: member
register: result register: result
failed_when: not result.changed failed_when: not result.changed
...@@ -121,8 +126,9 @@ ...@@ -121,8 +126,9 @@
state: present state: present
name: example.com name: example.com
forwarders: forwarders:
- 4.4.4.4 - ip_address: 4.4.4.4
- 8.8.8.8 port: 8053
- ip_address: 8.8.8.8
action: member action: member
register: result register: result
failed_when: result.changed failed_when: result.changed
...@@ -133,7 +139,7 @@ ...@@ -133,7 +139,7 @@
state: absent state: absent
name: example.com name: example.com
forwarders: forwarders:
- 8.8.8.8 - ip_address: 8.8.8.8
action: member action: member
register: result register: result
failed_when: not result.changed failed_when: not result.changed
...@@ -144,7 +150,8 @@ ...@@ -144,7 +150,8 @@
state: present state: present
name: example.com name: example.com
forwarders: forwarders:
- 4.4.4.4 - ip_address: 4.4.4.4
port: 8053
action: member action: member
register: result register: result
failed_when: result.changed failed_when: result.changed
...@@ -161,7 +168,8 @@ ...@@ -161,7 +168,8 @@
state: present state: present
name: example.com name: example.com
forwarders: forwarders:
- 4.4.4.4 - ip_address: 4.4.4.4
port: 8053
action: member action: member
skip_overlap_check: true skip_overlap_check: true
register: result register: result
...@@ -179,7 +187,8 @@ ...@@ -179,7 +187,8 @@
state: disabled state: disabled
name: example.com name: example.com
forwarders: forwarders:
- 4.4.4.4 - ip_address: 4.4.4.4
port: 8053
skip_overlap_check: true skip_overlap_check: true
register: result register: result
failed_when: not result.changed failed_when: not result.changed
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment