in src/core/src/core_logic/ExecutionConfig.py [0:0]
def __init__(self, env_layer, composite_logger, execution_parameters):
self.env_layer = env_layer
self.composite_logger = composite_logger
self.execution_parameters = eval(execution_parameters)
# Environment details
self.global_exclusion_list = str(Constants.GLOBAL_EXCLUSION_LIST) if Constants.GLOBAL_EXCLUSION_LIST else None
# Decoded input parameters
self.composite_logger.log_debug(" - Decoding input parameters...[InputParameters={0}]".format(str(execution_parameters)))
self.sequence_number = self.__get_value_from_argv(self.execution_parameters, Constants.ARG_SEQUENCE_NUMBER)
self.environment_settings = self.__get_decoded_json_from_argv(self.execution_parameters, Constants.ARG_ENVIRONMENT_SETTINGS)
self.config_settings = self.__get_decoded_json_from_argv(self.execution_parameters, Constants.ARG_CONFIG_SETTINGS)
self.exec_auto_assess_only = (self.__get_value_from_argv(self.execution_parameters, Constants.ARG_AUTO_ASSESS_ONLY, False)).lower() == 'true'
# Environment Settings
self.composite_logger.log_debug(" - Parsing environment settings...")
self.log_folder = self.environment_settings[Constants.EnvSettings.LOG_FOLDER]
self.config_folder = self.environment_settings[Constants.EnvSettings.CONFIG_FOLDER]
self.status_folder = self.environment_settings[Constants.EnvSettings.STATUS_FOLDER]
self.events_folder = self.environment_settings[Constants.EnvSettings.EVENTS_FOLDER]
self.temp_folder = self.environment_settings[Constants.EnvSettings.TEMP_FOLDER]
self.__check_and_create_temp_folder_if_not_exists()
self.telemetry_supported = self.environment_settings[Constants.EnvSettings.TELEMETRY_SUPPORTED]
# Config Settings
self.composite_logger.log_debug(" - Parsing configuration settings... [ConfigSettings={0}]".format(str(self.config_settings)))
self.operation = self.config_settings[Constants.ConfigSettings.OPERATION]
self.activity_id = self.config_settings[Constants.ConfigSettings.ACTIVITY_ID]
self.start_time = self.config_settings[Constants.ConfigSettings.START_TIME]
self.duration = self.__convert_iso8601_duration_to_timedelta_str(self.config_settings[Constants.ConfigSettings.MAXIMUM_DURATION])
self.included_classifications_list = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.CLASSIFICATIONS_TO_INCLUDE, [])
self.included_package_name_mask_list = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.PATCHES_TO_INCLUDE, [])
self.excluded_package_name_mask_list = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.PATCHES_TO_EXCLUDE, [])
self.maintenance_run_id = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.MAINTENANCE_RUN_ID)
self.max_patch_publish_date = self.__get_max_patch_publish_date_from_inclusions(self.included_package_name_mask_list) # supersedes in a mitigation scenario
self.health_store_id = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.HEALTH_STORE_ID) if self.max_patch_publish_date == str() else str()
self.max_patch_publish_date = self.__get_max_patch_publish_date(self.health_store_id) if self.max_patch_publish_date == str() else self.max_patch_publish_date
if self.operation == Constants.INSTALLATION:
self.reboot_setting = self.config_settings[Constants.ConfigSettings.REBOOT_SETTING] # expected to throw if not present
else:
self.reboot_setting = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.REBOOT_SETTING, Constants.REBOOT_NEVER) # safe extension-level default
self.patch_mode = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.PATCH_MODE)
self.assessment_mode = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.ASSESSMENT_MODE)
self.maximum_assessment_interval = self.__get_execution_configuration_value_safely(self.config_settings, Constants.ConfigSettings.MAXIMUM_ASSESSMENT_INTERVAL)
# Accommodation for bugs in higher-level components where 'Security' is being selected without selecting 'Critical' - should be rolled back no later than Jan 2022
if self.included_classifications_list is not None and ('Security' in self.included_classifications_list and 'Critical' not in self.included_classifications_list):
self.composite_logger.log_debug("The included_classifications_list was corrected to include 'Critical' when 'Security' was specified.")
self.included_classifications_list = ['Critical'] + self.included_classifications_list
# Derived Settings
self.log_file_path = os.path.join(self.log_folder, str(self.sequence_number) + ".core.log")
self.complete_status_file_path = os.path.join(self.status_folder, str(self.sequence_number) + ".complete" + ".status")
self.status_file_path = os.path.join(self.status_folder, str(self.sequence_number) + ".status")
self.include_assessment_with_configure_patching = (self.operation == Constants.CONFIGURE_PATCHING and self.assessment_mode == Constants.AssessmentModes.AUTOMATIC_BY_PLATFORM)
self.composite_logger.log_debug(" - Derived execution-config settings. [CoreLog={0}][CompleteStatusFile={1}][StatusFile={2}][IncludeAssessmentWithConfigurePatching={3}]"
.format(str(self.log_file_path), str(self.complete_status_file_path), str(self.status_file_path), self.include_assessment_with_configure_patching))
# Auto assessment overrides
if self.exec_auto_assess_only:
self.__transform_execution_config_for_auto_assessment()
else:
self.composite_logger.log_debug("Not executing in auto-assessment mode.")
# EULA config
self.accept_package_eula = self.__is_eula_accepted_for_all_patches()