Skip to content
Snippets Groups Projects
Commit 23004a82 authored by Karel van Klink's avatar Karel van Klink :smiley_cat: Committed by Neda Moeini
Browse files

Rename all uses of the init step to begin

parent 07ada899
No related branches found
No related tags found
1 merge request!139Feature/add validation workflows
Showing
with 63 additions and 48 deletions
......@@ -5,7 +5,7 @@ from orchestrator.forms import FormPage
from orchestrator.forms.validators import Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, SubscriptionLifecycle, UUIDstr
from orchestrator.workflow import StepList, done, init, inputstep, workflow
from orchestrator.workflow import StepList, begin, done, inputstep, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
......@@ -49,7 +49,7 @@ def activate_iptrunk() -> StepList:
* Update the subscription lifecycle state to ``ACTIVE``.
"""
return (
init
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> verify_complete_checklist
......
......@@ -9,7 +9,7 @@ from orchestrator.forms import FormPage
from orchestrator.forms.validators import Choice
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle
from orchestrator.workflow import StepList, done, init, step
from orchestrator.workflow import StepList, begin, done, step
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from pydantic import AfterValidator, ConfigDict
from pydantic_forms.validators import validate_unique_list
......@@ -152,7 +152,7 @@ def update_ipam_stub_for_subscription(
def create_imported_iptrunk() -> StepList:
"""Import an IP trunk without provisioning it."""
return (
init
begin
>> create_subscription
>> store_process_subscription(Target.CREATE)
>> initialize_subscription
......
......@@ -530,7 +530,7 @@ def create_iptrunk() -> StepList:
side_b_is_nokia = conditional(lambda state: get_router_vendor(state["side_b_node_id"]) == Vendor.NOKIA)
return (
init
begin
>> create_subscription
>> store_process_subscription(Target.CREATE)
>> initialize_subscription
......
......@@ -7,7 +7,7 @@ from orchestrator.forms.validators import Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, UUIDstr
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, done, init, step, workflow
from orchestrator.workflow import StepList, begin, done, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from pydantic import field_validator
......@@ -108,7 +108,7 @@ def deploy_twamp() -> StepList:
* Run the :term:`TWAMP` playbook, including an initial dry run
"""
return (
init
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> lso_interaction(deploy_twamp_dry)
......
......@@ -18,7 +18,7 @@ from orchestrator.forms.validators import Choice, Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, UUIDstr
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, conditional, done, init, inputstep
from orchestrator.workflow import StepList, begin, conditional, done, inputstep
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from pydantic import AfterValidator, ConfigDict, field_validator
......@@ -843,7 +843,7 @@ def migrate_iptrunk() -> StepList:
)
return (
init
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> new_side_is_nokia(netbox_reserve_interfaces)
......
......@@ -6,7 +6,7 @@ from orchestrator.forms import FormPage
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, UUIDstr
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, done, init, step, workflow
from orchestrator.workflow import StepList, begin, done, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
......@@ -104,7 +104,7 @@ def modify_isis_metric() -> StepList:
* Deploy the new :term:`ISIS` metric on both sides of the trunk
"""
return (
init
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> modify_iptrunk_subscription
......
......@@ -9,7 +9,7 @@ from orchestrator.forms import FormPage
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, UUIDstr
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, conditional, done, init, step, workflow
from orchestrator.workflow import StepList, begin, conditional, done, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from pydantic import AfterValidator, ConfigDict, field_validator
......@@ -418,7 +418,7 @@ def modify_trunk_interface() -> StepList:
== Vendor.NOKIA
)
return (
init
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> modify_iptrunk_subscription
......
......@@ -8,7 +8,7 @@ from orchestrator.forms.validators import Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, conditional, done, init, step, workflow
from orchestrator.workflow import StepList, begin, conditional, done, step, workflow
from orchestrator.workflows.steps import (
resync,
set_status,
......@@ -172,14 +172,14 @@ def terminate_iptrunk() -> StepList:
)
config_steps = (
init
begin
>> lso_interaction(set_isis_to_max)
>> lso_interaction(deprovision_ip_trunk_dry)
>> lso_interaction(deprovision_ip_trunk_real)
)
return (
init
begin
>> store_process_subscription(Target.TERMINATE)
>> unsync
>> run_config_steps(config_steps)
......
......@@ -5,13 +5,10 @@ import json
from orchestrator.targets import Target
from orchestrator.utils.errors import ProcessFailureError
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, done, init, step, workflow
from orchestrator.workflow import StepList, begin, done, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from services.netbox_client import NetboxClient
from workflows.iptrunk.deploy_twamp import deploy_twamp_dry
from workflows.iptrunk.migrate_iptrunk import check_ip_trunk_isis
from workflows.iptrunk.modify_trunk_interface import provision_ip_trunk_iface_dry
from gso.products.product_types.iptrunk import Iptrunk
from gso.services import infoblox
......@@ -19,6 +16,9 @@ from gso.services.lso_client import anonymous_lso_interaction, execute_playbook
from gso.utils.helpers import get_router_vendor
from gso.utils.shared_enums import Vendor
from gso.utils.workflow_steps import detect_configuration_drift
from gso.workflows.iptrunk.deploy_twamp import deploy_twamp_dry
from gso.workflows.iptrunk.migrate_iptrunk import check_ip_trunk_isis
from gso.workflows.iptrunk.modify_trunk_interface import provision_ip_trunk_iface_dry
@step("Validate IP trunk configuration")
......@@ -49,8 +49,8 @@ def verify_ipam_records(subscription: Iptrunk) -> None:
ipam_errors += [
(
"Missing IP trunk IPAM records, found the following instead.\n"
f"IPv4 expected '{subscription.iptrunk.iptrunk_ipv4_network}', actual: '{ipam_v4_network.network}'\n"
f"IPv6 expected '{subscription.iptrunk.iptrunk_ipv6_network}', actual: '{ipam_v6_network.network}'"
f"IPv4 expected '{subscription.iptrunk.iptrunk_ipv4_network}', actual: '{ipam_v4_network}'\n"
f"IPv6 expected '{subscription.iptrunk.iptrunk_ipv6_network}', actual: '{ipam_v6_network}'"
)
]
......@@ -109,7 +109,7 @@ def verify_ipam_records(subscription: Iptrunk) -> None:
@step("Verify NetBox entries")
def verify_netbox_entries(subscription: Iptrunk):
def verify_netbox_entries(subscription: Iptrunk) -> None:
"""Validate required entries for an IP trunk in NetBox."""
nbclient = NetboxClient()
netbox_errors = []
......@@ -161,7 +161,7 @@ def validate_iptrunk() -> StepList:
* Verify that TWAMP configuration is correct.
"""
return (
init
begin
>> store_process_subscription(Target.SYSTEM)
>> unsync
>> verify_ipam_records
......
......@@ -4,7 +4,7 @@ from orchestrator import workflow
from orchestrator.forms import FormPage
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle
from orchestrator.workflow import StepList, done, init, step
from orchestrator.workflow import StepList, begin, done, step
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from pydantic import ConfigDict
......@@ -77,7 +77,7 @@ def initialize_subscription(
def create_imported_office_router() -> StepList:
"""Import an office router without provisioning it."""
return (
init
begin
>> create_subscription
>> store_process_subscription(Target.CREATE)
>> initialize_subscription
......
......@@ -5,7 +5,7 @@ from orchestrator.forms import FormPage
from orchestrator.forms.validators import Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, SubscriptionLifecycle, UUIDstr
from orchestrator.workflow import StepList, done, init, inputstep, workflow
from orchestrator.workflow import StepList, begin, done, inputstep, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
......@@ -49,7 +49,7 @@ def activate_router() -> StepList:
* Update the subscription lifecycle state to ``ACTIVE``.
"""
return (
init
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> verify_complete_checklist
......
......@@ -4,7 +4,7 @@ from orchestrator import workflow
from orchestrator.forms import FormPage
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle
from orchestrator.workflow import StepList, done, init, step
from orchestrator.workflow import StepList, begin, done, step
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from pydantic import ConfigDict
......@@ -88,7 +88,7 @@ def initialize_subscription(
def create_imported_router() -> StepList:
"""Import a router without provisioning it."""
return (
init
begin
>> create_subscription
>> store_process_subscription(Target.CREATE)
>> initialize_subscription
......
......@@ -8,7 +8,7 @@ from orchestrator.forms.validators import Choice, Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
from orchestrator.utils.errors import ProcessFailureError
from orchestrator.workflow import StepList, conditional, done, init, inputstep, step, workflow
from orchestrator.workflow import StepList, begin, conditional, done, inputstep, step, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form
from pydantic import ConfigDict, model_validator
......@@ -259,7 +259,7 @@ def create_router() -> StepList:
router_is_nokia = conditional(lambda state: state["vendor"] == Vendor.NOKIA)
return (
init
begin
>> create_subscription
>> store_process_subscription(Target.CREATE)
>> initialize_subscription
......
......@@ -3,7 +3,7 @@
from orchestrator.forms import FormPage
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, UUIDstr
from orchestrator.workflow import StepList, done, init, step, workflow
from orchestrator.workflow import StepList, begin, done, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from pydantic import ConfigDict
......@@ -49,4 +49,4 @@ def update_subscription_model(subscription: Router, connection_strategy: str) ->
)
def modify_connection_strategy() -> StepList:
"""Modify the connection strategy."""
return init >> store_process_subscription(Target.MODIFY) >> unsync >> update_subscription_model >> resync >> done
return begin >> store_process_subscription(Target.MODIFY) >> unsync >> update_subscription_model >> resync >> done
......@@ -4,7 +4,7 @@ from orchestrator.forms import FormPage
from orchestrator.forms.validators import Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, UUIDstr
from orchestrator.workflow import StepList, done, init, workflow
from orchestrator.workflow import StepList, begin, done, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
......@@ -37,7 +37,7 @@ def redeploy_base_config() -> StepList:
* Redeploy base config
"""
return (
init
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> lso_interaction(deploy_base_config_dry)
......
......@@ -9,7 +9,7 @@ from orchestrator.forms.validators import Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, SubscriptionLifecycle, UUIDstr
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, conditional, done, init, step, workflow
from orchestrator.workflow import StepList, begin, conditional, done, step, workflow
from orchestrator.workflows.steps import (
resync,
set_status,
......@@ -121,7 +121,7 @@ def terminate_router() -> StepList:
router_is_nokia = conditional(lambda state: state["router_is_nokia"])
return (
init
begin
>> store_process_subscription(Target.TERMINATE)
>> unsync
>> deprovision_loopback_ips
......
......@@ -7,7 +7,7 @@ from orchestrator.forms import FormPage
from orchestrator.forms.validators import Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
from orchestrator.workflow import StepList, done, init, inputstep, step, workflow
from orchestrator.workflow import StepList, begin, done, inputstep, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from pydantic import ConfigDict, model_validator
......@@ -248,7 +248,7 @@ def update_ibgp_mesh() -> StepList:
* Update the subscription model.
"""
return (
init
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> calculate_pe_router_list
......
......@@ -2,10 +2,11 @@
from orchestrator.targets import Target
from orchestrator.utils.errors import ProcessFailureError
from orchestrator.workflow import StepList, done, init, step, workflow
from orchestrator.workflow import StepList, begin, done, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from workflows.router.update_ibgp_mesh import add_p_to_mesh_dry
from pydantic_forms.core import FormPage
from pydantic_forms.types import FormGenerator, UUIDstr
from gso.products.product_types.router import Router
from gso.services import infoblox
......@@ -13,6 +14,20 @@ from gso.services.librenms_client import LibreNMSClient
from gso.services.lso_client import anonymous_lso_interaction
from gso.services.netbox_client import NetboxClient
from gso.utils.workflow_steps import deploy_base_config_dry, detect_configuration_drift
from gso.workflows.router.update_ibgp_mesh import add_p_to_mesh_dry
TT_NUMBER_ZERO = "TT#0000000000000000"
def _seed_initial_state(subscription_id: UUIDstr) -> FormGenerator:
router = Router.from_subscription(subscription_id)
class EmptyForm(FormPage):
pass
yield EmptyForm
return {"subscription": router, "tt_number": TT_NUMBER_ZERO}
@step("Verify IPAM resources for loopback interface")
......@@ -52,7 +67,7 @@ def verify_librenms_entry(subscription: Router) -> None:
@workflow(
"Validate router configuration",
target=Target.SYSTEM,
initial_input_form=wrap_modify_initial_input_form(None),
initial_input_form=wrap_modify_initial_input_form(_seed_initial_state),
)
def validate_router() -> StepList:
"""Validate an existing, active Router subscription.
......@@ -64,7 +79,7 @@ def validate_router() -> StepList:
* Validate configuration of the iBGP mesh
"""
return (
init
begin
>> store_process_subscription(Target.SYSTEM)
>> unsync
>> verify_ipam_loopback
......
......@@ -5,7 +5,7 @@ from uuid import UUID
from orchestrator.forms import FormPage
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle
from orchestrator.workflow import StepList, done, init, step, workflow
from orchestrator.workflow import StepList, begin, done, step, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from pydantic import ConfigDict
......@@ -79,7 +79,7 @@ def initialize_subscription(
def create_imported_site() -> StepList:
"""Workflow to import a site without provisioning it."""
return (
init
begin
>> create_subscription
>> store_process_subscription(Target.CREATE)
>> initialize_subscription
......
......@@ -3,7 +3,7 @@
from orchestrator.forms import FormPage
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
from orchestrator.workflow import StepList, done, init, step, workflow
from orchestrator.workflow import StepList, begin, done, step, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form
from pydantic import ConfigDict
......@@ -80,7 +80,7 @@ def initialize_subscription(
def create_site() -> StepList:
"""Create a new site subscription."""
return (
init
begin
>> create_subscription
>> store_process_subscription(Target.CREATE)
>> initialize_subscription
......
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