Ejemplo n.º 1
0
 def __init__(self, module):
     self.rest = DigitalOceanHelper(module)
     self.module = module
     self.wait = self.module.params.pop("wait", True)
     self.wait_timeout = self.module.params.pop("wait_timeout", 120)
     self.unique_name = self.module.params.pop("unique_name", False)
     # pop the oauth token so we don't include it in the POST data
     self.module.params.pop("oauth_token")
     self.id = None
     self.name = None
     self.size = None
     self.status = None
Ejemplo n.º 2
0
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, data=json["ssh_keys"])
    else:
        module.fail_json(
            msg="Error fetching SSH Key information [{0}: {1}]".format(
                status_code, response.json["message"]))
Ejemplo n.º 3
0
 def __init__(self, module):
     self.rest = DigitalOceanHelper(module)
     self.module = module
     self.wait = self.module.params.pop("wait", True)
     self.wait_timeout = self.module.params.pop("wait_timeout", 120)
     # pop the oauth token so we don't include it in the POST data
     self.module.params.pop("oauth_token")
     self.snapshot_type = module.params["snapshot_type"]
     self.snapshot_name = module.params["snapshot_name"]
     self.snapshot_tags = module.params["snapshot_tags"]
     self.snapshot_id = module.params["snapshot_id"]
     self.volume_id = module.params["volume_id"]
Ejemplo n.º 4
0
def core(module):
    region_name = module.params.get("region_name", None)

    rest = DigitalOceanHelper(module)

    base_url = "volumes?"
    if region_name is not None:
        base_url += "region=%s&" % region_name

    volumes = rest.get_paginated_data(base_url=base_url,
                                      data_key_name="volumes")

    module.exit_json(changed=False, data=volumes)
 def __init__(self, module):
     self.rest = DigitalOceanHelper(module)
     self.module = module
     self.id = None
     self.name = self.module.params.get("name")
     self.region = self.module.params.get("region")
     self.updates = []
     # Pop these values so we don't include them in the POST data
     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"):
         # only load for non-default project assignments
         self.projects = DigitalOceanProjects(module, self.rest)
 def __init__(self, module):
     self.module = module
     self.rest = DigitalOceanHelper(module)
     # pop wait and wait_timeout so we don't include it in the POST data
     self.wait = self.module.params.pop("wait", True)
     self.wait_timeout = self.module.params.pop("wait_timeout", 600)
     # pop the oauth token so we don't include it in the POST data
     self.module.params.pop("oauth_token")
     self.id = None
     self.name = None
     self.engine = None
     self.version = None
     self.num_nodes = None
     self.region = None
     self.status = None
     self.size = None
Ejemplo n.º 7
0
def core(module):
    image_type = module.params["image_type"]

    rest = DigitalOceanHelper(module)

    base_url = "images?"
    if image_type == "distribution":
        base_url += "type=distribution&"
    elif image_type == "application":
        base_url += "type=application&"
    elif image_type == "private":
        base_url += "private=true&"

    images = rest.get_paginated_data(base_url=base_url, data_key_name="images")

    module.exit_json(changed=False, data=images)
def core(module):
    image_type = module.params['image_type']

    rest = DigitalOceanHelper(module)

    base_url = 'images?'
    if image_type == 'distribution':
        base_url += "type=distribution&"
    elif image_type == 'application':
        base_url += "type=application&"
    elif image_type == 'private':
        base_url += "private=true&"

    images = rest.get_paginated_data(base_url=base_url, data_key_name='images')

    module.exit_json(changed=False, data=images)
Ejemplo n.º 9
0
def run(module):
    rest = DigitalOceanHelper(module)

    endpoint = "cdn/endpoints"
    response = rest.get(endpoint)
    json_data = response.json
    status_code = response.status_code

    if status_code != 200:
        module.fail_json(
            changed=False,
            msg="Failed to get {0} information due to error [HTTP {1}: {2}]".
            format(endpoint, status_code,
                   json_data.get("message", "(empty error message)")),
        )

    module.exit_json(changed=False, data=json_data)
Ejemplo n.º 10
0
def core(module):
    certificate_id = module.params.get('certificate_id', None)
    rest = DigitalOceanHelper(module)

    base_url = 'certificates'
    if certificate_id is not None:
        response = rest.get("%s/%s" % (base_url, certificate_id))
        status_code = response.status_code

        if status_code != 200:
            module.fail_json(msg="Failed to retrieve certificates for DigitalOcean")

        resp_json = response.json
        certificate = resp_json['certificate']
    else:
        certificate = rest.get_paginated_data(base_url=base_url + '?', data_key_name='certificates')

    module.exit_json(changed=False, data=certificate)
def core(module):
    tag_name = module.params.get('tag_name', None)
    rest = DigitalOceanHelper(module)

    base_url = 'tags'
    if tag_name is not None:
        response = rest.get("%s/%s" % (base_url, tag_name))
        status_code = response.status_code

        if status_code != 200:
            module.fail_json(msg="Failed to retrieve tags for DigitalOcean")

        resp_json = response.json
        tag = resp_json['tag']
    else:
        tag = rest.get_paginated_data(base_url=base_url + '?', data_key_name='tags')

    module.exit_json(changed=False, data=tag)
Ejemplo n.º 12
0
def core(module):
    load_balancer_id = module.params.get("load_balancer_id", None)
    rest = DigitalOceanHelper(module)

    base_url = "load_balancers"
    if load_balancer_id is not None:
        response = rest.get("%s/%s" % (base_url, load_balancer_id))
        status_code = response.status_code

        if status_code != 200:
            module.fail_json(
                msg="Failed to retrieve load balancers for DigitalOcean")

        load_balancer = [response.json["load_balancer"]]
    else:
        load_balancer = rest.get_paginated_data(base_url=base_url + "?",
                                                data_key_name="load_balancers")

    module.exit_json(changed=False, data=load_balancer)
 def __init__(self, module):
     self.module = module
     self.rest = DigitalOceanHelper(module)
     if self.module.params.get("project"):
         # 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
     self.wait = self.module.params.pop("wait", True)
     self.wait_timeout = self.module.params.pop("wait_timeout", 600)
     # pop the oauth token so we don't include it in the POST data
     self.module.params.pop("oauth_token")
     self.id = None
     self.name = None
     self.engine = None
     self.version = None
     self.num_nodes = None
     self.region = None
     self.status = None
     self.size = None
Ejemplo n.º 14
0
def core(module):
    firewall_name = module.params.get('name', None)
    rest = DigitalOceanHelper(module)
    base_url = 'firewalls?'

    response = rest.get("%s" % base_url)
    status_code = response.status_code
    if status_code != 200:
        module.fail_json(msg="Failed to retrieve firewalls from Digital Ocean")
    firewalls = rest.get_paginated_data(base_url=base_url,
                                        data_key_name='firewalls')

    if firewall_name is not None:
        rule = {}
        for firewall in firewalls:
            if firewall['name'] == firewall_name:
                rule.update(firewall)
        module.exit_json(changed=False, data=rule)
    else:
        module.exit_json(changed=False, data=firewalls)
def core(module):
    rest = DigitalOceanHelper(module)

    page = 1
    has_next = True
    floating_ips = []
    status_code = None
    while has_next or status_code != 200:
        response = rest.get("floating_ips?page={0}&per_page=20".format(page))
        status_code = response.status_code
        # stop if any error during pagination
        if status_code != 200:
            break
        page += 1
        floating_ips.extend(response.json["floating_ips"])
        has_next = ("pages" in response.json["links"]
                    and "next" in response.json["links"]["pages"])

    if status_code == 200:
        module.exit_json(changed=False, floating_ips=floating_ips)
    else:
        module.fail_json(msg="Error fetching information [{0}: {1}]".format(
            status_code, response.json["message"]))
 def __init__(self, module):
     self.rest = DigitalOceanHelper(module)
     self.module = module
     # Pop these values so we don't include them in the POST data
     self.module.params.pop("oauth_token")
 def __init__(self, module):
     self.rest = DigitalOceanHelper(module)
     self.module = module
     self.name = self.module.params.get('name')
     self.baseurl = 'firewalls'
     self.firewalls = self.get_firewalls()
Ejemplo n.º 18
0
def core(module):
    state = module.params["state"]
    name = module.params["name"]
    resource_id = module.params["resource_id"]
    resource_type = module.params["resource_type"]

    rest = DigitalOceanHelper(module)
    response = rest.get("tags/{0}".format(name))

    if state == "present":
        status_code = response.status_code
        resp_json = response.json
        changed = False
        if status_code == 200 and resp_json["tag"]["name"] == name:
            changed = False
        else:
            # Ensure Tag exists
            response = rest.post("tags", data={"name": name})
            status_code = response.status_code
            resp_json = response.json
            if status_code == 201:
                changed = True
            elif status_code == 422:
                changed = False
            else:
                module.exit_json(changed=False, data=resp_json)

        if resource_id is None:
            # No resource defined, we're done.
            module.exit_json(changed=changed, data=resp_json)
        else:
            # Check if resource is already tagged or not
            found = False
            url = "{0}?tag_name={1}".format(resource_type, name)
            if resource_type == "droplet":
                url = "droplets?tag_name={0}".format(name)
            response = rest.get(url)
            status_code = response.status_code
            resp_json = response.json
            if status_code == 200:
                for resource in resp_json["droplets"]:
                    if not found and resource["id"] == int(resource_id):
                        found = True
                        break
                if not found:
                    # If resource is not tagged, tag a resource
                    url = "tags/{0}/resources".format(name)
                    payload = {
                        "resources": [{
                            "resource_id": resource_id,
                            "resource_type": resource_type
                        }]
                    }
                    response = rest.post(url, data=payload)
                    if response.status_code == 204:
                        module.exit_json(changed=True)
                    else:
                        module.fail_json(
                            msg="error tagging resource '{0}': {1}".format(
                                resource_id, response.json["message"]))
                else:
                    # Already tagged resource
                    module.exit_json(changed=False)
            else:
                # Unable to find resource specified by user
                module.fail_json(msg=resp_json["message"])

    elif state == "absent":
        if response.status_code == 200:
            if resource_id:
                url = "tags/{0}/resources".format(name)
                payload = {
                    "resources": [{
                        "resource_id": resource_id,
                        "resource_type": resource_type
                    }]
                }
                response = rest.delete(url, data=payload)
            else:
                url = "tags/{0}".format(name)
                response = rest.delete(url)
            if response.status_code == 204:
                module.exit_json(changed=True)
        else:
            module.exit_json(changed=False)
 def __init__(self, module):
     self.module = module
     self.rest = DigitalOceanHelper(module)
 def __init__(self, module):
     self.module = module
     self.rest = DigitalOceanHelper(module)
     if self.module.params.get("project"):
         # only load for non-default project assignments
         self.projects = DigitalOceanProjects(module, self.rest)
def create_floating_ips(module, rest):
    payload = {}

    if module.params["region"] is not None:
        payload["region"] = module.params["region"]
    if module.params["droplet_id"] is not None:
        payload["droplet_id"] = module.params["droplet_id"]

    # Get existing floating IPs
    response = rest.get("floating_ips/")
    status_code = response.status_code
    json_data = response.json

    # Exit unchanged if any of them are assigned to this Droplet already
    if status_code == 200:
        floating_ips = json_data.get("floating_ips", [])
        if len(floating_ips) != 0:
            for floating_ip in floating_ips:
                droplet = floating_ip.get("droplet", None)
                if droplet is not None:
                    droplet_id = droplet.get("id", None)
                    if droplet_id is not None:
                        if str(droplet_id) == module.params["droplet_id"]:
                            ip = floating_ip.get("ip", None)
                            if ip is not None:
                                module.exit_json(
                                    changed=False, data={"floating_ip": floating_ip}
                                )
                            else:
                                module.fail_json(
                                    changed=False,
                                    msg="Unexpected error querying floating ip",
                                )

    response = rest.post("floating_ips", data=payload)
    status_code = response.status_code
    json_data = response.json
    if status_code == 202:
        if module.params.get(
            "project"
        ):  # only load for non-default project assignments
            rest = DigitalOceanHelper(module)
            projects = DigitalOceanProjects(module, rest)
            project_name = module.params.get("project")
            if (
                project_name
            ):  # empty string is the default project, skip project assignment
                floating_ip = json_data.get("floating_ip")
                ip = floating_ip.get("ip")
                if ip:
                    urn = "do:floatingip:{0}".format(ip)
                    (
                        assign_status,
                        error_message,
                        resources,
                    ) = projects.assign_to_project(project_name, urn)
                    module.exit_json(
                        changed=True,
                        data=json_data,
                        msg=error_message,
                        assign_status=assign_status,
                        resources=resources,
                    )
                else:
                    module.exit_json(
                        changed=True,
                        msg="Floating IP created but not assigned to the {0} Project (missing information from the API response)".format(
                            project_name
                        ),
                        data=json_data,
                    )
            else:
                module.exit_json(changed=True, data=json_data)
        else:
            module.exit_json(changed=True, data=json_data)
    else:
        module.fail_json(
            msg="Error creating floating ip [{0}: {1}]".format(
                status_code, json_data["message"]
            ),
            region=module.params["region"],
        )
Ejemplo n.º 22
0
 def __init__(self, module):
     self.module = module
     self.rest = DigitalOceanHelper(module)
     # pop the oauth token so we don't include it in the POST data
     self.token = self.module.params.pop("oauth_token")
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)