in source/lambda/schedulers/ec2_service.py [0:0]
def _schedule_from_maint_window(self, name, start, hours, interval, timezone):
start_dt = start.replace(second=0, microsecond=0)
start_before_begin = max(interval, 10)
begin_dt = start_dt - timedelta(minutes=start_before_begin)
end_dt = start_dt + timedelta(hours=hours)
if begin_dt.day == end_dt.day:
periods = [
{
"period":
RunningPeriod(
name="{}-period".format(name),
begintime=begin_dt.time(),
endtime=end_dt.time(),
monthdays={begin_dt.day},
months={begin_dt.month}
),
"instancetype": None
}
]
elif end_dt - begin_dt <= timedelta(hours=24):
periods = [
{
"period":
RunningPeriod(
name="{}-period-1".format(name),
begintime=begin_dt.time(),
endtime=SchedulerConfigBuilder.get_time_from_string("23:59"),
monthdays={begin_dt.day},
months={begin_dt.month}
),
"instancetype": None
},
{
"period":
RunningPeriod(
name="{}-period-2".format(name),
begintime=SchedulerConfigBuilder.get_time_from_string("00:00"),
endtime=end_dt.time(),
monthdays={end_dt.day},
months={end_dt.month}
),
"instancetype": None
}
]
else:
periods = [
{
"period":
RunningPeriod(
name="{}-period-1".format(name),
begintime=begin_dt.time(),
endtime=SchedulerConfigBuilder.get_time_from_string("23:59"),
monthdays={begin_dt.day},
months={begin_dt.month}
),
"instancetype": None
},
{
"period":
RunningPeriod(
name="{}-period-2".format(name),
monthdays={(end_dt - timedelta(days=1)).day},
months={(end_dt - timedelta(days=1)).month}
),
"instancetype": None
},
{
"period":
RunningPeriod(
name="{}-period-3".format(name),
begintime=SchedulerConfigBuilder.get_time_from_string("00:00"),
endtime=end_dt.time(),
monthdays={end_dt.day},
months={end_dt.month}
),
"instancetype": None
}
]
schedule = InstanceSchedule(name=name,
timezone=timezone,
description="{} maintenance window".format(name),
enforced=True,
periods=periods)
self._logger.info(INF_MAINT_WINDOW, name, begin_dt.isoformat(), end_dt.isoformat())
return schedule