Skip to content
This repository has been archived by the owner on Aug 9, 2020. It is now read-only.

Commit

Permalink
Gave Droplet methods for ensuring on/off status
Browse files Browse the repository at this point in the history
  • Loading branch information
jwodder committed Apr 19, 2016
1 parent 0fffe20 commit 35008be
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion doapi/droplet.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from datetime import datetime
from six.moves import map # pylint: disable=redefined-builtin
from .base import Actionable, ResourceWithID, Region, Size, Kernel, \
Networks, BackupWindow, ResourceWithDroplet, fromISO8601
Networks, BackupWindow, ResourceWithDroplet, \
fromISO8601, WaitTimeoutError
from .image import Image

class Droplet(Actionable, ResourceWithID):
Expand Down Expand Up @@ -516,3 +517,30 @@ def wait(self, status=None, locked=None, wait_interval=None,
"""
return next(self.doapi_manager.wait_droplets([self], status, locked,
wait_interval, wait_time))

def ensure_on(self, wait_interval=None, wait_time=None):
waitopts = {"wait_interval": wait_interval, "wait_time": wait_time}
this = self.fetch()
if this.active:
return
elif this.new:
self.wait(status='active', **waitopts).raise_for_error()
elif this.archive:
### TODO: ???
raise ValueError("Don't know how to turn an archived droplet on")
else:
self.power_on().wait(**waitopts).raise_for_error()

def ensure_off(self, shutdown_wait=30, wait_interval=None, wait_time=None):
waitopts = {"wait_interval": wait_interval, "wait_time": wait_time}
this = self.fetch()
if this.off or this.archive:
return
if this.new:
self.ensure_on(self, **waitopts)
self.shutdown().wait(**waitopts).raise_for_error()
try:
self.wait(status='off', wait_interval=wait_interval,
wait_time=shutdown_wait).raise_for_error()
except WaitTimeoutError:
self.power_off().wait(**waitopts).raise_for_error()

0 comments on commit 35008be

Please sign in to comment.