Skip to content
This repository was archived by the owner on Oct 29, 2021. It is now read-only.

Fix forgotten deletion of 'automatic installation' code and droplet creation #9

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 72 additions & 13 deletions doctl.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,6 @@
import maya


try:
os.makedirs(BIN_CACHE)
except FileExistsError:
pass


class DOCtlError(RuntimeError):
def __init__(self, c):
self.c = c
Expand Down Expand Up @@ -201,7 +195,10 @@ def create(
if user_data:
args.extend(["--user-data", user_data])
if tags:
args.extend(["--tags", tags])
if not isinstance(tags, list):
raise ValueError("Tags must be a list")
tag_args = ["--tag-names {0}".format(tag) for tag in tags]
args.extend(tag_args)
if enable_private_networking:
args.extend(["--enable-private-networking"])
if enable_monitoring:
Expand All @@ -211,7 +208,7 @@ def create(
if wait:
args.extend(["--wait"])

return doctl("compute", "droplet", "create", *args)
return self.do.doctl("compute", "droplet", "create", *args)

def actions(self, droplet_id):
"""droplet actions."""
Expand Down Expand Up @@ -251,7 +248,8 @@ def __init__(self, do):
def create(self, domain, ip_address):
"""Create domain."""
return self.do.doctl(
"compute", "domain", create, domain, "--ip-address", ip_address
"compute", "domain", "create",
'"{0}"'.format(domain), "--ip-address", '"{0}"'.format(ip_address)
)

def list(self):
Expand All @@ -264,7 +262,7 @@ def get(self, domain):

def delete(self, domain):
"""Delete domain."""
return self.do.doctl("compute", "domain", "delete", domain, "--force")
return self.do.doctl("compute", "domain", "delete", domain, "--force", expect_json=False)


class ComputeDomainRecords:
Expand Down Expand Up @@ -294,15 +292,15 @@ def create(
"""List records."""
args = []
if record_data:
args.extend(["--record-data", record_data])
args.append('--record-data "{0}"'.format(record_data))
if record_flags:
args.extend(["--record-flags", record_flags])
if record_name:
args.extend(["--record-name", record_name])
args.append('--record-name "{0}"'.format(record_name))
if record_port:
args.extend(["--record-port", record_port])
if record_priority:
args.extend(["--record-priority", record_priority])
args.append('--record-priority "{0}"'.format(record_priority))
if record_tag:
args.extend(["--record-tag", record_tag])
if record_ttl:
Expand Down Expand Up @@ -1000,5 +998,66 @@ def rate_limit(self):
return self.do.doctl("account", "ratelimit")


class ProjectResources:
"""ProjectResources is used to access project resource commands."""

def __init__(self, project_id, do=None):
self.do = do or DigitalOcean()
self.project_id = project_id

def assign(self, uniform_resource_names):
if not isinstance(uniform_resource_names, list):
raise ValueError("Uniform resource names must be a list")
resource_args = ['--resource=\"{0}\"'.format(urn) for urn in uniform_resource_names]
return self.do.doctl("projects", "resources", "assign", self.project_id, *resource_args)

def get(self, uniform_resource_name):
return self.do.doctl("projects", "resources", "get", uniform_resource_name)

def list(self):
return self.do.doctl("projects", "resources", "list", self.project_id)


class Projects:
"""projects is used to access project commands."""

def __init__(self, do=None):
self.do = do or DigitalOcean()

def get(self, project_id):
return self.do.doctl("projects", "get", project_id)

def create(self, name, purpose, description=None, environment=None):
args = []
args.extend(["--name", name])
args.extend(["--purpose", purpose])

if description:
args.extend(["--description", description])

valid_environments = ["Development", "Staging", "Production"]
if environment and environment.capitalize() in valid_environments:
args.extend(["--environment", environment.capitalize()])

return self.do.doctl("projects", "create", *args)

def delete(self, project_ids):
if not isinstance(project_ids, list):
raise ValueError("Project ids must be a list")
project_args = ['"{0}"'.format(project_id) for project_id in project_ids]
c = self.do.doctl("projects", "delete", *project_args, expect_json=False)
return c.return_code == 0

def get(self, project_id):
return self.do.doctl("projects", "get", project_id)

def list(self):
return self.do.doctl("projects", "list")

def resources(self, project_id):
return ProjectResources(project_id, self.do)


compute = Compute()
account = Account()
projects = Projects()