Merge pull request 'api/modules: unify duplicate endpoints for {modules, instances}' (#4994) from search into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/4994
This commit is contained in:
@@ -288,14 +288,31 @@ def create_service_instance(
|
|||||||
msg = f"Instance '{instance_name}' already exists in the inventory"
|
msg = f"Instance '{instance_name}' already exists in the inventory"
|
||||||
raise ClanError(msg)
|
raise ClanError(msg)
|
||||||
|
|
||||||
# TODO: Check the roles against the schema
|
if roles == {}:
|
||||||
|
msg = "Creating a service instance requires adding roles"
|
||||||
|
raise ClanError(msg)
|
||||||
|
|
||||||
|
all_machines = inventory.get("machines", {})
|
||||||
|
available_machine_refs = set(all_machines.keys())
|
||||||
|
|
||||||
schema = get_service_module_schema(flake, module_ref)
|
schema = get_service_module_schema(flake, module_ref)
|
||||||
for role_name in roles:
|
for role_name, role_members in roles.items():
|
||||||
if role_name not in schema:
|
if role_name not in schema:
|
||||||
msg = f"Role '{role_name}' is not defined in the module schema"
|
msg = f"Role '{role_name}' is not defined in the module schema"
|
||||||
raise ClanError(msg)
|
raise ClanError(msg)
|
||||||
|
|
||||||
# TODO: Validate roles against the schema
|
machine_refs = role_members.get("machines")
|
||||||
|
msg = f"Role: '{role_name}' - "
|
||||||
|
if machine_refs:
|
||||||
|
unavailable_machines = list(
|
||||||
|
filter(lambda m: m not in available_machine_refs, machine_refs),
|
||||||
|
)
|
||||||
|
if unavailable_machines:
|
||||||
|
msg += f"Unknown machine reference: {unavailable_machines}. Use one of {available_machine_refs}"
|
||||||
|
raise ClanError(msg)
|
||||||
|
|
||||||
|
# TODO: Check the settings against the schema
|
||||||
|
# settings = role_members.get("settings", {})
|
||||||
|
|
||||||
# Create a new instance with the given roles
|
# Create a new instance with the given roles
|
||||||
new_instance: InventoryInstance = {
|
new_instance: InventoryInstance = {
|
||||||
|
|||||||
Reference in New Issue
Block a user