Skip to content

Commit 5aadd98

Browse files
authored
keep telemetry stack during upgrade (#1530)
1 parent 28926d2 commit 5aadd98

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

platform/services/installer/app/commands/upgrade.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from platform_stages.steps.install_system_packages import install_system_packages
5353
from platform_stages.upgrade import upgrade_platform
5454
from platform_utils.grafana import flush_ingesters as flush_lgtm_stack
55+
from platform_utils.k8s import check_if_telemetry_stack_is_installed
5556
from platform_utils.management.data_folder import backup_data_folder, restore_data_folder
5657
from platform_utils.management.management import restore_platform, stop_platform
5758
from platform_utils.management.state import (
@@ -499,6 +500,10 @@ def upgrade(config_file: str | None = None, install_telemetry_stack: bool = Fals
499500
create_logs_dir()
500501
configure_logging()
501502
logger.info(f"{get_target_product_build()} {UpgradeCmdTexts.start_message}")
503+
504+
if not install_telemetry_stack:
505+
install_telemetry_stack = check_if_telemetry_stack_is_installed()
506+
502507
config = UpgradeConfig(interactive_mode=not bool(config_file), install_telemetry_stack=install_telemetry_stack)
503508
run_initial_checks(config)
504509
if config_file:

platform/services/installer/app/constants/platform.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@
2626
GPU_PROVIDER_INTEL_ARC_A = "intel-arc-a"
2727

2828
DEFAULT_HISTORY_MAX = 3
29+
30+
TELEMETRY_STACK_COMPONENT = "observability"

platform/services/installer/app/platform_utils/k8s.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed
2121

2222
from constants.paths import K3S_KUBECONFIG_PATH
23+
from constants.platform import PLATFORM_NAMESPACE, TELEMETRY_STACK_COMPONENT
2324
from platform_stages.steps.errors import FailedJobError, RestartDeploymentError
2425
from platform_utils.kube_config_handler import KubernetesConfigHandler
2526

@@ -257,3 +258,25 @@ def delete_job(batch_api: BatchV1Api, namespace: str, job_name: str) -> None:
257258
except client.exceptions.ApiException as ex:
258259
logger.error(f"Failed to delete job '{job_name}': {ex}")
259260
return
261+
262+
263+
def check_if_telemetry_stack_is_installed() -> bool:
264+
"""
265+
Check if telemetry stack is installed by verifying the existence of its deployment.
266+
"""
267+
return _deployment_exists(name=TELEMETRY_STACK_COMPONENT, namespace=PLATFORM_NAMESPACE)
268+
269+
270+
def _deployment_exists(name: str, namespace: str) -> bool:
271+
"""
272+
Check if a deployment with the given name exists in the specified namespace.
273+
"""
274+
KubernetesConfigHandler(kube_config=K3S_KUBECONFIG_PATH)
275+
api = client.AppsV1Api()
276+
try:
277+
api.read_namespaced_deployment(name=name, namespace=namespace)
278+
return True
279+
except ApiException as ex:
280+
if ex.status == 404:
281+
return False
282+
raise

platform/services/installer/tests/unit/commands/test_upgrade_command.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ def test_upgrade_interactive(mocker):
3737
prompt_for_upgrade_config_mock: Mock = mocker.patch("commands.upgrade.prompt_for_upgrade_config")
3838
display_final_confirmation_mock: Mock = mocker.patch("commands.upgrade.display_final_confirmation")
3939
create_logs_dir_mock: Mock = mocker.patch("commands.upgrade.create_logs_dir")
40+
check_if_telemetry_stack_is_installed_mock: Mock = mocker.patch(
41+
"commands.upgrade.check_if_telemetry_stack_is_installed"
42+
)
43+
check_if_telemetry_stack_is_installed_mock.return_value = False
4044
is_kubernetes_running_on_k3s: Mock = mocker.patch("commands.upgrade.is_kubernetes_running_on_k3s")
4145
is_kubernetes_running_on_k3s.return_value = True
4246

@@ -48,6 +52,7 @@ def test_upgrade_interactive(mocker):
4852
assert execute_upgrade_mock.call_count == 1
4953
assert display_final_confirmation_mock.call_count == 1
5054
assert not result.exception
55+
assert check_if_telemetry_stack_is_installed_mock.call_count == 1
5156
create_logs_dir_mock.assert_called_once_with()
5257

5358

@@ -65,6 +70,9 @@ def test_upgrade_config_file(mocker, tmpdir, is_grafana_installed):
6570
create_logs_dir_mock: Mock = mocker.patch("commands.upgrade.create_logs_dir")
6671
is_kubernetes_running_on_k3s: Mock = mocker.patch("commands.upgrade.is_kubernetes_running_on_k3s")
6772
is_kubernetes_running_on_k3s.return_value = True
73+
check_if_telemetry_stack_is_installed_mock: Mock = mocker.patch(
74+
"commands.upgrade.check_if_telemetry_stack_is_installed", side_effect=[is_grafana_installed]
75+
)
6876

6977
kubeconfig_path = tmpdir.join("kubeconfig")
7078
kubeconfig_path.write("foo")
@@ -81,6 +89,7 @@ def test_upgrade_config_file(mocker, tmpdir, is_grafana_installed):
8189

8290
run_initial_checks_mock.assert_called_once()
8391
run_upgrade_checks_mock.assert_called_once()
92+
check_if_telemetry_stack_is_installed_mock.assert_called_once()
8493
is_grafana_installed_mock.assert_called_once_with(str(kubeconfig_path))
8594
create_logs_dir_mock.assert_called_once_with()
8695
assert execute_upgrade_mock.call_count == 1
@@ -91,12 +100,16 @@ def test_initial_check_failure(mocker):
91100
run_initial_checks_mock: Mock = mocker.patch(
92101
"commands.upgrade.run_initial_checks", side_effect=CumulativeCheckError
93102
)
103+
check_if_telemetry_stack_is_installed_mock: Mock = mocker.patch(
104+
"commands.upgrade.check_if_telemetry_stack_is_installed", side_effect=[False]
105+
)
94106

95107
runner = CliRunner()
96108
result = runner.invoke(upgrade)
97109

98110
assert result.exception
99111
run_initial_checks_mock.assert_called_once()
112+
check_if_telemetry_stack_is_installed_mock.assert_called_once()
100113

101114

102115
def test_upgrade_check_failure(mocker):
@@ -109,13 +122,18 @@ def test_upgrade_check_failure(mocker):
109122
is_kubernetes_running_on_k3s: Mock = mocker.patch("commands.upgrade.is_kubernetes_running_on_k3s")
110123
is_kubernetes_running_on_k3s.return_value = True
111124

125+
check_if_telemetry_stack_is_installed_mock: Mock = mocker.patch(
126+
"commands.upgrade.check_if_telemetry_stack_is_installed", side_effect=[True]
127+
)
128+
112129
runner = CliRunner()
113130
result = runner.invoke(upgrade)
114131

115132
run_initial_checks_mock.assert_called_once()
116133
run_upgrade_checks_mock.assert_called_once()
117134
create_logs_dir_mock.assert_called_once_with()
118135
prompt_for_upgrade_config_mock.assert_called_once()
136+
check_if_telemetry_stack_is_installed_mock.assert_called_once()
119137
assert execute_upgrade_mock.call_count == 0
120138
assert is_grafana_installed_mock.call_count == 0
121139
assert result.exception
@@ -128,6 +146,9 @@ def test_upgrade_execution_failure(mocker):
128146
prompt_for_upgrade_config_mock: Mock = mocker.patch("commands.upgrade.prompt_for_upgrade_config")
129147
display_final_confirmation_mock: Mock = mocker.patch("commands.upgrade.display_final_confirmation")
130148
create_logs_dir_mock: Mock = mocker.patch("commands.upgrade.create_logs_dir")
149+
check_if_telemetry_stack_is_installed_mock: Mock = mocker.patch(
150+
"commands.upgrade.check_if_telemetry_stack_is_installed", side_effect=[True]
151+
)
131152
is_kubernetes_running_on_k3s: Mock = mocker.patch("commands.upgrade.is_kubernetes_running_on_k3s")
132153
is_kubernetes_running_on_k3s.return_value = True
133154

@@ -137,6 +158,7 @@ def test_upgrade_execution_failure(mocker):
137158
run_initial_checks_mock.assert_called_once()
138159
run_upgrade_checks_mock.assert_called_once()
139160
create_logs_dir_mock.assert_called_once_with()
161+
check_if_telemetry_stack_is_installed_mock.assert_called_once()
140162
assert prompt_for_upgrade_config_mock.call_count == 1
141163
assert execute_upgrade_mock.call_count == 1
142164
assert display_final_confirmation_mock.call_count == 1

0 commit comments

Comments
 (0)