You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
5.8 KiB

# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved.
import sys
from splunk.clilib.bundle_paths import make_splunkhome_path
import splunk.rest as rest
sys.path.append(make_splunkhome_path(['etc', 'apps', 'SA-ITOA', 'lib']))
sys.path.append(make_splunkhome_path(['etc', 'apps', 'SA-ITOA', 'lib', 'SA_ITOA_app_common']))
import itsi_path
from itsi_py3 import _
from ITOA.itoa_common import modular_input_should_run, is_feature_enabled
from itsi.itsi_version_compare import VersionComparison
from itsi.itsi_utils import ITOAInterfaceUtils
from itsi.upgrade.rename_re_log_files import RenameRELogFiles
# make sure itsi_migration_log is first in order, to setup global logger
from itsi.upgrade.java_file_fixer import JavaFileFixer
from itsi.itoa_rest_interface_provider.itoa_rest_interface_provider import ItoaInterfaceProvider
from SA_ITOA_app_common.solnlib.modular_input import ModularInput
from ITOA.setup_logging import getLogger4ModInput
from ITOA.mod_input_utils import skip_run_during_migration
from itsi.upgrade.constants import NEW_VERSION
class ConfigureITSI(ModularInput):
"""
Just a basic modular input responsible for configuring ITSI.
Here are just one of the many amazing things it does
- Import entities from the conf file system into the statestore
"""
title = _("IT Service Intelligence Configurator") # noqa
description = _("Configures IT Service Intelligence") # noqa
handlers = None # noqa
app = 'SA-ITOA' # noqa
name = 'configure_itsi' # noqa
use_single_instance = False # noqa
use_kvstore_checkpointer = False
use_hec_event_writer = False # noqa
def __init__(self):
# Since logger is used before do_run is called, initialize logger first:
super (ConfigureITSI, self).__init__()
def extra_arguments(self):
return [
{
'name' : "log_level",
'title' : _("Logging Level"),
'description' : _("This is the level at which the modular input will log data.")
},
{
'name' : "is_configured",
'title' : _("Configuration flag"),
'description' : _("Old configuration")
}
]
@skip_run_during_migration
def do_run(self, input_config):
"""
First part, we need to find the ITSI stanzas, and then move them into the statestore
The stanzas are just organized by type (entity, kpi, service) etc. We are just going
to do a 1:1 import into the statestore
"""
logger = getLogger4ModInput(input_config)
# log the message for restartless upgrade testing which can be useful while debugging.
stanza_name = next(iter(input_config.keys()))
logger.info(f"Restartless upgrade - Reloaded modular input {stanza_name}")
# rename the rules engine log files
try:
rename_re_log_files = RenameRELogFiles(self.session_key, logger=logger)
rename_re_log_files.run()
except Exception:
logger.exception('Failed to rename Rules Engine log file(s) on the search head.')
try:
java_fixer = JavaFileFixer(self.session_key, logger=logger)
java_fixer.run()
except Exception:
logger.exception('Failed to run the Java archive file fixer on the search head.')
if not modular_input_should_run(self.session_key, logger=logger):
logger.info("Modular input will not run on this node.")
return
version_compare = VersionComparison()
should_migrate = version_compare.should_render_migration_page(self.session_key)
# if migrate, configure itsi along with migration process(upgrade/itsi_migration.py)
if should_migrate:
logger.info((
'Migration pending. Exiting configure ITSI modular input as configuration'
'will be handled by the migration process at the end'
))
return
# if not migrate, configure itsi with modular input
ITOAInterfaceUtils.configure_version(self.session_key)
ITOAInterfaceUtils.configure_team(self.session_key)
ITOAInterfaceUtils.configure_itsi(self.session_key, logger)
if is_feature_enabled('itsi-bulk-delete-retired-entities', self.session_key):
ItoaInterfaceProvider.get_and_post_itsi_retired_entity_delete_status(self.session_key,
'nobody',
'entity',
is_restart=True)
ITOAInterfaceUtils.configure_in_operator_support(self.session_key)
# By default there should not be any enabled real time saved search
# To resolve the https://splunk.atlassian.net/browse/ITSI-20861 app-inspect failure
# itsi_event_grouping saved search is enabled if there is not entry in local conf
# do not enable if high-scale-ea is enabled
is_high_scale_ea_enabled = is_feature_enabled('itsi-high-scale-ea', self.session_key)
if not is_high_scale_ea_enabled:
ITOAInterfaceUtils.enable_itsi_event_grouping(self.session_key, logger)
# The below function needs to be added in itsi_migration.py as well
# This code is not executed during ITSI upgrade scenario as function returns from should_migrate check
# Added function here for fresh installation of ITSI
ITOAInterfaceUtils.update_itsi_cp_saved_searches_collection(self.session_key, logger)
if __name__ == "__main__":
worker = ConfigureITSI()
worker.execute()
sys.exit(0)