diff --git a/gso/workflows/router/redeploy_base_config.py b/gso/workflows/router/redeploy_base_config.py index 11c4264dc754f2e7289241a2324ba7b00dabf2c7..a7c7dd81effbed681b3e92e2ec79f93566e62d97 100644 --- a/gso/workflows/router/redeploy_base_config.py +++ b/gso/workflows/router/redeploy_base_config.py @@ -11,7 +11,7 @@ run. After confirmation by an operator, the configuration is committed to the ma from orchestrator.forms import SubmitFormPage from orchestrator.forms.validators import Label from orchestrator.targets import Target -from orchestrator.workflow import StepList, begin, done, workflow +from orchestrator.workflow import StepList, begin, conditional, done, workflow from orchestrator.workflows.steps import resync, store_process_subscription, unsync from orchestrator.workflows.utils import wrap_modify_initial_input_form from pydantic_forms.types import FormGenerator, UUIDstr @@ -28,6 +28,7 @@ def _initial_input_form(subscription_id: UUIDstr) -> FormGenerator: class RedeployBaseConfigForm(SubmitFormPage): info_label: Label = f"Redeploy base config on {router.router.router_fqdn}?" tt_number: TTNumber + is_massive_redeploy: bool = False user_input = yield RedeployBaseConfigForm @@ -45,11 +46,13 @@ def redeploy_base_config() -> StepList: * Perform a dry run of deployment * Redeploy base config """ + is_not_massive_redeploy = conditional(lambda state: not bool(state.get("is_massive_redeploy"))) + return ( begin >> store_process_subscription(Target.MODIFY) >> unsync - >> lso_interaction(deploy_base_config_dry) + >> is_not_massive_redeploy(lso_interaction(deploy_base_config_dry)) >> lso_interaction(deploy_base_config_real) >> resync >> done diff --git a/gso/workflows/tasks/redeploy_base_config.py b/gso/workflows/tasks/redeploy_base_config.py index f4e1fca9d0dd0671f3d070fab297654f01d8f1ed..2db1e5a74849d5b7039ab847cb387c55a2599a35 100644 --- a/gso/workflows/tasks/redeploy_base_config.py +++ b/gso/workflows/tasks/redeploy_base_config.py @@ -57,7 +57,9 @@ def start_redeploy_workflows(tt_number: TTNumber, selected_routers: list[UUIDstr for selected_router in selected_routers: try: result = requests.post( - workflow_url, json=[{"subscription_id": selected_router}, {"tt_number": tt_number}], timeout=10 + workflow_url, + json=[{"subscription_id": selected_router}, {"tt_number": tt_number, "is_massive_redeploy": True}], + timeout=10, ) result.raise_for_status() except HTTPError as e: diff --git a/test/workflows/router/test_redeploy_base_config.py b/test/workflows/router/test_redeploy_base_config.py index 4dee5a5e9d18ed93cc08812f85f256db5174688c..3f07c79a24dd8d3d6446fbfd09a0962f5c1b87c2 100644 --- a/test/workflows/router/test_redeploy_base_config.py +++ b/test/workflows/router/test_redeploy_base_config.py @@ -10,7 +10,9 @@ from test.workflows import ( @pytest.mark.workflow() +@pytest.mark.parametrize("is_massive_redeploy", [False, True]) def test_redeploy_base_config_success( + is_massive_redeploy, router_subscription_factory, faker, ): @@ -18,10 +20,12 @@ def test_redeploy_base_config_success( product_id = str(router_subscription_factory().subscription_id) # Run workflow - initial_input_data = [{"subscription_id": product_id}, {"tt_number": faker.tt_number()}] + initial_input_data = [ + {"subscription_id": product_id}, + {"tt_number": faker.tt_number(), "is_massive_redeploy": is_massive_redeploy}, + ] result, process_stat, step_log = run_workflow("redeploy_base_config", initial_input_data) - - for _ in range(2): + for _ in range(1 if is_massive_redeploy else 2): result, step_log = assert_lso_interaction_success(result, process_stat, step_log) assert_complete(result)