Skip to content
Snippets Groups Projects
Verified Commit e686ef94 authored by Saket Agrahari's avatar Saket Agrahari Committed by Karel van Klink
Browse files

initial changes for iptrunk version

parent 602ab277
No related branches found
No related tags found
1 merge request!424Resolve NAT-1048 "Service version"
"""add config version to ip trunk.
Revision ID: 54477431c9ef
Revises: 465008ed496e
Create Date: 2025-05-12 04:46:47.410668
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = '54477431c9ef'
down_revision = '465008ed496e'
branch_labels = None
depends_on = None
def upgrade() -> None:
conn = op.get_bind()
conn.execute(sa.text("""
INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_config_version', 'adding option of service version controlled rollout') RETURNING resource_types.resource_type_id
"""))
conn.execute(sa.text("""
INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version')))
"""))
def downgrade() -> None:
conn = op.get_bind()
conn.execute(sa.text("""
DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version'))
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version'))
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version'))
"""))
conn.execute(sa.text("""
DELETE FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version')
"""))
......@@ -4,8 +4,6 @@ import ipaddress
from typing import Annotated
from annotated_types import Len
from orchestrator.domain.base import ProductBlockModel, T
from orchestrator.types import SubscriptionLifecycle
from pydantic import AfterValidator
from pydantic_forms.types import strEnum
from pydantic_forms.validators import validate_unique_list
......@@ -17,6 +15,8 @@ from gso.products.product_blocks.router import (
RouterBlockProvisioning,
)
from gso.utils.types.interfaces import LAGMemberList, PhysicalPortCapacity
from orchestrator.domain.base import ProductBlockModel, T
from orchestrator.types import SubscriptionLifecycle
class IptrunkType(strEnum):
......@@ -109,6 +109,7 @@ class IptrunkBlockInactive(
iptrunk_ipv6_network: ipaddress.IPv6Network | None = None
iptrunk_sides: IptrunkSides[IptrunkSideBlockInactive]
iptrunk_description_suffix: str | None = None
iptrunk_config_version: str | None = None
class IptrunkBlockProvisioning(IptrunkBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
......@@ -124,6 +125,7 @@ class IptrunkBlockProvisioning(IptrunkBlockInactive, lifecycle=[SubscriptionLife
iptrunk_ipv6_network: ipaddress.IPv6Network | None
iptrunk_sides: IptrunkSides[IptrunkSideBlockProvisioning] # type: ignore[assignment]
iptrunk_description_suffix: str | None
iptrunk_config_version: str | None
class IptrunkBlock(IptrunkBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
......@@ -152,3 +154,4 @@ class IptrunkBlock(IptrunkBlockProvisioning, lifecycle=[SubscriptionLifecycle.AC
iptrunk_ipv6_network: ipaddress.IPv6Network
iptrunk_sides: IptrunkSides[IptrunkSideBlock] # type: ignore[assignment]
iptrunk_description_suffix: str | None
iptrunk_config_version: str | None
......@@ -4,12 +4,6 @@ import ipaddress
from typing import Annotated
from uuid import uuid4
from orchestrator import workflow
from orchestrator.forms import SubmitFormPage
from orchestrator.targets import Target
from orchestrator.types import SubscriptionLifecycle
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.types import FormGenerator, State
from pydantic_forms.validators import validate_unique_list
......@@ -23,6 +17,12 @@ from gso.services.partners import get_partner_by_name
from gso.utils.helpers import active_router_selector
from gso.utils.types.geant_ids import IMPORTED_GA_ID, IMPORTED_GS_ID
from gso.utils.types.interfaces import LAGMember, LAGMemberList, PhysicalPortCapacity
from orchestrator import workflow
from orchestrator.forms import SubmitFormPage
from orchestrator.targets import Target
from orchestrator.types import SubscriptionLifecycle
from orchestrator.workflow import StepList, begin, done, step
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
def initial_input_form_generator() -> FormGenerator:
......@@ -39,6 +39,7 @@ def initial_input_form_generator() -> FormGenerator:
iptrunk_minimum_links: int
iptrunk_isis_metric: int
iptrunk_description_suffix: str | None = None
iptrunk_config_version: str | None = None
side_a_node_id: active_router_selector() # type: ignore[valid-type]
side_a_ae_iface: str
......@@ -89,6 +90,7 @@ def initialize_subscription(
side_b_ae_iface: str,
side_b_ga_id: IMPORTED_GA_ID | None,
side_b_ae_members: LAGMemberList,
iptrunk_config_version: str | None,
) -> State:
"""Take all input from the user, and store it in the database."""
subscription.iptrunk.gs_id = gs_id
......@@ -98,6 +100,7 @@ def initialize_subscription(
subscription.iptrunk.iptrunk_isis_metric = iptrunk_isis_metric
subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
subscription.iptrunk.iptrunk_description_suffix = iptrunk_description_suffix
subscription.iptrunk.iptrunk_config_version = iptrunk_config_version
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node = Router.from_subscription(side_a_node_id).router
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_iface = side_a_ae_iface
......
......@@ -31,15 +31,6 @@ from typing import Annotated
from uuid import uuid4
from annotated_types import Len
from orchestrator.forms import FormPage
from orchestrator.forms.validators import Choice, Label
from orchestrator.targets import Target
from orchestrator.types import SubscriptionLifecycle
from orchestrator.utils.errors import ProcessFailureError
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, begin, conditional, done, step, step_group, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form
from ping3 import ping
from pydantic import ConfigDict
from pydantic_forms.types import FormGenerator, State, UUIDstr
......@@ -75,6 +66,15 @@ from gso.utils.types.netbox_router import NetboxEnabledRouter
from gso.utils.types.tt_number import TTNumber
from gso.utils.workflow_steps import prompt_sharepoint_checklist_url
from gso.workflows.shared import create_summary_form
from orchestrator.forms import FormPage
from orchestrator.forms.validators import Choice, Label
from orchestrator.targets import Target
from orchestrator.types import SubscriptionLifecycle
from orchestrator.utils.errors import ProcessFailureError
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, begin, conditional, done, step, step_group, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form
def initial_input_form_generator(product_name: str) -> FormGenerator:
......@@ -95,6 +95,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
iptrunk_speed: PhysicalPortCapacity
iptrunk_number_of_members: int
iptrunk_description_suffix: str | None = None
iptrunk_config_version: str | None = None
initial_user_input = yield CreateIptrunkForm
recommended_minimum_links = calculate_recommended_minimum_links(
......@@ -203,6 +204,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
"iptrunk_description",
"iptrunk_minimum_links",
"iptrunk_description_suffix",
"iptrunk_config_version",
"side_a_node",
"side_a_ae_iface",
"side_a_ae_members",
......@@ -327,6 +329,7 @@ def initialize_subscription(
iptrunk_speed: PhysicalPortCapacity,
iptrunk_minimum_links: int,
iptrunk_description_suffix: str | None,
iptrunk_config_version: str | None,
side_a_node_id: str,
side_a_ae_iface: str,
side_a_ae_members: list[dict],
......@@ -346,6 +349,7 @@ def initialize_subscription(
subscription.iptrunk.iptrunk_isis_metric = oss_params.GENERAL.isis_high_metric
subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
subscription.iptrunk.iptrunk_description_suffix = iptrunk_description_suffix
subscription.iptrunk.iptrunk_config_version = iptrunk_config_version
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node = side_a
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_iface = side_a_ae_iface
......
......@@ -23,6 +23,7 @@ def workflow_input_data(faker, router_subscription_factory):
"iptrunk_minimum_links": 2,
"iptrunk_isis_metric": 10000,
"iptrunk_description_suffix": faker.word(),
"iptrunk_config_version": "1.0",
"side_a_node_id": str(router_subscription_factory().subscription_id),
"side_a_ae_iface": faker.nokia_lag_interface_name(),
"side_a_ga_id": faker.imported_ga_id(),
......
......@@ -74,6 +74,7 @@ def input_form_wizard_data(request, router_subscription_factory, faker):
"iptrunk_speed": PhysicalPortCapacity.HUNDRED_GIGABIT_PER_SECOND,
"iptrunk_number_of_members": 2,
"iptrunk_description_suffix": faker.word(),
"iptrunk_config_version": "1.0"
}
create_ip_trunk_confirm_step = {"iptrunk_minimum_links": 1}
create_ip_trunk_side_a_router_name = {"side_a_node_id": router_side_a}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment