summaryrefslogtreecommitdiffstats
path: root/ansible_collections/community/digitalocean/plugins
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-18 05:52:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-18 05:52:35 +0000
commit7fec0b69a082aaeec72fee0612766aa42f6b1b4d (patch)
treeefb569b86ca4da888717f5433e757145fa322e08 /ansible_collections/community/digitalocean/plugins
parentReleasing progress-linux version 7.7.0+dfsg-3~progress7.99u1. (diff)
downloadansible-7fec0b69a082aaeec72fee0612766aa42f6b1b4d.tar.xz
ansible-7fec0b69a082aaeec72fee0612766aa42f6b1b4d.zip
Merging upstream version 9.4.0+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/community/digitalocean/plugins')
-rw-r--r--ansible_collections/community/digitalocean/plugins/doc_fragments/digital_ocean.py4
-rw-r--r--ansible_collections/community/digitalocean/plugins/inventory/digitalocean.py16
-rw-r--r--ansible_collections/community/digitalocean/plugins/module_utils/digital_ocean.py40
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean.py4
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_block_storage.py4
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints.py4
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints_info.py2
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database.py7
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database_info.py2
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain.py9
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record.py22
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record_info.py3
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet.py7
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet_info.py1
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_firewall.py2
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_floating_ip.py4
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes.py156
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes_info.py7
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_load_balancer.py8
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts.py2
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts_info.py1
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project.py2
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_info.py1
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_resource_info.py104
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_snapshot.py1
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces.py1
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces_info.py1
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_sshkey.py1
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc.py1
-rw-r--r--ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc_info.py1
30 files changed, 294 insertions, 124 deletions
diff --git a/ansible_collections/community/digitalocean/plugins/doc_fragments/digital_ocean.py b/ansible_collections/community/digitalocean/plugins/doc_fragments/digital_ocean.py
index bc65ad386..7f9e067ad 100644
--- a/ansible_collections/community/digitalocean/plugins/doc_fragments/digital_ocean.py
+++ b/ansible_collections/community/digitalocean/plugins/doc_fragments/digital_ocean.py
@@ -22,7 +22,7 @@ options:
description:
- DigitalOcean OAuth token.
- "There are several other environment variables which can be used to provide this value."
- - "i.e., - 'DO_API_TOKEN', 'DO_API_KEY', 'DO_OAUTH_TOKEN' and 'OAUTH_TOKEN'"
+ - "i.e., - C(DO_API_TOKEN), C(DO_API_KEY), C(DO_OAUTH_TOKEN) and C(OAUTH_TOKEN)."
type: str
aliases: [ api_token ]
timeout:
@@ -35,5 +35,5 @@ options:
- If set to C(no), the SSL certificates will not be validated.
- This should only set to C(no) used on personally controlled sites using self-signed certificates.
type: bool
- default: yes
+ default: true
"""
diff --git a/ansible_collections/community/digitalocean/plugins/inventory/digitalocean.py b/ansible_collections/community/digitalocean/plugins/inventory/digitalocean.py
index 6aafb5f45..b886fc114 100644
--- a/ansible_collections/community/digitalocean/plugins/inventory/digitalocean.py
+++ b/ansible_collections/community/digitalocean/plugins/inventory/digitalocean.py
@@ -30,15 +30,6 @@ options:
this should always be C(community.digitalocean.digitalocean).
required: true
choices: ['community.digitalocean.digitalocean']
- api_token:
- description:
- - DigitalOcean OAuth token.
- - Template expressions can be used in this field.
- required: true
- type: str
- aliases: [ oauth_token ]
- env:
- - name: DO_API_TOKEN
attributes:
description: >-
Droplet attributes to add as host vars to each inventory host.
@@ -78,7 +69,7 @@ options:
EXAMPLES = r"""
# Using keyed groups and compose for hostvars
plugin: community.digitalocean.digitalocean
-api_token: '{{ lookup("pipe", "./get-do-token.sh" }}'
+oauth_token: '{{ lookup("pipe", "./get-do-token.sh" }}'
attributes:
- id
- name
@@ -108,7 +99,6 @@ filters:
- 'do_region.slug == "fra1"'
"""
-import re
import json
from ansible.errors import AnsibleError, AnsibleParserError
from ansible.inventory.group import to_safe_group_name
@@ -119,7 +109,6 @@ from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cachea
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
-
NAME = "community.digitalocean.digitalocean"
# Constructable methods use the following function to construct group names. By
@@ -160,7 +149,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
def _get_payload(self):
# request parameters
- api_token = self._template_option("api_token")
+ api_token = self._template_option("oauth_token")
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {0}".format(api_token),
@@ -195,7 +184,6 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
strict = self.get_option("strict")
host_filters = self.get_option("filters")
for record in records:
-
host_name = record.get("name")
if not host_name:
continue
diff --git a/ansible_collections/community/digitalocean/plugins/module_utils/digital_ocean.py b/ansible_collections/community/digitalocean/plugins/module_utils/digital_ocean.py
index 44ca3ccd1..f7bb42042 100644
--- a/ansible_collections/community/digitalocean/plugins/module_utils/digital_ocean.py
+++ b/ansible_collections/community/digitalocean/plugins/module_utils/digital_ocean.py
@@ -12,10 +12,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import json
-import os
-from ansible.module_utils.urls import fetch_url
from ansible.module_utils._text import to_text
from ansible.module_utils.basic import env_fallback
+from ansible.module_utils.urls import fetch_url
class Response(object):
@@ -224,6 +223,42 @@ class DigitalOceanProjects:
return "Unexpected error; more than one project with the same name", {}
return "", project[0]
+ def get_resources_by_id(self, id):
+ """Fetches the project resources with the given id.
+
+ Returns:
+ error_message -- project fetch error message (or "" if no error)
+ resources -- resources dictionary representation (or {} if error)
+ """
+ resources = self.rest.get_paginated_data(
+ base_url="projects/{0}/resources?".format(id), data_key_name="resources"
+ )
+ return "", dict(resources=resources)
+
+ def get_resources_by_name(self, name):
+ """Fetches the project resources with the given name.
+
+ Returns:
+ error_message -- project fetch error message (or "" if no error)
+ resources -- resources dictionary representation (or {} if error)
+ """
+ err_msg, project = self.get_by_name(name)
+ if err_msg:
+ return err_msg, {}
+ return self.get_resources_by_id(project.get("id"))
+
+ def get_resources_of_default(self):
+ """Fetches default project resources.
+
+ Returns:
+ error_message -- project fetch error message (or "" if no error)
+ resources -- resources dictionary representation (or {} if error)
+ """
+ err_msg, project = self.get_default()
+ if err_msg:
+ return err_msg, {}
+ return self.get_resources_by_id(project.get("id"))
+
def assign_to_project(self, project_name, urn):
"""Assign resource (urn) to project (name).
@@ -248,6 +283,7 @@ class DigitalOceanProjects:
Domain | do:domain:example.com
Droplet | do:droplet:4126873
Floating IP | do:floatingip:192.168.99.100
+ Kubernetes | do:kubernetes:bd5f5959-5e1e-4205-a714-a914373942af
Load Balancer | do:loadbalancer:39052d89-8dd4-4d49-8d5a-3c3b6b365b5b
Space | do:space:my-website-assets
Volume | do:volume:6fc4c277-ea5c-448a-93cd-dd496cfef71f
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean.py
index 1c33f2c79..4f3d7b146 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean.py
@@ -185,7 +185,6 @@ EXAMPLES = r"""
image_id: fedora-19-x64
"""
-import os
import time
import traceback
@@ -198,7 +197,7 @@ except ImportError:
try:
# Imported as a dependency for dopy
- import ansible.module_utils.six
+ import ansible.module_utils.six # pylint: disable=unused-import
HAS_SIX = True
except ImportError:
@@ -398,7 +397,6 @@ def core(module):
if command == "droplet":
Droplet.setup(api_token)
if state in ("active", "present"):
-
# First, try to find a droplet by id.
droplet = Droplet.find(id=module.params["id"])
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_block_storage.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_block_storage.py
index 8597eb1ee..58bc546f9 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_block_storage.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_block_storage.py
@@ -182,7 +182,7 @@ class DOBlockStorage(object):
def __init__(self, module):
self.module = module
self.rest = DigitalOceanHelper(module)
- if self.module.params.get("project"):
+ if self.module.params.get("project_name"):
# only load for non-default project assignments
self.projects = DigitalOceanProjects(module, self.rest)
@@ -295,7 +295,7 @@ class DOBlockStorage(object):
status = response.status_code
json = response.json
if status == 201:
- project_name = self.module.params.get("project")
+ project_name = self.module.params.get("project_name")
if (
project_name
): # empty string is the default project, skip project assignment
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints.py
index d36177586..c01735b68 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints.py
@@ -43,11 +43,13 @@ options:
description:
- The ID of a DigitalOcean managed TLS certificate used for SSL when a custom subdomain is provided.
type: str
+ default: ""
required: false
custom_domain:
description:
- The fully qualified domain name (FQDN) of the custom subdomain used with the CDN endpoint.
type: str
+ default: ""
required: false
extends_documentation_fragment:
- community.digitalocean.digital_ocean.documentation
@@ -92,7 +94,7 @@ data:
"""
-from ansible.module_utils.basic import AnsibleModule, env_fallback
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
)
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints_info.py
index 7c8de494f..46e75affc 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_cdn_endpoints_info.py
@@ -54,7 +54,7 @@ data:
"""
-from ansible.module_utils.basic import AnsibleModule, env_fallback
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
)
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database.py
index ffae82dbb..9fc035279 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database.py
@@ -196,9 +196,8 @@ resources:
"""
-import json
import time
-from ansible.module_utils.basic import AnsibleModule, env_fallback
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
DigitalOceanProjects,
@@ -209,7 +208,7 @@ class DODatabase(object):
def __init__(self, module):
self.module = module
self.rest = DigitalOceanHelper(module)
- if self.module.params.get("project"):
+ if self.module.params.get("project_name"):
# only load for non-default project assignments
self.projects = DigitalOceanProjects(module, self.rest)
# pop wait and wait_timeout so we don't include it in the POST data
@@ -336,7 +335,7 @@ class DODatabase(object):
if self.wait:
json_data = self.ensure_online(database_id)
- project_name = self.module.params.get("project")
+ project_name = self.module.params.get("project_name")
if project_name: # empty string is the default project, skip project assignment
urn = "do:dbaas:{0}".format(database_id)
assign_status, error_message, resources = self.projects.assign_to_project(
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database_info.py
index cc5996613..c2c987eb0 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_database_info.py
@@ -93,7 +93,7 @@ data:
"""
-from ansible.module_utils.basic import AnsibleModule, env_fallback
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
)
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain.py
index 234c6cf21..502420df5 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain.py
@@ -119,7 +119,7 @@ class DoManager(DigitalOceanHelper, object):
return response.status_code, response.json
def all_domains(self):
- resp = self.get("domains/")
+ resp = self.get_paginated_data(base_url="domains?", data_key_name="domains")
return resp
def find(self):
@@ -127,8 +127,7 @@ class DoManager(DigitalOceanHelper, object):
return None
domains = self.all_domains()
- status, json = self.jsonify(domains)
- for domain in json["domains"]:
+ for domain in domains:
if domain["name"] == self.domain_name:
return domain
return None
@@ -193,7 +192,7 @@ def run(module):
do_manager = DoManager(module)
state = module.params.get("state")
- if module.params.get("project"):
+ if module.params.get("project_name"):
# only load for non-default project assignments
projects = DigitalOceanProjects(module, do_manager)
@@ -215,7 +214,7 @@ def run(module):
# few times before giving up and returning null.
domain_name = module.params.get("name")
- project_name = module.params.get("project")
+ project_name = module.params.get("project_name")
urn = "do:domain:{0}".format(domain_name)
for i in range(ZONE_FILE_ATTEMPTS):
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record.py
index 05bc4a457..9fa5bd572 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record.py
@@ -45,7 +45,6 @@ options:
data:
description:
- This is the value of the record, depending on the record type.
- default: ""
type: str
name:
description:
@@ -116,7 +115,7 @@ EXAMPLES = """
type: A
name: www
data: 127.0.0.2
- force_update: yes
+ force_update: true
- name: Update A record for www based on record_id
community.digitalocean.digital_ocean_domain_record:
@@ -127,7 +126,7 @@ EXAMPLES = """
type: A
name: www
data: 127.0.0.2
- force_update: yes
+ force_update: true
- name: Remove www record based on name/type/data
community.digitalocean.digital_ocean_domain_record:
@@ -145,6 +144,19 @@ EXAMPLES = """
domain: example.com
record_id: 1234567
+- name: Create CNAME records for www, git and status subdomains
+ community.digitalocean.digital_ocean_domain_record:
+ state: present
+ oauth_token: "{{ lookup('ansible.builtin.env', 'DO_API_TOKEN') }}"
+ domain: example.com
+ type: CNAME
+ name: "{{ item }}"
+ data: example.com
+ with_items:
+ - www
+ - git
+ - status
+
- name: Create MX record with priority 10 for example.com
community.digitalocean.digital_ocean_domain_record:
state: present
@@ -218,7 +230,6 @@ class DigitalOceanDomainRecordManager(DigitalOceanHelper, object):
)
def __get_all_records(self):
-
records = []
page = 1
while True:
@@ -315,7 +326,6 @@ class DigitalOceanDomainRecordManager(DigitalOceanHelper, object):
)
def create_or_update_record(self):
-
# if record_id is given we need to update the record no matter what
if self.record_id:
changed, result = self.__update_record(self.record_id)
@@ -394,7 +404,6 @@ class DigitalOceanDomainRecordManager(DigitalOceanHelper, object):
)
def __build_payload(self):
-
payload = dict(
data=self.module.params.get("data"),
flags=self.module.params.get("flags"),
@@ -418,7 +427,6 @@ class DigitalOceanDomainRecordManager(DigitalOceanHelper, object):
return payload
def delete_record(self):
-
# if record_id is given, try to find the record based on the id
if self.record_id:
record = self.__find_record_by_id(self.record_id)
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record_info.py
index b42a7aaaf..d28af6fdd 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_domain_record_info.py
@@ -89,7 +89,6 @@ data:
"""
-from ansible.module_utils.basic import env_fallback
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
@@ -116,7 +115,6 @@ class DigitalOceanDomainRecordManager(DigitalOceanHelper, object):
)
def __get_all_records(self):
-
records = []
page = 1
while True:
@@ -176,7 +174,6 @@ class DigitalOceanDomainRecordManager(DigitalOceanHelper, object):
return None
def __build_payload(self):
-
payload = dict(
name=self.module.params.get("name"),
type=self.module.params.get("type"),
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet.py
index 791f2891b..495aca7b1 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet.py
@@ -287,7 +287,7 @@ resources:
"""
import time
-from ansible.module_utils.basic import AnsibleModule, env_fallback
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
DigitalOceanProjects,
@@ -295,7 +295,6 @@ from ansible_collections.community.digitalocean.plugins.module_utils.digital_oce
class DODroplet(object):
-
failure_message = {
"empty_response": "Empty response from the DigitalOcean API; please try again or open a bug if it never "
"succeeds.",
@@ -320,7 +319,7 @@ class DODroplet(object):
self.name = None
self.size = None
self.status = None
- if self.module.params.get("project"):
+ if self.module.params.get("project_name"):
# only load for non-default project assignments
self.projects = DigitalOceanProjects(module, self.rest)
self.firewalls = self.get_firewalls()
@@ -780,7 +779,7 @@ class DODroplet(object):
if json_data:
droplet = json_data.get("droplet", droplet)
- project_name = self.module.params.get("project")
+ project_name = self.module.params.get("project_name")
if project_name: # empty string is the default project, skip project assignment
urn = "do:droplet:{0}".format(droplet_id)
assign_status, error_message, resources = self.projects.assign_to_project(
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet_info.py
index 474b9af27..65032301a 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_droplet_info.py
@@ -210,7 +210,6 @@ data:
type: list
"""
-from traceback import format_exc
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_firewall.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_firewall.py
index 24b7c4203..61ccea01c 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_firewall.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_firewall.py
@@ -544,7 +544,7 @@ def main():
outbound_rules=dict(
type="list", elements="dict", options=outbound_spec, required=False
),
- ),
+ )
module = AnsibleModule(
argument_spec=argument_spec,
required_if=[("state", "present", ["inbound_rules", "outbound_rules"])],
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_floating_ip.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_floating_ip.py
index d4d6ff263..ed84d2841 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_floating_ip.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_floating_ip.py
@@ -435,11 +435,11 @@ def create_floating_ips(module, rest):
json_data = response.json
if status_code == 202:
if module.params.get(
- "project"
+ "project_name"
): # only load for non-default project assignments
rest = DigitalOceanHelper(module)
projects = DigitalOceanProjects(module, rest)
- project_name = module.params.get("project")
+ project_name = module.params.get("project_name")
if (
project_name
): # empty string is the default project, skip project assignment
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes.py
index eda9c4241..b286930f7 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes.py
@@ -155,6 +155,14 @@ options:
- Highly available control planes incur less downtime.
type: bool
default: false
+ project_name:
+ aliases: ["project"]
+ description:
+ - Project to assign the resource to (project name, not UUID).
+ - Defaults to the default project of the account (empty string).
+ type: str
+ required: false
+ default: ""
"""
@@ -169,9 +177,9 @@ EXAMPLES = r"""
- name: hacktoberfest-workers
size: s-1vcpu-2gb
count: 3
- return_kubeconfig: yes
+ return_kubeconfig: true
wait_timeout: 600
- register: my_cluster
+ register: my_cluster
- name: Show the kubeconfig for the cluster we just created
debug:
@@ -182,6 +190,21 @@ EXAMPLES = r"""
state: absent
oauth_token: "{{ lookup('env', 'DO_API_TOKEN') }}"
name: hacktoberfest
+
+- name: Create a new DigitalOcean Kubernetes cluster assigned to Project "test"
+ community.digitalocean.digital_ocean_kubernetes:
+ state: present
+ oauth_token: "{{ lookup('env', 'DO_API_TOKEN') }}"
+ name: hacktoberfest
+ region: nyc1
+ node_pools:
+ - name: hacktoberfest-workers
+ size: s-1vcpu-2gb
+ count: 3
+ return_kubeconfig: true
+ project: test
+ wait_timeout: 600
+ register: my_cluster
"""
@@ -212,62 +235,58 @@ data:
- name: do-nyc1-hacktoberfest-admin
user:
token: REDACTED
- kubernetes_cluster:
- auto_upgrade: false
- cluster_subnet: 10.244.0.0/16
- created_at: '2020-09-27T00:55:37Z'
- endpoint: https://REDACTED.k8s.ondigitalocean.com
+ auto_upgrade: false
+ cluster_subnet: 10.244.0.0/16
+ created_at: '2020-09-27T00:55:37Z'
+ endpoint: https://REDACTED.k8s.ondigitalocean.com
+ id: REDACTED
+ ipv4: REDACTED
+ maintenance_policy:
+ day: any
+ duration: 4h0m0s
+ start_time: '15:00'
+ name: hacktoberfest
+ node_pools:
+ - auto_scale: false
+ count: 1
id: REDACTED
- ipv4: REDACTED
- maintenance_policy:
- day: any
- duration: 4h0m0s
- start_time: '15:00'
- name: hacktoberfest
- node_pools:
- - auto_scale: false
- count: 1
+ labels: null
+ max_nodes: 0
+ min_nodes: 0
+ name: hacktoberfest-workers
+ nodes:
+ - created_at: '2020-09-27T00:55:37Z'
+ droplet_id: '209555245'
id: REDACTED
- labels: null
- max_nodes: 0
- min_nodes: 0
- name: hacktoberfest-workers
- nodes:
- - created_at: '2020-09-27T00:55:37Z'
- droplet_id: '209555245'
- id: REDACTED
- name: hacktoberfest-workers-3tdq1
- status:
- state: running
- updated_at: '2020-09-27T00:58:36Z'
- size: s-1vcpu-2gb
- tags:
- - k8s
- - k8s:REDACTED
- - k8s:worker
- taints: []
- region: nyc1
- service_subnet: 10.245.0.0/16
- status:
- state: running
- surge_upgrade: false
+ name: hacktoberfest-workers-3tdq1
+ status:
+ state: running
+ updated_at: '2020-09-27T00:58:36Z'
+ size: s-1vcpu-2gb
tags:
- k8s
- k8s:REDACTED
- updated_at: '2020-09-27T01:00:37Z'
- version: 1.18.8-do.1
- vpc_uuid: REDACTED
+ - k8s:worker
+ taints: []
+ region: nyc1
+ service_subnet: 10.245.0.0/16
+ status:
+ state: running
+ surge_upgrade: false
+ tags:
+ - k8s
+ - k8s:REDACTED
+ updated_at: '2020-09-27T01:00:37Z'
+ version: 1.18.8-do.1
+ vpc_uuid: REDACTED
"""
-import traceback
import time
-import json
-from traceback import format_exc
-from ansible.module_utils._text import to_native
from ansible.module_utils.basic import AnsibleModule, env_fallback
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
+ DigitalOceanProjects,
)
@@ -281,6 +300,8 @@ class DOKubernetes(object):
self.wait_timeout = self.module.params.pop("wait_timeout", 600)
self.module.params.pop("oauth_token")
self.cluster_id = None
+ if self.module.params.get("project_name"):
+ self.projects = DigitalOceanProjects(module, self.rest)
def get_by_id(self):
"""Returns an existing DigitalOcean Kubernetes cluster matching on id"""
@@ -379,16 +400,32 @@ class DOKubernetes(object):
node_pool["size"], ", ".join(valid_sizes)
)
)
-
+ if self.module.check_mode:
+ self.module.exit_json(changed=True)
# Create the Kubernetes cluster
json_data = self.get_kubernetes()
if json_data:
# Add the kubeconfig to the return
if self.return_kubeconfig:
json_data["kubeconfig"] = self.get_kubernetes_kubeconfig()
+ # Assign kubernetes to project
+ project_name = self.module.params.get("project_name")
+ # empty string is the default project, skip project assignment
+ if project_name:
+ urn = "do:kubernetes:{0}".format(self.cluster_id)
+ (
+ assign_status,
+ error_message,
+ resources,
+ ) = self.projects.assign_to_project(project_name, urn)
+ if assign_status not in {"ok", "assigned", "already_assigned"}:
+ self.module.fail_json(
+ changed=False,
+ msg=error_message,
+ assign_status=assign_status,
+ resources=resources,
+ )
self.module.exit_json(changed=False, data=json_data)
- if self.module.check_mode:
- self.module.exit_json(changed=True)
request_params = dict(self.module.params)
response = self.rest.post("kubernetes/clusters", data=request_params)
json_data = response.json
@@ -401,6 +438,24 @@ class DOKubernetes(object):
# Add the kubeconfig to the return
if self.return_kubeconfig:
json_data["kubeconfig"] = self.get_kubernetes_kubeconfig()
+ # Assign kubernetes to project
+ project_name = self.module.params.get("project_name")
+ # empty string is the default project, skip project assignment
+ if project_name:
+ urn = "do:kubernetes:{0}".format(self.cluster_id)
+ assign_status, error_message, resources = self.projects.assign_to_project(
+ project_name, urn
+ )
+ if assign_status not in {"ok", "assigned", "already_assigned"}:
+ self.module.fail_json(
+ changed=True,
+ msg=error_message,
+ assign_status=assign_status,
+ resources=resources,
+ )
+ json_data["kubernetes_cluster"][
+ "kubeconfig"
+ ] = self.get_kubernetes_kubeconfig()
self.module.exit_json(changed=True, data=json_data["kubernetes_cluster"])
def delete(self):
@@ -477,6 +532,9 @@ def main():
wait=dict(type="bool", default=True),
wait_timeout=dict(type="int", default=600),
ha=dict(type="bool", default=False),
+ project_name=dict(
+ type="str", aliases=["project"], required=False, default=""
+ ),
),
required_if=(
[
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes_info.py
index d60e9b4ad..2780d5a2b 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_kubernetes_info.py
@@ -42,7 +42,7 @@ EXAMPLES = r"""
community.digitalocean.digital_ocean_kubernetes_info:
oauth_token: "{{ lookup('ansible.builtin.env', 'DO_API_TOKEN') }}"
name: hacktoberfest
- return_kubeconfig: yes
+ return_kubeconfig: true
register: my_cluster
- ansible.builtin.debug:
@@ -127,11 +127,6 @@ data:
"""
-import traceback
-import time
-import json
-from traceback import format_exc
-from ansible.module_utils._text import to_native
from ansible.module_utils.basic import AnsibleModule, env_fallback
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_load_balancer.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_load_balancer.py
index ecc9efa43..d0da6f7dc 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_load_balancer.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_load_balancer.py
@@ -407,8 +407,7 @@ resources:
import time
-from ansible.module_utils._text import to_native
-from ansible.module_utils.basic import AnsibleModule, env_fallback
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
DigitalOceanProjects,
@@ -416,7 +415,6 @@ from ansible_collections.community.digitalocean.plugins.module_utils.digital_oce
class DOLoadBalancer(object):
-
# Regions which use 'size' versus 'size_unit'
size_regions = {"ams2", "nyc2", "sfo1"}
all_sizes = {"lb-small", "lb-medium", "lb-large"}
@@ -469,7 +467,7 @@ class DOLoadBalancer(object):
self.module.params.pop("oauth_token")
self.wait = self.module.params.pop("wait", True)
self.wait_timeout = self.module.params.pop("wait_timeout", 600)
- if self.module.params.get("project"):
+ if self.module.params.get("project_name"):
# only load for non-default project assignments
self.projects = DigitalOceanProjects(module, self.rest)
@@ -718,7 +716,7 @@ class DOLoadBalancer(object):
if self.wait:
self.ensure_active()
- project_name = self.module.params.get("project")
+ project_name = self.module.params.get("project_name")
if project_name: # empty string is the default project, skip project assignment
urn = "do:loadbalancer:{0}".format(self.id)
(
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts.py
index 67825ccc5..039940b97 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts.py
@@ -144,7 +144,6 @@ data:
"""
-from ansible.module_utils._text import to_native
from ansible.module_utils.basic import AnsibleModule, env_fallback
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
@@ -247,7 +246,6 @@ class DOMonitoringAlerts(object):
def delete(self):
uuid = self.module.params.get("uuid", None)
if uuid is not None:
-
# Check mode
if self.module.check_mode:
self.module.exit_json(changed=True)
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts_info.py
index a5d87ad60..54c4402c2 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_monitoring_alerts_info.py
@@ -77,7 +77,6 @@ data:
"""
-from ansible.module_utils._text import to_native
from ansible.module_utils.basic import AnsibleModule, env_fallback
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project.py
index e0333883e..7799ec019 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project.py
@@ -135,8 +135,6 @@ data:
}
"""
-import time
-import json
from ansible.module_utils.basic import AnsibleModule, env_fallback
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_info.py
index 0c6ac670c..a3bfb4eeb 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_info.py
@@ -66,7 +66,6 @@ data:
updated_at: "2021-03-11T00:00:00Z"
"""
-from traceback import format_exc
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_resource_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_resource_info.py
new file mode 100644
index 000000000..13c1404b7
--- /dev/null
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_project_resource_info.py
@@ -0,0 +1,104 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright: (c) 2023, Raman Babich <ramanbabich@gmail.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_project_resource_info
+short_description: Gather information about DigitalOcean Project Resources
+description:
+ - This module can be used to gather information about Project Resources.
+author: "Raman Babich (@raman-babich)"
+version_added: 1.25.0
+
+options:
+ id:
+ description:
+ - Project ID that can be used to identify and reference a project.
+ - If C(id) and C(name) are not specified default project will be used.
+ type: str
+ name:
+ description:
+ - Project name that can be used to identify and reference a project.
+ - If C(id) and C(name) are not specified default project will be used.
+ type: str
+
+extends_documentation_fragment:
+- community.digitalocean.digital_ocean
+"""
+
+EXAMPLES = r"""
+- name: Get project resources by id
+ community.digitalocean.digital_ocean_project_resource_info:
+ id: cb1ef55e-3cd8-4c7c-aa5d-07c32bf41627
+
+- name: Get project resources by name
+ community.digitalocean.digital_ocean_project_resource_info:
+ name: my-project-name
+
+- name: Get default project resources
+ community.digitalocean.digital_ocean_project_resource_info:
+"""
+
+RETURN = r"""
+data:
+ description: "DigitalOcean project resources information"
+ elements: dict
+ returned: success
+ type: list
+ sample:
+ - urn: "do:droplet:13457723"
+ assigned_at: "2018-09-28T19:26:37Z"
+ links:
+ self: "https://api.digitalocean.com/v2/droplets/13457723"
+ status: "ok"
+ - urn: "do:domain:example.com"
+ assigned_at: "2019-03-31T16:24:14Z"
+ links:
+ self: "https://api.digitalocean.com/v2/domains/example.com"
+ status: "ok"
+"""
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
+ DigitalOceanHelper,
+ DigitalOceanProjects,
+)
+
+
+def run(module):
+ rest = DigitalOceanHelper(module)
+ projects = DigitalOceanProjects(module, rest)
+ if module.params["id"]:
+ err_msg, resources = projects.get_resources_by_id(module.params["id"])
+ elif module.params["name"]:
+ err_msg, resources = projects.get_resources_by_name(module.params["name"])
+ else:
+ err_msg, resources = projects.get_resources_of_default()
+
+ if err_msg:
+ module.fail_json(msg=err_msg)
+ module.exit_json(data=resources["resources"])
+
+
+def main():
+ argument_spec = DigitalOceanHelper.digital_ocean_argument_spec()
+ argument_spec.update(
+ name=dict(type="str"),
+ id=dict(type="str"),
+ )
+ module = AnsibleModule(
+ argument_spec=argument_spec,
+ mutually_exclusive=[("id", "name")],
+ supports_check_mode=True,
+ )
+ run(module)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_snapshot.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_snapshot.py
index 67dc01000..241d6621e 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_snapshot.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_snapshot.py
@@ -46,6 +46,7 @@ options:
- Only applies to volume snapshots (not Droplets).
type: list
elements: str
+ default: []
droplet_id:
description:
- Droplet ID to snapshot.
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces.py
index 0d101b501..1a2ac272b 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces.py
@@ -208,7 +208,6 @@ def run(module):
def main():
-
argument_spec = DigitalOceanHelper.digital_ocean_argument_spec()
argument_spec.update(
state=dict(type="str", choices=["present", "absent"], default="present"),
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces_info.py
index 50f050020..aeab3ce9b 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_spaces_info.py
@@ -128,7 +128,6 @@ def run(module):
def main():
-
argument_spec = DigitalOceanHelper.digital_ocean_argument_spec()
argument_spec.update(
state=dict(type="str", choices=["present"], default="present"),
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_sshkey.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_sshkey.py
index 3a7e662ba..8d09c1dd3 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_sshkey.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_sshkey.py
@@ -82,7 +82,6 @@ import json
import hashlib
import base64
-from ansible.module_utils.basic import env_fallback
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.urls import fetch_url
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc.py
index 598ec2bf3..473b0bc9f 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc.py
@@ -117,7 +117,6 @@ data:
"""
-import time
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,
diff --git a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc_info.py b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc_info.py
index c2b11078d..5d8915969 100644
--- a/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc_info.py
+++ b/ansible_collections/community/digitalocean/plugins/modules/digital_ocean_vpc_info.py
@@ -66,7 +66,6 @@ data:
"""
-import time
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.digitalocean.plugins.module_utils.digital_ocean import (
DigitalOceanHelper,