Skip to content
Snippets Groups Projects
Verified Commit e8614e72 authored by Aleksandr Kurbatov's avatar Aleksandr Kurbatov Committed by Karel van Klink
Browse files

`modify_vrf_router_list`: Added LSO steps

parent 8e080399
No related branches found
No related tags found
1 merge request!327`modify_vrf_router_list`: Added LSO steps
"""Modify VRF to add or remove routers.""" """Modify VRF to add or remove routers."""
from typing import Annotated from typing import Annotated, Any
from orchestrator.forms import FormPage from orchestrator.forms import FormPage
from orchestrator.targets import Target from orchestrator.targets import Target
...@@ -13,7 +13,9 @@ from pydantic_forms.validators import validate_unique_list ...@@ -13,7 +13,9 @@ from pydantic_forms.validators import validate_unique_list
from gso.products.product_types.router import Router from gso.products.product_types.router import Router
from gso.products.product_types.vrf import VRF from gso.products.product_types.vrf import VRF
from gso.services.lso_client import LSOState, lso_interaction
from gso.utils.helpers import active_router_selector from gso.utils.helpers import active_router_selector
from gso.utils.types.tt_number import TTNumber
def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
...@@ -25,6 +27,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: ...@@ -25,6 +27,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
class ModifyVRFRouterListForm(FormPage): class ModifyVRFRouterListForm(FormPage):
model_config = ConfigDict(title=f"Modify the {subscription.vrf.vrf_name} VRF to add or remove routers.") model_config = ConfigDict(title=f"Modify the {subscription.vrf.vrf_name} VRF to add or remove routers.")
tt_number: TTNumber
router_list: Annotated[ router_list: Annotated[
list[RouterSelection], list[RouterSelection],
...@@ -51,6 +54,48 @@ def update_subscription_model(subscription: VRF, router_list: list[dict[str, UUI ...@@ -51,6 +54,48 @@ def update_subscription_model(subscription: VRF, router_list: list[dict[str, UUI
return {"subscription": subscription} return {"subscription": subscription}
@step("[DRY RUN] Update VRF on list of routers")
def update_vrf_on_routers_dry(
subscription: dict[str, Any], process_id: UUIDstr, tt_number: str, router_list
) -> LSOState:
"""Deploy VRF on a list of routers - Dry run."""
vrf_new_router_list = [Router.from_subscription(router["router_id"]) for router in router_list]
inventory = {"all": {"hosts": {router.router.router_fqdn: None for router in vrf_new_router_list}}}
extra_vars = {
"subscription": subscription,
"dry_run": True,
"verb": "update",
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
f"Deploy config for {subscription["description"]}",
}
return {
"playbook_name": "gap_ansible/playbooks/vrf_update.yaml",
"inventory": inventory,
"extra_vars": extra_vars,
}
@step("[FOR REAL] Update VRF on list of routers")
def update_vrf_on_routers_real(
subscription: dict[str, Any], process_id: UUIDstr, tt_number: str, router_list
) -> LSOState:
"""Deploy VRF on a list of routers - with commit."""
vrf_new_router_list = [Router.from_subscription(router["router_id"]) for router in router_list]
inventory = {"all": {"hosts": {router.router.router_fqdn: None for router in vrf_new_router_list}}}
extra_vars = {
"subscription": subscription,
"dry_run": False,
"verb": "update",
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
f"Deploy config for {subscription["description"]}",
}
return {
"playbook_name": "gap_ansible/playbooks/vrf_update.yaml",
"inventory": inventory,
"extra_vars": extra_vars,
}
@workflow( @workflow(
"Modify VRF router list", "Modify VRF router list",
initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator), initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator),
...@@ -58,4 +103,13 @@ def update_subscription_model(subscription: VRF, router_list: list[dict[str, UUI ...@@ -58,4 +103,13 @@ def update_subscription_model(subscription: VRF, router_list: list[dict[str, UUI
) )
def modify_vrf_router_list() -> StepList: def modify_vrf_router_list() -> StepList:
"""Modify the VRF router list.""" """Modify the VRF router list."""
return begin >> store_process_subscription(Target.MODIFY) >> unsync >> update_subscription_model >> resync >> done return (
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> lso_interaction(update_vrf_on_routers_dry)
>> lso_interaction(update_vrf_on_routers_real)
>> update_subscription_model
>> resync
>> done
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment