Repository URL to install this package:
|
Version:
6.0.0 ▾
|
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright (c) 2017, Abhijeet Kasurde <akasurde@redhat.com>
#
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
DOCUMENTATION = r"""
---
module: digital_ocean_certificate
short_description: Manage certificates in DigitalOcean
description:
- Create, Retrieve and remove certificates DigitalOcean.
author: "Abhijeet Kasurde (@Akasurde)"
options:
name:
description:
- The name of the certificate.
required: True
type: str
private_key:
description:
- A PEM-formatted private key content of SSL Certificate.
type: str
leaf_certificate:
description:
- A PEM-formatted public SSL Certificate.
type: str
certificate_chain:
description:
- The full PEM-formatted trust chain between the certificate authority's certificate and your domain's SSL certificate.
type: str
state:
description:
- Whether the certificate should be present or absent.
default: present
choices: ['present', 'absent']
type: str
extends_documentation_fragment:
- community.digitalocean.digital_ocean.documentation
notes:
- Two environment variables can be used, DO_API_KEY, DO_OAUTH_TOKEN and DO_API_TOKEN.
They both refer to the v2 token.
"""
EXAMPLES = r"""
- name: Create a certificate
community.digitalocean.digital_ocean_certificate:
name: production
state: present
private_key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkM8OI7pRpgyj1I\n-----END PRIVATE KEY-----"
leaf_certificate: "-----BEGIN CERTIFICATE-----\nMIIFDmg2Iaw==\n-----END CERTIFICATE-----"
oauth_token: b7d03a6947b217efb6f3ec3bd365652
- name: Create a certificate using file lookup plugin
community.digitalocean.digital_ocean_certificate:
name: production
state: present
private_key: "{{ lookup('file', 'test.key') }}"
leaf_certificate: "{{ lookup('file', 'test.cert') }}"
oauth_token: "{{ oauth_token }}"
- name: Create a certificate with trust chain
community.digitalocean.digital_ocean_certificate:
name: production
state: present
private_key: "{{ lookup('file', 'test.key') }}"
leaf_certificate: "{{ lookup('file', 'test.cert') }}"
certificate_chain: "{{ lookup('file', 'chain.cert') }}"
oauth_token: "{{ oauth_token }}"
- name: Remove a certificate
community.digitalocean.digital_ocean_certificate:
name: production
state: absent
oauth_token: "{{ oauth_token }}"
"""
RETURN = r""" # """
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
)
from ansible.module_utils._text import to_native
def core(module):
state = module.params["state"]
name = module.params["name"]
rest = DigitalOceanHelper(module)
results = dict(changed=False)
response = rest.get("certificates")
status_code = response.status_code
resp_json = response.json
if status_code != 200:
module.fail_json(msg="Failed to retrieve certificates for DigitalOcean")
if state == "present":
for cert in resp_json["certificates"]:
if cert["name"] == name:
module.fail_json(msg="Certificate name %s already exists" % name)
# Certificate does not exist, let us create it
cert_data = dict(
name=name,
private_key=module.params["private_key"],
leaf_certificate=module.params["leaf_certificate"],
)
if module.params["certificate_chain"] is not None:
cert_data.update(certificate_chain=module.params["certificate_chain"])
response = rest.post("certificates", data=cert_data)
status_code = response.status_code
if status_code == 500:
module.fail_json(
msg="Failed to upload certificates as the certificates are malformed."
)
resp_json = response.json
if status_code == 201:
results.update(changed=True, response=resp_json)
elif status_code == 422:
results.update(changed=False, response=resp_json)
elif state == "absent":
cert_id_del = None
for cert in resp_json["certificates"]:
if cert["name"] == name:
cert_id_del = cert["id"]
if cert_id_del is not None:
url = "certificates/{0}".format(cert_id_del)
response = rest.delete(url)
if response.status_code == 204:
results.update(changed=True)
else:
results.update(changed=False)
else:
module.fail_json(msg="Failed to find certificate %s" % name)
module.exit_json(**results)
def main():
argument_spec = DigitalOceanHelper.digital_ocean_argument_spec()
argument_spec.update(
name=dict(type="str", required=True),
leaf_certificate=dict(type="str"),
private_key=dict(type="str", no_log=True),
state=dict(choices=["present", "absent"], default="present"),
certificate_chain=dict(type="str"),
)
module = AnsibleModule(
argument_spec=argument_spec,
required_if=[
("state", "present", ["leaf_certificate", "private_key"]),
],
)
try:
core(module)
except Exception as e:
module.fail_json(msg=to_native(e))
if __name__ == "__main__":
main()