in OSPatching/patch/AbstractPatching.py [0:0]
def parse_settings(self, settings):
disabled = settings.get("disabled")
if disabled is None or str(disabled).lower() not in ConfigOptions.disabled:
msg = "The value of parameter \"disabled\" is empty or invalid. Set it False by default."
self.log_and_syslog(logging.WARNING, msg)
self.disabled = False
else:
if str(disabled).lower() == "true":
self.disabled = True
else:
self.disabled = False
self.current_configs["disabled"] = str(self.disabled)
if self.disabled:
msg = "The extension is disabled."
self.log_and_syslog(logging.WARNING, msg)
return
stop = settings.get("stop")
if stop is None or str(stop).lower() not in ConfigOptions.stop:
msg = "The value of parameter \"stop\" is empty or invalid. Set it False by default."
self.log_and_syslog(logging.WARNING, msg)
self.stop = False
else:
if str(stop).lower() == 'true':
self.stop = True
else:
self.stop = False
self.current_configs["stop"] = str(self.stop)
reboot_after_patch = settings.get("rebootAfterPatch")
if reboot_after_patch is None or reboot_after_patch.lower() not in ConfigOptions.reboot_after_patch:
msg = "The value of parameter \"rebootAfterPatch\" is empty or invalid. Set it \"rebootifneed\" by default."
self.log_and_syslog(logging.WARNING, msg)
self.reboot_after_patch = ConfigOptions.reboot_after_patch[0]
else:
self.reboot_after_patch = reboot_after_patch.lower()
waagent.AddExtensionEvent(name=self.hutil.get_name(),
op=waagent.WALAEventOperation.Enable,
isSuccess=True,
version=Version,
message="rebootAfterPatch="+self.reboot_after_patch)
self.current_configs["rebootAfterPatch"] = self.reboot_after_patch
category = settings.get('category')
if category is None or category.lower() not in ConfigOptions.category.values():
msg = "The value of parameter \"category\" is empty or invalid. Set it " + self.category_required + " by default."
self.log_and_syslog(logging.WARNING, msg)
self.category = self.category_required
else:
self.category = category.lower()
waagent.AddExtensionEvent(name=self.hutil.get_name(),
op=waagent.WALAEventOperation.Enable,
isSuccess=True,
version=Version,
message="category="+self.category)
self.current_configs["category"] = self.category
self.dist_upgrade_list = settings.get(self.dist_upgrade_list_key)
if not self.is_string_none_or_empty(self.dist_upgrade_list):
self.current_configs[self.dist_upgrade_list_key] = self.dist_upgrade_list
dist_upgrade_all = settings.get(self.dist_upgrade_all_key)
if dist_upgrade_all is None:
msg = "The value of parameter \"{0}\" is empty or invalid. Set it false by default.".format(self.dist_upgrade_all_key)
self.log_and_syslog(logging.INFO, msg)
self.dist_upgrade_all = False
elif str(dist_upgrade_all).lower() == 'true':
self.dist_upgrade_all = True
else:
self.dist_upgrade_all = False
self.current_configs[self.dist_upgrade_all_key] = str(self.dist_upgrade_all)
check_hrmin = re.compile(r'^[0-9]{1,2}:[0-9]{1,2}$')
install_duration = settings.get('installDuration')
if install_duration is None or not re.match(check_hrmin, install_duration):
msg = "The value of parameter \"installDuration\" is empty or invalid. Set it 1 hour by default."
self.log_and_syslog(logging.WARNING, msg)
self.install_duration = 3600
self.current_configs["installDuration"] = "01:00"
else:
hr_min = install_duration.split(':')
self.install_duration = int(hr_min[0]) * 3600 + int(hr_min[1]) * 60
self.current_configs["installDuration"] = install_duration
if self.install_duration <= 300:
msg = "The value of parameter \"installDuration\" is smaller than 5 minutes. The extension will not reserve 5 minutes for reboot. It is recommended to set \"installDuration\" more than 30 minutes."
self.log_and_syslog(logging.WARNING, msg)
else:
msg = "The extension will reserve 5 minutes for reboot."
# 5 min for reboot
self.install_duration -= 300
self.log_and_syslog(logging.INFO, msg)
# The parameter "downloadDuration" is not exposed to users. So there's no log.
download_duration = settings.get('downloadDuration')
if download_duration is not None and re.match(check_hrmin, download_duration):
hr_min = download_duration.split(':')
self.download_duration = int(hr_min[0]) * 3600 + int(hr_min[1]) * 60
oneoff = settings.get('oneoff')
if oneoff is None or str(oneoff).lower() not in ConfigOptions.oneoff:
msg = "The value of parameter \"oneoff\" is empty or invalid. Set it False by default."
self.log_and_syslog(logging.WARNING, msg)
self.oneoff = False
else:
if str(oneoff).lower() == "true":
self.oneoff = True
msg = "The extension will run in one-off mode."
else:
self.oneoff = False
msg = "The extension will run in scheduled task mode."
self.log_and_syslog(logging.INFO, msg)
self.current_configs["oneoff"] = str(self.oneoff)
if not self.oneoff:
start_time = settings.get('startTime')
if start_time is None or not re.match(check_hrmin, start_time):
msg = "The parameter \"startTime\" is empty or invalid. It defaults to 03:00."
self.log_and_syslog(logging.WARNING, msg)
start_time = "03:00"
try:
start_time_dt = datetime.datetime.strptime(start_time, '%H:%M')
self.start_time = datetime.time(start_time_dt.hour, start_time_dt.minute)
except ValueError:
msg = "The parameter \"startTime\" is invalid. It defaults to 03:00."
self.log_and_syslog(logging.WARNING, msg)
self.start_time = datetime.time(3)
download_time_dt = start_time_dt - datetime.timedelta(seconds=self.download_duration)
self.download_time = datetime.time(download_time_dt.hour, download_time_dt.minute)
self.current_configs["startTime"] = start_time
day_of_week = settings.get("dayOfWeek")
if day_of_week is None or day_of_week == "":
msg = "The parameter \"dayOfWeek\" is empty. dayOfWeek defaults to Everyday."
self.log_and_syslog(logging.WARNING, msg)
day_of_week = "everyday"
self.day_of_week = ConfigOptions.day_of_week["everyday"]
else:
for day in day_of_week.split('|'):
day = day.strip().lower()
if day not in ConfigOptions.day_of_week:
msg = "The parameter \"dayOfWeek\" is invalid. dayOfWeek defaults to Everyday."
self.log_and_syslog(logging.WARNING, msg)
day_of_week = "everyday"
break
if "everyday" in day_of_week:
self.day_of_week = ConfigOptions.day_of_week["everyday"]
else:
self.day_of_week = [ConfigOptions.day_of_week[day.strip().lower()] for day in day_of_week.split('|')]
waagent.AddExtensionEvent(name=self.hutil.get_name(),
op=waagent.WALAEventOperation.Enable,
isSuccess=True,
version=Version,
message="dayOfWeek=" + day_of_week)
self.current_configs["dayOfWeek"] = day_of_week
interval_of_weeks = settings.get('intervalOfWeeks')
if interval_of_weeks is None or interval_of_weeks not in ConfigOptions.interval_of_weeks:
msg = "The parameter \"intervalOfWeeks\" is empty or invalid. intervalOfWeeks defaults to 1."
self.log_and_syslog(logging.WARNING, msg)
self.interval_of_weeks = '1'
else:
self.interval_of_weeks = interval_of_weeks
waagent.AddExtensionEvent(name=self.hutil.get_name(),
op=waagent.WALAEventOperation.Enable,
isSuccess=True,
version=Version,
message="intervalOfWeeks="+self.interval_of_weeks)
self.current_configs["intervalOfWeeks"] = self.interval_of_weeks
# Save the latest configuration for scheduled task to avoid one-off mode's affection
waagent.SetFileContents(self.scheduled_configs_file, json.dumps(self.current_configs))
msg = "Current Configuration: " + self.get_current_config()
self.log_and_syslog(logging.INFO, msg)