Skip to content
Snippets Groups Projects

`modify_vrf_router_list`: Added LSO steps

Merged Aleksandr Kurbatov requested to merge feature/nat-907-vrf-update into develop
All threads resolved!
2 files
+ 68
11
Compare changes
  • Side-by-side
  • Inline
Files
2
"""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: list[dict[str, UUIDstr]]
 
) -> 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: list[dict[str, UUIDstr]]
 
) -> 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
 
)
Loading