{
    "definitions": {
        "API-Version": {
            "properties": {
                "message": {
                    "description": "A text message",
                    "example": "PVC API version 1.0",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "Cluster Data": {
            "type": "object"
        },
        "ClusterStatus": {
            "properties": {
                "health": {
                    "description": "The overall cluster health",
                    "example": "Optimal",
                    "type": "string"
                },
                "networks": {
                    "description": "The total number of networks in the cluster",
                    "type": "integer"
                },
                "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"
                },
                "snapshots": {
                    "description": "The total number of snapshots in the storage cluster",
                    "type": "integer"
                },
                "storage_health": {
                    "description": "The overall storage cluster health",
                    "example": "Optimal",
                    "type": "string"
                },
                "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_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",
                    "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"
        },
        "VMTags": {
            "properties": {
                "name": {
                    "description": "The name of the VM",
                    "type": "string"
                },
                "tags": {
                    "description": "The tag(s) of the VM",
                    "items": {
                        "id": "VMTag",
                        "type": "object"
                    },
                    "type": "array"
                }
            },
            "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"
        },
        "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"
                },
                "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"
                },
                "kernel": {
                    "desription": "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": {
                "id": {
                    "description": "The Ceph ID of the OSD",
                    "type": "string (containing integer)"
                },
                "stats": {
                    "properties": {
                        "avail": {
                            "description": "The free space on the OSD in human-readable format",
                            "type": "string"
                        },
                        "in": {
                            "description": "Whether OSD is in \"in\" state",
                            "type": "boolean 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",
                            "type": "boolean 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": {
                        "id": "ova_volume",
                        "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": "list"
                }
            },
            "type": "object"
        },
        "pool": {
            "properties": {
                "name": {
                    "description": "The name of the pool",
                    "type": "string"
                },
                "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"
                },
                "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": "list"
                }
            },
            "type": "object"
        },
        "sriov_vf": {
            "properties": {
                "config": {
                    "id": "sriov_vf_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": {
                    "id": "sriov_vf_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": {
                    "properties": {
                        "test_name": {
                            "properties": {
                                "bandwidth": {
                                    "properties": {
                                        "max": {
                                            "description": "The maximum bandwidth (KiB/s) measurement",
                                            "type": "string (integer)"
                                        },
                                        "mean": {
                                            "description": "The mean bandwidth (KiB/s) measurement",
                                            "type": "string (float)"
                                        },
                                        "min": {
                                            "description": "The minimum bandwidth (KiB/s) measurement",
                                            "type": "string (integer)"
                                        },
                                        "numsamples": {
                                            "description": "The number of samples taken during the test",
                                            "type": "string (integer)"
                                        },
                                        "stdev": {
                                            "description": "The standard deviation of bandwidth",
                                            "type": "string (float)"
                                        }
                                    },
                                    "type": "object"
                                },
                                "cpu": {
                                    "properties": {
                                        "ctxsw": {
                                            "description": "The number of context switches during the test",
                                            "type": "string (integer)"
                                        },
                                        "majfault": {
                                            "description": "The number of major page faults during the test",
                                            "type": "string (integer)"
                                        },
                                        "minfault": {
                                            "description": "The number of minor page faults during the test",
                                            "type": "string (integer)"
                                        },
                                        "system": {
                                            "description": "The percentage of test time spent in system (kernel) space",
                                            "type": "string (float percentage)"
                                        },
                                        "user": {
                                            "description": "The percentage of test time spent in user space",
                                            "type": "string (float percentage)"
                                        }
                                    },
                                    "type": "object"
                                },
                                "iops": {
                                    "properties": {
                                        "max": {
                                            "description": "The maximum IOPS measurement",
                                            "type": "string (integer)"
                                        },
                                        "mean": {
                                            "description": "The mean IOPS measurement",
                                            "type": "string (float)"
                                        },
                                        "min": {
                                            "description": "The minimum IOPS measurement",
                                            "type": "string (integer)"
                                        },
                                        "numsamples": {
                                            "description": "The number of samples taken during the test",
                                            "type": "string (integer)"
                                        },
                                        "stdev": {
                                            "description": "The standard deviation of IOPS",
                                            "type": "string (float)"
                                        }
                                    },
                                    "type": "object"
                                },
                                "latency": {
                                    "properties": {
                                        "max": {
                                            "description": "The maximum latency measurement",
                                            "type": "string (integer)"
                                        },
                                        "mean": {
                                            "description": "The mean latency measurement",
                                            "type": "string (float)"
                                        },
                                        "min": {
                                            "description": "The minimum latency measurement",
                                            "type": "string (integer)"
                                        },
                                        "stdev": {
                                            "description": "The standard deviation of latency",
                                            "type": "string (float)"
                                        }
                                    },
                                    "type": "object"
                                },
                                "overall": {
                                    "properties": {
                                        "bandwidth": {
                                            "description": "The average bandwidth (KiB/s)",
                                            "type": "string (integer)"
                                        },
                                        "iops": {
                                            "description": "The average IOPS",
                                            "type": "string (integer)"
                                        },
                                        "iosize": {
                                            "description": "The total size of the benchmark data",
                                            "type": "string (integer)"
                                        },
                                        "runtime": {
                                            "description": "The total test time in milliseconds",
                                            "type": "string (integer)"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "type": "object"
                },
                "id": {
                    "description": "The database ID of the test result",
                    "type": "string (containing integer)"
                },
                "job": {
                    "description": "The job name (an ISO date) of the test result",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "system-template": {
            "properties": {
                "id": {
                    "description": "Internal provisioner template ID",
                    "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": {
                    "descritpion": "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_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",
                    "type": "string"
                },
                "profile": {
                    "description": "The provisioner profile used to create the VM",
                    "type": "string"
                },
                "state": {
                    "description": "The current state of the VM",
                    "type": "string"
                },
                "tags": {
                    "description": "The tag(s) of the VM",
                    "items": {
                        "id": "VMTag",
                        "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/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": "bool"
                    },
                    {
                        "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/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 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": "",
                "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": "",
                "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": "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 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": "The description of the network",
                        "in": "query",
                        "name": "description",
                        "type": "string"
                    },
                    {
                        "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": "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": "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": "",
                "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": "",
                "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": "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": "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": "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": "",
                "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": "",
                "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": "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": "",
                "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": "",
                "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": "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": "",
                "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": "",
                "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": "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": "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": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "properties": {
                                "task_id": {
                                    "description": "Task ID for the provisioner Celery worker",
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "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": "list"
                        }
                    }
                },
                "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": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove ova {ova}",
                "tags": [
                    "provisioner"
                ]
            },
            "get": {
                "description": "",
                "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": "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": "list"
                        }
                    }
                },
                "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": 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": "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": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove profile {profile}",
                "tags": [
                    "provisioner"
                ]
            },
            "get": {
                "description": "",
                "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": "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": true,
                        "type": "string"
                    },
                    {
                        "description": "Storage template name",
                        "in": "query",
                        "name": "storage_template",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "description": "Userdata template name",
                        "in": "query",
                        "name": "userdata",
                        "required": true,
                        "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": "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": "list"
                        }
                    }
                },
                "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": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Remove script {script}",
                "tags": [
                    "provisioner"
                ]
            },
            "get": {
                "description": "",
                "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": "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": "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/status": {
            "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": "View status of provisioner Celery queue",
                "tags": [
                    "provisioner"
                ]
            }
        },
        "/api/v1/provisioner/status/{task_id}": {
            "get": {
                "description": "",
                "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 provisioner Celery worker job {task_id}",
                "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": "list"
                        }
                    }
                },
                "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": "",
                "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": "",
                "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": "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": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/network-template-net"
                            },
                            "type": "list"
                        }
                    },
                    "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": "PVC network VNI",
                        "in": "query",
                        "name": "vni",
                        "required": false,
                        "type": "integer"
                    }
                ],
                "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": "",
                "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": "",
                "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": "",
                "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": "list"
                        }
                    }
                },
                "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": "",
                "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": "",
                "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": "",
                "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": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "items": {
                                "$ref": "#/definitions/storage-template-disk"
                            },
                            "type": "list"
                        }
                    },
                    "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": "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": "",
                "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": "",
                "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": "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": "list"
                        }
                    }
                },
                "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"
                    }
                ],
                "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": "",
                "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": "",
                "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": "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"
                    }
                ],
                "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": "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"
                    }
                ],
                "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": "list"
                        }
                    }
                },
                "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": "",
                "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": "",
                "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": "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": "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": "",
                "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": "",
                "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": "",
                "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": "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": [
                    "node"
                ]
            }
        },
        "/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"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "description": "The Celery job ID of the benchmark (unused elsewhere)",
                            "type": "string"
                        }
                    }
                },
                "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 30s 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.) 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"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "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": "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 OSD {osdid}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "get": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/osd"
                        }
                    }
                },
                "summary": "Return information about Ceph OSD {osdid}",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/api/v1/storage/ceph/osd/{osdid}/state": {
            "get": {
                "description": "",
                "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": "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/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"
                    }
                ],
                "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": "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": "",
                "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": "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"
                    }
                ],
                "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"
                ]
            }
        },
        "/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",
                "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": "",
                "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": "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"
                        }
                    },
                    "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": "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/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 (or with a metric suffix, i.e. k/M/G/T)",
                        "in": "query",
                        "name": "size",
                        "required": true,
                        "type": "string"
                    }
                ],
                "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",
                "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": "",
                "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": "The volume size in bytes (or with a metric suffix, i.e. k/M/G/T)",
                        "in": "query",
                        "name": "size",
                        "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 volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "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": "size",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "description": "The new volume 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 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": "The name of the new cloned volume",
                        "in": "query",
                        "name": "new_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": "Clone Ceph volume {volume} in pool {pool}",
                "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": "The type of source image file",
                        "enum": [
                            "raw",
                            "vmdk",
                            "qcow2",
                            "qed",
                            "vdi",
                            "vpc"
                        ],
                        "in": "query",
                        "name": "image_format",
                        "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": "Upload a disk image to Ceph volume {volume} in pool {pool}",
                "tags": [
                    "storage / ceph"
                ]
            }
        },
        "/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"
                    }
                ],
                "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"
                    },
                    {
                        "default": "mem",
                        "description": "The selector used to determine candidate nodes during migration",
                        "enum": [
                            "mem",
                            "vcpus",
                            "load",
                            "vms"
                        ],
                        "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"
                    },
                    {
                        "default": "none",
                        "description": "The preferred migration method (live, shutdown, none)",
                        "enum": [
                            "live",
                            "shutdown",
                            "none"
                        ],
                        "in": "query",
                        "name": "migration_method",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "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": "Create a new virtual machine",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}": {
            "delete": {
                "description": "",
                "parameters": [
                    {
                        "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": "",
                "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": "Note: The name {vm} is ignored; only the \"name\" value from the Libvirt XML is used<br/>This endpoint is identical to \"POST /api/v1/vm\"",
                "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"
                    },
                    {
                        "default": "mem",
                        "description": "The selector used to determine candidate nodes during migration",
                        "enum": [
                            "mem",
                            "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"
                    },
                    {
                        "default": "none",
                        "description": "The preferred migration method (live, shutdown, none)",
                        "enum": [
                            "live",
                            "shutdown",
                            "none"
                        ],
                        "in": "query",
                        "name": "migration_method",
                        "required": false,
                        "type": "string"
                    },
                    {
                        "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": "Create new {vm}",
                "tags": [
                    "vm"
                ]
            },
            "put": {
                "description": "",
                "parameters": [
                    {
                        "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}/console": {
            "get": {
                "description": "",
                "parameters": [
                    {
                        "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}/locks": {
            "post": {
                "description": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Flush disk locks of {vm}",
                "tags": [
                    "vm"
                ]
            }
        },
        "/api/v1/vm/{vm}/meta": {
            "get": {
                "description": "",
                "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": "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",
                        "enum": [
                            "mem",
                            "vcpus",
                            "load",
                            "vms"
                        ],
                        "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"
                    },
                    {
                        "default": "none",
                        "description": "The preferred migration method (live, shutdown, none)",
                        "enum": [
                            "live",
                            "shutdown",
                            "none"
                        ],
                        "in": "query",
                        "name": "migration_method",
                        "required": false,
                        "type": "string"
                    }
                ],
                "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}/node": {
            "get": {
                "description": "",
                "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": "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": "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}/state": {
            "get": {
                "description": "",
                "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": "The new state of the VM",
                        "enum": [
                            "start",
                            "shutdown",
                            "stop",
                            "restart",
                            "disable"
                        ],
                        "in": "query",
                        "name": "state",
                        "required": true,
                        "type": "string"
                    },
                    {
                        "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": "",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/VMTags"
                        }
                    },
                    "404": {
                        "description": "VM not found",
                        "schema": {
                            "$ref": "#/definitions/Message"
                        }
                    }
                },
                "summary": "Return the tags of {vm}",
                "tags": [
                    "vm"
                ]
            },
            "post": {
                "description": "",
                "parameters": [
                    {
                        "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"
}