diff --git a/gso/services/netbox_client.py b/gso/services/netbox_client.py index 570ecbeb1fb1865cc2c433fdf5047491deaa9a57..b79283cc9baf6f887ee22d63f852f711b4e89d16 100644 --- a/gso/services/netbox_client.py +++ b/gso/services/netbox_client.py @@ -5,7 +5,7 @@ from uuid import UUID import pydantic import pynetbox -from pydantic_forms.types import UUIDstr +from orchestrator.types import UUIDstr from pynetbox.models.dcim import Devices, DeviceTypes, Interfaces from gso.products.product_types.router import Router diff --git a/gso/services/subscriptions.py b/gso/services/subscriptions.py index 8a8bcf98eeaf7e490e294298c3e6b4af9a070c68..33db8fd9c56a9a58391ead9d2e3d3177936002e0 100644 --- a/gso/services/subscriptions.py +++ b/gso/services/subscriptions.py @@ -18,8 +18,7 @@ from orchestrator.db import ( ) from orchestrator.domain import SubscriptionModel from orchestrator.services.subscriptions import query_in_use_by_subscriptions -from orchestrator.types import SubscriptionLifecycle -from pydantic_forms.types import UUIDstr +from orchestrator.types import SubscriptionLifecycle, UUIDstr from gso.products import ProductName, ProductType from gso.products.product_types.site import Site diff --git a/gso/settings.py b/gso/settings.py index f7d40de73c73cdb75ee7c6348210fb12c543100e..b7b62186c100b31154c70d626883caece02f93b1 100644 --- a/gso/settings.py +++ b/gso/settings.py @@ -11,8 +11,9 @@ import os from pathlib import Path from typing import Annotated +from orchestrator.types import UUIDstr from pydantic import EmailStr, Field -from pydantic_forms.types import UUIDstr, strEnum +from pydantic_forms.types import strEnum from pydantic_settings import BaseSettings from typing_extensions import Doc diff --git a/gso/utils/types/netbox_router.py b/gso/utils/types/netbox_router.py index 2a302b5604363deb9062a9c6649ae2140a27a856..8ea14aa43391818219ba1d3020b2e62453229b07 100644 --- a/gso/utils/types/netbox_router.py +++ b/gso/utils/types/netbox_router.py @@ -2,8 +2,8 @@ from typing import Annotated, TypeVar +from orchestrator.types import UUIDstr from pydantic import AfterValidator -from pydantic_forms.types import UUIDstr from gso.products.product_types.router import Router from gso.services.netbox_client import NetboxClient diff --git a/gso/workflows/router/terminate_router.py b/gso/workflows/router/terminate_router.py index 13cef223c8dfd0160130064d8e29e2290aa54f75..ad374f23f11623074131c414f10c1ee208798272 100644 --- a/gso/workflows/router/terminate_router.py +++ b/gso/workflows/router/terminate_router.py @@ -3,13 +3,11 @@ import ipaddress import json import logging -from typing import Any 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.utils.errors import ProcessFailureError +from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr from orchestrator.utils.json import json_dumps from orchestrator.workflow import StepList, begin, conditional, done, step, workflow from orchestrator.workflows.steps import ( @@ -19,6 +17,7 @@ from orchestrator.workflows.steps import ( unsync, ) from orchestrator.workflows.utils import wrap_modify_initial_input_form +from requests import HTTPError from gso.products.product_blocks.router import RouterRole from gso.products.product_types.router import Router @@ -224,13 +223,17 @@ def remove_pe_from_all_p_real(subscription: Router, tt_number: str, process_id: @step("Remove Device from Librenms") -def remove_device_from_librenms(subscription: Router) -> None: +def remove_device_from_librenms(subscription: Router) -> State | None: """Remove the device from LibreNMS.""" - LibreNMSClient().remove_device(subscription.router.router_fqdn) + try: + LibreNMSClient().remove_device(subscription.router.router_fqdn) + except HTTPError as e: + return {"librenms_error": str(e)} + return None @step("Apply the archiving license in Kentik") -def kentik_apply_archive_license(subscription: Router) -> dict[str, dict[str, Any]]: +def kentik_apply_archive_license(subscription: Router) -> State: """Apply the archiving license to a PE router in Kentik. This includes setting the flow rate to one flow per second. @@ -239,8 +242,7 @@ def kentik_apply_archive_license(subscription: Router) -> dict[str, dict[str, An kentik_archive_plan_id = kentik_client.get_plan_by_name(load_oss_params().KENTIK.archive_license_key)["id"] kentik_device = kentik_client.get_device_by_name(subscription.router.router_fqdn) if "id" not in kentik_device: - msg = "Failed to find Kentik device by name" - raise ProcessFailureError(msg, details=kentik_device) + return {"kentik_device": "Device not found, no license applied"} updated_device = {"device": {"plan_id": kentik_archive_plan_id, "device_sample_rate": 1}} kentik_device = kentik_client.update_device(kentik_device["id"], updated_device) diff --git a/gso/workflows/router/validate_router.py b/gso/workflows/router/validate_router.py index 9e13f521cb4edb062086b696846ff3d8bc17d8f9..ab6e3059f5b2e61ef0371290c115bf0be76cf41c 100644 --- a/gso/workflows/router/validate_router.py +++ b/gso/workflows/router/validate_router.py @@ -3,11 +3,11 @@ from typing import Any from orchestrator.targets import Target +from orchestrator.types import State, UUIDstr from orchestrator.utils.errors import ProcessFailureError 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_forms.types import State, UUIDstr from gso.products.product_blocks.router import RouterRole from gso.products.product_types.router import Router diff --git a/gso/workflows/tasks/delete_partners.py b/gso/workflows/tasks/delete_partners.py index cd06cc06d541163d5de3e6a6c2797ddf1f9e016d..6eac752bbb417500d383d43fbc6ce2c3567031d1 100644 --- a/gso/workflows/tasks/delete_partners.py +++ b/gso/workflows/tasks/delete_partners.py @@ -4,10 +4,9 @@ from enum import Enum from orchestrator.forms import FormPage from orchestrator.targets import Target -from orchestrator.types import FormGenerator, State +from orchestrator.types import FormGenerator, State, UUIDstr from orchestrator.workflow import StepList, begin, done, step, workflow from pydantic import ConfigDict, EmailStr, field_validator -from pydantic_forms.types import UUIDstr from pydantic_forms.validators import Choice from gso.services.partners import delete_partner, get_all_partners, get_partner_by_name diff --git a/gso/workflows/tasks/modify_partners.py b/gso/workflows/tasks/modify_partners.py index 46f912cc10824a83769480935011791e35739f3d..cb2daddac8d646c87e20d80449024707cb319d21 100644 --- a/gso/workflows/tasks/modify_partners.py +++ b/gso/workflows/tasks/modify_partners.py @@ -2,10 +2,9 @@ from orchestrator.forms import FormPage from orchestrator.targets import Target -from orchestrator.types import FormGenerator, State +from orchestrator.types import FormGenerator, State, UUIDstr from orchestrator.workflow import StepList, begin, done, step, workflow from pydantic import ConfigDict, EmailStr, field_validator -from pydantic_forms.types import UUIDstr from pydantic_forms.validators import Choice from gso.services.partners import (