Skip to content
Snippets Groups Projects
Verified Commit 97459886 authored by Simone Spinelli's avatar Simone Spinelli Committed by Karel van Klink
Browse files

Added TTnumber and ProcessID to all workflows

parent 86aaa540
No related branches found
No related tags found
1 merge request!68Migrate iptrunks ansible integration
......@@ -80,7 +80,9 @@ def _send_request(endpoint: str, parameters: dict, process_id: UUIDstr, operatio
raise AssertionError(request.content)
def provision_router(subscription: RouterProvisioning, process_id: UUIDstr, dry_run: bool = True) -> None:
def provision_router(
subscription: RouterProvisioning, process_id: UUIDstr, tt_number: str, dry_run: bool = True
) -> None:
"""Provision a new router using {term}`LSO`.
:param subscription: The subscription object that's to be provisioned.
......@@ -91,13 +93,18 @@ def provision_router(subscription: RouterProvisioning, process_id: UUIDstr, dry_
:type dry_run: bool
:rtype: None
"""
parameters = {"dry_run": dry_run, "subscription": json.loads(json_dumps(subscription))}
parameters = {
"process_id": process_id,
"tt_number": tt_number,
"dry_run": dry_run,
"subscription": json.loads(json_dumps(subscription)),
}
_send_request("router", parameters, process_id, CUDOperation.POST)
def provision_ip_trunk(
subscription: IptrunkProvisioning, process_id: UUIDstr, config_object: str, dry_run: bool = True
subscription: IptrunkProvisioning, process_id: UUIDstr, tt_number: str, config_object: str, dry_run: bool = True
) -> None:
"""Provision an IP trunk service using {term}`LSO`.
......@@ -115,13 +122,15 @@ def provision_ip_trunk(
"subscription": json.loads(json_dumps(subscription)),
"dry_run": dry_run,
"verb": "deploy",
"tt_number": tt_number,
"process_id": process_id,
"object": config_object,
}
_send_request("ip_trunk", parameters, process_id, CUDOperation.POST)
def check_ip_trunk(subscription: IptrunkProvisioning, process_id: UUIDstr, check_name: str) -> None:
def check_ip_trunk(subscription: IptrunkProvisioning, process_id: UUIDstr, tt_number: str, check_name: str) -> None:
"""Provision an IP trunk service using {term}`LSO`.
:param subscription: The subscription object that's to be provisioned.
......@@ -133,13 +142,15 @@ def check_ip_trunk(subscription: IptrunkProvisioning, process_id: UUIDstr, check
"""
parameters = {
"subscription": json.loads(json_dumps(subscription)),
"tt_number": tt_number,
"process_id": process_id,
"check_name": check_name,
}
_send_request("ip_trunk/perform_check", parameters, process_id, CUDOperation.POST)
def deprovision_ip_trunk(subscription: Iptrunk, process_id: UUIDstr, dry_run: bool = True) -> None:
def deprovision_ip_trunk(subscription: Iptrunk, process_id: UUIDstr, tt_number: str, dry_run: bool = True) -> None:
"""Deprovision an IP trunk service using {term}`LSO`.
:param subscription: The subscription object that's to be provisioned.
......@@ -150,7 +161,13 @@ def deprovision_ip_trunk(subscription: Iptrunk, process_id: UUIDstr, dry_run: bo
:type dry_run: bool
:rtype: None
"""
parameters = {"subscription": json.loads(json_dumps(subscription)), "dry_run": dry_run, "verb": "terminate"}
parameters = {
"subscription": json.loads(json_dumps(subscription)),
"tt_number": tt_number,
"process_id": process_id,
"dry_run": dry_run,
"verb": "terminate",
}
_send_request("ip_trunk", parameters, process_id, CUDOperation.DELETE)
......@@ -162,7 +179,9 @@ def migrate_ip_trunk(
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
tt_number: str,
verb: str,
config_object: str,
dry_run: bool = True,
) -> None:
"""Migrate an IP trunk service using {term}`LSO`.
......@@ -188,6 +207,8 @@ def migrate_ip_trunk(
"""
parameters = {
"subscription": json.loads(json_dumps(subscription)),
"tt_number": tt_number,
"process_id": process_id,
"new_side": {
"new_node": json.loads(json_dumps(new_node)),
"new_lag_interface": new_lag_interface,
......@@ -195,6 +216,7 @@ def migrate_ip_trunk(
"replace_index": replace_index,
},
"verb": verb,
"config_object": config_object,
"dry_run": dry_run,
}
......
{
"forms": {
"fields": {
"tt_number": "Insert the Ticket number that covers this activity",
"confirm": "Confirm",
"confirm_info": "Please verify this form looks correct.",
......
from logging import getLogger
from orchestrator import step
from orchestrator.types import State
from gso.products.product_types.iptrunk import Iptrunk
logger = getLogger(__name__)
@step("Set ISIS metric to 9000")
def set_isis_to_9000(subscription: Iptrunk) -> State:
old_isis_metric = subscription.iptrunk.iptrunk_isis_metric
subscription.iptrunk.iptrunk_isis_metric = 90000
logger.warning("ISIS metric is only updated in the subscription, not in the real world.")
return {"subscription": subscription, "old_isis_metric": old_isis_metric}
@step("Restore ISIS metric to original value")
def restore_isis_metric(subscription: Iptrunk, old_isis_metric: int) -> State:
subscription.iptrunk.iptrunk_isis_metric = old_isis_metric
logger.warning("ISIS metric is only updated in the subscription, not in the real world.")
return {"subscription": subscription}
......@@ -29,6 +29,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
class Config:
title = product_name
tt_number: str
customer: customer_selector() # type: ignore
geant_s_sid: str
iptrunk_description: str
......@@ -145,8 +146,8 @@ def initialize_subscription(
@step("Provision IP trunk interface [DRY RUN]")
def provision_ip_trunk_iface_dry(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "trunk_interface")
def provision_ip_trunk_iface_dry(subscription: IptrunkProvisioning, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "trunk_interface")
return {
"subscription": subscription,
......@@ -155,28 +156,28 @@ def provision_ip_trunk_iface_dry(subscription: IptrunkProvisioning, process_id:
@step("Provision IP trunk interface [FOR REAL]")
def provision_ip_trunk_iface_real(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "trunk_interface", False)
def provision_ip_trunk_iface_real(subscription: IptrunkProvisioning, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "trunk_interface", False)
return {
"subscription": subscription,
"label_text": "Provisioning a trunk interface, please refresh to get the results of the playbook.",
"label_text": "[COMMIT] Provisioning a trunk interface, please refresh to get the results of the playbook.",
}
@step("Check IP connectivity of the trunk")
def check_ip_trunk_connectivity(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.check_ip_trunk(subscription, process_id, "ping")
def check_ip_trunk_connectivity(subscription: IptrunkProvisioning, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.check_ip_trunk(subscription, process_id, tt_number, "ping")
return {
"subscription": subscription,
"label_text": "Checking IP traffic flow on the trunk, to get the results of the playbook.",
"label_text": "[CHECK] Checking IP traffic flow on the trunk, to get the results of the playbook.",
}
@step("Provision IP trunk ISIS interface [DRY RUN]")
def provision_ip_trunk_isis_iface_dry(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface")
def provision_ip_trunk_isis_iface_dry(subscription: IptrunkProvisioning, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface")
return {
"subscription": subscription,
......@@ -185,42 +186,22 @@ def provision_ip_trunk_isis_iface_dry(subscription: IptrunkProvisioning, process
@step("Provision IP trunk ISIS interface [FOR REAL]")
def provision_ip_trunk_isis_iface_real(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface", False)
def provision_ip_trunk_isis_iface_real(subscription: IptrunkProvisioning, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface", False)
return {
"subscription": subscription,
"label_text": "Provisioning ISIS interfaces, please refresh to get the results of the playbook.",
"label_text": "[COMMIT] Provisioning ISIS interfaces, please refresh to get the results of the playbook.",
}
@step("Check ISIS adjacency")
def check_ip_trunk_isis(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.check_ip_trunk(subscription, process_id, "isis")
def check_ip_trunk_isis(subscription: IptrunkProvisioning, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.check_ip_trunk(subscription, process_id, tt_number, "isis")
return {
"subscription": subscription,
"label_text": "Checking ISIS adjacency, please refresh to get the results of the playbook.",
}
@step("Provision IP trunk LDP interface [DRY RUN]")
def provision_ip_trunk_ldp_iface_dry(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "ldp_interface")
return {
"subscription": subscription,
"label_text": "[DRY RUN] Provisioning LDP interface, please refresh to get the results of the playbook.",
}
@step("Provision IP trunk LDP interface [FOR REAL]")
def provision_ip_trunk_ldp_iface_real(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "ldp_interface", False)
return {
"subscription": subscription,
"label_text": "Provisioning LDP interface, please refresh to get the results of the playbook.",
"label_text": "[CHECK] Checking ISIS adjacency, please refresh to get the results of the playbook.",
}
......
......@@ -18,7 +18,6 @@ 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 import restore_isis_metric, set_isis_to_9000
logger = getLogger(__name__)
......@@ -38,10 +37,12 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
class Config:
title = (
f"Subscription {subscription.iptrunk.geant_s_sid} from "
f"{subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_fqdn} to "
f"{subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_fqdn}"
f" to "
f"{subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_fqdn}"
)
tt_number: str
replace_side: ReplacedSide # type: ignore
warning_label: Label = "Are we moving to a different Site?" # type: ignore
migrate_to_different_site: Optional[bool] = False
......@@ -114,19 +115,17 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
return old_side_input.dict() | new_side_input.dict() | {"replace_index": replace_index}
@inputstep("Wait for confirmation", assignee=Assignee.SYSTEM)
def confirm_continue() -> FormGenerator:
class ProvisioningResultPage(FormPage):
class Config:
title = "Please confirm before continuing"
@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)
info_label: Label = (
"ISIS metric has been set to 9000, please confirm to continue the workflow when ready." # type: ignore
)
yield ProvisioningResultPage
return {}
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")
......@@ -137,6 +136,7 @@ def disable_old_config_dry(
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
tt_number: str,
) -> State:
provisioning_proxy.migrate_ip_trunk(
subscription,
......@@ -145,12 +145,14 @@ def disable_old_config_dry(
new_lag_member_interfaces,
replace_index,
process_id,
"VERB NEEDS TO BE UPDATED",
tt_number,
"deactivate",
"deactivate",
)
return {
"subscription": subscription,
"label_text": "[DRY RUN] Migrating old trunk interface, please refresh to get the results of the playbook.",
"label_text": "[DRY RUN] Disable config on old node, please refresh to get the results of the playbook.",
}
......@@ -162,6 +164,7 @@ def disable_old_config_real(
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
tt_number: str,
) -> State:
provisioning_proxy.migrate_ip_trunk(
subscription,
......@@ -170,15 +173,15 @@ def disable_old_config_real(
new_lag_member_interfaces,
replace_index,
process_id,
"VERB NEEDS TO BE UPDATED",
tt_number,
"deactivate",
"deactivate",
False,
)
logger.warning("Playbook verb is not yet properly set.")
return {
"subscription": subscription,
"label_text": "Migrating old trunk interface, please refresh to get the results of the playbook.",
"label_text": "Disable config on the old node, please refresh to get the results of the playbook.",
}
......@@ -190,6 +193,7 @@ def deploy_new_config_dry(
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
tt_number: str,
) -> State:
provisioning_proxy.migrate_ip_trunk(
subscription,
......@@ -198,7 +202,9 @@ def deploy_new_config_dry(
new_lag_member_interfaces,
replace_index,
process_id,
"VERB NEEDS TO BE UPDATED",
tt_number,
"deploy",
"trunk_interface",
)
logger.warning("Playbook verb is not yet properly set.")
......@@ -217,6 +223,7 @@ def deploy_new_config_real(
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
tt_number: str,
) -> State:
provisioning_proxy.migrate_ip_trunk(
subscription,
......@@ -225,7 +232,9 @@ def deploy_new_config_real(
new_lag_member_interfaces,
replace_index,
process_id,
"VERB NEEDS TO BE UPDATED",
tt_number,
"deploy",
"trunk_interface",
False,
)
......@@ -233,38 +242,29 @@ def deploy_new_config_real(
return {
"subscription": subscription,
"label_text": "Deploying new trunk interface, please refresh to get the results of the playbook.",
"label_text": "[COMMIT] Deploying new trunk interface, please refresh to get the results of the playbook.",
}
@step("Run interface checks")
def run_interface_checks(
subscription: Iptrunk,
new_node: Router,
new_lag_interface: str,
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
) -> State:
provisioning_proxy.migrate_ip_trunk(
subscription,
new_node,
new_lag_interface,
new_lag_member_interfaces,
replace_index,
process_id,
"MIGRATION_INTERFACE_CHECK",
)
@inputstep("Wait for confirmation", assignee=Assignee.SYSTEM)
def confirm_continue_move_fiber() -> FormGenerator:
class ProvisioningResultPage(FormPage):
class Config:
title = "Please confirm before continuing"
logger.warning("Playbook verb is not yet properly set.")
info_label: Label = (
"New Trunk interface has been deployed, wait for the physical connection to be moved" # type: ignore
)
return {
"subscription": subscription,
"label_text": "Running checks on the new trunk interface, please refresh to get the results of the playbook.",
}
yield ProvisioningResultPage
return {}
@step("Deploy configuration on new router")
# Interface checks go here
@step("Deploy ISIS configuration on new router")
def deploy_new_isis(
subscription: Iptrunk,
new_node: Router,
......@@ -272,6 +272,7 @@ def deploy_new_isis(
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
tt_number: str,
) -> State:
provisioning_proxy.migrate_ip_trunk(
subscription,
......@@ -280,7 +281,9 @@ def deploy_new_isis(
new_lag_member_interfaces,
replace_index,
process_id,
"VERB NEEDS TO BE UPDATED",
tt_number,
"deploy",
"isis_interface",
False,
)
......@@ -288,20 +291,44 @@ def deploy_new_isis(
return {
"subscription": subscription,
"label_text": "Updating new ISIS metric, please refresh to get the results of the playbook.",
"label_text": "Deploy ISIS config on the new router, please refresh to get the results of the playbook.",
}
@step("Check ISIS metric")
def check_isis(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.check_ip_trunk(subscription, process_id, "VERB NEEDS TO BE UPDATED")
# Leaving it like this as a placeholder
# @step("Check ISIS metric")
# def check_isis(subscription: Iptrunk, process_id: UUIDstr) -> State:
# provisioning_proxy.check_ip_trunk(subscription, process_id, "VERB NEEDS TO BE UPDATED")
#
# logger.warning("Playbook verb is not yet properly set.")
#
# return {
# "subscription": subscription,
# "label_text": "Checking ISIS functionality, please refresh to get the results of the playbook.",
# }
logger.warning("Playbook verb is not yet properly set.")
return {
"subscription": subscription,
"label_text": "Checking ISIS functionality, please refresh to get the results of the playbook.",
}
@inputstep("Wait for confirmation", assignee=Assignee.SYSTEM)
def confirm_continue_restore_isis() -> FormGenerator:
class ProvisioningResultPage(FormPage):
class Config:
title = "Please confirm before continuing"
info_label: Label = (
"ISIS config has been deployed, confirm if you want to restore the old metric" # type: ignore
)
yield ProvisioningResultPage
return {}
@step("Restore ISIS metric to original value")
def restore_isis_metric(subscription: Iptrunk, process_id: UUIDstr, tt_number: str, old_isis_metric: int) -> State:
subscription.iptrunk.iptrunk_isis_metric = old_isis_metric
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface", False)
return {"subscription": subscription}
@step("[DRY RUN] Delete configuration on old router")
......@@ -312,6 +339,7 @@ def delete_old_config_dry(
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
tt_number: str,
) -> State:
provisioning_proxy.migrate_ip_trunk(
subscription,
......@@ -320,7 +348,9 @@ def delete_old_config_dry(
new_lag_member_interfaces,
replace_index,
process_id,
"VERB NEEDS TO BE UPDATED",
tt_number,
"delete",
"delete",
)
logger.warning("Playbook verb is not yet properly set.")
......@@ -340,6 +370,7 @@ def delete_old_config_real(
new_lag_member_interfaces: list[str],
replace_index: int,
process_id: UUIDstr,
tt_number: str,
) -> State:
provisioning_proxy.migrate_ip_trunk(
subscription,
......@@ -348,7 +379,9 @@ def delete_old_config_real(
new_lag_member_interfaces,
replace_index,
process_id,
"VERB NEEDS TO BE UPDATED",
tt_number,
"delete",
"delete",
False,
)
......@@ -392,18 +425,17 @@ def migrate_iptrunk() -> StepList:
init
>> store_process_subscription(Target.MODIFY)
>> unsync
>> set_isis_to_9000
>> confirm_continue
>> pp_interaction(set_isis_to_9000, 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
>> pp_interaction(run_interface_checks, 3, False)
>> 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_metric
# >> pp_interaction(check_isis, 3, False)
>> confirm_continue_restore_isis
>> pp_interaction(restore_isis_metric, 3)
>> pp_interaction(delete_old_config_dry, 3)
>> pp_interaction(delete_old_config_real, 3)
>> update_ipam
......
......@@ -14,6 +14,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
subscription = Iptrunk.from_subscription(subscription_id)
class ModifyIptrunkForm(FormPage):
tt_number: str
isis_metric: int = subscription.iptrunk.iptrunk_isis_metric
user_input = yield ModifyIptrunkForm
......@@ -29,8 +30,8 @@ def modify_iptrunk_subscription(subscription: Iptrunk, isis_metric: int) -> Stat
@step("Provision IP trunk ISIS interface [DRY RUN]")
def provision_ip_trunk_isis_iface_dry(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface")
def provision_ip_trunk_isis_iface_dry(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface")
return {
"subscription": subscription,
......@@ -40,8 +41,8 @@ def provision_ip_trunk_isis_iface_dry(subscription: Iptrunk, process_id: UUIDstr
@step("Provision IP trunk ISIS interface [FOR REAL]")
def provision_ip_trunk_isis_iface_real(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface", False)
def provision_ip_trunk_isis_iface_real(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "isis_interface", False)
return {
"subscription": subscription,
......
......@@ -19,6 +19,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
subscription = Iptrunk.from_subscription(subscription_id)
class ModifyIptrunkForm(FormPage):
tt_number: str
geant_s_sid: str = subscription.iptrunk.geant_s_sid
iptrunk_description: str = subscription.iptrunk.iptrunk_description
iptrunk_type: IptrunkType = subscription.iptrunk.iptrunk_type
......@@ -38,9 +39,9 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
title = "Provide subscription details for side A of the trunk."
iptrunk_sideA_node: str = ReadOnlyField(subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_fqdn)
iptrunk_sideA_ae_iface: str = ReadOnlyField(subscription.iptrunk.iptrunk_sides[0].iptrunk_ae_iface)
iptrunk_sideA_ae_iface: str = ReadOnlyField(subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_iface)
iptrunk_sideA_ae_geant_a_sid: str = subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_geant_a_sid
iptrunk_sideA_ae_members: AeMembersListA = subscription.iptrunk.iptrunk_sideA_ae_members # type: ignore
iptrunk_sideA_ae_members: AeMembersListA = subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_members
iptrunk_sideA_ae_members_descriptions: AeMembersListA = subscription.iptrunk.iptrunk_sides[
0
].iptrunk_side_ae_members_description
......@@ -58,7 +59,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
iptrunk_sideB_node: str = ReadOnlyField(subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_fqdn)
iptrunk_sideB_ae_iface: str = ReadOnlyField(subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_iface)
iptrunk_sideB_ae_geant_a_sid: str = subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_geant_a_sid
iptrunk_sideB_ae_members: AeMembersListB = subscription.iptrunk.iptrunk_sideB_ae_members # type: ignore
iptrunk_sideB_ae_members: AeMembersListB = subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_members
iptrunk_sideB_ae_members_descriptions: AeMembersListB = subscription.iptrunk.iptrunk_sides[
1
].iptrunk_side_ae_members_description
......@@ -103,8 +104,8 @@ def modify_iptrunk_subscription(
@step("Provision IP trunk interface [DRY RUN]")
def provision_ip_trunk_iface_dry(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "trunk_interface")
def provision_ip_trunk_iface_dry(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "trunk_interface")
return {
"subscription": subscription,
......@@ -113,8 +114,8 @@ def provision_ip_trunk_iface_dry(subscription: Iptrunk, process_id: UUIDstr) ->
@step("Provision IP trunk interface [FOR REAL]")
def provision_ip_trunk_iface_real(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "trunk_interface", False)
def provision_ip_trunk_iface_real(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, tt_number, "trunk_interface", False)
return {
"subscription": subscription,
......@@ -122,26 +123,6 @@ def provision_ip_trunk_iface_real(subscription: Iptrunk, process_id: UUIDstr) ->
}
@step("Provision IP trunk LLDP interface [DRY RUN]")
def provision_ip_trunk_lldp_iface_dry(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "lldp_interface")
return {
"subscription": subscription,
"label_text": "[DRY RUN] Provisioning LLDP interface, please refresh to get the results of the playbook.",
}
@step("Provision IP trunk LLDP interface [FOR REAL]")
def provision_ip_trunk_lldp_iface_real(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "lldp_interface", False)
return {
"subscription": subscription,
"label_text": "Provisioning LLDP interface, please refresh to get the results of the playbook.",
}
@workflow(
"Modify IP Trunk interface",
initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator),
......@@ -155,8 +136,6 @@ def modify_trunk_interface() -> StepList:
>> modify_iptrunk_subscription
>> pp_interaction(provision_ip_trunk_iface_dry, 3)
>> pp_interaction(provision_ip_trunk_iface_real, 3)
>> pp_interaction(provision_ip_trunk_lldp_iface_dry, 3)
>> pp_interaction(provision_ip_trunk_lldp_iface_real, 3)
>> resync
>> done
)
......@@ -7,7 +7,6 @@ from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUID
from orchestrator.workflow import StepList, conditional, done, init, step, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from workflows.iptrunk import set_isis_to_9000
from gso.products.product_types.iptrunk import Iptrunk
from gso.services import infoblox, provisioning_proxy
......@@ -20,6 +19,7 @@ def initial_input_form_generator() -> FormGenerator:
"Please confirm whether configuration should get removed from the A and B sides of the trunk, and whether "
"IPAM resources should be released." # type: ignore
)
tt_number: str
remove_configuration: bool = True
clean_up_ipam: bool = True
......@@ -27,9 +27,22 @@ 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) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface", False)
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)
return {
"subscription": subscription,
"label_text": "This is setting the ISIS metric of the trunk to 9000. Press refresh to get the results."
......@@ -38,8 +51,8 @@ def drain_traffic_from_ip_trunk(subscription: Iptrunk, process_id: UUIDstr) -> S
@step("Deprovision IP trunk [DRY RUN]")
def deprovision_ip_trunk_dry(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.deprovision_ip_trunk(subscription, process_id, True)
def deprovision_ip_trunk_dry(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.deprovision_ip_trunk(subscription, process_id, tt_number, True)
return {
"subscription": subscription,
......@@ -48,12 +61,12 @@ def deprovision_ip_trunk_dry(subscription: Iptrunk, process_id: UUIDstr) -> Stat
@step("Deprovision IP trunk [FOR REAL]")
def deprovision_ip_trunk_real(subscription: Iptrunk, process_id: UUIDstr) -> State:
provisioning_proxy.deprovision_ip_trunk(subscription, process_id, False)
def deprovision_ip_trunk_real(subscription: Iptrunk, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.deprovision_ip_trunk(subscription, process_id, tt_number, False)
return {
"subscription": subscription,
"label_text": "Terminating IP trunk, please refresh to get the results of the playbook.",
"label_text": "[COMMIT] Terminating IP trunk, please refresh to get the results of the playbook.",
}
......@@ -81,8 +94,9 @@ def terminate_iptrunk() -> StepList:
run_ipam_steps = conditional(lambda state: state["clean_up_ipam"])
config_steps = (
StepList([set_isis_to_9000])
>> pp_interaction(drain_traffic_from_ip_trunk, 3)
# StepList([set_isis_to_9000])
StepList()
>> pp_interaction(set_isis_to_9000, 3)
>> pp_interaction(deprovision_ip_trunk_dry, 3)
>> pp_interaction(deprovision_ip_trunk_real, 3)
)
......
......@@ -36,13 +36,14 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
class Config:
title = product_name
tt_number: str
customer: customer_selector() # type: ignore
router_site: _site_selector() # type: ignore
hostname: str
ts_port: PortNumber
router_vendor: RouterVendor
router_role: RouterRole
is_ias_connected: bool | None
is_ias_connected: bool | None = False
@validator("hostname", allow_reuse=True)
def hostname_must_be_available(cls, hostname: str, **kwargs: dict[str, Any]) -> str:
......@@ -128,8 +129,8 @@ def ipam_allocate_ias_networks(subscription: RouterProvisioning) -> State:
@step("Provision router [DRY RUN]")
def provision_router_dry(subscription: RouterProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.provision_router(subscription, process_id)
def provision_router_dry(subscription: RouterProvisioning, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_router(subscription, process_id, tt_number)
return {
"subscription": subscription,
......@@ -141,8 +142,8 @@ def provision_router_dry(subscription: RouterProvisioning, process_id: UUIDstr)
@step("Provision router [FOR REAL]")
def provision_router_real(subscription: RouterProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.provision_router(subscription, process_id, False)
def provision_router_real(subscription: RouterProvisioning, process_id: UUIDstr, tt_number: str) -> State:
provisioning_proxy.provision_router(subscription, process_id, tt_number, False)
return {
"subscription": subscription,
......
......@@ -23,6 +23,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
"Please confirm whether configuration should get removed from the router, and whether IPAM resources should"
" be released." # type: ignore
)
tt_number: str
remove_configuration: bool = True
clean_up_ipam: bool = True
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment