Skip to content
Snippets Groups Projects
Commit 4db637b2 authored by Simone Spinelli's avatar Simone Spinelli
Browse files

Rebase develop

parent 70a5a0f0
No related branches found
No related tags found
1 merge request!55Feature/nat 230 add isis and ping checks to create iptrunk workflow
......@@ -124,6 +124,24 @@ def provision_ip_trunk(
_send_request("ip_trunk", parameters, process_id, CUDOperation.POST)
def check_ip_trunk(
subscription: IptrunkProvisioning, process_id: UUIDstr, check_name: str
) -> None:
"""Provision an IP trunk service using {term}`LSO`.
:param subscription: The subscription object that's to be provisioned.
:type subscription: {class}`IptrunkProvisioning`
:param process_id: The related process ID, used for callback.
:type process_id: UUIDstr
:param check_name: The name of the check to execute
:rtype: None
"""
parameters = {
"subscription": json.loads(json_dumps(subscription)),
"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:
"""Deprovision an IP trunk service using {term}`LSO`.
......
import ipaddress
import re
from uuid import uuid4
from orchestrator.db.models import ProductTable, SubscriptionTable
# noinspection PyProtectedMember
from orchestrator.forms import FormPage
from orchestrator.forms.validators import Choice
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State
from orchestrator.types import SubscriptionLifecycle, UUIDstr
from orchestrator.workflow import done, init, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form
from gso.products.product_blocks import device as device_pb
from gso.products.product_types import device
from gso.products.product_types.device import (
Device,
)
from gso.products.product_types.site import Site
from gso.services import _ipam
def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
subscription = Device.from_subscription(subscription_id)
class SimoneDeviceForm(FormPage):
class Config:
random_input: str
user_input = yield SimoneDeviceForm
return user_input.dict()
@step("Show the devices")
def display_devices() -> State:
devices = []
for subscription_id in (
SubscriptionTable.query.join(ProductTable)
.filter(
ProductTable.product_type == "Device",
SubscriptionTable.status == "active",
)
.with_entities(
SubscriptionTable.subscription_id,
)
.all()
):
devices.append(Device.from_subscription(subscription_id))
pe_devices = []
p_devices = []
for device in devices :
if device.device.device_access_via_ts == False :
if device.device.device_role == "p":
p_devices.append(device)
if device.device.device_role == "pe":
pe_devices.append(device)
return {
"pe_devices": pe_devices,
"p_devices": p_devices,
}
@workflow(
"Add node to iBGP",
initial_input_form=wrap_modify_initial_input_form(
initial_input_form_generator
),
target=Target.MODIFY,
)
def insert_in_ibgp():
return (
init
>> store_process_subscription(Target.MODIFY)
>> unsync
>> display_devices
>> resync
>> done
)
\ No newline at end of file
......@@ -172,6 +172,14 @@ def provision_ip_trunk_iface_real(subscription: IptrunkProvisioning, process_id:
"label_text": "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")
return {
"subscription": subscription,
"label_text": "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:
......@@ -193,6 +201,15 @@ def provision_ip_trunk_isis_iface_real(subscription: IptrunkProvisioning, proces
}
@step("Check ISIS adjacency")
def check_ip_trunk_isis(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State:
provisioning_proxy.check_ip_trunk(subscription, process_id, "isis")
return {
"subscription": subscription,
"label_text": "Checking ISIS adjacencies, 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")
......@@ -247,10 +264,10 @@ def create_iptrunk() -> StepList:
>> get_info_from_ipam
>> pp_interaction(provision_ip_trunk_iface_dry, 3)
>> pp_interaction(provision_ip_trunk_iface_real, 3)
>> check_ip_trunk_connectivity
>> pp_interaction(provision_ip_trunk_isis_iface_dry, 3)
>> pp_interaction(provision_ip_trunk_isis_iface_real, 3)
>> pp_interaction(provision_ip_trunk_ldp_iface_dry, 3)
>> pp_interaction(provision_ip_trunk_ldp_iface_real, 3)
>> check_ip_trunk_isis
>> pp_interaction(provision_ip_trunk_lldp_iface_dry, 3)
>> pp_interaction(provision_ip_trunk_lldp_iface_real, 3)
>> set_status(SubscriptionLifecycle.ACTIVE)
......
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