1. Ensure that system_template and script are not nullable in the DB. 2. Ensure that the CLI and API enforce the above and clean up CLI arguments for profile add. 3. Ensure that, before uploading OVAs, a 'default_ova' provisioning script is present. 4. Use the 'default_ova' script for new OVA uploads. 5. Ensure that OVA details are properly added to the vm_data dict in the provisioner vmbuilder.
6931 lines
260 KiB
JSON
6931 lines
260 KiB
JSON
{
|
|
"definitions": {
|
|
"API-Version": {
|
|
"properties": {
|
|
"message": {
|
|
"description": "A text message",
|
|
"example": "PVC API version 1.0",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"Cluster Data": {
|
|
"type": "object"
|
|
},
|
|
"ClusterStatus": {
|
|
"properties": {
|
|
"health": {
|
|
"description": "The overall cluster health",
|
|
"example": "Optimal",
|
|
"type": "string"
|
|
},
|
|
"networks": {
|
|
"description": "The total number of networks in the cluster",
|
|
"type": "integer"
|
|
},
|
|
"nodes": {
|
|
"properties": {
|
|
"state-combination": {
|
|
"description": "The total number of nodes in {state-combination} state, where {state-combination} is the node daemon and domain states in CSV format, e.g. \"run,ready\", \"stop,flushed\", etc.",
|
|
"type": "integer"
|
|
},
|
|
"total": {
|
|
"description": "The total number of nodes in the cluster",
|
|
"example": 3,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"osds": {
|
|
"properties": {
|
|
"state-combination": {
|
|
"description": "The total number of OSDs in {state-combination} state, where {state-combination} is the OSD up and in states in CSV format, e.g. \"up,in\", \"down,out\", etc.",
|
|
"type": "integer"
|
|
},
|
|
"total": {
|
|
"description": "The total number of OSDs in the storage cluster",
|
|
"example": 3,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"pools": {
|
|
"description": "The total number of pools in the storage cluster",
|
|
"type": "integer"
|
|
},
|
|
"primary_node": {
|
|
"description": "The current primary coordinator node",
|
|
"example": "pvchv1",
|
|
"type": "string"
|
|
},
|
|
"snapshots": {
|
|
"description": "The total number of snapshots in the storage cluster",
|
|
"type": "integer"
|
|
},
|
|
"storage_health": {
|
|
"description": "The overall storage cluster health",
|
|
"example": "Optimal",
|
|
"type": "string"
|
|
},
|
|
"upstream_ip": {
|
|
"description": "The cluster upstream IP address in CIDR format",
|
|
"example": "10.0.0.254/24",
|
|
"type": "string"
|
|
},
|
|
"vms": {
|
|
"properties": {
|
|
"state": {
|
|
"description": "The total number of VMs in {state} state, e.g. \"start\", \"stop\", etc.",
|
|
"type": "integer"
|
|
},
|
|
"total": {
|
|
"description": "The total number of VMs in the cluster",
|
|
"example": 6,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"volumes": {
|
|
"description": "The total number of volumes in the storage cluster",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"Message": {
|
|
"properties": {
|
|
"message": {
|
|
"description": "A text message",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"NodeCoordinatorState": {
|
|
"properties": {
|
|
"coordinator_state": {
|
|
"description": "The current coordinator state",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"description": "The name of the node",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"NodeDaemonState": {
|
|
"properties": {
|
|
"daemon_state": {
|
|
"description": "The current daemon state",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"description": "The name of the node",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"NodeDomainState": {
|
|
"properties": {
|
|
"domain_state": {
|
|
"description": "The current domain state",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"description": "The name of the node",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"NodeLog": {
|
|
"properties": {
|
|
"data": {
|
|
"description": "The recent log text",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"description": "The name of the Node",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"VMLog": {
|
|
"properties": {
|
|
"data": {
|
|
"description": "The recent console log text",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"description": "The name of the VM",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"VMMetadata": {
|
|
"properties": {
|
|
"migration_method": {
|
|
"description": "The preferred migration method (live, shutdown, none)",
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"description": "The name of the VM",
|
|
"type": "string"
|
|
},
|
|
"node_autostart": {
|
|
"description": "Whether to autostart the VM when its node returns to ready domain state",
|
|
"type": "string"
|
|
},
|
|
"node_limit": {
|
|
"description": "The node(s) the VM is permitted to be assigned to",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"node_selector": {
|
|
"description": "The selector used to determine candidate nodes during migration; 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"
|
|
},
|
|
"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",
|
|
"memfree",
|
|
"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",
|
|
"memfree",
|
|
"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",
|
|
"memfree",
|
|
"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"
|
|
} |