in src/core/src/package_managers/YumPackageManager.py [0:0]
def backup_image_default_patch_configuration_if_not_exists(self):
""" Records the default system settings for auto OS updates within patch extension artifacts for future reference.
We only log the default system settings a VM comes with, any subsequent updates will not be recorded"""
""" JSON format for backup file:
{
"yum-cron": {
"apply_updates": "yes/no/empty string",
"download_updates": "yes/no/empty string",
"enable_on_reboot": true/false,
"installation_state": true/false
},
"dnf-automatic": {
"apply_updates": "yes/no/empty string",
"download_updates": "yes/no/empty string",
"enable_on_reboot": true/false,
"installation_state": true/false
},
"packagekit": {
"WritePreparedUpdates": "true/false/empty string",
"GetPreparedUpdates": "true/false/empty string", //NOTE: This property name is pending validation as noted in another comment where the name is initialized
"enable_on_reboot": true/false,
"installation_state": true/false
}
} """
try:
self.composite_logger.log_debug("[YPM] Ensuring there is a backup of the default patch state for [AutoOSUpdateService={0}]".format(str(self.current_auto_os_update_service)))
image_default_patch_configuration_backup = self.__get_image_default_patch_configuration_backup()
# verify if existing backup is valid if not, write to backup
is_backup_valid = self.is_image_default_patch_configuration_backup_valid(image_default_patch_configuration_backup)
if is_backup_valid:
self.composite_logger.log_debug("[YPM] Since extension has a valid backup, no need to log the current settings again. [Default Auto OS update settings={0}] [File path={1}]"
.format(str(image_default_patch_configuration_backup), self.image_default_patch_configuration_backup_path))
else:
self.composite_logger.log_debug("[YPM] Since the backup is invalid, will add a new backup with the current auto OS update settings")
self.composite_logger.log_debug("[YPM] Fetching current auto OS update settings for [AutoOSUpdateService={0}]".format(str(self.current_auto_os_update_service)))
is_service_installed, enable_on_reboot_value, download_updates_value, apply_updates_value = self.__get_current_auto_os_updates_setting_on_machine()
backup_image_default_patch_configuration_json_to_add = {
self.current_auto_os_update_service: {
self.download_updates_identifier_text: download_updates_value,
self.apply_updates_identifier_text: apply_updates_value,
self.enable_on_reboot_identifier_text: enable_on_reboot_value,
self.installation_state_identifier_text: is_service_installed
}
}
image_default_patch_configuration_backup.update(backup_image_default_patch_configuration_json_to_add)
self.composite_logger.log_debug("[YPM] Logging default system configuration settings for auto OS updates. [Settings={0}] [Log file path={1}]"
.format(str(image_default_patch_configuration_backup), self.image_default_patch_configuration_backup_path))
self.env_layer.file_system.write_with_retry(self.image_default_patch_configuration_backup_path, '{0}'.format(json.dumps(image_default_patch_configuration_backup)), mode='w+')
except Exception as error:
error_message = "[YPM] Exception during fetching and logging default auto update settings on the machine. [Exception={0}]".format(repr(error))
self.composite_logger.log_error(error_message)
self.status_handler.add_error_to_status(error_message, Constants.PatchOperationErrorCodes.DEFAULT_ERROR)
raise