"description":"Note: Normally used only once during cluster bootstrap; checks for the existence of the \"/primary_node\" key before proceeding and returns 400 if found",
"summary":"Log in to the PVC API with an authentication key",
"tags":[
"root"
]
}
},
"/api/v1/logout":{
"post":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"302":{
"description":"Authentication disabled"
}
},
"summary":"Log out of an existing PVC API session",
"tags":[
"root"
]
}
},
"/api/v1/network":{
"get":{
"description":"",
"parameters":[
{
"description":"A VNI or description search limit; fuzzy by default, use ^/$ to force exact matches",
"in":"query",
"name":"limit",
"required":false,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"items":{
"$ref":"#/definitions/network"
},
"type":"array"
}
}
},
"summary":"Return a list of networks in the cluster",
"tags":[
"network"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"The VNI of the network",
"in":"query",
"name":"vni",
"required":true,
"type":"integer"
},
{
"description":"The description of the network",
"in":"query",
"name":"description",
"required":true,
"type":"string"
},
{
"description":"The type of network",
"enum":[
"managed",
"bridged"
],
"in":"query",
"name":"nettype",
"required":true,
"type":"string"
},
{
"description":"The DNS domain of the network (\"managed\" networks only)",
"in":"query",
"name":"domain",
"type":"string"
},
{
"description":"The CSV list of DNS nameservers for network NS records (\"managed\" networks only)",
"in":"query",
"name":"name_servers",
"type":"string"
},
{
"description":"The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)",
"in":"query",
"name":"ip4_network",
"type":"string"
},
{
"description":"The IPv4 default gateway address of the network (\"managed\" networks only)",
"in":"query",
"name":"ip4_gateway",
"type":"string"
},
{
"description":"Whether to enable DHCPv4 for the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4",
"type":"boolean"
},
{
"description":"The DHCPv4 pool start address of the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4_start",
"type":"string"
},
{
"description":"The DHCPv4 pool end address of the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4_end",
"type":"string"
},
{
"description":"The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)",
"in":"query",
"name":"ip6_network",
"type":"string"
},
{
"description":"The IPv6 default gateway address of the network (\"managed\" networks only)",
"in":"query",
"name":"ip6_gateway",
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new network",
"tags":[
"network"
]
}
},
"/api/v1/network/{vni}":{
"delete":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Remove network {vni}",
"tags":[
"network"
]
},
"get":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/network"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Return information about network {vni}",
"tags":[
"network"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"The description of the network",
"in":"query",
"name":"description",
"required":true,
"type":"string"
},
{
"description":"The type of network",
"enum":[
"managed",
"bridged"
],
"in":"query",
"name":"nettype",
"required":true,
"type":"string"
},
{
"description":"The DNS domain of the network (\"managed\" networks only)",
"in":"query",
"name":"domain",
"type":"string"
},
{
"description":"The CSV list of DNS nameservers for network NS records (\"managed\" networks only)",
"in":"query",
"name":"name_servers",
"type":"string"
},
{
"description":"The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)",
"in":"query",
"name":"ip4_network",
"type":"string"
},
{
"description":"The IPv4 default gateway address of the network (\"managed\" networks only)",
"in":"query",
"name":"ip4_gateway",
"type":"string"
},
{
"description":"Whether to enable DHCPv4 for the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4",
"type":"boolean"
},
{
"description":"The DHCPv4 pool start address of the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4_start",
"type":"string"
},
{
"description":"The DHCPv4 pool end address of the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4_end",
"type":"string"
},
{
"description":"The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)",
"in":"query",
"name":"ip6_network",
"type":"string"
},
{
"description":"The IPv6 default gateway address of the network (\"managed\" networks only)",
"in":"query",
"name":"ip6_gateway",
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new network {vni}",
"tags":[
"network"
]
},
"put":{
"description":"Note: A network's type cannot be changed; the network must be removed and recreated as the new type",
"parameters":[
{
"description":"The description of the network",
"in":"query",
"name":"description",
"type":"string"
},
{
"description":"The DNS domain of the network (\"managed\" networks only)",
"in":"query",
"name":"domain",
"type":"string"
},
{
"description":"The CSV list of DNS nameservers for network NS records (\"managed\" networks only)",
"in":"query",
"name":"name_servers",
"type":"string"
},
{
"description":"The IPv4 network subnet of the network in CIDR format; IPv4 disabled if unspecified (\"managed\" networks only)",
"in":"query",
"name":"ip4_network",
"type":"string"
},
{
"description":"The IPv4 default gateway address of the network (\"managed\" networks only)",
"in":"query",
"name":"ip4_gateway",
"type":"string"
},
{
"description":"Whether to enable DHCPv4 for the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4",
"type":"boolean"
},
{
"description":"The DHCPv4 pool start address of the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4_start",
"type":"string"
},
{
"description":"The DHCPv4 pool end address of the network (\"managed\" networks only)",
"in":"query",
"name":"dhcp4_end",
"type":"string"
},
{
"description":"The IPv6 network subnet of the network in CIDR format; IPv6 disabled if unspecified; DHCPv6 is always used in IPv6 managed networks (\"managed\" networks only)",
"in":"query",
"name":"ip6_network",
"type":"string"
},
{
"description":"The IPv6 default gateway address of the network (\"managed\" networks only)",
"in":"query",
"name":"ip6_gateway",
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Update details of network {vni}",
"tags":[
"network"
]
}
},
"/api/v1/network/{vni}/acl":{
"get":{
"description":"",
"parameters":[
{
"description":"A description search limit; fuzzy by default, use ^/$ to force exact matches",
"in":"query",
"name":"limit",
"required":false,
"type":"string"
},
{
"description":"The direction of rules to display; both directions shown if unspecified",
"in":"query",
"name":"direction",
"required":false,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"items":{
"$ref":"#/definitions/acl"
},
"type":"array"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Return a list of ACLs in network {vni}",
"tags":[
"network"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"A whitespace-free description/name for the ACL",
"in":"query",
"name":"description",
"required":true,
"type":"string"
},
{
"description":"The direction of the ACL; defaults to \"in\" if unspecified",
"enum":[
"in",
"out"
],
"in":"query",
"name":"direction",
"required":false,
"type":"string"
},
{
"description":"The order of the ACL in the chain; defaults to the end",
"in":"query",
"name":"order",
"type":"integer"
},
{
"description":"The raw NFT firewall rule string",
"in":"query",
"name":"rule",
"required":true,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new ACL in network {vni}",
"tags":[
"network"
]
}
},
"/api/v1/network/{vni}/acl/{description}":{
"delete":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Delete ACL {description} in network {vni}",
"tags":[
"network"
]
},
"get":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/acl"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Return information about ACL {description} in network {vni}",
"tags":[
"network"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"The direction of the ACL; defaults to \"in\" if unspecified",
"enum":[
"in",
"out"
],
"in":"query",
"name":"direction",
"required":false,
"type":"string"
},
{
"description":"The order of the ACL in the chain; defaults to the end",
"in":"query",
"name":"order",
"type":"integer"
},
{
"description":"The raw NFT firewall rule string",
"in":"query",
"name":"rule",
"required":true,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new ACL {description} in network {vni}",
"tags":[
"network"
]
}
},
"/api/v1/network/{vni}/lease":{
"get":{
"description":"",
"parameters":[
{
"description":"A MAC address search limit; fuzzy by default, use ^/$ to force exact matches",
"in":"query",
"name":"limit",
"required":false,
"type":"string"
},
{
"default":false,
"description":"Whether to show only static leases",
"in":"query",
"name":"static",
"required":false,
"type":"boolean"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"items":{
"$ref":"#/definitions/lease"
},
"type":"array"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Return a list of DHCP leases in network {vni}",
"tags":[
"network"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"A MAC address for the lease",
"in":"query",
"name":"macaddress",
"required":false,
"type":"string"
},
{
"description":"An IPv4 address for the lease",
"in":"query",
"name":"ipaddress",
"required":false,
"type":"string"
},
{
"description":"An optional hostname for the lease",
"in":"query",
"name":"hostname",
"required":false,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new static DHCP lease in network {vni}",
"tags":[
"network"
]
}
},
"/api/v1/network/{vni}/lease/{mac}":{
"delete":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Delete static DHCP lease {mac}",
"tags":[
"network"
]
},
"get":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"items":{
"$ref":"#/definitions/lease"
},
"type":"array"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Return information about DHCP lease {mac} in network {vni}",
"tags":[
"network"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"A MAC address for the lease",
"in":"query",
"name":"macaddress",
"required":false,
"type":"string"
},
{
"description":"An IPv4 address for the lease",
"in":"query",
"name":"ipaddress",
"required":false,
"type":"string"
},
{
"description":"An optional hostname for the lease",
"in":"query",
"name":"hostname",
"required":false,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new static DHCP lease {mac} in network {vni}",
"tags":[
"network"
]
}
},
"/api/v1/node":{
"get":{
"description":"",
"parameters":[
{
"description":"A search limit; fuzzy by default, use ^/$ to force exact matches",
"in":"query",
"name":"limit",
"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"
}
],
"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/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"
}
],
"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/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":"Script name",
"in":"query",
"name":"script",
"required":true,
"type":"string"
},
{
"description":"System template name",
"in":"query",
"name":"system_template",
"required":true,
"type":"string"
},
{
"description":"Network template name",
"in":"query",
"name":"network_template",
"required":true,
"type":"string"
},
{
"description":"Storage template name",
"in":"query",
"name":"storage_template",
"required":true,
"type":"string"
},
{
"description":"Userdata template name",
"in":"query",
"name":"userdata_template",
"required":true,
"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":"Script name",
"in":"query",
"name":"script",
"required":true,
"type":"string"
},
{
"description":"System template name",
"in":"query",
"name":"system_template",
"required":true,
"type":"string"
},
{
"description":"Network template name",
"in":"query",
"name":"network_template",
"required":true,
"type":"string"
},
{
"description":"Storage template name",
"in":"query",
"name":"storage_template",
"required":true,
"type":"string"
},
{
"description":"Userdata template name",
"in":"query",
"name":"userdata_template",
"required":true,
"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"
]
}
},
"/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/{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",
"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",
"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":{
"post":{
"description":"Note: This task may take up to 30s to complete and return",
"parameters":[
{
"description":"The PVC node to create the OSD on",
"in":"query",
"name":"node",
"required":true,
"type":"string"
},
{
"description":"The block device (e.g. \"/dev/sdb\", \"/dev/disk/by-path/...\", etc.) to create the OSD on",
"in":"query",
"name":"device",
"required":true,
"type":"string"
},
{
"description":"The Ceph CRUSH weight for the OSD",
"in":"query",
"name":"weight",
"required":true,
"type":"number"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Add a Ceph OSD to the cluster",
"tags":[
"storage / ceph"
]
}
},
"/api/v1/storage/ceph/osd/{osdid}":{
"delete":{
"description":"Note: This task may take up to 30s to complete and return<br/>Warning: This operation may have unintended consequences for the storage cluster; ensure the cluster can support removing the OSD before proceeding",
"parameters":[
{
"description":"A confirmation string to ensure that the API consumer really means it",
"in":"query",
"name":"yes-i-really-mean-it",
"required":true,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Remove Ceph OSD {osdid}",
"tags":[
"storage / ceph"
]
}
},
"/api/v1/storage/ceph/pool":{
"get":{
"description":"",
"parameters":[
{
"description":"A pool name search limit; fuzzy by default, use ^/$ to force exact matches",
"in":"query",
"name":"limit",
"required":false,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"items":{
"$ref":"#/definitions/pool"
},
"type":"array"
}
}
},
"summary":"Return a list of pools in the cluster",
"tags":[
"storage / ceph"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"The name of the pool",
"in":"query",
"name":"pool",
"required":true,
"type":"string"
},
{
"description":"The number of placement groups (PGs) for the pool",
"in":"query",
"name":"pgs",
"required":true,
"type":"integer"
},
{
"description":"The replication configuration (e.g. \"copies=3,mincopies=2\") for the pool",
"in":"query",
"name":"replcfg",
"required":true,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new Ceph pool",
"tags":[
"storage / ceph"
]
}
},
"/api/v1/storage/ceph/pool/{pool}":{
"delete":{
"description":"Note: This task may take up to 30s to complete and return",
"parameters":[
{
"description":"A confirmation string to ensure that the API consumer really means it",
"in":"query",
"name":"yes-i-really-mean-it",
"required":true,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Remove Ceph pool {pool}",
"tags":[
"storage / ceph"
]
},
"get":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/pool"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Return information about {pool}",
"tags":[
"storage / ceph"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"The number of placement groups (PGs) for the pool",
"in":"query",
"name":"pgs",
"required":true,
"type":"integer"
},
{
"description":"The replication configuration (e.g. \"copies=3,mincopies=2\") for the pool",
"in":"query",
"name":"replcfg",
"required":true,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new Ceph pool {pool}",
"tags":[
"storage / ceph"
]
}
},
"/api/v1/storage/ceph/snapshot":{
"get":{
"description":"",
"parameters":[
{
"description":"A volume name search limit; fuzzy by default, use ^/$ to force exact matches",
"in":"query",
"name":"limit",
"required":false,
"type":"string"
},
{
"description":"A pool to limit the search to",
"in":"query",
"name":"pool",
"required":false,
"type":"string"
},
{
"description":"A volume to limit the search to",
"in":"query",
"name":"volume",
"required":false,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"items":{
"$ref":"#/definitions/snapshot"
},
"type":"array"
}
}
},
"summary":"Return a list of snapshots in the cluster",
"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}",
"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/vm":{
"get":{
"description":"",
"parameters":[
{
"description":"A name search limit; 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"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"items":{
"$ref":"#/definitions/vm"
},
"type":"array"
}
}
},
"summary":"Return a list of VMs in the cluster",
"tags":[
"vm"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"The raw Libvirt XML definition of the VM",
"in":"query",
"name":"xml",
"required":true,
"type":"string"
},
{
"description":"The node the VM should be assigned to; autoselect if empty or invalid",
"in":"query",
"name":"node",
"required":false,
"type":"string"
},
{
"description":"The CSV list of node(s) the VM is permitted to be assigned to; should include \"node\" and any other valid target nodes; this limit will be used for autoselection on definition and migration",
"in":"query",
"name":"limit",
"required":false,
"type":"string"
},
{
"default":"mem",
"description":"The selector used to determine candidate nodes during migration",
"enum":[
"mem",
"vcpu",
"load",
"vms"
],
"in":"query",
"name":"selector",
"required":false,
"type":"string"
},
{
"description":"Whether to autostart the VM when its node returns to ready domain state",
"in":"query",
"name":"autostart",
"required":false,
"type":"boolean"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Create a new virtual machine",
"tags":[
"vm"
]
}
},
"/api/v1/vm/{vm}":{
"delete":{
"description":"",
"parameters":[
{
"default":false,
"description":"Whether to automatically delete all VM disk volumes",
"in":"query",
"name":"delete_disks",
"type":"boolean"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"schema":{
"$ref":"#/definitions/Message"
}
},
"404":{
"description":"VM not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Remove {vm}",
"tags":[
"vm"
]
},
"get":{
"description":"",
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/vm"
}
},
"404":{
"description":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Return information about {vm}",
"tags":[
"vm"
]
},
"post":{
"description":"Note: The name {vm} is ignored; only the \"name\" value from the Libvirt XML is used<br/>This endpoint is identical to \"POST /api/v1/vm\"",
"parameters":[
{
"description":"The raw Libvirt XML definition of the VM",
"in":"query",
"name":"xml",
"required":true,
"type":"string"
},
{
"description":"The node the VM should be assigned to; autoselect if empty or invalid",
"in":"query",
"name":"node",
"required":false,
"type":"string"
},
{
"description":"The CSV list of node(s) the VM is permitted to be assigned to; should include \"node\" and any other valid target nodes; this limit will be used for autoselection on definition and migration",
"in":"query",
"name":"limit",
"required":false,
"type":"string"
},
{
"default":"mem",
"description":"The selector used to determine candidate nodes during migration",
"enum":[
"mem",
"vcpu",
"load",
"vms"
],
"in":"query",
"name":"selector",
"required":false,
"type":"string"
},
{
"description":"Whether to autostart the VM when its node returns to ready domain state",
"in":"query",
"name":"autostart",
"required":false,
"type":"boolean"
}
],
"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}/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":"Not found",
"schema":{
"$ref":"#/definitions/Message"
}
}
},
"summary":"Return the metadata of {vm}",
"tags":[
"vm"
]
},
"post":{
"description":"",
"parameters":[
{
"description":"The CSV list of node(s) the VM is permitted to be assigned to; should include \"node\" and any other valid target nodes; this limit will be used for autoselection on definition and migration",
"in":"query",
"name":"limit",
"required":false,
"type":"string"
},
{
"description":"The selector used to determine candidate nodes during migration",
"enum":[
"mem",
"vcpu",
"load",
"vms"
],
"in":"query",
"name":"selector",
"required":false,
"type":"string"
},
{
"description":"Whether to autostart the VM when its node returns to ready domain state",
"in":"query",
"name":"autostart",
"required":false,
"type":"boolean"
}
],
"responses":{
"200":{
"description":"OK",
"schema":{
"$ref":"#/definitions/Message"
}
},
"400":{
"description":"Bad request",
"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",