From 6790a0f75f969dac71fae39d01d379c718bb01de Mon Sep 17 00:00:00 2001 From: Patrick Marques Date: Wed, 25 Oct 2017 16:34:39 +0100 Subject: [PATCH] [cloud] Add new module digital_ocean_sshkey_facts (#26365) * do_sshkeys_facts module * Fix * Fix version * Configure timeout and validate_certs for fetch_url * Add support for new DO_OAUTH_TOKEN env var * rename module prefix from do_* to digital_ocean_* * Fix python 2.6 positional index * Use modules_utils digital ocean lib * Update metadata version * Update version added * Update module from boilerplate * Update examples * Add timeout documentation * Fix typo --- .../digital_ocean_sshkey_facts.py | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 lib/ansible/modules/cloud/digital_ocean/digital_ocean_sshkey_facts.py diff --git a/lib/ansible/modules/cloud/digital_ocean/digital_ocean_sshkey_facts.py b/lib/ansible/modules/cloud/digital_ocean/digital_ocean_sshkey_facts.py new file mode 100644 index 0000000000..018e55a853 --- /dev/null +++ b/lib/ansible/modules/cloud/digital_ocean/digital_ocean_sshkey_facts.py @@ -0,0 +1,116 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Copyright: Ansible Project +# 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 + + +ANSIBLE_METADATA = {'status': ['preview'], + 'supported_by': 'community', + 'metadata_version': '1.1'} + + +DOCUMENTATION = ''' +--- +module: digital_ocean_sshkey_facts +short_description: DigitalOcean SSH keys facts +description: + - Fetch DigitalOcean SSH keys facts. +version_added: "2.5" +author: "Patrick Marques (@pmarques)" +options: + oauth_token: + description: + - DigitalOcean API token. + required: true + timeout: + description: + - The timeout in seconds used for polling DigitalOcean's API. + default: 30 + +notes: + - Version 2 of DigitalOcean API is used. +requirements: + - "python >= 2.6" +''' + + +EXAMPLES = ''' +- digital_ocean_sshkey_facts: + oauth_token: "{{ my_do_key }}" + +- set_fact: + pubkey: "{{ item.public_key }}" + with_items: "{{ ssh_keys|json_query(ssh_pubkey) }}" + vars: + ssh_pubkey: "[?name=='ansible_ctrl']" + +- debug: + msg: "{{ pubkey }}" +''' + + +RETURN = ''' +# Digital Ocean API info https://developers.digitalocean.com/documentation/v2/#list-all-keys +data: + description: List of SSH keys on DigitalOcean + returned: success and no resource constraint + type: dict + sample: { + "ssh_keys": [ + { + "id": 512189, + "fingerprint": "3b:16:bf:e4:8b:00:8b:b8:59:8c:a9:d3:f0:19:45:fa", + "public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V example", + "name": "My SSH Public Key" + } + ], + "links": { + }, + "meta": { + "total": 1 + } + } +''' + +from ansible.module_utils.basic import env_fallback +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.digital_ocean import DigitalOceanHelper + + +def core(module): + rest = DigitalOceanHelper(module) + + response = rest.get("account/keys") + status_code = response.status_code + json = response.json + if status_code == 200: + module.exit_json(changed=False, ansible_facts=json) + else: + module.fail_json(msg='Error fecthing facts [{0}: {1}]'.format( + status_code, response.json['message'])) + + +def main(): + module = AnsibleModule( + argument_spec=dict( + oauth_token=dict( + no_log=True, + # Support environment variable for DigitalOcean OAuth Token + fallback=(env_fallback, ['DO_API_TOKEN', 'DO_API_KEY', 'DO_OAUTH_TOKEN']), + required=True, + ), + validate_certs=dict(type='bool', default=True), + timeout=dict(type='int', default=30), + ), + supports_check_mode=True, + ) + + core(module) + +if __name__ == '__main__': + main()