Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • goat/gap/geant-service-orchestrator
1 result
Show changes
Commits on Source (9)
......@@ -208,24 +208,20 @@ def _confirm_pp_results(state: State) -> FormGenerator:
class ConfirmRunPage(FormPage):
class Config:
title = (
f"Execution for "
f"{state['subscription']['product']['name']} "
f"completed, please confirm the results below."
f"Execution for {state['subscription']['product']['name']} completed, please confirm the results below."
)
run_status: str = ReadOnlyField(state["pp_run_results"]["status"])
if not successful_run:
warning_run_status: str = ReadOnlyField(state["pp_run_results"]["status"])
failed_run_status: str = ReadOnlyField(state["pp_run_results"]["status"])
broken_run_status: str = ReadOnlyField(state["pp_run_results"]["status"])
ouch_run_status: str = ReadOnlyField(state["pp_run_results"]["status"])
unsuccessful_run_status: str = ReadOnlyField(state["pp_run_results"]["status"])
run_results: LongText = ReadOnlyField(f"{state['pp_run_results']['output']}")
pp_retry_label1: Label = (
"Provisioning Proxy - playbook execution failed: inspect the output before proceeding" # type: ignore
)
run_status: str = ReadOnlyField(state["pp_run_results"]["status"])
run_results: LongText = ReadOnlyField(json.dumps(state["pp_run_results"]["output"], indent=4))
if not successful_run:
pp_retry_label: Label = (
"Provisioning Proxy playbook execution failed, it will be retried (up to two times)." # type: ignore
"Click submit to retry. Otherwise, abort the workflow from the process tab." # type: ignore
)
confirm: Accept = Accept("INCOMPLETE")
yield ConfirmRunPage
......
......@@ -16,42 +16,30 @@ class InterfaceAllocationState(Enum):
ALLOCATED = auto()
def _dummy_router_interfaces(site_name) -> dict:
def _dummy_router_interfaces():
return {
"site": site_name,
"lags": [],
"physical": [{"name": f"ifc-{x}", "state": InterfaceAllocationState.AVAILABLE} for x in range(250)],
}
_DUMMY_SITES = {"site-a", "site-b", "site-c"}
_DUMMY_INVENTORY = {
"fqdn-a": _dummy_router_interfaces("site-a"),
"fqdn-b": _dummy_router_interfaces("site-a"),
"fqdn-c": _dummy_router_interfaces("site-b"),
"fqdn-d": _dummy_router_interfaces("site-b"),
"fqdn-e": _dummy_router_interfaces("site-c"),
"fqdn-f": _dummy_router_interfaces("site-c"),
"fqdn-a": _dummy_router_interfaces(),
"fqdn-b": _dummy_router_interfaces(),
"fqdn-c": _dummy_router_interfaces(),
"fqdn-d": _dummy_router_interfaces(),
}
def import_new_site(new_site_name: str, oss_params=settings.OSSParams):
# TODO: this is a dummy implementation
assert new_site_name not in _DUMMY_SITES
_DUMMY_SITES.add(new_site_name)
def import_new_router(new_router_fqdn: str, site_name: str, oss_params=settings.OSSParams):
def import_new_router(new_router_fqdn: str, subscription_id: str, oss_params=settings.OSSParams):
# TODO: this is a dummy implementation
# TODO: specify if this should be an error (and if not, what it means)
assert site_name in _DUMMY_SITES
# TODO: specifiy if this should be an error (and if now, what it means)
assert new_router_fqdn not in _DUMMY_INVENTORY
_DUMMY_INVENTORY[new_router_fqdn] = _dummy_router_interfaces(site_name)
_DUMMY_INVENTORY[new_router_fqdn] = _dummy_router_interfaces()
def next_lag(router_fqdn: str, oss_params=settings.OSSParams) -> str:
def next_lag(router_fqdn: str, subscription_id: str, oss_params=settings.OSSParams) -> str:
# TODO: this is a dummy implementation
assert router_fqdn in _DUMMY_INVENTORY
......@@ -85,7 +73,9 @@ def _find_physical(router_fqdn: str, interface_name: str) -> dict:
raise AssertionError(f"interface {interface_name} not found on {router_fqdn}")
def reserve_physical_interface(router_fqdn: str, interface_name: str, oss_params=settings.OSSParams):
def reserve_physical_interface(
router_fqdn: str, interface_name: str, subscription_id: str, oss_params=settings.OSSParams
):
# TODO: this is a dummy implementation
ifc = _find_physical(router_fqdn, interface_name)
......
......@@ -11,26 +11,18 @@ def _random_string(n=None, letters=string.ascii_letters + string.digits + string
return "".join(random.choices(letters, k=n)) # noqa: S311
def test_new_site():
site_name = _random_string(10)
assert site_name not in resource_manager._DUMMY_SITES
resource_manager.import_new_site(new_site_name=site_name)
assert site_name in resource_manager._DUMMY_SITES
def test_new_router():
site_name = _random_string(10)
resource_manager.import_new_site(new_site_name=site_name)
router_name = _random_string(10)
assert router_name not in resource_manager._DUMMY_INVENTORY
resource_manager.import_new_router(new_router_fqdn=router_name, site_name=site_name)
resource_manager.import_new_router(new_router_fqdn=router_name, subscription_id=_random_string(10))
assert router_name in resource_manager._DUMMY_INVENTORY
def test_new_lag():
router_name = list(resource_manager._DUMMY_INVENTORY.keys())[0]
new_lags = {resource_manager.next_lag(router_fqdn=router_name) for _ in range(10)}
new_lags = {
resource_manager.next_lag(router_fqdn=router_name, subscription_id=_random_string(10)) for _ in range(10)
}
assert len(new_lags) == 10
assert new_lags <= set(resource_manager._DUMMY_INVENTORY[router_name]["lags"])
......@@ -45,7 +37,9 @@ def test_physical_allocation_lifecycle_happy():
interface_name = initial_available[0]
resource_manager.reserve_physical_interface(router_fqdn=router_name, interface_name=interface_name)
resource_manager.reserve_physical_interface(
router_fqdn=router_name, subscription_id=_random_string(10), interface_name=interface_name
)
current_available = _interfaces()
assert interface_name not in current_available
......