11import boto .ec2
2+ import collections
23import sys
34
45from datetime import datetime
@@ -38,6 +39,8 @@ def all(self, instance_ids=None):
3839 IDs
3940 """
4041 data = {}
42+ Time = collections .namedtuple ('Time' ,
43+ ['weekday' , 'start_time' , 'end_time' ])
4144 instances = self .conn .get_only_instances (instance_ids = instance_ids )
4245 for instance in instances :
4346 times = instance .tags .get ('times' )
@@ -55,7 +58,9 @@ def all(self, instance_ids=None):
5558 end_time = end_time .strftime ('%H:%M' )
5659 weekday = (self .weekdays [i + 1 ]
5760 if self .iso else self .weekdays [i ])
58- data [instance .id ].append ((weekday , start_time , end_time ,))
61+ data [instance .id ].append (
62+ Time (weekday , start_time , end_time )
63+ )
5964 return data
6065
6166 def set (self , instance_ids = None , weekdays = None , start_time = None ,
@@ -130,6 +135,28 @@ def set(self, instance_ids=None, weekdays=None, start_time=None,
130135 except self .conn .ResponseError , e :
131136 raise e
132137
138+ def unset (self , instance_ids = None , weekdays = None ):
139+ """Unset instance times for specific weekdays or all weekdays."""
140+ # integer representation of `weekdays`
141+ if weekdays == ['*' ]:
142+ # All 7 days
143+ weekdays = range (len (self .weekdays ))
144+ else :
145+ weekdays = [self .weekdays .index (weekday ) for weekday in weekdays ]
146+ instances = self .conn .get_only_instances (instance_ids = instance_ids )
147+ for instance in instances :
148+ times = instance .tags .get ('times' )
149+ if times :
150+ times = times .split (';' )
151+ for weekday in weekdays :
152+ times [weekday ] = None
153+ times = ';' .join ([str (time ) for time in times ])
154+ try :
155+ # Overwrite existing `times` tag with new value
156+ instance .add_tag ('times' , times )
157+ except self .conn .ResponseError , e :
158+ raise e
159+
133160 def check (self , instance_ids = None ):
134161 """Check the state of instances and either start or stop them
135162 based on the current time restrictions set for the current day.
0 commit comments