1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

feat(gandi_livedns): support personal access tokens (#8337)

* fix(gandi_livedns): fix unsafe conditionals in tests

* feat(gandi_livedns): support personal access tokens

Fixes #7639
This commit is contained in:
Gilbert Gilb's 2024-05-18 15:42:11 +02:00 committed by GitHub
parent bb73f28bf5
commit a409f8fc2f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 69 additions and 27 deletions

View file

@ -0,0 +1,2 @@
minor_changes:
- gandi_livedns - adds support for personal access tokens (https://github.com/ansible-collections/community.general/issues/7639, https://github.com/ansible-collections/community.general/pull/8337).

View file

@ -33,6 +33,7 @@ class GandiLiveDNSAPI(object):
def __init__(self, module): def __init__(self, module):
self.module = module self.module = module
self.api_key = module.params['api_key'] self.api_key = module.params['api_key']
self.personal_access_token = module.params['personal_access_token']
def _build_error_message(self, module, info): def _build_error_message(self, module, info):
s = '' s = ''
@ -50,7 +51,12 @@ class GandiLiveDNSAPI(object):
return s return s
def _gandi_api_call(self, api_call, method='GET', payload=None, error_on_404=True): def _gandi_api_call(self, api_call, method='GET', payload=None, error_on_404=True):
headers = {'Authorization': 'Apikey {0}'.format(self.api_key), authorization_header = (
'Bearer {0}'.format(self.personal_access_token)
if self.personal_access_token
else 'Apikey {0}'.format(self.api_key)
)
headers = {'Authorization': authorization_header,
'Content-Type': 'application/json'} 'Content-Type': 'application/json'}
data = None data = None
if payload: if payload:

View file

@ -25,11 +25,19 @@ attributes:
diff_mode: diff_mode:
support: none support: none
options: options:
personal_access_token:
description:
- Scoped API token.
- One of O(personal_access_token) and O(api_key) must be specified.
type: str
version_added: 9.0.0
api_key: api_key:
description: description:
- Account API token. - Account API token.
- Note that these type of keys are deprecated and might stop working at some point.
Use personal access tokens instead.
- One of O(personal_access_token) and O(api_key) must be specified.
type: str type: str
required: true
record: record:
description: description:
- Record to add. - Record to add.
@ -73,7 +81,7 @@ EXAMPLES = r'''
values: values:
- 127.0.0.1 - 127.0.0.1
ttl: 7200 ttl: 7200
api_key: dummyapitoken personal_access_token: dummytoken
register: record register: record
- name: Create a mail CNAME record to www.my.com domain - name: Create a mail CNAME record to www.my.com domain
@ -84,7 +92,7 @@ EXAMPLES = r'''
values: values:
- www - www
ttl: 7200 ttl: 7200
api_key: dummyapitoken personal_access_token: dummytoken
state: present state: present
- name: Change its TTL - name: Change its TTL
@ -95,7 +103,7 @@ EXAMPLES = r'''
values: values:
- www - www
ttl: 10800 ttl: 10800
api_key: dummyapitoken personal_access_token: dummytoken
state: present state: present
- name: Delete the record - name: Delete the record
@ -103,8 +111,18 @@ EXAMPLES = r'''
domain: my.com domain: my.com
type: CNAME type: CNAME
record: mail record: mail
api_key: dummyapitoken personal_access_token: dummytoken
state: absent state: absent
- name: Use a (deprecated) API Key
community.general.gandi_livedns:
domain: my.com
record: test
type: A
values:
- 127.0.0.1
ttl: 7200
api_key: dummyapikey
''' '''
RETURN = r''' RETURN = r'''
@ -151,7 +169,8 @@ from ansible_collections.community.general.plugins.module_utils.gandi_livedns_ap
def main(): def main():
module = AnsibleModule( module = AnsibleModule(
argument_spec=dict( argument_spec=dict(
api_key=dict(type='str', required=True, no_log=True), api_key=dict(type='str', no_log=True),
personal_access_token=dict(type='str', no_log=True),
record=dict(type='str', required=True), record=dict(type='str', required=True),
state=dict(type='str', default='present', choices=['absent', 'present']), state=dict(type='str', default='present', choices=['absent', 'present']),
ttl=dict(type='int'), ttl=dict(type='int'),
@ -163,6 +182,12 @@ def main():
required_if=[ required_if=[
('state', 'present', ['values', 'ttl']), ('state', 'present', ['values', 'ttl']),
], ],
mutually_exclusive=[
('api_key', 'personal_access_token'),
],
required_one_of=[
('api_key', 'personal_access_token'),
],
) )
gandi_api = GandiLiveDNSAPI(module) gandi_api = GandiLiveDNSAPI(module)

View file

@ -45,10 +45,10 @@
assert: assert:
that: that:
- result is changed - result is changed
- result.record['values'] == {{ item['values'] }} - result.record['values'] == item['values']
- result.record.record == "{{ item.record }}" - result.record.record == item.record
- result.record.type == "{{ item.type }}" - result.record.type == item.type
- result.record.ttl == {{ item.ttl }} - result.record.ttl == item.ttl
- name: test create a dns record idempotence - name: test create a dns record idempotence
community.general.gandi_livedns: community.general.gandi_livedns:
@ -63,7 +63,16 @@
assert: assert:
that: that:
- result is not changed - result is not changed
- result.record['values'] == {{ item['values'] }} - result.record['values'] == item['values']
- result.record.record == "{{ item.record }}" - result.record.record == item.record
- result.record.type == "{{ item.type }}" - result.record.type == item.type
- result.record.ttl == {{ item.ttl }} - result.record.ttl == item.ttl
- name: test create a DNS record with personal access token
community.general.gandi_livedns:
personal_access_token: "{{ gandi_personal_access_token }}"
record: "{{ item.record }}"
domain: "{{ gandi_livedns_domain_name }}"
values: "{{ item['values'] }}"
ttl: "{{ item.ttl }}"
type: "{{ item.type }}"

View file

@ -17,10 +17,10 @@
assert: assert:
that: that:
- result is changed - result is changed
- result.record['values'] == {{ item.update_values | default(item['values']) }} - result.record['values'] == (item.update_values | default(item['values']))
- result.record.record == "{{ item.record }}" - result.record.record == item.record
- result.record.type == "{{ item.type }}" - result.record.type == item.type
- result.record.ttl == {{ item.update_ttl | default(item.ttl) }} - result.record.ttl == (item.update_ttl | default(item.ttl))
- name: test update or add another dns record - name: test update or add another dns record
community.general.gandi_livedns: community.general.gandi_livedns:
@ -35,10 +35,10 @@
assert: assert:
that: that:
- result is changed - result is changed
- result.record['values'] == {{ item.update_values | default(item['values']) }} - result.record['values'] == (item.update_values | default(item['values']))
- result.record.record == "{{ item.record }}" - result.record.record == item.record
- result.record.ttl == {{ item.update_ttl | default(item.ttl) }} - result.record.ttl == (item.update_ttl | default(item.ttl))
- result.record.type == "{{ item.type }}" - result.record.type == item.type
- name: test update or add another dns record idempotence - name: test update or add another dns record idempotence
community.general.gandi_livedns: community.general.gandi_livedns:
@ -53,7 +53,7 @@
assert: assert:
that: that:
- result is not changed - result is not changed
- result.record['values'] == {{ item.update_values | default(item['values']) }} - result.record['values'] == (item.update_values | default(item['values']))
- result.record.record == "{{ item.record }}" - result.record.record == item.record
- result.record.ttl == {{ item.update_ttl | default(item.ttl) }} - result.record.ttl == (item.update_ttl | default(item.ttl))
- result.record.type == "{{ item.type }}" - result.record.type == item.type