diff --git a/Dockerfile b/Dockerfile index ae2cef11c97fc74549c336fb78f7d1a820b0f646..e1ddb1551bb3ec3a90039a4ac7746dab17db30c5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,7 @@ RUN pip install \ geant-service-orchestrator==${ARTIFACT_VERSION} # Create the directory for the configuration and copy the example config into it -# NOTE: a real config must be mounted at -# /etc/gso/config.json when running the container +# NOTE: a real config must be mounted at /etc/gso/config.json when running the container RUN mkdir -p /etc/gso COPY gso/oss-params-example.json /etc/gso/config.json diff --git a/gso/services/provisioning_proxy.py b/gso/services/provisioning_proxy.py index 6bd5bd10ef5b777cd77454f665478b4309a5ba80..7ce76ac9f562a058751c62b743c1a1148eb92544 100644 --- a/gso/services/provisioning_proxy.py +++ b/gso/services/provisioning_proxy.py @@ -14,7 +14,7 @@ from orchestrator.forms import FormPage, ReadOnlyField from orchestrator.forms.validators import Accept, Label, LongText from orchestrator.types import FormGenerator, State, UUIDstr, strEnum from orchestrator.utils.json import json_dumps -from orchestrator.workflow import Step, StepList, abort +from orchestrator.workflow import Step, StepList, abort, init from pydantic import validator from gso import settings @@ -340,7 +340,7 @@ def pp_interaction(provisioning_step: Step, attempts: int, abort_on_failure: boo """ should_retry_pp_steps = conditional(lambda state: not state.get("pp_did_succeed")) - pp_steps = StepList([_reset_pp_success_state]) + pp_steps = init >> _reset_pp_success_state for _ in range(attempts): pp_steps >>= ( diff --git a/gso/workflows/iptrunk/migrate_iptrunk.py b/gso/workflows/iptrunk/migrate_iptrunk.py index 948e9070e5475532054391f95b4c0ec5edcd7676..8b9fc6b4f2ec02a7cb1846efabc7caaa64cda085 100644 --- a/gso/workflows/iptrunk/migrate_iptrunk.py +++ b/gso/workflows/iptrunk/migrate_iptrunk.py @@ -18,6 +18,7 @@ from gso.products.product_types.iptrunk import Iptrunk from gso.products.product_types.router import Router from gso.services import provisioning_proxy from gso.services.provisioning_proxy import pp_interaction +from gso.workflows.iptrunk.utils import set_isis_to_90000 logger = getLogger(__name__) @@ -115,19 +116,6 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: return old_side_input.dict() | new_side_input.dict() | {"replace_index": replace_index} -@step("[COMMIT] Set ISIS metric to 90000") -def set_isis_to_9000(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State: - old_isis_metric = subscription.iptrunk.iptrunk_isis_metric - subscription.iptrunk.iptrunk_isis_metric = 90000 - provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface", False) - - return { - "subscription": subscription, - "old_isis_metric": old_isis_metric, - "label_text": "ISIS is being set to 90K by the provisioning proxy, please wait for the results", - } - - @step("[DRY RUN] Disable configuration on old router") def disable_old_config_dry( subscription: Iptrunk, @@ -425,15 +413,13 @@ def migrate_iptrunk() -> StepList: init >> store_process_subscription(Target.MODIFY) >> unsync - >> pp_interaction(set_isis_to_9000, 3) + >> pp_interaction(set_isis_to_90000, 3) >> pp_interaction(disable_old_config_dry, 3) >> pp_interaction(disable_old_config_real, 3) >> pp_interaction(deploy_new_config_dry, 3) >> pp_interaction(deploy_new_config_real, 3) >> confirm_continue_move_fiber - # >> pp_interaction(run_interface_checks, 3, False) >> pp_interaction(deploy_new_isis, 3) - # >> pp_interaction(check_isis, 3, False) >> confirm_continue_restore_isis >> pp_interaction(restore_isis_metric, 3) >> pp_interaction(delete_old_config_dry, 3) diff --git a/gso/workflows/iptrunk/terminate_iptrunk.py b/gso/workflows/iptrunk/terminate_iptrunk.py index 88e72e41b5097c76345d9439b5b1661c81563f89..8ee23423c18395fe21eac186f301aebcb921a6c5 100644 --- a/gso/workflows/iptrunk/terminate_iptrunk.py +++ b/gso/workflows/iptrunk/terminate_iptrunk.py @@ -11,6 +11,7 @@ from orchestrator.workflows.utils import wrap_modify_initial_input_form from gso.products.product_types.iptrunk import Iptrunk from gso.services import infoblox, provisioning_proxy from gso.services.provisioning_proxy import pp_interaction +from gso.workflows.iptrunk.utils import set_isis_to_90000 def initial_input_form_generator() -> FormGenerator: @@ -27,19 +28,6 @@ def initial_input_form_generator() -> FormGenerator: return user_input.dict() -@step("[COMMIT] Set ISIS metric to 90000") -def set_isis_to_9000(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State: - old_isis_metric = subscription.iptrunk.iptrunk_isis_metric - subscription.iptrunk.iptrunk_isis_metric = 90000 - provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface", False) - - return { - "subscription": subscription, - "old_isis_metric": old_isis_metric, - "label_text": "ISIS is being set to 90K by the provisioning proxy, please wait for the results", - } - - @step("Drain traffic from trunk") def drain_traffic_from_ip_trunk(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State: provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface", False) @@ -94,13 +82,12 @@ def terminate_iptrunk() -> StepList: run_ipam_steps = conditional(lambda state: state["clean_up_ipam"]) config_steps = ( - # StepList([set_isis_to_9000]) - StepList() - >> pp_interaction(set_isis_to_9000, 3) + init + >> pp_interaction(set_isis_to_90000, 3) >> pp_interaction(deprovision_ip_trunk_dry, 3) >> pp_interaction(deprovision_ip_trunk_real, 3) ) - ipam_steps = StepList([deprovision_ip_trunk_ipv4, deprovision_ip_trunk_ipv6]) + ipam_steps = init >> deprovision_ip_trunk_ipv4 >> deprovision_ip_trunk_ipv6 return ( init diff --git a/gso/workflows/iptrunk/utils.py b/gso/workflows/iptrunk/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..690cfc58b692efb143cb0caa5ef22ac081c3c36d --- /dev/null +++ b/gso/workflows/iptrunk/utils.py @@ -0,0 +1,18 @@ +from orchestrator import step +from orchestrator.types import State, UUIDstr + +from gso.products.product_types.iptrunk import Iptrunk +from gso.services import provisioning_proxy + + +@step("[COMMIT] Set ISIS metric to 90000") +def set_isis_to_90000(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State: + old_isis_metric = subscription.iptrunk.iptrunk_isis_metric + subscription.iptrunk.iptrunk_isis_metric = 90000 + provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface", False) + + return { + "subscription": subscription, + "old_isis_metric": old_isis_metric, + "label_text": "ISIS is being set to 90K by the provisioning proxy, please wait for the results", + } diff --git a/gso/workflows/router/terminate_router.py b/gso/workflows/router/terminate_router.py index 8723ef5ed1dea0c440090c82f49ecdeb06da3aa9..5d4c405eabdfc7a91da11fd4e56f6ec1d3f428e2 100644 --- a/gso/workflows/router/terminate_router.py +++ b/gso/workflows/router/terminate_router.py @@ -69,9 +69,7 @@ def terminate_router() -> StepList: run_ias_removal = conditional(lambda state: state["subscription"]["router"]["router_is_ias_connected"]) ipam_steps = ( - StepList([deprovision_loopback_ips]) - >> run_ias_removal(deprovision_si_ips) - >> run_ias_removal(deprovision_lt_ips) + init >> deprovision_loopback_ips >> run_ias_removal(deprovision_si_ips) >> run_ias_removal(deprovision_lt_ips) ) return (