xoxys.general/plugins/modules/corenetworks_token.py
Robert Kaussow 660afb5392
All checks were successful
continuous-integration/drone/push Build is passing
add custom modules
2020-08-18 23:44:49 +02:00

113 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
"""Module to control corenetworks DNS API."""
from __future__ import absolute_import, division, print_function
__metaclass__ = type
ANSIBLE_METADATA = {"metadata_version": "1.1", "status": ["preview"], "supported_by": "community"}
DOCUMENTATION = """
---
module: corenetworks_dns
short_description: Interface with the DNS API of core-networks.de
description:
- "Manages DNS zones and records via the core networks API, see the docs: U(https://beta.api.core-networks.de/doc/)."
options:
api_user:
description:
- Account API username. If omitted, the environment variables C(CN_API_USER) and C(CN_API_PASSWORD) will be looked for.
type: str
api_password:
description:
- Account API password.
type: str
state:
description:
- whether the record should exist or not
choices: [ "present" ]
default: present
type: str
requirements:
- "corenetworks >= 0.1.3"
author: "Robert Kaussow (@xoxys)"
""" # noqa
EXAMPLES = """
- name: Obtain an API token using env variables
corenetworks_token:
delegate_to: localhost
register: my_token
- name: Obtain an API token using username and password attribute
corenetworks_token:
api_user: testuser
api_password: secure
delegate_to: localhost
register: my_token
- debug:
msg: "{{ my_token }}"
- name: Use the token
corenetworks_dns:
api_token: "{{ my_token.session.token }}"
zone: my.com
type: CNAME
value: example.com
state: present
delegate_to: localhost
"""
RETURN = r"""# """
import traceback
CORENETWORKS_IMP_ERR = None
try:
from corenetworks import CoreNetworks
from corenetworks.exceptions import CoreNetworksException
HAS_CORENETWORKS = True
except ImportError:
CORENETWORKS_IMP_ERR = traceback.format_exc()
HAS_CORENETWORKS = False
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
def main():
module = AnsibleModule(
argument_spec=dict(
api_user=dict(type="str"),
api_password=dict(type="str", no_log=True),
state=dict(type="str", choices=["present"], default="present"),
),
supports_check_mode=True,
)
if not HAS_CORENETWORKS:
module.fail_json(msg=missing_required_lib("corenetworks"), exception=CORENETWORKS_IMP_ERR)
api_user = module.params.get("api_user")
api_password = module.params.get("api_password")
# perform actions
try:
# request throtteling to workaround the current rate limit
changed = False
client = CoreNetworks(user=api_user, password=api_password, auto_commit=True)
session = {"token": client._auth.token}
if hasattr(client._auth, "expires"):
session["expires"] = client._auth.expires.strftime("%Y-%m-%d, %H:%M:%S")
module.exit_json(changed=changed, session=session)
except CoreNetworksException as e:
module.fail_json(msg="Failure in core networks API communication: {}".format(str(e)))
module.fail_json(msg="Unknown what you wanted me to do")
if __name__ == "__main__":
main()