in source/lambda/configuration/scheduler_config_builder.py [0:0]
def configuration_as_dict(config):
"""
This method build a dictionary from a configuration instance to be passed safely in the event of a lambda function
:param config:
:return:
"""
result = {}
for attr in [ATTR_TAGNAME,
ATTR_DEFAULT_TIMEZONE,
ATTR_TRACE,
ATTR_ENABLE_SSM_MAINTENANCE_WINDOWS,
ATTR_USE_METRICS,
ATTR_SCHEDULE_CLUSTERS,
ATTR_CREATE_RDS_SNAPSHOT,
ATTR_SCHEDULE_LAMBDA_ACCOUNT,
ATTR_STARTED_TAGS,
ATTR_STOPPED_TAGS]:
if attr in config.__dict__ and config.__dict__[attr] is not None:
result[attr] = config.__dict__[attr]
for attr in [ATTR_STARTED_TAGS,
ATTR_STOPPED_TAGS]:
if attr in config.__dict__ and config.__dict__[attr] is not None:
result[attr] = ",".join(["{}={}".format(t["Key"], t["Value"]) for t in config.__dict__[attr]])
for attr in [ATTR_REGIONS,
ATTR_CROSS_ACCOUNT_ROLES,
ATTR_SCHEDULED_SERVICES]:
if len(config.__dict__[attr]) > 0:
result[attr] = list(config.__dict__[attr])
result[ATTR_SCHEDULES] = {}
result[ATTR_PERIODS] = {}
for schedule_name in config.schedules:
result[ATTR_SCHEDULES][schedule_name] = {}
schedule = config.schedules[schedule_name]
for attr in [ATTR_NAME,
ATTR_TIMEZONE,
ATTR_OVERRIDE_STATUS,
ATTR_STOP_NEW_INSTANCES,
ATTR_USE_METRICS,
ATTR_ENFORCED,
ATTR_HIBERNATE,
ATTR_USE_MAINTENANCE_WINDOW,
ATTR_SSM_MAINTENANCE_WINDOW,
ATTR_RETAIN_RUNNING]:
if attr in schedule.__dict__ and schedule.__dict__[attr] is not None:
result[ATTR_SCHEDULES][schedule_name][attr] = schedule.__dict__[attr]
for attr in [ATTR_SCHEDULE_DT]:
dt = schedule.__dict__[attr]
if dt is not None:
result[ATTR_SCHEDULES][schedule.name][attr] = dt.isoformat()
if schedule.override_status is not None:
continue
result[ATTR_SCHEDULES][schedule_name][ATTR_PERIODS] = []
for p in schedule.periods:
period = p[ATTR_PERIOD]
instance_type = p[ATTR_INSTANCE_TYPE]
result[ATTR_SCHEDULES][schedule_name][ATTR_PERIODS].append(
period.name + (("{}{}".format(configuration.INSTANCE_TYPE_SEP, instance_type)) if instance_type else ""))
if period.name in result[ATTR_PERIODS]:
continue
result[ATTR_PERIODS][period.name] = {}
for attr in [ATTR_BEGINTIME,
ATTR_ENDTIME]:
tm = period.__dict__[attr]
if tm is not None:
result[ATTR_PERIODS][period.name][attr] = "{:0>2d}:{:0>2d}".format(tm.hour, tm.minute)
for attr in [ATTR_WEEKDAYS,
ATTR_MONTHDAYS,
ATTR_MONTHS]:
s = period.__dict__[attr]
if s is None:
continue
result[ATTR_PERIODS][period.name][attr] = list(s)
return result