A modification workflow for a site.
Attributes of an existing site can be modified using the modify_site
workflow.
As a result, other subscriptions that rely on this site will have referenced
attributes updated as well.
Warning
Be aware that although this does update attributes in the services
database, it does not update any active subscription instances that are
already deployed. You will need to run additional workflows to update
subscriptions that depend on this change
Gather input from the operator on what to change about the selected site subscription.
Source code in gso/workflows/site/modify_site.py
| def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
"""Gather input from the operator on what to change about the selected site subscription."""
subscription = Site.from_subscription(subscription_id)
class ModifySiteForm(FormPage):
model_config = ConfigDict(title="Modify Site")
site_name: ReadOnlyField(subscription.site.site_name, default_type=str) # type: ignore[valid-type]
site_city: str = subscription.site.site_city
site_country: ReadOnlyField(subscription.site.site_country, default_type=str) # type: ignore[valid-type]
site_country_code: ReadOnlyField(subscription.site.site_country_code, default_type=str) # type: ignore[valid-type]
site_latitude: LatitudeCoordinate = subscription.site.site_latitude
site_longitude: LongitudeCoordinate = subscription.site.site_longitude
site_bgp_community_id: Annotated[int, AfterValidator(partial(validate_field_is_unique, subscription_id))] = (
subscription.site.site_bgp_community_id
)
site_internal_id: Annotated[int, AfterValidator(partial(validate_field_is_unique, subscription_id))] = (
subscription.site.site_internal_id
)
site_tier: ReadOnlyField(subscription.site.site_tier, default_type=SiteTier) # type: ignore[valid-type]
site_ts_address: (
Annotated[IPAddress, AfterValidator(partial(validate_field_is_unique, subscription_id))] | None
) = subscription.site.site_ts_address
user_input = yield ModifySiteForm
user_input = user_input.model_dump()
summary_fields = [
"site_bgp_community_id",
"site_internal_id",
"site_ts_address",
"site_city",
"site_latitude",
"site_longitude",
]
yield from modify_summary_form(user_input, subscription.site, summary_fields)
return user_input
|
modify_site_subscription(subscription, site_city, site_latitude, site_longitude, site_bgp_community_id, site_internal_id, site_ts_address)
Update the subscription model in the service database.
Source code in gso/workflows/site/modify_site.py
| @step("Modify subscription")
def modify_site_subscription(
subscription: Site,
site_city: str,
site_latitude: LatitudeCoordinate,
site_longitude: LongitudeCoordinate,
site_bgp_community_id: int,
site_internal_id: int,
site_ts_address: IPAddress,
) -> State:
"""Update the subscription model in the service database."""
subscription.site.site_city = site_city
subscription.site.site_latitude = site_latitude
subscription.site.site_longitude = site_longitude
subscription.site.site_bgp_community_id = site_bgp_community_id
subscription.site.site_internal_id = site_internal_id
subscription.site.site_ts_address = site_ts_address
subscription.description = f"Site in {site_city}, {subscription.site.site_country}"
return {"subscription": subscription}
|
modify_site()
Modify a site subscription.
- Update the subscription model in the service database
Source code in gso/workflows/site/modify_site.py
| @workflow(
"Modify Site",
initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator),
target=Target.MODIFY,
)
def modify_site() -> StepList:
"""Modify a site subscription.
* Update the subscription model in the service database
"""
return (
begin
>> store_process_subscription(Target.MODIFY)
>> unsync
>> modify_site_subscription
>> set_status(SubscriptionLifecycle.ACTIVE)
>> resync
>> done
)
|