{
    "definitions": {
        "API-Version": {
            "properties": {
                "message": {
                    "description": "A text message",
                    "example": "PVC API version 1.0",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "CeleryTask": {
            "description": "The Celery job information of the task",
            "properties": {
                "run_on": {
                    "description": "The worker daemon instance assigned to run the task",
                    "type": "string"
                },
                "task_id": {
                    "description": "The internal Celery job ID of the task",
                    "type": "string"
                },
                "task_name": {
                    "description": "The internal Celery job task name",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "Cluster Data": {
            "type": "object"
        },
        "ClusterStatus": {
            "properties": {
                "cluster_health": {
                    "properties": {
                        "health": {
                            "description": "The overall health (%) of the cluster",
                            "example": 100,
                            "type": "integer"
                        },
                        "messages": {
                            "description": "A list of health event strings",
                            "items": {
                                "example": "hv1: plugin 'nics': bond0 DEGRADED with 1 active slaves, bond0 OK at 10000 Mbps",
                                "type": "string"
                            },
                            "type": "array"
                        }
                    },
                    "type": "object"
                },
                "maintenance": {
                    "description": "Whether the cluster is in maintenance mode or not (string boolean)",
                    "example": "true",
                    "type": "string"
                },
                "networks": {
                    "description": "The total number of networks in the cluster",
                    "type": "integer"
                },
                "node_health": {
                    "properties": {
                        "hvX": {
                            "description": "A node entry for per-node health details, one per node in the cluster",
                            "properties": {
                                "health": {
                                    "description": "The health (%) of the node",
                                    "example": 100,
                                    "type": "integer"
                                },
                                "messages": {
                                    "description": "A list of health event strings",
                                    "items": {
                                        "example": "'nics': bond0 DEGRADED with 1 active slaves, bond0 OK at 10000 Mbps",
                                        "type": "string"
                                    },
                                    "type": "array"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "type": "object"
                },
                "nodes": {
                    "properties": {
                        "state-combination": {
                            "description": "The total number of nodes in {state-combination} state, where {state-combination} is the node daemon and domain states in CSV format, e.g. \"run,ready\", \"stop,flushed\", etc.",
                            "type": "integer"
                        },
                        "total": {
                            "description": "The total number of nodes in the cluster",
                            "example": 3,
                            "type": "integer"
                        }
                    },
                    "type": "object"
                },
                "osds": {
                    "properties": {
                        "state-combination": {
                            "description": "The total number of OSDs in {state-combination} state, where {state-combination} is the OSD up and in states in CSV format, e.g. \"up,in\", \"down,out\", etc.",
                            "type": "integer"
                        },
                        "total": {
                            "description": "The total number of OSDs in the storage cluster",
                            "example": 3,
                            "type": "integer"
                        }
                    },
                    "type": "object"
                },
                "pools": {
                    "description": "The total number of pools in the storage cluster",
                    "type": "integer"
                },
                "primary_node": {
                    "description": "The current primary coordinator node",
                    "example": "pvchv1",
                    "type": "string"
                },
                "pvc_version": {
                    "description": "The PVC version of the current primary coordinator node",
                    "example": "0.9.61",
                    "type": "string"
                },
                "resources": {
                    "properties": {
                        "disk": {
                            "properties": {
                                "free": {
                                    "description": "The total free size of all OSDs in KB",
                                    "type": "integer"
                                },
                                "total": {
                                    "description": "The total size of all OSDs in KB",
                                    "type": "integer"
                                },
                                "used": {
                                    "description": "The total used size of all OSDs in KB",
                                    "type": "integer"
                                },
                                "utilization": {
                                    "description": "The disk utilization percentage (average) of the cluster",
                                    "type": "number"
                                }
                            },
                            "type": "object"
                        },
                        "memory": {
                            "properties": {
                                "allocated": {
                                    "description": "The total amount of RAM allocated to running domains in MB",
                                    "type": "integer"
                                },
                                "free": {
                                    "description": "The total free RAM (all nodes) in MB",
                                    "type": "integer"
                                },
                                "provisioned": {
                                    "description": "The total amount of RAM provisioned to all domains (regardless of state) in MB",
                                    "type": "integer"
                                },
                                "total": {
                                    "description": "The total amount of RAM (all nodes) in MB",
                                    "type": "integer"
                                },
                                "used": {
                                    "description": "The total used RAM (all nodes) in MB",
                                    "type": "integer"
                                },
                                "utilization": {
                                    "description": "The memory utilization percentage (average) of the cluster",
                                    "type": "number"
                                }
                            },
                            "type": "object"
                        },
                        "vcpu": {
                            "properties": {
                                "allocated": {
                                    "description": "The total number of vCPUs allocated to running domains",
                                    "type": "integer"
                                },
                                "load": {
                                    "description": "The current 5-minute CPU load (all nodes summed)",
                                    "type": "number"
                                },
                                "provisioned": {
                                    "description": "The total number of vCPUs provisioned to all domains (regardless of state)",
                                    "type": "integer"
                                },
                                "total": {
                                    "description": "The total number of real CPU cores (all nodes)",
                                    "type": "integer"
                                },
                                "utilization": {
                                    "description": "The CPU utilization percentage (average) of the cluster",
                                    "type": "number"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "type": "object"
                },
                "snapshots": {
                    "description": "The total number of snapshots in the storage cluster",
                    "type": "integer"
                },
                "upstream_ip": {
                    "description": "The cluster upstream IP address in CIDR format",
                    "example": "10.0.0.254/24",
                    "type": "string"
                },
                "vms": {
                    "properties": {
                        "state": {
                            "description": "The total number of VMs in {state} state, e.g. \"start\", \"stop\", etc.",
                            "type": "integer"
                        },
                        "total": {
                            "description": "The total number of VMs in the cluster",
                            "example": 6,
                            "type": "integer"
                        }
                    },
                    "type": "object"
                },
                "volumes": {
                    "description": "The total number of volumes in the storage cluster",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "Message": {
            "properties": {
                "message": {
                    "description": "A text message",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "NodeCoordinatorState": {
            "properties": {
                "coordinator_state": {
                    "description": "The current coordinator state",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the node",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "NodeDaemonState": {
            "properties": {
                "daemon_state": {
                    "description": "The current daemon state",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the node",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "NodeDomainState": {
            "properties": {
                "domain_state": {
                    "description": "The current domain state",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the node",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "NodeLog": {
            "properties": {
                "data": {
                    "description": "The recent log text",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the Node",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "VMLog": {
            "properties": {
                "data": {
                    "description": "The recent console log text",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the VM",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "VMMetadata": {
            "properties": {
                "migration_max_downtime": {
                    "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                    "type": "integer"
                },
                "migration_method": {
                    "description": "The preferred migration method (live, shutdown, none)",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the VM",
                    "type": "string"
                },
                "node_autostart": {
                    "description": "Whether to autostart the VM when its node returns to ready domain state",
                    "type": "string"
                },
                "node_limit": {
                    "description": "The node(s) the VM is permitted to be assigned to",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "node_selector": {
                    "description": "The selector used to determine candidate nodes during migration; see 'target_selector' in the node daemon configuration reference",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "VMNode": {
            "properties": {
                "last_node": {
                    "description": "The last node the VM was assigned to before migrating",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the VM",
                    "type": "string"
                },
                "node": {
                    "description": "The node the VM is currently assigned to",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "VMState": {
            "properties": {
                "name": {
                    "description": "The name of the VM",
                    "type": "string"
                },
                "state": {
                    "description": "The current state of the VM",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "acl": {
            "properties": {
                "description": {
                    "description": "The description of the rule",
                    "type": "string"
                },
                "direction": {
                    "description": "The direction the rule applies in",
                    "type": "string"
                },
                "order": {
                    "description": "The order of the rule in the chain",
                    "type": "integer"
                },
                "rule": {
                    "description": "The NFT-format rule string",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "all-templates": {
            "properties": {
                "network-templates": {
                    "items": {
                        "$ref": "#/definitions/network-template"
                    },
                    "type": "array"
                },
                "storage-templates": {
                    "items": {
                        "$ref": "#/definitions/storage-template"
                    },
                    "type": "array"
                },
                "system-templates": {
                    "items": {
                        "$ref": "#/definitions/system-template"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "fault": {
            "properties": {
                "acknowledged_at": {
                    "description": "The time the fault was acknowledged, or empty if not acknowledged",
                    "example": "2023-12-01 17:50:00.000000",
                    "type": "string"
                },
                "first_reported": {
                    "description": "The first time the fault was reported",
                    "example": "2023-12-01 16:47:59.849742",
                    "type": "string"
                },
                "health_delta": {
                    "description": "The health delta (amount it reduces cluster health from 100%) of the fault",
                    "example": 25,
                    "type": "integer"
                },
                "id": {
                    "description": "The ID of the fault",
                    "example": "10ae144b78b4cc5fdf09e2ebbac51235",
                    "type": "string"
                },
                "last_reported": {
                    "description": "The last time the fault was reported",
                    "example": "2023-12-01 17:39:45.188398",
                    "type": "string"
                },
                "message": {
                    "description": "The textual description of the fault",
                    "example": "Node hv1 was at 40% (psur@-10%, psql@-50%) <= 50% health",
                    "type": "string"
                },
                "status": {
                    "description": "The current state of the fault, either \"new\" or \"ack\" (acknowledged)",
                    "example": "new",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "lease": {
            "properties": {
                "hostname": {
                    "description": "The (short) hostname of the lease",
                    "type": "string"
                },
                "ip4_address": {
                    "description": "The IPv4 address of the lease",
                    "type": "string"
                },
                "mac_address": {
                    "description": "The MAC address of the lease",
                    "type": "string"
                },
                "timestamp": {
                    "description": "The UNIX timestamp of the lease creation",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "network": {
            "properties": {
                "description": {
                    "description": "The description of the network",
                    "type": "string"
                },
                "domain": {
                    "description": "The DNS domain of the network (\"managed\" networks only)",
                    "type": "string"
                },
                "ip4": {
                    "description": "The IPv4 details of the network (\"managed\" networks only)",
                    "properties": {
                        "dhcp_end": {
                            "description": "The IPv4 DHCP pool end address",
                            "type": "string"
                        },
                        "dhcp_flag": {
                            "description": "Whether DHCP is enabled",
                            "type": "boolean"
                        },
                        "dhcp_start": {
                            "description": "The IPv4 DHCP pool start address",
                            "type": "string"
                        },
                        "gateway": {
                            "description": "The IPv4 default gateway address",
                            "type": "string"
                        },
                        "network": {
                            "description": "The IPv4 network subnet in CIDR format",
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "ip6": {
                    "description": "The IPv6 details of the network (\"managed\" networks only)",
                    "properties": {
                        "dhcp_flag": {
                            "description": "Whether DHCPv6 is enabled",
                            "type": "boolean"
                        },
                        "gateway": {
                            "description": "The IPv6 default gateway address",
                            "type": "string"
                        },
                        "network": {
                            "description": "The IPv6 network subnet in CIDR format",
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "mtu": {
                    "description": "The MTU of the network, if set; empty otherwise",
                    "type": "integer"
                },
                "name_servers": {
                    "description": "The configured DNS nameservers of the network for NS records (\"managed\" networks only)",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "type": {
                    "description": "The type of network",
                    "enum": [
                        "managed",
                        "bridged"
                    ],
                    "type": "string"
                },
                "vni": {
                    "description": "The VNI of the network",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "network-template": {
            "properties": {
                "id": {
                    "description": "Internal provisioner template ID",
                    "type": "integer"
                },
                "mac_template": {
                    "description": "MAC address template for VM",
                    "type": "string"
                },
                "name": {
                    "description": "Template name",
                    "type": "string"
                },
                "networks": {
                    "items": {
                        "$ref": "#/definitions/network-template-net"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "network-template-net": {
            "properties": {
                "id": {
                    "description": "Internal provisioner template ID",
                    "type": "integer"
                },
                "network_template": {
                    "description": "Internal provisioner network template ID",
                    "type": "integer"
                },
                "vni": {
                    "description": "PVC network VNI",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "node": {
            "properties": {
                "arch": {
                    "description": "The architecture of the CPU",
                    "type": "string"
                },
                "coordinator_state": {
                    "description": "The current coordinator state",
                    "type": "string"
                },
                "cpu_count": {
                    "description": "The number of available CPU cores",
                    "type": "integer"
                },
                "daemon_state": {
                    "description": "The current daemon state",
                    "type": "string"
                },
                "domain_state": {
                    "description": "The current domain (VM) state",
                    "type": "string"
                },
                "domains_count": {
                    "description": "The number of running domains (VMs)",
                    "type": "integer"
                },
                "health": {
                    "description": "The overall health (%) of the node",
                    "example": 100,
                    "type": "integer"
                },
                "health_details": {
                    "description": "A list of health plugin results",
                    "items": {
                        "properties": {
                            "health_delta": {
                                "description": "The health delta (negatively applied to the health percentage) of the plugin's current state",
                                "example": 10,
                                "type": "integer"
                            },
                            "last_run": {
                                "description": "The UNIX timestamp (s) of the last plugin run",
                                "example": 1676786078,
                                "type": "integer"
                            },
                            "message": {
                                "description": "The output message of the plugin",
                                "example": "bond0 DEGRADED with 1 active slaves, bond0 OK at 10000 Mbps",
                                "type": "string"
                            },
                            "name": {
                                "description": "The name of the health plugin",
                                "example": "nics",
                                "type": "string"
                            }
                        },
                        "type": "object"
                    },
                    "type": "array"
                },
                "health_plugins": {
                    "description": "A list of health plugin names currently loaded on the node",
                    "items": {
                        "example": "nics",
                        "type": "string"
                    },
                    "type": "array"
                },
                "interfaces": {
                    "description": "Details on speed, bytes, and packets per second of each node physical network interface",
                    "type": "object"
                },
                "kernel": {
                    "description": "The running kernel version from uname",
                    "type": "string"
                },
                "load": {
                    "description": "The current 5-minute CPU load",
                    "format": "float",
                    "type": "number"
                },
                "memory": {
                    "properties": {
                        "allocated": {
                            "description": "The total amount of RAM allocated to running domains in MB",
                            "type": "integer"
                        },
                        "free": {
                            "description": "The total free RAM on the node in MB",
                            "type": "integer"
                        },
                        "provisioned": {
                            "description": "The total amount of RAM provisioned to all domains (regardless of state) on this node in MB",
                            "type": "integer"
                        },
                        "total": {
                            "description": "The total amount of node RAM in MB",
                            "type": "integer"
                        },
                        "used": {
                            "description": "The total used RAM on the node in MB",
                            "type": "integer"
                        }
                    },
                    "type": "object"
                },
                "name": {
                    "description": "The name of the node",
                    "type": "string"
                },
                "os": {
                    "description": "The current operating system type",
                    "type": "string"
                },
                "pvc_version": {
                    "description": "The current running PVC node daemon version",
                    "type": "string"
                },
                "running_domains": {
                    "description": "The list of running domains (VMs) by UUID",
                    "type": "string"
                },
                "vcpu": {
                    "properties": {
                        "allocated": {
                            "description": "The total number of allocated vCPU cores",
                            "type": "integer"
                        },
                        "total": {
                            "description": "The total number of real CPU cores available",
                            "type": "integer"
                        }
                    },
                    "type": "object"
                }
            },
            "type": "object"
        },
        "osd": {
            "properties": {
                "db_device": {
                    "description": "The OSD database/WAL block device (logical volume); empty if not applicable",
                    "type": "string"
                },
                "device": {
                    "description": "The OSD data block device",
                    "type": "string"
                },
                "id": {
                    "description": "The Ceph ID of the OSD",
                    "type": "string"
                },
                "stats": {
                    "properties": {
                        "avail": {
                            "description": "The free space on the OSD in human-readable format",
                            "type": "string"
                        },
                        "in": {
                            "description": "Whether OSD is in \"in\" state, as boolean integer",
                            "type": "integer"
                        },
                        "kb": {
                            "description": "Size of the OSD in KB",
                            "type": "integer"
                        },
                        "node": {
                            "description": "The PVC node the OSD resides on",
                            "type": "string"
                        },
                        "pgs": {
                            "description": "The number of placement groups on this OSD",
                            "type": "integer"
                        },
                        "primary_affinity": {
                            "description": "The Ceph primary affinity of the OSD",
                            "type": "integer"
                        },
                        "rd_data": {
                            "description": "Cluster-lifetime read size from OSD",
                            "type": "integer"
                        },
                        "rd_ops": {
                            "description": "Cluster-lifetime read operations from OSD",
                            "type": "integer"
                        },
                        "reweight": {
                            "description": "The active cluster weight of the OSD",
                            "type": "number"
                        },
                        "state": {
                            "description": "CSV of the current state of the OSD",
                            "type": "string"
                        },
                        "up": {
                            "description": "Whether OSD is in \"up\" state, as boolean integer",
                            "type": "integer"
                        },
                        "used": {
                            "description": "The used space on the OSD in human-readable format",
                            "type": "string"
                        },
                        "utilization": {
                            "description": "The utilization percentage of the OSD",
                            "type": "number"
                        },
                        "uuid": {
                            "description": "The Ceph OSD UUID",
                            "type": "string"
                        },
                        "var": {
                            "description": "The usage variability among OSDs",
                            "type": "number"
                        },
                        "weight": {
                            "description": "The weight of the OSD in the CRUSH map",
                            "type": "number"
                        },
                        "wr_data": {
                            "description": "Cluster-lifetime write size to OSD",
                            "type": "integer"
                        },
                        "wr_ops": {
                            "description": "Cluster-lifetime write operations to OSD",
                            "type": "integer"
                        }
                    },
                    "type": "object"
                }
            },
            "type": "object"
        },
        "ova": {
            "properties": {
                "id": {
                    "description": "Internal provisioner OVA ID",
                    "type": "integer"
                },
                "name": {
                    "description": "OVA name",
                    "type": "string"
                },
                "volumes": {
                    "items": {
                        "properties": {
                            "disk_id": {
                                "description": "Disk identifier",
                                "type": "string"
                            },
                            "disk_size_gb": {
                                "description": "Disk size in GB",
                                "type": "string"
                            },
                            "pool": {
                                "description": "Pool containing the OVA volume",
                                "type": "string"
                            },
                            "volume_format": {
                                "description": "OVA image format",
                                "type": "string"
                            },
                            "volume_name": {
                                "description": "Storage volume containing the OVA image",
                                "type": "string"
                            }
                        },
                        "type": "object"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "pool": {
            "properties": {
                "name": {
                    "description": "The name of the pool",
                    "type": "string"
                },
                "pgs": {
                    "description": "The number of PGs (placement groups) for the pool",
                    "type": "integer"
                },
                "stats": {
                    "properties": {
                        "free_bytes": {
                            "description": "The total free space (in bytes. post-replicas)",
                            "type": "integer"
                        },
                        "id": {
                            "description": "The Ceph pool ID",
                            "type": "integer"
                        },
                        "num_object_clones": {
                            "description": "The total number of cloned Ceph objects",
                            "type": "integer"
                        },
                        "num_object_copies": {
                            "description": "The total number of Ceph objects after replication",
                            "type": "integer"
                        },
                        "num_objects": {
                            "description": "The number of Ceph objects before replication",
                            "type": "integer"
                        },
                        "num_objects_degraded": {
                            "description": "The total number of degraded Ceph objects",
                            "type": "integer"
                        },
                        "num_objects_missing_on_primary": {
                            "description": "The total number of missing-on-primary Ceph objects",
                            "type": "integer"
                        },
                        "num_objects_unfound": {
                            "description": "The total number of unfound Ceph objects",
                            "type": "integer"
                        },
                        "read_bytes": {
                            "description": "The total read bytes on the pool (pool-lifetime)",
                            "type": "integer"
                        },
                        "read_ops": {
                            "description": "The total read operations on the pool (pool-lifetime)",
                            "type": "integer"
                        },
                        "stored_bytes": {
                            "description": "The stored data size (in bytes, post-replicas)",
                            "type": "integer"
                        },
                        "used_bytes": {
                            "description": "The total used space (in bytes, pre-replicas)",
                            "type": "integer"
                        },
                        "used_percent": {
                            "description": "The ratio of used space to free space",
                            "type": "number"
                        },
                        "write_bytes": {
                            "description": "The total write bytes on the pool (pool-lifetime)",
                            "type": "integer"
                        },
                        "write_ops": {
                            "description": "The total write operations on the pool (pool-lifetime)",
                            "type": "integer"
                        }
                    },
                    "type": "object"
                },
                "tier": {
                    "description": "The device class/tier of the pool",
                    "type": "string"
                },
                "volume_count": {
                    "description": "The number of volumes in the pool",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "profile": {
            "properties": {
                "arguments": {
                    "items": {
                        "description": "Script install() function keyword arguments in \"arg=data\" format",
                        "type": "string"
                    },
                    "type": "array"
                },
                "id": {
                    "description": "Internal provisioner profile ID",
                    "type": "integer"
                },
                "name": {
                    "description": "Profile name",
                    "type": "string"
                },
                "network_template": {
                    "description": "Network template name",
                    "type": "string"
                },
                "script": {
                    "description": "Script name",
                    "type": "string"
                },
                "storage_template": {
                    "description": "Storage template name",
                    "type": "string"
                },
                "system_template": {
                    "description": "System template name",
                    "type": "string"
                },
                "userdata": {
                    "description": "Userdata template name",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "script": {
            "properties": {
                "id": {
                    "description": "Internal provisioner script ID",
                    "type": "integer"
                },
                "name": {
                    "description": "Script name",
                    "type": "string"
                },
                "script": {
                    "description": "Raw Python script document",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "snapshot": {
            "properties": {
                "pool": {
                    "description": "The name of the pool",
                    "type": "string"
                },
                "snapshot": {
                    "description": "The name of the snapshot",
                    "type": "string"
                },
                "volume": {
                    "description": "The name of the volume",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "sriov_pf": {
            "properties": {
                "mtu": {
                    "description": "The MTU of the SR-IOV PF device",
                    "type": "string"
                },
                "phy": {
                    "description": "The name of the SR-IOV PF device",
                    "type": "string"
                },
                "vfs": {
                    "items": {
                        "description": "The PHY name of a VF of this PF",
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "sriov_vf": {
            "properties": {
                "config": {
                    "properties": {
                        "link_state": {
                            "description": "The current SR-IOV VF link state (either enabled, disabled, or auto)",
                            "type": "string"
                        },
                        "query_rss": {
                            "description": "Whether VF RSS querying is enabled or disabled",
                            "type": "boolean"
                        },
                        "spoof_check": {
                            "description": "Whether device spoof checking is enabled or disabled",
                            "type": "boolean"
                        },
                        "trust": {
                            "description": "Whether guest device trust is enabled or disabled",
                            "type": "boolean"
                        },
                        "tx_rate_max": {
                            "description": "The maximum TX rate of the SR-IOV VF device",
                            "type": "string"
                        },
                        "tx_rate_min": {
                            "description": "The minimum TX rate of the SR-IOV VF device",
                            "type": "string"
                        },
                        "vlan_id": {
                            "description": "The tagged vLAN ID of the SR-IOV VF device",
                            "type": "string"
                        },
                        "vlan_qos": {
                            "description": "The QOS group of the tagged vLAN",
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "mac": {
                    "description": "The current MAC address of the VF device",
                    "type": "string"
                },
                "mtu": {
                    "description": "The current MTU of the VF device",
                    "type": "integer"
                },
                "pf": {
                    "description": "The name of the SR-IOV PF parent of this VF device",
                    "type": "string"
                },
                "phy": {
                    "description": "The name of the SR-IOV VF device",
                    "type": "string"
                },
                "usage": {
                    "properties": {
                        "domain": {
                            "description": "The UUID of the domain the SR-IOV VF is currently used by",
                            "type": "boolean"
                        },
                        "used": {
                            "description": "Whether the SR-IOV VF is currently used by a VM or not",
                            "type": "boolean"
                        }
                    },
                    "type": "object"
                }
            },
            "type": "object"
        },
        "storage-template": {
            "properties": {
                "disks": {
                    "items": {
                        "$ref": "#/definitions/storage-template-disk"
                    },
                    "type": "array"
                },
                "id": {
                    "description": "Internal provisioner template ID",
                    "type": "integer"
                },
                "name": {
                    "description": "Template name",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "storage-template-disk": {
            "properties": {
                "disk_id": {
                    "description": "Disk identifier",
                    "type": "string"
                },
                "disk_size_gb": {
                    "description": "Disk size in GB",
                    "type": "string"
                },
                "filesystem": {
                    "description": "Filesystem for disk",
                    "type": "string"
                },
                "filesystem_args": {
                    "items": {
                        "description": "Filesystem mkfs arguments",
                        "type": "string"
                    },
                    "type": "array"
                },
                "id": {
                    "description": "Internal provisioner disk ID",
                    "type": "integer"
                },
                "mountpoint": {
                    "description": "In-VM mountpoint for disk",
                    "type": "string"
                },
                "pool": {
                    "description": "Ceph storage pool for disk",
                    "type": "string"
                },
                "storage_template": {
                    "description": "Internal provisioner storage template ID",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "storagebenchmark": {
            "properties": {
                "benchmark_result": {
                    "description": "A benchmark test result; format not documented due to complexity",
                    "type": "object"
                },
                "id": {
                    "description": "The database ID of the test result",
                    "type": "string"
                },
                "job": {
                    "description": "The job name (an ISO date) of the test result",
                    "type": "string"
                },
                "test_format": {
                    "description": "The PVC benchmark format of the results",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "system-template": {
            "properties": {
                "id": {
                    "description": "Internal provisioner template ID",
                    "type": "integer"
                },
                "migration_max_downtime": {
                    "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                    "type": "integer"
                },
                "migration_method": {
                    "description": "The preferred migration method (live, shutdown, none)",
                    "type": "string"
                },
                "name": {
                    "description": "Template name",
                    "type": "string"
                },
                "node_autostart": {
                    "description": "Whether to start VM with node ready state (one-time)",
                    "type": "boolean"
                },
                "node_limit": {
                    "description": "CSV list of node(s) to limit VM assignment to",
                    "type": "string"
                },
                "node_selector": {
                    "description": "Selector to use for VM node assignment on migration/move",
                    "type": "string"
                },
                "serial": {
                    "description": "Whether to enable serial console for VM",
                    "type": "boolean"
                },
                "vcpu_count": {
                    "description": "vCPU count for VM",
                    "type": "integer"
                },
                "vnc": {
                    "description": "Whether to enable VNC console for VM",
                    "type": "boolean"
                },
                "vnc_bind": {
                    "description": "VNC bind address when VNC console is enabled",
                    "type": "string"
                },
                "vram_mb": {
                    "description": "vRAM size in MB for VM",
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "userdata": {
            "properties": {
                "id": {
                    "description": "Internal provisioner ID",
                    "type": "integer"
                },
                "name": {
                    "description": "Userdata name",
                    "type": "string"
                },
                "userdata": {
                    "description": "Raw userdata configuration document",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "vm": {
            "properties": {
                "arch": {
                    "description": "The architecture of the VM",
                    "type": "string"
                },
                "console": {
                    "description": "The serial console type of the VM",
                    "type": "string"
                },
                "controllers": {
                    "description": "The device controllers attached to the VM",
                    "items": {
                        "properties": {
                            "model": {
                                "description": "The model of the controller",
                                "type": "string"
                            },
                            "type": {
                                "description": "The type of the controller",
                                "type": "string"
                            }
                        },
                        "type": "object"
                    },
                    "type": "array"
                },
                "description": {
                    "description": "The description of the VM",
                    "type": "string"
                },
                "disks": {
                    "description": "The PVC storage volumes attached to the VM",
                    "items": {
                        "properties": {
                            "bus": {
                                "description": "The virtual bus of the volume in the VM",
                                "type": "string"
                            },
                            "dev": {
                                "description": "The device ID of the volume in the VM",
                                "type": "string"
                            },
                            "name": {
                                "description": "The full name of the volume in \"pool/volume\" format",
                                "type": "string"
                            },
                            "rd_bytes": {
                                "description": "The number of read bytes from the volume",
                                "type": "integer"
                            },
                            "rd_req": {
                                "description": "The number of read requests from the volume",
                                "type": "integer"
                            },
                            "type": {
                                "description": "The type of volume",
                                "type": "string"
                            },
                            "wr_bytes": {
                                "description": "The number of write bytes to the volume",
                                "type": "integer"
                            },
                            "wr_req": {
                                "description": "The number of write requests to the volume",
                                "type": "integer"
                            }
                        },
                        "type": "object"
                    },
                    "type": "array"
                },
                "emulator": {
                    "description": "The binary emulator of the VM",
                    "type": "string"
                },
                "failed_reason": {
                    "description": "Information about why the VM failed to start",
                    "type": "string"
                },
                "features": {
                    "description": "The available features of the VM",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "last_node": {
                    "description": "The last node the VM was assigned to before migrating",
                    "type": "string"
                },
                "machine": {
                    "description": "The QEMU machine type of the VM",
                    "type": "string"
                },
                "memory": {
                    "description": "The assigned RAM of the VM in MB",
                    "type": "integer"
                },
                "memory_stats": {
                    "properties": {
                        "actual": {
                            "description": "The total active memory of the VM in kB",
                            "type": "integer"
                        },
                        "available": {
                            "description": "The total amount of usable memory as seen by the domain in kB",
                            "type": "integer"
                        },
                        "last_update": {
                            "description": "Timestamp of the last update of statistics, in seconds",
                            "type": "integer"
                        },
                        "major_fault": {
                            "description": "The number of major page faults",
                            "type": "integer"
                        },
                        "minor_fault": {
                            "description": "The number of minor page faults",
                            "type": "integer"
                        },
                        "rss": {
                            "description": "The Resident Set Size of the process running the domain in kB",
                            "type": "integer"
                        },
                        "swap_in": {
                            "description": "The amount of swapped in data in kB",
                            "type": "integer"
                        },
                        "swap_out": {
                            "description": "The amount of swapped out data in kB",
                            "type": "integer"
                        },
                        "unused": {
                            "description": "The amount of memory left completely unused by the system in kB",
                            "type": "integer"
                        },
                        "usable": {
                            "description": "How much the balloon can be inflated without pushing the guest system to swap in kB",
                            "type": "integer"
                        }
                    },
                    "type": "object"
                },
                "migrated": {
                    "description": "Whether the VM has been migrated, either \"no\" or \"from <last_node>\"",
                    "type": "string"
                },
                "migration_max_downtime": {
                    "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                    "type": "integer"
                },
                "migration_method": {
                    "description": "The preferred migration method (live, shutdown, none)",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the VM",
                    "type": "string"
                },
                "networks": {
                    "description": "The PVC networks attached to the VM",
                    "items": {
                        "properties": {
                            "mac": {
                                "description": "The MAC address of the VM network interface",
                                "type": "string"
                            },
                            "model": {
                                "description": "The virtual network device model",
                                "type": "string"
                            },
                            "rd_bytes": {
                                "description": "The number of read bytes on the interface",
                                "type": "integer"
                            },
                            "rd_drops": {
                                "description": "The number of read drops on the interface",
                                "type": "integer"
                            },
                            "rd_errors": {
                                "description": "The number of read errors on the interface",
                                "type": "integer"
                            },
                            "rd_packets": {
                                "description": "The number of read packets on the interface",
                                "type": "integer"
                            },
                            "source": {
                                "description": "The parent network bridge on the node",
                                "type": "string"
                            },
                            "type": {
                                "description": "The PVC network type",
                                "type": "string"
                            },
                            "vni": {
                                "description": "The VNI (PVC network) of the network bridge",
                                "type": "integer"
                            },
                            "wr_bytes": {
                                "description": "The number of write bytes on the interface",
                                "type": "integer"
                            },
                            "wr_drops": {
                                "description": "The number of write drops on the interface",
                                "type": "integer"
                            },
                            "wr_errors": {
                                "description": "The number of write errors on the interface",
                                "type": "integer"
                            },
                            "wr_packets": {
                                "description": "The number of write packets on the interface",
                                "type": "integer"
                            }
                        },
                        "type": "object"
                    },
                    "type": "array"
                },
                "node": {
                    "description": "The node the VM is currently assigned to",
                    "type": "string"
                },
                "node_autostart": {
                    "description": "Whether to autostart the VM when its node returns to ready domain state",
                    "type": "boolean"
                },
                "node_limit": {
                    "description": "The node(s) the VM is permitted to be assigned to",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "node_selector": {
                    "description": "The selector used to determine candidate nodes during migration; see 'target_selector' in the node daemon configuration reference",
                    "type": "string"
                },
                "profile": {
                    "description": "The provisioner profile used to create the VM",
                    "type": "string"
                },
                "snapshots": {
                    "description": "The snapshot(s) of the VM",
                    "items": {
                        "properties": {
                            "age": {
                                "description": "Age of the snapshot in seconds",
                                "type": "string"
                            },
                            "name": {
                                "description": "The name of the snapshot",
                                "type": "string"
                            },
                            "rbd_snapshots": {
                                "items": {
                                    "description": "A list of RBD volume snapshots belonging to this VM snapshot, in '<pool>/<volume>@<snapshot>' format",
                                    "type": "string"
                                },
                                "type": "array"
                            },
                            "timestamp": {
                                "description": "Unix timestamp of the snapshot",
                                "type": "string"
                            },
                            "xml_diff_lines": {
                                "items": {
                                    "description": "A list of strings representing the lines of an (n=1) unified diff between the current VM XML specification and the snapshot VM XML specification",
                                    "type": "string"
                                },
                                "type": "array"
                            }
                        },
                        "type": "object"
                    },
                    "type": "array"
                },
                "state": {
                    "description": "The current state of the VM",
                    "type": "string"
                },
                "tags": {
                    "description": "The tag(s) of the VM",
                    "items": {
                        "properties": {
                            "name": {
                                "description": "The name of the tag",
                                "type": "string"
                            },
                            "protected": {
                                "description": "Whether the tag is protected or not",
                                "type": "boolean"
                            },
                            "type": {
                                "description": "The type of the tag (user, system)",
                                "type": "string"
                            }
                        },
                        "type": "object"
                    },
                    "type": "array"
                },
                "type": {
                    "description": "The type of the VM",
                    "type": "string"
                },
                "uuid": {
                    "description": "The UUID of the VM",
                    "type": "string"
                },
                "vcpu": {
                    "description": "The assigned vCPUs of the VM",
                    "type": "integer"
                },
                "vcpu_stats": {
                    "properties": {
                        "cpu_time": {
                            "description": "The active CPU time for all vCPUs",
                            "type": "integer"
                        },
                        "system_time": {
                            "description": "vCPU system time",
                            "type": "integer"
                        },
                        "user_time": {
                            "description": "vCPU user time",
                            "type": "integer"
                        }
                    },
                    "type": "object"
                },
                "vcpu_topology": {
                    "description": "The topology of the assigned vCPUs in Sockets/Cores/Threads format",
                    "type": "string"
                },
                "vnc": {
                    "properties": {
                        "listen": {
                            "description": "The active VNC listen address or 'None'",
                            "type": "string"
                        },
                        "port": {
                            "description": "The active VNC port or 'None'",
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "xml": {
                    "description": "The raw Libvirt XML definition of the VM",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "volume": {
            "properties": {
                "name": {
                    "description": "The name of the volume",
                    "type": "string"
                },
                "pool": {
                    "description": "The name of the pool containing the volume",
                    "type": "string"
                },
                "stats": {
                    "properties": {
                        "access_timestamp": {
                            "description": "The volume access timestamp",
                            "type": "string"
                        },
                        "block_name_prefix": {
                            "description": "The Ceph-internal block name prefix",
                            "type": "string"
                        },
                        "create_timestamp": {
                            "description": "The volume creation timestamp",
                            "type": "string"
                        },
                        "features": {
                            "items": {
                                "description": "The Ceph RBD feature",
                                "type": "string"
                            },
                            "type": "array"
                        },
                        "flags": {
                            "items": {
                                "description": "The Ceph RBD volume flags",
                                "type": "string"
                            },
                            "type": "array"
                        },
                        "format": {
                            "description": "The Ceph RBD volume format",
                            "type": "integer"
                        },
                        "id": {
                            "description": "The Ceph volume ID",
                            "type": "string"
                        },
                        "modify_timestamp": {
                            "description": "The volume modification timestamp",
                            "type": "string"
                        },
                        "name": {
                            "description": "The name of the volume",
                            "type": "string"
                        },
                        "object_size": {
                            "description": "The size of each object in bytes",
                            "type": "integer"
                        },
                        "objects": {
                            "description": "The number of Ceph objects making up the volume",
                            "type": "integer"
                        },
                        "op_features": {
                            "items": {
                                "description": "The Ceph RBD operational features",
                                "type": "string"
                            },
                            "type": "array"
                        },
                        "order": {
                            "description": "The Ceph volume order ID",
                            "type": "integer"
                        },
                        "size": {
                            "description": "The size of the volume (human-readable values)",
                            "type": "string"
                        },
                        "snapshot_count": {
                            "description": "The number of snapshots of the volume",
                            "type": "integer"
                        }
                    },
                    "type": "object"
                }
            },
            "type": "object"
        }
    },
    "host": "pvc.local:7370",
    "info": {
        "title": "PVC Client and Provisioner API",
        "version": "1.0"
    },
    "paths": {
        "/api/v1/": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/API-Version"
                        }
                    }
                },
                "summary": "Return the PVC API version string",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/backup": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Cluster Data"
                        }
                    },
                    "400": {
                        "description": "Bad request"
                    }
                },
                "summary": "Back up the Zookeeper data of a cluster in JSON format",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/faults": {
            "delete": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "message": {
                                    "description": "A text message",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Delete all cluster faults",
                "tags": [
                    "faults"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "The fault object key to sort results by",
                        "enum": [
                            "first_reported",
                            "last_reported",
                            "acknowledged_at",
                            "status",
                            "health_delta",
                            "message"
                        ],
                        "in": "query",
                        "name": "sort_key",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/fault"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of cluster faults",
                "tags": [
                    "faults"
                ]
            },
            "put": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "message": {
                                    "description": "A text message",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Acknowledge all cluster faults",
                "tags": [
                    "faults"
                ]
            }
        },
        "/api/v1/faults/{fault_id}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "fault_id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "message": {
                                    "description": "A text message",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Delete a cluster fault",
                "tags": [
                    "faults"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "fault_id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/fault"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a single cluster fault",
                "tags": [
                    "faults"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "fault_id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "message": {
                                    "description": "A text message",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Acknowledge a cluster fault",
                "tags": [
                    "faults"
                ]
            }
        },
        "/api/v1/initialize": {
            "post": {
                "description": "<br/>If the 'overwrite' option is not True, the cluster will return 400 if the `/config/primary_node` key is found. If 'overwrite' is True, the existing cluster<br/>data will be erased and new, empty data written in its place.<br/><br/>All node daemons should be stopped before running this command, and the API daemon started manually to avoid undefined behavior.",
                "parameters": [
                    {
                        "description": "A flag to enable or disable (default) overwriting existing data",
                        "in": "query",
                        "name": "overwrite",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "A confirmation string to ensure that the API consumer really means it",
                        "in": "query",
                        "name": "yes-i-really-mean-it",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request"
                    }
                },
                "summary": "Initialize a new PVC cluster",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/login": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "in": "query",
                        "name": "token",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "302": {
                        "description": "Authentication disabled"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Log in to the PVC API with an authentication key",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/logout": {
            "post": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "302": {
                        "description": "Authentication disabled"
                    }
                },
                "summary": "Log out of an existing PVC API session",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/metrics": {
            "get": {
                "description": "the Ceph cluster metrics as one document.<br/><br/>Endpoint is UNAUTHENTICATED to allow metrics exfiltration without having to deal<br/>with Prometheus compatibility (only basic auth support). Ensure this API endpoint<br/>is only opened to trusted networks that cannot abuse the data provided!",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "400": {
                        "description": "Bad request"
                    }
                },
                "summary": "Return the current PVC cluster status in Prometheus-compatible metrics format and",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/metrics/ceph": {
            "get": {
                "description": "<br/>Proxies a metrics request to the current active MGR, since this is dynamic<br/>and can't be controlled by PVC easily.<br/><br/>Endpoint is UNAUTHENTICATED to allow metrics exfiltration without having to deal<br/>with Prometheus compatibility (only basic auth support). Ensure this API endpoint<br/>is only opened to trusted networks that cannot abuse the data provided!",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "400": {
                        "description": "Bad request"
                    }
                },
                "summary": "Return the current PVC Ceph Prometheus metrics",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/metrics/health": {
            "get": {
                "description": "<br/>Endpoint is UNAUTHENTICATED to allow metrics exfiltration without having to deal<br/>with Prometheus compatibility (only basic auth support). Ensure this API endpoint<br/>is only opened to trusted networks that cannot abuse the data provided!",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "400": {
                        "description": "Bad request"
                    }
                },
                "summary": "Return the current PVC cluster health status in Prometheus-compatible metrics format",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/metrics/resource": {
            "get": {
                "description": "<br/>Endpoint is UNAUTHENTICATED to allow metrics exfiltration without having to deal<br/>with Prometheus compatibility (only basic auth support). Ensure this API endpoint<br/>is only opened to trusted networks that cannot abuse the data provided!",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "400": {
                        "description": "Bad request"
                    }
                },
                "summary": "Return the current PVC cluster resource utilizations in Prometheus-compatible metrics format",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/metrics/zookeeper": {
            "get": {
                "description": "<br/>Proxies a metrics request to the current primary node, since all coordinators<br/>run an active Zookeeper instance and we want one central location.<br/><br/>Endpoint is UNAUTHENTICATED to allow metrics exfiltration without having to deal<br/>with Prometheus compatibility (only basic auth support). Ensure this API endpoint<br/>is only opened to trusted networks that cannot abuse the data provided!",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "400": {
                        "description": "Bad request"
                    }
                },
                "summary": "Return the current PVC Zookeeper Prometheus metrics",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/network": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A VNI or description search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/network"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of networks in the cluster",
                "tags": [
                    "network"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "The VNI of the network",
                        "in": "query",
                        "name": "vni",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "The description of the network",
                        "in": "query",
                        "name": "description",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The type of network",
                        "enum": [
                            "managed",
                            "bridged"
                        ],
                        "in": "query",
                        "name": "nettype",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The MTU of the network; defaults to the underlying interface MTU if not set",
                        "in": "query",
                        "name": "mtu",
                        "type": "integer"
                    },
                    {
                        "description": "The DNS domain of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "domain",
                        "type": "string"
                    },
                    {
                        "description": "The CSV list of DNS nameservers for network NS records (\"managed\" networks only)",
                        "in": "query",
                        "name": "name_servers",
                        "type": "string"
                    },
                    {
                        "description": "The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip4_network",
                        "type": "string"
                    },
                    {
                        "description": "The IPv4 default gateway address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip4_gateway",
                        "type": "string"
                    },
                    {
                        "description": "Whether to enable DHCPv4 for the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4",
                        "type": "boolean"
                    },
                    {
                        "description": "The DHCPv4 pool start address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4_start",
                        "type": "string"
                    },
                    {
                        "description": "The DHCPv4 pool end address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4_end",
                        "type": "string"
                    },
                    {
                        "description": "The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip6_network",
                        "type": "string"
                    },
                    {
                        "description": "The IPv6 default gateway address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip6_gateway",
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new network",
                "tags": [
                    "network"
                ]
            }
        },
        "/api/v1/network/{vni}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove network {vni}",
                "tags": [
                    "network"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/network"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about network {vni}",
                "tags": [
                    "network"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The description of the network",
                        "in": "query",
                        "name": "description",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The type of network",
                        "enum": [
                            "managed",
                            "bridged"
                        ],
                        "in": "query",
                        "name": "nettype",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The MTU of the network; defaults to the underlying interface MTU if not set",
                        "in": "query",
                        "name": "mtu",
                        "type": "integer"
                    },
                    {
                        "description": "The DNS domain of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "domain",
                        "type": "string"
                    },
                    {
                        "description": "The CSV list of DNS nameservers for network NS records (\"managed\" networks only)",
                        "in": "query",
                        "name": "name_servers",
                        "type": "string"
                    },
                    {
                        "description": "The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip4_network",
                        "type": "string"
                    },
                    {
                        "description": "The IPv4 default gateway address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip4_gateway",
                        "type": "string"
                    },
                    {
                        "description": "Whether to enable DHCPv4 for the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4",
                        "type": "boolean"
                    },
                    {
                        "description": "The DHCPv4 pool start address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4_start",
                        "type": "string"
                    },
                    {
                        "description": "The DHCPv4 pool end address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4_end",
                        "type": "string"
                    },
                    {
                        "description": "The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip6_network",
                        "type": "string"
                    },
                    {
                        "description": "The IPv6 default gateway address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip6_gateway",
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new network {vni}",
                "tags": [
                    "network"
                ]
            },
            "put": {
                "description": "Note: A network's type cannot be changed; the network must be removed and recreated as the new type",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The description of the network",
                        "in": "query",
                        "name": "description",
                        "type": "string"
                    },
                    {
                        "description": "The MTU of the network",
                        "in": "query",
                        "name": "mtu",
                        "type": "integer"
                    },
                    {
                        "description": "The DNS domain of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "domain",
                        "type": "string"
                    },
                    {
                        "description": "The CSV list of DNS nameservers for network NS records (\"managed\" networks only)",
                        "in": "query",
                        "name": "name_servers",
                        "type": "string"
                    },
                    {
                        "description": "The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip4_network",
                        "type": "string"
                    },
                    {
                        "description": "The IPv4 default gateway address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip4_gateway",
                        "type": "string"
                    },
                    {
                        "description": "Whether to enable DHCPv4 for the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4",
                        "type": "boolean"
                    },
                    {
                        "description": "The DHCPv4 pool start address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4_start",
                        "type": "string"
                    },
                    {
                        "description": "The DHCPv4 pool end address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "dhcp4_end",
                        "type": "string"
                    },
                    {
                        "description": "The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip6_network",
                        "type": "string"
                    },
                    {
                        "description": "The IPv6 default gateway address of the network (\"managed\" networks only)",
                        "in": "query",
                        "name": "ip6_gateway",
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Update details of network {vni}",
                "tags": [
                    "network"
                ]
            }
        },
        "/api/v1/network/{vni}/acl": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A description search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The direction of rules to display; both directions shown if unspecified",
                        "in": "query",
                        "name": "direction",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/acl"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return a list of ACLs in network {vni}",
                "tags": [
                    "network"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A whitespace-free description/name for the ACL",
                        "in": "query",
                        "name": "description",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The direction of the ACL; defaults to \"in\" if unspecified",
                        "enum": [
                            "in",
                            "out"
                        ],
                        "in": "query",
                        "name": "direction",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The order of the ACL in the chain; defaults to the end",
                        "in": "query",
                        "name": "order",
                        "type": "integer"
                    },
                    {
                        "description": "The raw NFT firewall rule string",
                        "in": "query",
                        "name": "rule",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new ACL in network {vni}",
                "tags": [
                    "network"
                ]
            }
        },
        "/api/v1/network/{vni}/acl/{description}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "description",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Delete ACL {description} in network {vni}",
                "tags": [
                    "network"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "description",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/acl"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about ACL {description} in network {vni}",
                "tags": [
                    "network"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "description",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The direction of the ACL; defaults to \"in\" if unspecified",
                        "enum": [
                            "in",
                            "out"
                        ],
                        "in": "query",
                        "name": "direction",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The order of the ACL in the chain; defaults to the end",
                        "in": "query",
                        "name": "order",
                        "type": "integer"
                    },
                    {
                        "description": "The raw NFT firewall rule string",
                        "in": "query",
                        "name": "rule",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new ACL {description} in network {vni}",
                "tags": [
                    "network"
                ]
            }
        },
        "/api/v1/network/{vni}/lease": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A MAC address search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Whether to show only static leases",
                        "in": "query",
                        "name": "static",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/lease"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return a list of DHCP leases in network {vni}",
                "tags": [
                    "network"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A MAC address for the lease",
                        "in": "query",
                        "name": "macaddress",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "An IPv4 address for the lease",
                        "in": "query",
                        "name": "ipaddress",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "An optional hostname for the lease",
                        "in": "query",
                        "name": "hostname",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new static DHCP lease in network {vni}",
                "tags": [
                    "network"
                ]
            }
        },
        "/api/v1/network/{vni}/lease/{mac}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "mac",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Delete static DHCP lease {mac}",
                "tags": [
                    "network"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "mac",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/lease"
                            },
                            "type": "array"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about DHCP lease {mac} in network {vni}",
                "tags": [
                    "network"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "mac",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A MAC address for the lease",
                        "in": "query",
                        "name": "macaddress",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "An IPv4 address for the lease",
                        "in": "query",
                        "name": "ipaddress",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "An optional hostname for the lease",
                        "in": "query",
                        "name": "hostname",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new static DHCP lease {mac} in network {vni}",
                "tags": [
                    "network"
                ]
            }
        },
        "/api/v1/node": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A search limit in the name, tags, or an exact UUID; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Limit results to nodes in the specified daemon state",
                        "in": "query",
                        "name": "daemon_state",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Limit results to nodes in the specified coordinator state",
                        "in": "query",
                        "name": "coordinator_state",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Limit results to nodes in the specified domain state",
                        "in": "query",
                        "name": "domain_state",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/node"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of nodes in the cluster",
                "tags": [
                    "node"
                ]
            }
        },
        "/api/v1/node/{node}": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/node"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about {node}",
                "tags": [
                    "node"
                ]
            }
        },
        "/api/v1/node/{node}/coordinator-state": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/NodeCoordinatorState"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the coordinator state of {node}",
                "tags": [
                    "node"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The new coordinator state of the node",
                        "enum": [
                            "primary",
                            "secondary"
                        ],
                        "in": "query",
                        "name": "action",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the coordinator state of {node}",
                "tags": [
                    "node"
                ]
            }
        },
        "/api/v1/node/{node}/daemon-state": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/NodeDaemonState"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the daemon state of {node}",
                "tags": [
                    "node"
                ]
            }
        },
        "/api/v1/node/{node}/domain-state": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/NodeDomainState"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the domain state of {node}",
                "tags": [
                    "node"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The new domain state of the node",
                        "enum": [
                            "flush",
                            "ready"
                        ],
                        "in": "query",
                        "name": "action",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Whether to block waiting for the full flush/ready state",
                        "in": "query",
                        "name": "wait",
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the domain state of {node}",
                "tags": [
                    "node"
                ]
            }
        },
        "/api/v1/node/{node}/log": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The number of lines to retrieve",
                        "in": "query",
                        "name": "lines",
                        "required": false,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/NodeLog"
                        }
                    },
                    "404": {
                        "description": "Node not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the recent logs of {node}",
                "tags": [
                    "node"
                ]
            }
        },
        "/api/v1/provisioner/create": {
            "post": {
                "description": "Note: Starts a background job in the pvc-provisioner-worker Celery worker while returning a task ID; the task ID can be used to query the \"GET /provisioner/status/<task_id>\" endpoint for the job status",
                "parameters": [
                    {
                        "description": "Virtual machine name",
                        "in": "query",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Profile name",
                        "in": "query",
                        "name": "profile",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Whether to define the VM on the cluster during provisioning",
                        "in": "query",
                        "name": "define_vm",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "Whether to start the VM after provisioning",
                        "in": "query",
                        "name": "start_vm",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "Script install() function keywork argument in \"arg=data\" format; may be specified multiple times to add multiple arguments",
                        "in": "query",
                        "name": "arg",
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new virtual machine",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/ova": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "An OVA name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/ova"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of OVA sources",
                "tags": [
                    "provisioner"
                ]
            },
            "post": {
                "description": "<br/>The API client is responsible for determining and setting the ova_size value, as this value cannot be determined dynamically before the upload proceeds.",
                "parameters": [
                    {
                        "description": "Storage pool name",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "OVA name on the cluster (usually identical to the OVA file name)",
                        "in": "query",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Size of the OVA file in bytes",
                        "in": "query",
                        "name": "ova_size",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Upload an OVA image to the cluster",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/ova/{ova}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "ova",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove ova {ova}",
                "tags": [
                    "provisioner"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "ova",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/ova"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about OVA image {ova}",
                "tags": [
                    "provisioner"
                ]
            },
            "post": {
                "description": "<br/>The API client is responsible for determining and setting the ova_size value, as this value cannot be determined dynamically before the upload proceeds.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "ova",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Storage pool name",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Size of the OVA file in bytes",
                        "in": "query",
                        "name": "ova_size",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Upload an OVA image to the cluster",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/profile": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A profile name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/profile"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of profiles",
                "tags": [
                    "provisioner"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Profile name",
                        "in": "query",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Profile type",
                        "enum": [
                            "provisioner",
                            "ova"
                        ],
                        "in": "query",
                        "name": "profile_type",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Script name",
                        "in": "query",
                        "name": "script",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "System template name",
                        "in": "query",
                        "name": "system_template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Network template name",
                        "in": "query",
                        "name": "network_template",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Storage template name",
                        "in": "query",
                        "name": "storage_template",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Userdata template name",
                        "in": "query",
                        "name": "userdata",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "OVA image source",
                        "in": "query",
                        "name": "ova",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Script install() function keywork argument in \"arg=data\" format; may be specified multiple times to add multiple arguments",
                        "in": "query",
                        "name": "arg",
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new profile",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/profile/{profile}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "profile",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove profile {profile}",
                "tags": [
                    "provisioner"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "profile",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/profile"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about profile {profile}",
                "tags": [
                    "provisioner"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "profile",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Profile type",
                        "enum": [
                            "provisioner",
                            "ova"
                        ],
                        "in": "query",
                        "name": "profile_type",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Script name",
                        "in": "query",
                        "name": "script",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "System template name",
                        "in": "query",
                        "name": "system_template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Network template name",
                        "in": "query",
                        "name": "network_template",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Storage template name",
                        "in": "query",
                        "name": "storage_template",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Userdata template name",
                        "in": "query",
                        "name": "userdata",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "OVA image source",
                        "in": "query",
                        "name": "ova",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Script install() function keywork argument in \"arg=data\" format; may be specified multiple times to add multiple arguments",
                        "in": "query",
                        "name": "arg",
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new profile {profile}",
                "tags": [
                    "provisioner"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "profile",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Script name",
                        "in": "query",
                        "name": "script",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "System template name",
                        "in": "query",
                        "name": "system_template",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Network template name",
                        "in": "query",
                        "name": "network_template",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Storage template name",
                        "in": "query",
                        "name": "storage_template",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Userdata template name",
                        "in": "query",
                        "name": "userdata",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Script install() function keywork argument in \"arg=data\" format; may be specified multiple times to add multiple arguments",
                        "in": "query",
                        "name": "arg",
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Modify profile {profile}",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/script": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A script name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/script"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of scripts",
                "tags": [
                    "provisioner"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Script name",
                        "in": "query",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Raw Python script document",
                        "in": "query",
                        "name": "data",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new script",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/script/{script}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "script",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove script {script}",
                "tags": [
                    "provisioner"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "script",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/script"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about script {script}",
                "tags": [
                    "provisioner"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "script",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Raw Python script document",
                        "in": "query",
                        "name": "data",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new script {script}",
                "tags": [
                    "provisioner"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "script",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Raw Python script document",
                        "in": "query",
                        "name": "data",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Update script {script}",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/template": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A template name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/all-templates"
                        }
                    }
                },
                "summary": "Return a list of all templates",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/network": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A template name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/network-template"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of network templates",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Template name",
                        "in": "query",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "MAC address template",
                        "in": "query",
                        "name": "mac_template",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new network template",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/network/{template}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/network-template"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "MAC address template",
                        "in": "query",
                        "name": "mac_template",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/network/{template}/net": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/network-template-net"
                            },
                            "type": "array"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return a list of networks in network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "PVC network VNI",
                        "in": "query",
                        "name": "vni",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "Bypass checks to permit duplicate VNIs for niche usecases",
                        "in": "query",
                        "name": "permit_duplicate",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new network in network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/network/{template}/net/{vni}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove network {vni} from network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/network-template-net"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about network {vni} in network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vni",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Bypass checks to permit duplicate VNIs for niche usecases",
                        "in": "query",
                        "name": "permit_duplicate",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new network {vni} in network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/storage": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A template name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/storage-template"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of storage templates",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Template name",
                        "in": "query",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new storage template",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/storage/{template}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove storage template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/storage-template"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about storage template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new storage template {template}",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/storage/{template}/disk": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/storage-template-disk"
                            },
                            "type": "array"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return a list of disks in network template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Disk identifier in \"sdX\"/\"vdX\" format (e.g. \"sda\", \"vdb\", etc.)",
                        "in": "query",
                        "name": "disk_id",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "ceph storage pool for disk",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Source storage volume; not compatible with other options",
                        "in": "query",
                        "name": "source_volume",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Disk size in GB; not compatible with source_volume",
                        "in": "query",
                        "name": "disk_size",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "Filesystem for disk; not compatible with source_volume",
                        "in": "query",
                        "name": "filesystem",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Filesystem mkfs argument in \"-X=foo\" format; may be specified multiple times to add multiple arguments",
                        "in": "query",
                        "name": "filesystem_arg",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "In-VM mountpoint for disk; not compatible with source_volume",
                        "in": "query",
                        "name": "mountpoint",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new disk in storage template {template}",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/storage/{template}/disk/{disk_id}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "disk_id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove disk {disk_id} from storage template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "disk_id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/storage-template-disk"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about disk {disk_id} in storage template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "Alternative to \"POST /provisioner/template/storage/<template>/disk?disk_id=<disk_id>\"",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "disk_id",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "ceph storage pool for disk",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Source storage volume; not compatible with other options",
                        "in": "query",
                        "name": "source_volume",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Disk size in GB; not compatible with source_volume",
                        "in": "query",
                        "name": "disk_size",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "Filesystem for disk; not compatible with source_volume",
                        "in": "query",
                        "name": "filesystem",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Filesystem mkfs argument in \"-X=foo\" format; may be specified multiple times to add multiple arguments",
                        "in": "query",
                        "name": "filesystem_arg",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "In-VM mountpoint for disk; not compatible with source_volume",
                        "in": "query",
                        "name": "mountpoint",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new disk {disk_id} in storage template {template}",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/system": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A template name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/system-template"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of system templates",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Template name",
                        "in": "query",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "vCPU count for VM",
                        "in": "query",
                        "name": "vcpus",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "vRAM size in MB for VM",
                        "in": "query",
                        "name": "vram",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "Whether to enable serial console for VM",
                        "in": "query",
                        "name": "serial",
                        "required": true,
                        "type": "boolean"
                    },
                    {
                        "description": "Whether to enable VNC console for VM",
                        "in": "query",
                        "name": "vnc",
                        "required": true,
                        "type": "boolean"
                    },
                    {
                        "description": "VNC bind address when VNC console is enabled",
                        "in": "query",
                        "name": "vnc_bind",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "CSV list of node(s) to limit VM assignment to",
                        "in": "query",
                        "name": "node_limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Selector to use for VM node assignment on migration/move",
                        "in": "query",
                        "name": "node_selector",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Whether to start VM with node ready state (one-time)",
                        "in": "query",
                        "name": "node_autostart",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "The preferred migration method (live, shutdown, none)",
                        "in": "query",
                        "name": "migration_method",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                        "in": "query",
                        "name": "migration_max_downtime",
                        "required": false,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new system template",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/template/system/{template}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove system template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/system-template"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about system template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "vCPU count for VM",
                        "in": "query",
                        "name": "vcpus",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "vRAM size in MB for VM",
                        "in": "query",
                        "name": "vram",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "Whether to enable serial console for VM",
                        "in": "query",
                        "name": "serial",
                        "required": true,
                        "type": "boolean"
                    },
                    {
                        "description": "Whether to enable VNC console for VM",
                        "in": "query",
                        "name": "vnc",
                        "required": true,
                        "type": "boolean"
                    },
                    {
                        "description": "VNC bind address when VNC console is enabled",
                        "in": "query",
                        "name": "vnc_bind",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "CSV list of node(s) to limit VM assignment to",
                        "in": "query",
                        "name": "node_limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Selector to use for VM node assignment on migration/move",
                        "in": "query",
                        "name": "node_selector",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Whether to start VM with node ready state (one-time)",
                        "in": "query",
                        "name": "node_autostart",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "The preferred migration method (live, shutdown, none)",
                        "in": "query",
                        "name": "migration_method",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                        "in": "query",
                        "name": "migration_max_downtime",
                        "required": false,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new system template {template}",
                "tags": [
                    "provisioner / template"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "vCPU count for VM",
                        "in": "query",
                        "name": "vcpus",
                        "type": "integer"
                    },
                    {
                        "description": "vRAM size in MB for VM",
                        "in": "query",
                        "name": "vram",
                        "type": "integer"
                    },
                    {
                        "description": "Whether to enable serial console for VM",
                        "in": "query",
                        "name": "serial",
                        "type": "boolean"
                    },
                    {
                        "description": "Whether to enable VNC console for VM",
                        "in": "query",
                        "name": "vnc",
                        "type": "boolean"
                    },
                    {
                        "description": "VNC bind address when VNC console is enabled",
                        "in": "query",
                        "name": "vnc_bind",
                        "type": "string"
                    },
                    {
                        "description": "CSV list of node(s) to limit VM assignment to",
                        "in": "query",
                        "name": "node_limit",
                        "type": "string"
                    },
                    {
                        "description": "Selector to use for VM node assignment on migration/move",
                        "in": "query",
                        "name": "node_selector",
                        "type": "string"
                    },
                    {
                        "description": "Whether to start VM with node ready state (one-time)",
                        "in": "query",
                        "name": "node_autostart",
                        "type": "boolean"
                    },
                    {
                        "description": "The preferred migration method (live, shutdown, none)",
                        "in": "query",
                        "name": "migration_method",
                        "type": "string"
                    },
                    {
                        "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                        "in": "query",
                        "name": "migration_max_downtime",
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Modify an existing system template {template}",
                "tags": [
                    "provisioner / template"
                ]
            }
        },
        "/api/v1/provisioner/userdata": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A userdata name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/userdata"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of userdata documents",
                "tags": [
                    "provisioner"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Userdata name",
                        "in": "query",
                        "name": "name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Raw userdata configuration document",
                        "in": "query",
                        "name": "data",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new userdata document",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/userdata/{userdata}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "userdata",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove userdata document {userdata}",
                "tags": [
                    "provisioner"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "userdata",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/userdata"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about userdata document {userdata}",
                "tags": [
                    "provisioner"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "userdata",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Raw userdata configuration document",
                        "in": "query",
                        "name": "data",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new userdata document {userdata}",
                "tags": [
                    "provisioner"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "userdata",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Raw userdata configuration document",
                        "in": "query",
                        "name": "data",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Update userdata document {userdata}",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/restore": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "A confirmation string to ensure that the API consumer really means it",
                        "in": "query",
                        "name": "yes-i-really-mean-it",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The raw JSON cluster backup data",
                        "in": "query",
                        "name": "cluster_data",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "500": {
                        "description": "Restore error or code failure",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Restore a backup over the cluster; destroys the existing data",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/sriov/pf": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/sriov_pf"
                        }
                    }
                },
                "summary": "Return a list of SR-IOV PFs on a given node",
                "tags": [
                    "network / sriov"
                ]
            }
        },
        "/api/v1/sriov/pf/{node}": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/sriov_pf"
                        }
                    }
                },
                "summary": "Return a list of SR-IOV PFs on node {node}",
                "tags": [
                    "network / sriov"
                ]
            }
        },
        "/api/v1/sriov/vf": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/sriov_vf"
                        }
                    }
                },
                "summary": "Return a list of SR-IOV VFs on a given node, optionally limited to those in the specified PF",
                "tags": [
                    "network / sriov"
                ]
            }
        },
        "/api/v1/sriov/vf/{node}": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/sriov_vf"
                        }
                    }
                },
                "summary": "Return a list of SR-IOV VFs on node {node}, optionally limited to those in the specified PF",
                "tags": [
                    "network / sriov"
                ]
            }
        },
        "/api/v1/sriov/vf/{node}/{vf}": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vf",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/sriov_vf"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about {vf} on {node}",
                "tags": [
                    "network / sriov"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vf",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The vLAN ID for vLAN tagging (0 is disabled)",
                        "in": "query",
                        "name": "vlan_id",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "The vLAN QOS priority (0 is disabled)",
                        "in": "query",
                        "name": "vlan_qos",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "The minimum TX rate (0 is disabled)",
                        "in": "query",
                        "name": "tx_rate_min",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "The maximum TX rate (0 is disabled)",
                        "in": "query",
                        "name": "tx_rate_max",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "The administrative link state",
                        "enum": [
                            "auto",
                            "enable",
                            "disable"
                        ],
                        "in": "query",
                        "name": "link_state",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Enable or disable spoof checking",
                        "in": "query",
                        "name": "spoof_check",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "Enable or disable VF user trust",
                        "in": "query",
                        "name": "trust",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "Enable or disable query RSS support",
                        "in": "query",
                        "name": "query_rss",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the configuration of {vf} on {node}",
                "tags": [
                    "network / sriov"
                ]
            }
        },
        "/api/v1/status": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/ClusterStatus"
                        }
                    },
                    "400": {
                        "description": "Bad request"
                    }
                },
                "summary": "Return the current PVC cluster status",
                "tags": [
                    "root"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "The cluster maintenance state",
                        "in": "query",
                        "name": "state",
                        "required": true,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the cluster maintenance mode",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/status/primary_node": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "primary_node": {
                                    "description": "The name of the current primary node",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "204": {
                        "description": "No content",
                        "schema": {
                            "properties": {
                                "primary_node": {
                                    "description": "An empty response; there is not currently a primary node, try again later",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Return the name of the current primary node.",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/storage/ceph/benchmark": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A single job name to limit results to",
                        "in": "query",
                        "name": "job",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/storagebenchmark"
                        }
                    }
                },
                "summary": "List results from benchmark jobs",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "The PVC storage pool to benchmark",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "An optional override name for the job",
                        "in": "query",
                        "name": "name",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Execute a storage benchmark against a storage pool",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/option": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "The Ceph OSD option to act on; must be valid to \"ceph osd set/unset\"",
                        "in": "query",
                        "name": "option",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The action to take",
                        "enum": [
                            "set",
                            "unset"
                        ],
                        "in": "query",
                        "name": "action",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set or unset OSD options on the Ceph cluster",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/osd": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A OSD ID search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/osd"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of Ceph OSDs in the cluster",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "Note: This task may take up to 60s to complete and return",
                "parameters": [
                    {
                        "description": "The PVC node to create the OSD on",
                        "in": "query",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) or detect string (\"detect:NAME:SIZE:ID\") to create the OSD on",
                        "in": "query",
                        "name": "device",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The Ceph CRUSH weight for the OSD",
                        "in": "query",
                        "name": "weight",
                        "required": true,
                        "type": "number"
                    },
                    {
                        "description": "If set, creates an OSD DB LV with this decimal ratio of DB to total OSD size (usually 0.05 i.e. 5%); mutually exclusive with ext_db_size",
                        "in": "query",
                        "name": "ext_db_ratio",
                        "required": false,
                        "type": "number"
                    },
                    {
                        "description": "If set, creates an OSD DB LV with this explicit size in human units (e.g. 1024M, 20G); mutually exclusive with ext_db_ratio",
                        "in": "query",
                        "name": "ext_db_size",
                        "required": false,
                        "type": "number"
                    },
                    {
                        "description": "If set, create this many OSDs on the block device instead of 1; usually 2 or 4 depending on size",
                        "in": "query",
                        "name": "osd_count",
                        "required": false,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Add a Ceph OSD to the cluster",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/osd/{osdid}": {
            "delete": {
                "description": "Note: This task may take up to 30s to complete and return<br/>Warning: This operation may have unintended consequences for the storage cluster; ensure the cluster can support removing the OSD before proceeding",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "osdid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Force removal even if some step(s) fail",
                        "in": "query",
                        "name": "force",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "A confirmation string to ensure that the API consumer really means it",
                        "in": "query",
                        "name": "yes-i-really-mean-it",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove Ceph OSD {osdid}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "osdid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/osd"
                        }
                    }
                },
                "summary": "Return information about Ceph OSD {osdid}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "Note: This task may take up to 30s to complete and return",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "osdid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) or detect string (\"detect:NAME:SIZE:ID\") to replace the OSD onto",
                        "in": "query",
                        "name": "new_device",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) or detect string (\"detect:NAME:SIZE:ID\") of the original OSD",
                        "in": "query",
                        "name": "old_device",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The Ceph CRUSH weight for the replacement OSD",
                        "in": "query",
                        "name": "weight",
                        "required": false,
                        "type": "number"
                    },
                    {
                        "description": "If set, creates an OSD DB LV for the replcement OSD with this decimal ratio of DB to total OSD size (usually 0.05 i.e. 5%); if unset, use existing ext_db_size",
                        "in": "query",
                        "name": "ext_db_ratio",
                        "required": false,
                        "type": "number"
                    },
                    {
                        "description": "If set, creates an OSD DB LV for the replacement OSD with this explicit size in human units (e.g. 1024M, 20G); if unset, use existing ext_db_size",
                        "in": "query",
                        "name": "ext_db_size",
                        "required": false,
                        "type": "number"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Replace a Ceph OSD in the cluster",
                "tags": [
                    "storage / ceph"
                ]
            },
            "put": {
                "description": "Note: This task may take up to 30s to complete and return",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "osdid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) or detect string (\"detect:NAME:SIZE:ID\") that the OSD should be using",
                        "in": "query",
                        "name": "device",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Refresh (reimport) a Ceph OSD in the cluster",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/osd/{osdid}/state": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "osdid",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "state": {
                                    "description": "The current OSD state",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Return the current state of OSD {osdid}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "osdid",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Set the OSD to this state",
                        "in": "query",
                        "name": "state",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the current state of OSD {osdid}",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/osddb": {
            "post": {
                "description": "Note: This task may take up to 30s to complete and return",
                "parameters": [
                    {
                        "description": "The PVC node to create the OSD DB volume group on",
                        "in": "query",
                        "name": "node",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) or detect string (\"detect:NAME:SIZE:ID\") to create the OSD DB volume group on",
                        "in": "query",
                        "name": "device",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Add a Ceph OSD database volume group to the cluster",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/pool": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A pool name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/pool"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of pools in the cluster",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "The name of the pool",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The number of placement groups (PGs) for the pool",
                        "in": "query",
                        "name": "pgs",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "The replication configuration (e.g. \"copies=3,mincopies=2\") for the pool",
                        "in": "query",
                        "name": "replcfg",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The device tier for the pool (hdd, ssd, nvme, or default)",
                        "in": "query",
                        "name": "tier",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new Ceph pool",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/pool/{pool}": {
            "delete": {
                "description": "Note: This task may take up to 30s to complete and return",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A confirmation string to ensure that the API consumer really means it",
                        "in": "query",
                        "name": "yes-i-really-mean-it",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove Ceph pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/pool"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The number of placement groups (PGs) for the pool",
                        "in": "query",
                        "name": "pgs",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "The replication configuration (e.g. \"copies=3,mincopies=2\") for the pool",
                        "in": "query",
                        "name": "replcfg",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The device tier for the pool (hdd, ssd, nvme, or default)",
                        "in": "query",
                        "name": "tier",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new Ceph pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The new number of placement groups (PGs) for the pool",
                        "in": "query",
                        "name": "pgs",
                        "required": true,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Adjust Ceph pool {pool}'s placement group count",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/snapshot": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A volume name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "A pool to limit the search to",
                        "in": "query",
                        "name": "pool",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "A volume to limit the search to",
                        "in": "query",
                        "name": "volume",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/snapshot"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of snapshots in the cluster",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "The name of the snapshot",
                        "in": "query",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the volume",
                        "in": "query",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the pool",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new Ceph snapshot",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/snapshot/{pool}/{volume}/{snapshot}": {
            "delete": {
                "description": "Note: This task may take up to 30s to complete and return depending on the size of the snapshot",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove Ceph snapshot {snapshot} of volume {volume} from pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/snapshot"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about snapshot {snapshot} of volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new Ceph snapshot {snapshot} of volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The new snaoshot name",
                        "in": "query",
                        "name": "new_name",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Update the name of Ceph snapshot {snapshot} of volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/snapshot/{pool}/{volume}/{snapshot}/rollback": {
            "post": {
                "description": "<br/>WARNING: This action cannot be done on an active RBD volume. All IO MUST be stopped first.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Roll back an RBD volume {volume} in pool {pool} to snapshot {snapshot}",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/status": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "ceph_data": {
                                    "description": "The raw output data",
                                    "type": "string"
                                },
                                "primary_node": {
                                    "description": "The curent primary node in the cluster",
                                    "type": "string"
                                },
                                "type": {
                                    "description": "The type of Ceph data returned",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Return status data for the PVC Ceph cluster",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/utilization": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "ceph_data": {
                                    "description": "The raw output data",
                                    "type": "string"
                                },
                                "primary_node": {
                                    "description": "The curent primary node in the cluster",
                                    "type": "string"
                                },
                                "type": {
                                    "description": "The type of Ceph data returned",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Return utilization data for the PVC Ceph cluster",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/volume": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A volume name search limit; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "A pool to limit the search to",
                        "in": "query",
                        "name": "pool",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/volume"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of volumes in the cluster",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "The name of the volume",
                        "in": "query",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the pool to contain the volume",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "The volume size, in bytes (B implied) or with a single-character SI suffix (k/M/G/T)",
                        "in": "query",
                        "name": "size",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Force action if volume creation would violate 80% full soft cap on the pool",
                        "in": "query",
                        "name": "force",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new Ceph volume",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/volume/{pool}/{volume}": {
            "delete": {
                "description": "Note: This task may take up to 30s to complete and return depending on the size of the volume",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove Ceph volume {volume} from pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/volume"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The volume size in bytes (or with a metric suffix, i.e. k/M/G/T)",
                        "in": "query",
                        "name": "size",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Force action if volume creation would violate 80% full soft cap on the pool",
                        "in": "query",
                        "name": "force",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a new Ceph volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The new volume size in bytes (or with a metric suffix, i.e. k/M/G/T); must be greater than the previous size (shrinking not supported)",
                        "in": "query",
                        "name": "new_size",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The new volume name",
                        "in": "query",
                        "name": "new_name",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Force action if new volume size would violate 80% full soft cap on the pool",
                        "in": "query",
                        "name": "force",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Update the size or name of Ceph volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/volume/{pool}/{volume}/clone": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the new cloned volume",
                        "in": "query",
                        "name": "new_volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Force action if clone volume size would violate 80% full soft cap on the pool",
                        "in": "query",
                        "name": "force",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Clone Ceph volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/volume/{pool}/{volume}/scan": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Scan a Ceph volume {volume} in pool {pool} for stats (after import)",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/volume/{pool}/{volume}/upload": {
            "post": {
                "description": "<br/>The body must be a form body containing a file that is the binary contents of the image.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The type of source image file",
                        "enum": [
                            "raw",
                            "vmdk",
                            "qcow2",
                            "qed",
                            "vdi",
                            "vpc"
                        ],
                        "in": "query",
                        "name": "image_format",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The size of the image file, in bytes, if {image_format} is not \"raw\"",
                        "in": "query",
                        "name": "file_size",
                        "required": false,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Upload a disk image to Ceph volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/tasks": {
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "active": {
                                    "description": "Celery app.control.inspect active tasks",
                                    "type": "object"
                                },
                                "reserved": {
                                    "description": "Celery app.control.inspect reserved tasks",
                                    "type": "object"
                                },
                                "scheduled": {
                                    "description": "Celery app.control.inspect scheduled tasks",
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "summary": "Return a list of active Celery worker tasks",
                "tags": [
                    "root"
                ]
            }
        },
        "/api/v1/tasks/{task_id}": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "task_id",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "current": {
                                    "description": "Current steps completed",
                                    "type": "integer"
                                },
                                "state": {
                                    "description": "Current job state",
                                    "type": "string"
                                },
                                "status": {
                                    "description": "Status details about job",
                                    "type": "string"
                                },
                                "total": {
                                    "description": "Total number of steps",
                                    "type": "integer"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "View status of a Celery worker task {task_id}",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/vm": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "A search limit in the name, tags, or an exact UUID; fuzzy by default, use ^/$ to force exact matches",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Limit list to VMs assigned to this node",
                        "in": "query",
                        "name": "node",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Limit list to VMs in this state",
                        "in": "query",
                        "name": "state",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Limit list to VMs with this tag",
                        "in": "query",
                        "name": "tag",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Negate the specified node, state, or tag limit(s)",
                        "in": "query",
                        "name": "negate",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/vm"
                            },
                            "type": "array"
                        }
                    }
                },
                "summary": "Return a list of VMs in the cluster",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "The raw Libvirt XML definition of the VM",
                        "in": "query",
                        "name": "xml",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The node the VM should be assigned to; autoselect if empty or invalid",
                        "in": "query",
                        "name": "node",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The CSV list of node(s) the VM is permitted to be assigned to; should include \"node\" and any other valid target nodes; this limit will be used for autoselection on definition and migration",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The selector used to determine candidate nodes during migration; see 'target_selector' in the node daemon configuration reference",
                        "enum": [
                            "mem",
                            "memprov",
                            "vcpus",
                            "load",
                            "vms",
                            "none (cluster default)"
                        ],
                        "in": "query",
                        "name": "selector",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Whether to autostart the VM when its node returns to ready domain state",
                        "in": "query",
                        "name": "autostart",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "The preferred migration method (live, shutdown, none)",
                        "enum": [
                            "live",
                            "shutdown",
                            "none"
                        ],
                        "in": "query",
                        "name": "migration_method",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": 300,
                        "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                        "in": "query",
                        "name": "migration_max_downtime",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "The user tag(s) of the VM",
                        "in": "query",
                        "items": {
                            "type": "string"
                        },
                        "name": "user_tags",
                        "required": false,
                        "type": "array"
                    },
                    {
                        "description": "The protected user tag(s) of the VM",
                        "in": "query",
                        "items": {
                            "type": "string"
                        },
                        "name": "protected_tags",
                        "required": false,
                        "type": "array"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Define/create a new virtual machine",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/autobackup": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "A list of email addresses to send failure and report emails to, comma-separated",
                        "in": "query",
                        "name": "email_recipients",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "If set and true, triggers a full autobackup regardless of schedule",
                        "in": "query",
                        "name": "force_full",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Trigger a cluster autobackup job",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/vm/automirror": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "A list of email addresses to send failure and report emails to, comma-separated",
                        "in": "query",
                        "name": "email_recipients",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "If set and true, only sends a report email to email_recipients when there is an error with at least one mirror",
                        "in": "query",
                        "name": "email_errors_only",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Trigger a cluster automirror job",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/vm/{vm}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Whether to automatically delete all VM disk volumes",
                        "in": "query",
                        "name": "delete_disks",
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "VM not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove {vm}",
                "tags": [
                    "vm"
                ]
            },
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/vm"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return information about {vm}",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "<br/>Note: The name {vm} is ignored; only the \"name\" value from the Libvirt XML is used<br/><br/>This endpoint is identical to \"POST /api/v1/vm\"",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The raw Libvirt XML definition of the VM",
                        "in": "query",
                        "name": "xml",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The node the VM should be assigned to; autoselect if empty or invalid",
                        "in": "query",
                        "name": "node",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The CSV list of node(s) the VM is permitted to be assigned to; should include \"node\" and any other valid target nodes; this limit will be used for autoselection on definition and migration",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The selector used to determine candidate nodes during migration; see 'target_selector' in the node daemon configuration reference",
                        "enum": [
                            "mem",
                            "memprov",
                            "vcpus",
                            "load",
                            "vms",
                            "none (cluster default)"
                        ],
                        "in": "query",
                        "name": "selector",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Whether to autostart the VM when its node returns to ready domain state",
                        "in": "query",
                        "name": "autostart",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "The preferred migration method (live, shutdown, none)",
                        "enum": [
                            "live",
                            "shutdown",
                            "none"
                        ],
                        "in": "query",
                        "name": "migration_method",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": 300,
                        "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                        "in": "query",
                        "name": "migration_max_downtime",
                        "required": false,
                        "type": "integer"
                    },
                    {
                        "description": "The user tag(s) of the VM",
                        "in": "query",
                        "items": {
                            "type": "string"
                        },
                        "name": "user_tags",
                        "required": false,
                        "type": "array"
                    },
                    {
                        "description": "The protected user tag(s) of the VM",
                        "in": "query",
                        "items": {
                            "type": "string"
                        },
                        "name": "protected_tags",
                        "required": false,
                        "type": "array"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Define/create a new virtual machine",
                "tags": [
                    "vm"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The raw Libvirt XML definition of the VM",
                        "in": "query",
                        "name": "xml",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Whether to automatically restart the VM to apply the new configuration",
                        "in": "query",
                        "name": "restart",
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Update the Libvirt XML of {vm}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/backup": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A local filesystem path on the primary coordinator where the backup is stored",
                        "in": "query",
                        "name": "backup_path",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The backup datestring identifier (e.g. 20230102030405)",
                        "in": "query",
                        "name": "backup_datestring",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove a backup of {vm}, including snapshots, from a local primary coordinator filesystem path",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A local filesystem path on the primary coordinator to store the backup",
                        "in": "query",
                        "name": "backup_path",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A previous backup datestamp to use as an incremental parent; if unspecified a full backup is taken",
                        "in": "query",
                        "name": "incremental_parent",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Whether or not to retain this backup's volume snapshots to use as a future incremental parent; full backups only",
                        "in": "query",
                        "name": "retain_snapshot",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create a backup of {vm} and its volumes to a local primary coordinator filesystem path",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/console": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The number of lines to retrieve",
                        "in": "query",
                        "name": "lines",
                        "required": false,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/VMLog"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the recent console log of {vm}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/device": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The raw Libvirt XML definition of the device to detach",
                        "in": "query",
                        "name": "xml",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Hot-detach device XML to {vm}",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The raw Libvirt XML definition of the device to attach",
                        "in": "query",
                        "name": "xml",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Hot-attach device XML to {vm}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/locks": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    }
                },
                "summary": "Flush disk locks of {vm}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/meta": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/VMMetadata"
                        }
                    },
                    "404": {
                        "description": "VM not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the metadata of {vm}",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The CSV list of node(s) the VM is permitted to be assigned to; should include \"node\" and any other valid target nodes; this limit will be used for autoselection on definition and migration",
                        "in": "query",
                        "name": "limit",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The selector used to determine candidate nodes during migration; see 'target_selector' in the node daemon configuration reference",
                        "enum": [
                            "mem",
                            "memprov",
                            "vcpus",
                            "load",
                            "vms",
                            "none (cluster default)"
                        ],
                        "in": "query",
                        "name": "selector",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "Whether to autostart the VM when its node returns to ready domain state",
                        "in": "query",
                        "name": "autostart",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "The PVC provisioner profile for the VM",
                        "in": "query",
                        "name": "profile",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The preferred migration method (live, shutdown, none)",
                        "enum": [
                            "live",
                            "shutdown",
                            "none"
                        ],
                        "in": "query",
                        "name": "migration_method",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The maximum time in milliseconds that a VM can be down for during a live migration; busy VMs may require a larger max_downtime",
                        "in": "query",
                        "name": "migration_max_downtime",
                        "required": false,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "VM not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the metadata of {vm}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/mirror/create": {
            "post": {
                "description": "<br/>This method handles both the creation of a new VM snapshot, as well as sending that snapshot to a remote cluster, creating or updating a VM mirror. It will also automatically handle full vs. incremental block sends if possible based on the available snapshots on both sides.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The base API URI of the destination PVC cluster (with prefix if applicable)",
                        "in": "query",
                        "name": "destination_api_uri",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The API authentication key of the destination PVC cluster",
                        "in": "query",
                        "name": "destination_api_key",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": true,
                        "description": "Whether or not to validate SSL certificates for an SSL-enabled destination API",
                        "in": "query",
                        "name": "destination_api_verify_ssl",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "default": "source storage pool name",
                        "description": "The remote cluster storage pool to create RBD volumes in, if different from the source storage pool",
                        "in": "query",
                        "name": "destination_storage_pool",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create (or update) a snapshot mirror of a VM to a remote cluster",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/mirror/promote": {
            "post": {
                "description": "<br/>This method handles shutting down the VM on this cluster, creating a new VM snapshot, sending that snapshot to a remote cluster, then starting up the VM on the remote cluster. It will also automatically handle full vs. incremental block sends if possible based on the available snapshots on both sides.<br/><br/>NOTE: This method may be used alone to perform a one-shot cross-cluster move; creating the mirror first is not required, though doing so will improve performance by allowing an incremental block send.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The base API URI of the destination PVC cluster (with prefix if applicable)",
                        "in": "query",
                        "name": "destination_api_uri",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The API authentication key of the destination PVC cluster",
                        "in": "query",
                        "name": "destination_api_key",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": true,
                        "description": "Whether or not to validate SSL certificates for an SSL-enabled destination API",
                        "in": "query",
                        "name": "destination_api_verify_ssl",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "default": "source storage pool name",
                        "description": "The remote cluster storage pool to create RBD volumes in, if different from the source storage pool",
                        "in": "query",
                        "name": "destination_storage_pool",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Remove the VM on the source cluster once promoted (performs a full move between clusters)",
                        "in": "query",
                        "name": "remove_on_source",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Promote a snapshot mirror of a VM on a remote cluster, flipping \"mirror\" state, and optionally removing the source VM on this cluster.",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/node": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/VMNode"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the node information of {vm}",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The action to take to change nodes",
                        "enum": [
                            "migrate",
                            "unmigrate",
                            "move"
                        ],
                        "in": "query",
                        "name": "action",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The node the VM should be assigned to; autoselect if empty or invalid",
                        "in": "query",
                        "name": "node",
                        "type": "string"
                    },
                    {
                        "description": "Whether to force an already-migrated VM to a new node",
                        "in": "query",
                        "name": "force",
                        "type": "boolean"
                    },
                    {
                        "description": "Whether to block waiting for the migration to complete",
                        "in": "query",
                        "name": "wait",
                        "type": "boolean"
                    },
                    {
                        "description": "Whether to enforce live migration and disable shutdown-based fallback migration",
                        "in": "query",
                        "name": "force_live",
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the node of {vm}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/rename": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The new name of the VM",
                        "in": "query",
                        "name": "new_name",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Rename VM {vm}, and all connected disk volumes which include this name, to {new_name}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/restore": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A local filesystem path on the primary coordinator where the backup is stored",
                        "in": "query",
                        "name": "backup_path",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The backup datestring identifier (e.g. 20230102030405)",
                        "in": "query",
                        "name": "backup_datestring",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": true,
                        "description": "Whether or not to retain the (parent, if incremental) volume snapshot after restore",
                        "in": "query",
                        "name": "retain_snapshot",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Restore a backup of {vm} and its volumes from a local primary coordinator filesystem path",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/snapshot": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the snapshot to remove",
                        "in": "query",
                        "name": "snapshot_name",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove a snapshot of a VM's disks and configuration",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A custom name for the snapshot instead of autogeneration by date",
                        "in": "query",
                        "name": "snapshot_name",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Take a snapshot of a VM's disks and configuration",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/snapshot/export": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the snapshot to export (must exist)",
                        "in": "query",
                        "name": "snapshot_name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The absolute file path to export the snapshot to on the active primary coordinator",
                        "in": "query",
                        "name": "export_path",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "A snapshot name to generate an incremental diff from",
                        "in": "query",
                        "name": "incremental_parent",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Export a snapshot of a VM's disks and configuration to files",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/snapshot/import": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the snapshot to roll back to",
                        "in": "query",
                        "name": "snapshot_name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The absolute file path to import the snapshot from on the active primary coordinator",
                        "in": "query",
                        "name": "import_path",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": true,
                        "description": "Whether or not to retain the (parent, if incremental) volume snapshot after restore",
                        "in": "query",
                        "name": "retain_snapshot",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Import a snapshot of a VM's disks and configuration from files",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/snapshot/receive/block": {
            "patch": {
                "description": "<br/>NOTICE: This is an API-internal endpoint used by /vm/<vm>/snapshot/send; it should never be called by a client.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD data pool",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume",
                        "in": "query",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume snapshot",
                        "in": "query",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Create the block snapshot at snapshot of volume",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "<br/>NOTICE: This is an API-internal endpoint used by /vm/<vm>/snapshot/send; it should never be called by a client.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD data pool",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume",
                        "in": "query",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume snapshot",
                        "in": "query",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The size in bytes of the Ceph RBD volume",
                        "in": "query",
                        "name": "size",
                        "required": true,
                        "type": "integer"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Receive a full snapshot of a single RBD volume from another PVC cluster",
                "tags": [
                    "vm"
                ]
            },
            "put": {
                "description": "<br/>NOTICE: This is an API-internal endpoint used by /vm/<vm>/snapshot/send; it should never be called by a client.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD data pool",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume",
                        "in": "query",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume snapshot",
                        "in": "query",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume snapshot parent",
                        "in": "query",
                        "name": "source_snapshot",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Receive a single diff element from a snapshot of a single RBD volume from another PVC cluster",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/snapshot/receive/config": {
            "post": {
                "description": "<br/>NOTICE: This is an API-internal endpoint used by /vm/<vm>/snapshot/send; it should never be called by a client.",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD data pool",
                        "in": "query",
                        "name": "pool",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume",
                        "in": "query",
                        "name": "volume",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume snapshot",
                        "in": "query",
                        "name": "snapshot",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The size in bytes of the Ceph RBD volume",
                        "in": "query",
                        "name": "size",
                        "required": true,
                        "type": "integer"
                    },
                    {
                        "description": "The name of the destination Ceph RBD volume snapshot parent for incremental transfers",
                        "in": "query",
                        "name": "source_snapshot",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Receive a snapshot of a VM configuration from another PVC cluster",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/snapshot/rollback": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the snapshot to roll back to",
                        "in": "query",
                        "name": "snapshot_name",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Roll back to a snapshot of a VM's disks and configuration",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/snapshot/send": {
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The name of the snapshot to export (must exist)",
                        "in": "query",
                        "name": "snapshot_name",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The base API URI of the destination PVC cluster (with prefix if applicable)",
                        "in": "query",
                        "name": "destination_api_uri",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The API authentication key of the destination PVC cluster",
                        "in": "query",
                        "name": "destination_api_key",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": true,
                        "description": "Whether or not to validate SSL certificates for an SSL-enabled destination API",
                        "in": "query",
                        "name": "destination_api_verify_ssl",
                        "required": false,
                        "type": "boolean"
                    },
                    {
                        "description": "A snapshot name to generate an incremental diff from; incremental send only if unset",
                        "in": "query",
                        "name": "incremental_parent",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "default": "source storage pool name",
                        "description": "The remote cluster storage pool to create RBD volumes in, if different from the source storage pool",
                        "in": "query",
                        "name": "destination_storage_pool",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/CeleryTask"
                        }
                    },
                    "400": {
                        "description": "Execution error",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Send a snapshot of a VM's disks and configuration to another PVC cluster",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/state": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/VMState"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the state information of {vm}",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The new state of the VM",
                        "enum": [
                            "start",
                            "shutdown",
                            "stop",
                            "restart",
                            "disable"
                        ],
                        "in": "query",
                        "name": "state",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "For \"disable\", force stop instead of shutdown and/or force mirror state; for \"start\" or \"stop\", force mirror state.",
                        "in": "query",
                        "name": "force",
                        "type": "boolean"
                    },
                    {
                        "description": "Whether to block waiting for the state change to complete",
                        "in": "query",
                        "name": "wait",
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the state of {vm}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/tags": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "name": {
                                    "description": "The name of the VM",
                                    "type": "string"
                                },
                                "tags": {
                                    "description": "The tag(s) of the VM",
                                    "items": {
                                        "properties": {
                                            "name": {
                                                "description": "The name of the tag",
                                                "type": "string"
                                            },
                                            "protected": {
                                                "description": "Whether the tag is protected or not",
                                                "type": "boolean"
                                            },
                                            "type": {
                                                "description": "The type of the tag (user, system)",
                                                "type": "string"
                                            }
                                        },
                                        "type": "object"
                                    },
                                    "type": "array"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "404": {
                        "description": "VM not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the tags of {vm}",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "description": "Path parameter",
                        "in": "path",
                        "name": "vm",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The action to perform with the tag",
                        "enum": [
                            "add",
                            "remove"
                        ],
                        "in": "query",
                        "name": "action",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "The text value of the tag",
                        "in": "query",
                        "name": "tag",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "default": false,
                        "description": "Set the protected state of the tag",
                        "in": "query",
                        "name": "protected",
                        "required": false,
                        "type": "boolean"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "VM not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Set the tags of {vm}",
                "tags": [
                    "vm"
                ]
            }
        }
    },
    "swagger": "2.0"
}