{ "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": { "cluster_health": { "properties": { "health": { "description": "The overall health (%) of the cluster", "example": 100, "type": "integer" }, "messages": { "description": "A list of health event strings", "items": { "example": "hv1: plugin 'nics': bond0 DEGRADED with 1 active slaves, bond0 OK at 10000 Mbps", "type": "string" }, "type": "array" } }, "type": "object" }, "maintenance": { "description": "Whether the cluster is in maintenance mode or not (string boolean)", "example": true, "type": "string" }, "networks": { "description": "The total number of networks in the cluster", "type": "integer" }, "node_health": { "properties": { "hvX": { "description": "A node entry for per-node health details, one per node in the cluster", "properties": { "health": { "description": "The health (%) of the node", "example": 100, "type": "integer" }, "messages": { "description": "A list of health event strings", "items": { "example": "'nics': bond0 DEGRADED with 1 active slaves, bond0 OK at 10000 Mbps", "type": "string" }, "type": "array" } }, "type": "object" } }, "type": "object" }, "nodes": { "properties": { "state-combination": { "description": "The total number of nodes in {state-combination} state, where {state-combination} is the node daemon and domain states in CSV format, e.g. \"run,ready\", \"stop,flushed\", etc.", "type": "integer" }, "total": { "description": "The total number of nodes in the cluster", "example": 3, "type": "integer" } }, "type": "object" }, "osds": { "properties": { "state-combination": { "description": "The total number of OSDs in {state-combination} state, where {state-combination} is the OSD up and in states in CSV format, e.g. \"up,in\", \"down,out\", etc.", "type": "integer" }, "total": { "description": "The total number of OSDs in the storage cluster", "example": 3, "type": "integer" } }, "type": "object" }, "pools": { "description": "The total number of pools in the storage cluster", "type": "integer" }, "primary_node": { "description": "The current primary coordinator node", "example": "pvchv1", "type": "string" }, "snapshots": { "description": "The total number of snapshots in the storage cluster", "type": "integer" }, "upstream_ip": { "description": "The cluster upstream IP address in CIDR format", "example": "10.0.0.254/24", "type": "string" }, "vms": { "properties": { "state": { "description": "The total number of VMs in {state} state, e.g. \"start\", \"stop\", etc.", "type": "integer" }, "total": { "description": "The total number of VMs in the cluster", "example": 6, "type": "integer" } }, "type": "object" }, "volumes": { "description": "The total number of volumes in the storage cluster", "type": "integer" } }, "type": "object" }, "Message": { "properties": { "message": { "description": "A text message", "type": "string" } }, "type": "object" }, "NodeCoordinatorState": { "properties": { "coordinator_state": { "description": "The current coordinator state", "type": "string" }, "name": { "description": "The name of the node", "type": "string" } }, "type": "object" }, "NodeDaemonState": { "properties": { "daemon_state": { "description": "The current daemon state", "type": "string" }, "name": { "description": "The name of the node", "type": "string" } }, "type": "object" }, "NodeDomainState": { "properties": { "domain_state": { "description": "The current domain state", "type": "string" }, "name": { "description": "The name of the node", "type": "string" } }, "type": "object" }, "NodeLog": { "properties": { "data": { "description": "The recent log text", "type": "string" }, "name": { "description": "The name of the Node", "type": "string" } }, "type": "object" }, "VMLog": { "properties": { "data": { "description": "The recent console log text", "type": "string" }, "name": { "description": "The name of the VM", "type": "string" } }, "type": "object" }, "VMMetadata": { "properties": { "migration_method": { "description": "The preferred migration method (live, shutdown, none)", "type": "string" }, "name": { "description": "The name of the VM", "type": "string" }, "node_autostart": { "description": "Whether to autostart the VM when its node returns to ready domain state", "type": "string" }, "node_limit": { "description": "The node(s) the VM is permitted to be assigned to", "items": { "type": "string" }, "type": "array" }, "node_selector": { "description": "The selector used to determine candidate nodes during migration; see 'target_selector' in the node daemon configuration reference", "type": "string" } }, "type": "object" }, "VMNode": { "properties": { "last_node": { "description": "The last node the VM was assigned to before migrating", "type": "string" }, "name": { "description": "The name of the VM", "type": "string" }, "node": { "description": "The node the VM is currently assigned to", "type": "string" } }, "type": "object" }, "VMState": { "properties": { "name": { "description": "The name of the VM", "type": "string" }, "state": { "description": "The current state of the VM", "type": "string" } }, "type": "object" }, "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" }, "mtu": { "description": "The MTU of the network, if set; empty otherwise", "type": "integer" }, "name_servers": { "description": "The configured DNS nameservers of the network for NS records (\"managed\" networks only)", "items": { "type": "string" }, "type": "array" }, "type": { "description": "The type of network", "enum": [ "managed", "bridged" ], "type": "string" }, "vni": { "description": "The VNI of the network", "type": "integer" } }, "type": "object" }, "network-template": { "properties": { "id": { "description": "Internal provisioner template ID", "type": "integer" }, "mac_template": { "description": "MAC address template for VM", "type": "string" }, "name": { "description": "Template name", "type": "string" }, "networks": { "items": { "$ref": "#/definitions/network-template-net" }, "type": "array" } }, "type": "object" }, "network-template-net": { "properties": { "id": { "description": "Internal provisioner template ID", "type": "integer" }, "network_template": { "description": "Internal provisioner network template ID", "type": "integer" }, "vni": { "description": "PVC network VNI", "type": "integer" } }, "type": "object" }, "node": { "properties": { "arch": { "description": "The architecture of the CPU", "type": "string" }, "coordinator_state": { "description": "The current coordinator state", "type": "string" }, "cpu_count": { "description": "The number of available CPU cores", "type": "integer" }, "daemon_state": { "description": "The current daemon state", "type": "string" }, "domain_state": { "description": "The current domain (VM) state", "type": "string" }, "domains_count": { "description": "The number of running domains (VMs)", "type": "integer" }, "health": { "description": "The overall health (%) of the node", "example": 100, "type": "integer" }, "health_details": { "description": "A list of health plugin results", "items": { "properties": { "health_delta": { "description": "The health delta (negatively applied to the health percentage) of the plugin's current state", "example": 10, "type": "integer" }, "last_run": { "description": "The UNIX timestamp (s) of the last plugin run", "example": 1676786078, "type": "integer" }, "message": { "description": "The output message of the plugin", "example": "bond0 DEGRADED with 1 active slaves, bond0 OK at 10000 Mbps", "type": "string" }, "name": { "description": "The name of the health plugin", "example": "nics", "type": "string" } }, "type": "object" }, "type": "array" }, "health_plugins": { "description": "A list of health plugin names currently loaded on the node", "items": { "example": "nics", "type": "string" }, "type": "array" }, "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": { "db_device": { "description": "The OSD database/WAL block device (logical volume); empty if not applicable", "type": "string" }, "device": { "description": "The OSD data block device", "type": "string" }, "id": { "description": "The Ceph ID of the OSD", "type": "string (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" }, "pgs": { "description": "The number of PGs (placement groups) for the pool", "type": "integer" }, "stats": { "properties": { "free_bytes": { "description": "The total free space (in bytes. post-replicas)", "type": "integer" }, "id": { "description": "The Ceph pool ID", "type": "integer" }, "num_object_clones": { "description": "The total number of cloned Ceph objects", "type": "integer" }, "num_object_copies": { "description": "The total number of Ceph objects after replication", "type": "integer" }, "num_objects": { "description": "The number of Ceph objects before replication", "type": "integer" }, "num_objects_degraded": { "description": "The total number of degraded Ceph objects", "type": "integer" }, "num_objects_missing_on_primary": { "description": "The total number of missing-on-primary Ceph objects", "type": "integer" }, "num_objects_unfound": { "description": "The total number of unfound Ceph objects", "type": "integer" }, "read_bytes": { "description": "The total read bytes on the pool (pool-lifetime)", "type": "integer" }, "read_ops": { "description": "The total read operations on the pool (pool-lifetime)", "type": "integer" }, "stored_bytes": { "description": "The stored data size (in bytes, post-replicas)", "type": "integer" }, "used_bytes": { "description": "The total used space (in bytes, pre-replicas)", "type": "integer" }, "used_percent": { "description": "The ratio of used space to free space", "type": "number" }, "write_bytes": { "description": "The total write bytes on the pool (pool-lifetime)", "type": "integer" }, "write_ops": { "description": "The total write operations on the pool (pool-lifetime)", "type": "integer" } }, "type": "object" }, "tier": { "description": "The device class/tier of the pool", "type": "string" }, "volume_count": { "description": "The number of volumes in the pool", "type": "integer" } }, "type": "object" }, "profile": { "properties": { "arguments": { "items": { "description": "Script install() function keyword arguments in \"arg=data\" format", "type": "string" }, "type": "array" }, "id": { "description": "Internal provisioner profile ID", "type": "integer" }, "name": { "description": "Profile name", "type": "string" }, "network_template": { "description": "Network template name", "type": "string" }, "script": { "description": "Script name", "type": "string" }, "storage_template": { "description": "Storage template name", "type": "string" }, "system_template": { "description": "System template name", "type": "string" }, "userdata": { "description": "Userdata template name", "type": "string" } }, "type": "object" }, "script": { "properties": { "id": { "description": "Internal provisioner script ID", "type": "integer" }, "name": { "description": "Script name", "type": "string" }, "script": { "description": "Raw Python script document", "type": "string" } }, "type": "object" }, "snapshot": { "properties": { "pool": { "description": "The name of the pool", "type": "string" }, "snapshot": { "description": "The name of the snapshot", "type": "string" }, "volume": { "description": "The name of the volume", "type": "string" } }, "type": "object" }, "sriov_pf": { "properties": { "mtu": { "description": "The MTU of the SR-IOV PF device", "type": "string" }, "phy": { "description": "The name of the SR-IOV PF device", "type": "string" }, "vfs": { "items": { "description": "The PHY name of a VF of this PF", "type": "string" }, "type": "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": { "description": "A format 0 test 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" }, "test_format": { "description": "The PVC benchmark format of the results", "type": "integer" } }, "type": "object" }, "system-template": { "properties": { "id": { "description": "Internal provisioner template ID", "type": "integer" }, "migration_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; see 'target_selector' in the node daemon configuration reference", "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 MTU of the network; defaults to the underlying interface MTU if not set", "in": "query", "name": "mtu", "type": "integer" }, { "description": "The DNS domain of the network (\"managed\" networks only)", "in": "query", "name": "domain", "type": "string" }, { "description": "The CSV list of DNS nameservers for network NS records (\"managed\" networks only)", "in": "query", "name": "name_servers", "type": "string" }, { "description": "The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)", "in": "query", "name": "ip4_network", "type": "string" }, { "description": "The IPv4 default gateway address of the network (\"managed\" networks only)", "in": "query", "name": "ip4_gateway", "type": "string" }, { "description": "Whether to enable DHCPv4 for the network (\"managed\" networks only)", "in": "query", "name": "dhcp4", "type": "boolean" }, { "description": "The DHCPv4 pool start address of the network (\"managed\" networks only)", "in": "query", "name": "dhcp4_start", "type": "string" }, { "description": "The DHCPv4 pool end address of the network (\"managed\" networks only)", "in": "query", "name": "dhcp4_end", "type": "string" }, { "description": "The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)", "in": "query", "name": "ip6_network", "type": "string" }, { "description": "The IPv6 default gateway address of the network (\"managed\" networks only)", "in": "query", "name": "ip6_gateway", "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Create a new network", "tags": [ "network" ] } }, "/api/v1/network/{vni}": { "delete": { "description": "", "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 MTU of the network; defaults to the underlying interface MTU if not set", "in": "query", "name": "mtu", "type": "integer" }, { "description": "The DNS domain of the network (\"managed\" networks only)", "in": "query", "name": "domain", "type": "string" }, { "description": "The CSV list of DNS nameservers for network NS records (\"managed\" networks only)", "in": "query", "name": "name_servers", "type": "string" }, { "description": "The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)", "in": "query", "name": "ip4_network", "type": "string" }, { "description": "The IPv4 default gateway address of the network (\"managed\" networks only)", "in": "query", "name": "ip4_gateway", "type": "string" }, { "description": "Whether to enable DHCPv4 for the network (\"managed\" networks only)", "in": "query", "name": "dhcp4", "type": "boolean" }, { "description": "The DHCPv4 pool start address of the network (\"managed\" networks only)", "in": "query", "name": "dhcp4_start", "type": "string" }, { "description": "The DHCPv4 pool end address of the network (\"managed\" networks only)", "in": "query", "name": "dhcp4_end", "type": "string" }, { "description": "The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)", "in": "query", "name": "ip6_network", "type": "string" }, { "description": "The IPv6 default gateway address of the network (\"managed\" networks only)", "in": "query", "name": "ip6_gateway", "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Create a new network {vni}", "tags": [ "network" ] }, "put": { "description": "Note: A network's type cannot be changed; the network must be removed and recreated as the new type", "parameters": [ { "description": "The description of the network", "in": "query", "name": "description", "type": "string" }, { "description": "The MTU of the network", "in": "query", "name": "mtu", "type": "integer" }, { "description": "The DNS domain of the network (\"managed\" networks only)", "in": "query", "name": "domain", "type": "string" }, { "description": "The CSV list of DNS nameservers for network NS records (\"managed\" networks only)", "in": "query", "name": "name_servers", "type": "string" }, { "description": "The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)", "in": "query", "name": "ip4_network", "type": "string" }, { "description": "The IPv4 default gateway address of the network (\"managed\" networks only)", "in": "query", "name": "ip4_gateway", "type": "string" }, { "description": "Whether to enable DHCPv4 for the network (\"managed\" networks only)", "in": "query", "name": "dhcp4", "type": "boolean" }, { "description": "The DHCPv4 pool start address of the network (\"managed\" networks only)", "in": "query", "name": "dhcp4_start", "type": "string" }, { "description": "The DHCPv4 pool end address of the network (\"managed\" networks only)", "in": "query", "name": "dhcp4_end", "type": "string" }, { "description": "The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)", "in": "query", "name": "ip6_network", "type": "string" }, { "description": "The IPv6 default gateway address of the network (\"managed\" networks only)", "in": "query", "name": "ip6_gateway", "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } }, "404": { "description": "Not found", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Update details of network {vni}", "tags": [ "network" ] } }, "/api/v1/network/{vni}/acl": { "get": { "description": "", "parameters": [ { "description": "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": true, "type": "string" }, { "description": "System template name", "in": "query", "name": "system_template", "required": true, "type": "string" }, { "description": "Network template name", "in": "query", "name": "network_template", "required": false, "type": "string" }, { "description": "Storage template name", "in": "query", "name": "storage_template", "required": false, "type": "string" }, { "description": "Userdata template name", "in": "query", "name": "userdata", "required": false, "type": "string" }, { "description": "OVA image source", "in": "query", "name": "ova", "required": false, "type": "string" }, { "description": "Script install() function keywork argument in \"arg=data\" format; may be specified multiple times to add multiple arguments", "in": "query", "name": "arg", "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Create a new profile", "tags": [ "provisioner" ] } }, "/api/v1/provisioner/profile/{profile}": { "delete": { "description": "", "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": false, "type": "string" }, { "description": "Storage template name", "in": "query", "name": "storage_template", "required": false, "type": "string" }, { "description": "Userdata template name", "in": "query", "name": "userdata", "required": false, "type": "string" }, { "description": "OVA image source", "in": "query", "name": "ova", "required": false, "type": "string" }, { "description": "Script install() function keywork argument in \"arg=data\" format; may be specified multiple times to add multiple arguments", "in": "query", "name": "arg", "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Create a new profile {profile}", "tags": [ "provisioner" ] }, "put": { "description": "", "parameters": [ { "description": "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.) or detect string (\"detect:NAME:SIZE:ID\") to create the OSD on", "in": "query", "name": "device", "required": true, "type": "string" }, { "description": "The Ceph CRUSH weight for the OSD", "in": "query", "name": "weight", "required": true, "type": "number" }, { "description": "Whether to use an external OSD DB LV device", "in": "query", "name": "ext_db", "required": false, "type": "boolean" }, { "description": "Decimal ratio of total OSD size for the external OSD DB LV device, default 0.05 (5%)", "in": "query", "name": "ext_db_ratio", "required": false, "type": "float" } ], "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": "Force removal even if some step(s) fail", "in": "query", "name": "force", "required": "flase", "type": "boolean" }, { "description": "A confirmation string to ensure that the API consumer really means it", "in": "query", "name": "yes-i-really-mean-it", "required": true, "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "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" ] }, "post": { "description": "Note: This task may take up to 30s to complete and return", "parameters": [ { "description": "The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) or detect string (\"detect:NAME:SIZE:ID\") to replace the OSD onto", "in": "query", "name": "device", "required": true, "type": "string" }, { "description": "The Ceph CRUSH weight for the replaced 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": "Replace a Ceph OSD in the cluster", "tags": [ "storage / ceph" ] }, "put": { "description": "Note: This task may take up to 30s to complete and return", "parameters": [ { "description": "The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) or detect string (\"detect:NAME:SIZE:ID\") that the OSD should be using", "in": "query", "name": "device", "required": true, "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Refresh (reimport) a Ceph OSD in the cluster", "tags": [ "storage / ceph" ] } }, "/api/v1/storage/ceph/osd/{osdid}/state": { "get": { "description": "", "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/osddb": { "post": { "description": "Note: This task may take up to 30s to complete and return", "parameters": [ { "description": "The PVC node to create the OSD DB volume group on", "in": "query", "name": "node", "required": true, "type": "string" }, { "description": "The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) or detect string (\"detect:NAME:SIZE:ID\") to create the OSD DB volume group on", "in": "query", "name": "device", "required": true, "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Add a Ceph OSD database volume group to the cluster", "tags": [ "storage / ceph" ] } }, "/api/v1/storage/ceph/pool": { "get": { "description": "", "parameters": [ { "description": "A pool name search limit; fuzzy by default, use ^/$ to force exact matches", "in": "query", "name": "limit", "required": false, "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "items": { "$ref": "#/definitions/pool" }, "type": "array" } } }, "summary": "Return a list of pools in the cluster", "tags": [ "storage / ceph" ] }, "post": { "description": "", "parameters": [ { "description": "The name of the pool", "in": "query", "name": "pool", "required": true, "type": "string" }, { "description": "The number of placement groups (PGs) for the pool", "in": "query", "name": "pgs", "required": true, "type": "integer" }, { "description": "The replication configuration (e.g. \"copies=3,mincopies=2\") for the pool", "in": "query", "name": "replcfg", "required": true, "type": "string" }, { "description": "The device tier for the pool (hdd, ssd, nvme, or default)", "in": "query", "name": "tier", "required": false } ], "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" }, { "description": "The device tier for the pool (hdd, ssd, nvme, or default)", "in": "query", "name": "tier", "required": false } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } }, "404": { "description": "Not found", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Create a new Ceph pool {pool}", "tags": [ "storage / ceph" ] }, "put": { "description": "", "parameters": [ { "description": "The new number of placement groups (PGs) for the pool", "in": "query", "name": "pgs", "required": true, "type": "integer" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } }, "404": { "description": "Not found", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Adjust Ceph pool {pool}'s placement group count", "tags": [ "storage / ceph" ] } }, "/api/v1/storage/ceph/snapshot": { "get": { "description": "", "parameters": [ { "description": "A volume name search limit; fuzzy by default, use ^/$ to force exact matches", "in": "query", "name": "limit", "required": false, "type": "string" }, { "description": "A pool to limit the search to", "in": "query", "name": "pool", "required": false, "type": "string" }, { "description": "A volume to limit the search to", "in": "query", "name": "volume", "required": false, "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "items": { "$ref": "#/definitions/snapshot" }, "type": "array" } } }, "summary": "Return a list of snapshots in the cluster", "tags": [ "storage / ceph" ] }, "post": { "description": "", "parameters": [ { "description": "The name of the snapshot", "in": "query", "name": "snapshot", "required": true, "type": "string" }, { "description": "The name of the volume", "in": "query", "name": "volume", "required": true, "type": "string" }, { "description": "The name of the pool", "in": "query", "name": "pool", "required": true, "type": "integer" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Create a new Ceph snapshot", "tags": [ "storage / ceph" ] } }, "/api/v1/storage/ceph/snapshot/{pool}/{volume}/{snapshot}": { "delete": { "description": "Note: This task may take up to 30s to complete and return depending on the size of the snapshot", "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" }, { "description": "Negate the specified node, state, or tag limit(s)", "in": "query", "name": "negate", "required": false, "type": "boolean" } ], "responses": { "200": { "description": "OK", "schema": { "items": { "$ref": "#/definitions/vm" }, "type": "array" } } }, "summary": "Return a list of VMs in the cluster", "tags": [ "vm" ] }, "post": { "description": "", "parameters": [ { "description": "The raw Libvirt XML definition of the VM", "in": "query", "name": "xml", "required": true, "type": "string" }, { "description": "The node the VM should be assigned to; autoselect if empty or invalid", "in": "query", "name": "node", "required": false, "type": "string" }, { "description": "The CSV list of node(s) the VM is permitted to be assigned to; should include \"node\" and any other valid target nodes; this limit will be used for autoselection on definition and migration", "in": "query", "name": "limit", "required": false, "type": "string" }, { "default": "none", "description": "The selector used to determine candidate nodes during migration; see 'target_selector' in the node daemon configuration reference", "enum": [ "mem", "memprov", "vcpus", "load", "vms", "none (cluster default)" ], "in": "query", "name": "selector", "required": false, "type": "string" }, { "description": "Whether to autostart the VM when its node returns to ready domain state", "in": "query", "name": "autostart", "required": false, "type": "boolean" }, { "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": "none", "description": "The selector used to determine candidate nodes during migration; see 'target_selector' in the node daemon configuration reference", "enum": [ "mem", "memprov", "vcpus", "load", "vms", "none (cluster default)" ], "in": "query", "name": "selector", "required": false, "type": "string" }, { "description": "Whether to autostart the VM when its node returns to ready domain state", "in": "query", "name": "autostart", "required": false, "type": "boolean" }, { "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}/device": { "delete": { "description": "", "parameters": [ { "description": "The raw Libvirt XML definition of the device to detach", "in": "query", "name": "xml", "required": true, "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Hot-detach device XML to {vm}", "tags": [ "vm" ] }, "post": { "description": "", "parameters": [ { "description": "The raw Libvirt XML definition of the device to attach", "in": "query", "name": "xml", "required": true, "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Hot-attach device XML to {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; see 'target_selector' in the node daemon configuration reference", "enum": [ "mem", "memprov", "vcpus", "load", "vms", "none (cluster default)" ], "in": "query", "name": "selector", "required": false, "type": "string" }, { "description": "Whether to autostart the VM when its node returns to ready domain state", "in": "query", "name": "autostart", "required": false, "type": "boolean" }, { "description": "The PVC provisioner profile for the VM", "in": "query", "name": "profile", "required": false, "type": "string" }, { "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 force stop instead of shutdown VM during disable", "in": "query", "name": "force", "type": "boolean" }, { "description": "Whether to block waiting for the state change to complete", "in": "query", "name": "wait", "type": "boolean" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Message" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/Message" } } }, "summary": "Set the state of {vm}", "tags": [ "vm" ] } }, "/api/v1/vm/{vm}/tags": { "get": { "description": "", "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" }