Download OpenAPI specification:
RESTful API for Vapor a web console for modern Linux stacks.
This API implements the TUS Protocol v1.0.0 for resumable file uploads, specifically for:
/virtualmachines/isos/upload/*)/containers/images/upload/*)/docker/images/upload/*)TUS is an open protocol for resumable file uploads via HTTP/1.1 and HTTP/2. It allows:
POST /api/v1/virtualmachines/isos/upload
Headers:
Upload-Length: 1474560000 # File size in bytes
Upload-Metadata: filename aXNvLXVidW50dS0yMi4wNC5pc28= # Base64 encoded metadata
Returns:
201 Created with Location header containing upload URLPATCH /api/v1/virtualmachines/isos/upload/{upload_id}
Headers:
Upload-Offset: 0 # Starting byte position
Content-Type: application/offset+octet-stream
Body: [binary data chunk]
HEAD /api/v1/virtualmachines/isos/upload/{upload_id}
Returns current Upload-Offset to resume from
POST /api/v1/virtualmachines/isos/upload/{upload_id}/complete
Finalizes upload and registers the file in the system
For frontend applications, we recommend using:
Example with tus-js-client:
import * as tus from 'tus-js-client';
const upload = new tus.Upload(file, {
endpoint: '/api/v1/virtualmachines/isos/upload',
headers: {
'Authorization': 'Bearer ' + token
},
chunkSize: 10 * 1024 * 1024, // 10MB chunks
metadata: {
filename: file.name,
filetype: file.type
},
onError: (error) => console.error('Upload failed:', error),
onProgress: (bytesUploaded, bytesTotal) => {
const percentage = (bytesUploaded / bytesTotal * 100).toFixed(2);
console.log(percentage + '% uploaded');
},
onSuccess: () => {
console.log('Upload complete');
// Call complete endpoint to finalize
fetch(`/api/v1/virtualmachines/isos/upload/${upload.url.split('/').pop()}/complete`, {
method: 'POST',
headers: { 'Authorization': 'Bearer ' + token }
});
}
});
upload.start();
Register an existing qcow2 backup file on disk into the backup catalog
| backup_id | string Optional ID to register; if omitted the server generates one |
| vm_uuid | string Optional VM UUID to associate with the backup |
| vm_name required | string VM name the backup belongs to |
| path required | string Absolute path to the existing qcow2 backup file on disk |
| type | string Default: "full" Enum: "full" "incremental" "differential" Backup type |
| compression | string Default: "none" Enum: "none" "gzip" "bzip2" "xz" "zstd" Compression used in the backup file |
| encryption | string Default: "none" Enum: "none" "aes256" "aes128" Encryption used in the backup file |
| retention_days | integer Retention policy in days |
| description | string Optional description metadata |
{- "backup_id": "string",
- "vm_uuid": "string",
- "vm_name": "myvm",
- "path": "/var/lib/libvirt/vapor-backups/myvm/myvm-abc123.qcow2",
- "type": "full",
- "compression": "none",
- "encryption": "none",
- "retention_days": 30,
- "description": "string"
}{- "status": "success",
- "data": {
- "backup": {
- "id": "backup-123e4567-e89b-12d3-a456-426614174000",
- "backup_id": "backup-123456",
- "vm_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vm_name": "web-server-01",
- "backup_type": "full",
- "status": "completed",
- "source_path": "/var/lib/libvirt/images/web-server-01.qcow2",
- "destination_path": "/backup/vms/web-server-01/",
- "size_bytes": 10737418240,
- "compressed": true,
- "compression": "gzip",
- "encryption": "AES-256",
- "parent_backup_id": "backup-123455",
- "started_at": "2025-01-15T10:00:00Z",
- "completed_at": "2025-01-15T10:30:00Z",
- "retention_days": 30,
- "include_memory": false,
- "error_message": "Failed to connect to storage"
}, - "message": "Backup initiated successfully"
}
}{- "status": "success",
- "data": {
- "backups": [
- {
- "id": "backup-123e4567-e89b-12d3-a456-426614174000",
- "backup_id": "backup-123456",
- "vm_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vm_name": "web-server-01",
- "backup_type": "full",
- "status": "completed",
- "source_path": "/var/lib/libvirt/images/web-server-01.qcow2",
- "destination_path": "/backup/vms/web-server-01/",
- "size_bytes": 10737418240,
- "compressed": true,
- "compression": "gzip",
- "encryption": "AES-256",
- "parent_backup_id": "backup-123455",
- "started_at": "2025-01-15T10:00:00Z",
- "completed_at": "2025-01-15T10:30:00Z",
- "retention_days": 30,
- "include_memory": false,
- "error_message": "Failed to connect to storage"
}
], - "count": 2,
- "vm_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{- "status": "success",
- "data": {
- "vms": [
- {
- "uuid": "string",
- "name": "string",
- "state": "string",
- "memory": 0,
- "max_memory": 0,
- "vcpus": 0,
- "max_vcpus": 0,
- "cpu": {
- "mode": "string",
- "match": "string",
- "check": "string",
- "migratable": "on",
- "topology": {
- "sockets": 0,
- "dies": 0,
- "cores": 0,
- "threads": 0
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "string",
- "fallback": "allow"
}
}, - "autostart": true,
- "persistent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "os": {
- "type": "string",
- "architecture": "string",
- "machine": "string",
- "boot": [
- "string"
], - "family": "string",
- "distro": "string",
- "version": "string",
- "codename": "string",
- "variant": "string"
}, - "disks": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "model": "string",
- "serial": "string",
- "type": "string",
- "drive_type": "string",
- "removable": true,
- "filesystem": "string",
- "mount_point": "string",
- "storage_pool": "string",
- "partitions": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "type": "string",
- "filesystem": "string",
- "mount_point": "string",
- "used": 0,
- "available": 0,
- "use_percent": 0
}
]
}
], - "networks": [
- {
- "type": "string",
- "source": "string",
- "model": "string",
- "mac": "string",
- "alias": "string",
- "target": "string",
- "ipv4": "string",
- "ipv6": "string"
}
]
}
], - "count": 0
}
}| name required | string Name of the virtual machine |
| memory required | integer >= 256 Memory size in MB |
| vcpus required | integer [ 1 .. 256 ] Number of virtual CPUs |
| max_memory | integer >= 0 Maximum memory limit in MB (0 = same as memory) |
| max_vcpus | integer [ 0 .. 256 ] Maximum vCPU limit (0 = same as vcpus) |
object Optional CPU model and topology configuration.
If omitted, Vapor uses a simple topology-only CPU element:
| |
required | object (StorageConfig) |
| os_type | string Operating system type |
| os_variant | string Operating system variant |
object (OSInfoEnhanced) Detailed OS information for metadata and optimization | |
| architecture | string Default: "x86_64" System architecture |
| machine_type | string Default: "q35" Machine type (q35, pc, virt, etc) |
| uefi | boolean Default: false Use UEFI boot |
| secure_boot | boolean Default: false Enable secure boot |
| tpm | boolean Default: false Add TPM device |
Array of objects (NetworkCreateConfig) Network configurations | |
Array of objects (EnhancedGraphicsConfig) Graphics device configurations | |
Array of objects (PCIDeviceConfig) PCI devices for passthrough | |
object (CloudInit) Cloud-init configuration for VM initialization | |
| template | string Template name to base VM on |
| autostart | boolean Default: false Start VM automatically on host boot |
| custom_xml | string Custom libvirt XML snippet to merge |
object Custom metadata key-value pairs |
{- "name": "web-server-01",
- "memory": 4096,
- "vcpus": 2,
- "max_memory": 8192,
- "max_vcpus": 4,
- "cpu": {
- "mode": "host-model",
- "migratable": "on",
- "match": "exact",
- "check": "none",
- "topology": {
- "sockets": 1,
- "dies": 1,
- "cores": 4,
- "threads": 1
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "Skylake-Client",
- "fallback": "allow"
}
}, - "storage": {
- "disks": [
- {
- "action": "create",
- "size": 20,
- "format": "qcow2",
- "path": "existing-disk.qcow2",
- "storage_pool": "fast-ssd",
- "clone_from": "template-disk.qcow2",
- "bus": "virtio",
- "boot_order": 1,
- "cache": "none",
- "io_mode": "native",
- "readonly": false,
- "device": "disk",
- "target": "vda",
- "alias": "ua-myDisk"
}
]
}, - "os_type": "linux",
- "os_variant": "ubuntu20.04",
- "os_info": {
- "family": "linux",
- "distro": "ubuntu",
- "version": "20.04",
- "codename": "focal",
- "variant": "ubuntu20.04"
}, - "architecture": "x86_64",
- "machine_type": "q35",
- "uefi": false,
- "secure_boot": false,
- "tpm": false,
- "networks": [
- {
- "type": "network",
- "source": "default",
- "model": "virtio",
- "mac": "52:54:00:12:34:56",
- "alias": "ua-myNIC"
}
], - "graphics": [
- {
- "type": "vnc",
- "port": -1,
- "autoport": true,
- "listen": "0.0.0.0",
- "password": "pa$$word"
}
], - "pci_devices": [
- {
- "host_address": "0000:01:00.0",
- "guest_address": "0000:05:00.0",
- "rom_file": "/usr/share/vgabios/rtx3080.rom",
- "multifunction": false,
- "primary_gpu": false
}
], - "cloud_init": {
- "user_data": "#cloud-config\npackage_update: true\npackage_upgrade: true\n",
- "meta_data": "instance-id: i-1234567890abcdef0\nlocal-hostname: cloudimg\n",
- "network_data": "version: 2\nethernets:\n enp0s3:\n dhcp4: true\n",
- "ssh_keys": [
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...",
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOM..."
], - "users": [
- {
- "name": "devops",
- "ssh_authorized_keys": [
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC..."
], - "sudo": "ALL=(ALL) NOPASSWD:ALL",
- "groups": "admin,docker,wheel",
- "shell": "/bin/bash",
- "password": "$6$rounds=4096$saltsalt$..."
}
], - "packages": [
- "docker.io",
- "git",
- "vim",
- "htop"
]
}, - "template": "ubuntu-server-template",
- "autostart": false,
- "custom_xml": "string",
- "metadata": {
- "property1": "string",
- "property2": "string"
}
}{- "status": "success",
- "data": {
- "uuid": "string",
- "name": "string",
- "state": "string",
- "memory": 0,
- "max_memory": 0,
- "vcpus": 0,
- "max_vcpus": 0,
- "cpu": {
- "mode": "string",
- "match": "string",
- "check": "string",
- "migratable": "on",
- "topology": {
- "sockets": 0,
- "dies": 0,
- "cores": 0,
- "threads": 0
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "string",
- "fallback": "allow"
}
}, - "autostart": true,
- "persistent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "os": {
- "type": "string",
- "architecture": "string",
- "machine": "string",
- "boot": [
- "string"
], - "family": "string",
- "distro": "string",
- "version": "string",
- "codename": "string",
- "variant": "string"
}, - "disks": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "model": "string",
- "serial": "string",
- "type": "string",
- "drive_type": "string",
- "removable": true,
- "filesystem": "string",
- "mount_point": "string",
- "storage_pool": "string",
- "partitions": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "type": "string",
- "filesystem": "string",
- "mount_point": "string",
- "used": 0,
- "available": 0,
- "use_percent": 0
}
]
}
], - "networks": [
- {
- "type": "string",
- "source": "string",
- "model": "string",
- "mac": "string",
- "alias": "string",
- "target": "string",
- "ipv4": "string",
- "ipv6": "string"
}
]
}
}| id required | string VM name or UUID |
{- "status": "success",
- "data": {
- "uuid": "123e4567-e89b-12d3-a456-426614174000",
- "name": "web-server-01",
- "state": "running",
- "memory": 4096,
- "max_memory": 8192,
- "vcpus": 2,
- "max_vcpus": 4,
- "cpu": {
- "mode": "host-model",
- "migratable": "on",
- "topology": {
- "sockets": 1,
- "dies": 1,
- "cores": 4,
- "threads": 1
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "Skylake-Client",
- "fallback": "allow"
}
}, - "os_type": "hvm",
- "os_variant": "ubuntu22.04",
- "architecture": "x86_64",
- "uefi": true,
- "secure_boot": true,
- "tpm": true,
- "storage": {
- "default_pool": "default",
- "boot_iso": "ubuntu-22.04.iso",
- "disks": [
- {
- "path": "/var/lib/libvirt/images/web-server-01.qcow2",
- "device": "disk",
- "target": "vda",
- "bus": "virtio",
- "size": 40,
- "capacity": 42949672960,
- "allocation": 21474836480,
- "format": "qcow2",
- "storage_pool": "default",
- "boot_order": 1,
- "cache": "writeback",
- "io_mode": "native",
- "readonly": false,
- "source_type": "file",
- "source_path": "/var/lib/libvirt/images/web-server-01.qcow2"
}
]
}, - "networks": [
- {
- "type": "network",
- "source": "default",
- "model": "virtio",
- "mac": "52:54:00:12:34:56",
- "target": "vnet0",
- "bridge": "virbr0",
- "ip_address": "192.168.122.10",
- "gateway": "192.168.122.1",
- "dns": [
- "1.1.1.1",
- "8.8.8.8"
], - "rx_bytes": 123456,
- "tx_bytes": 654321,
- "rx_packets": 1000,
- "tx_packets": 900
}
], - "graphics": [
- {
- "type": "vnc",
- "port": 5901,
- "autoport": true,
- "listen": "0.0.0.0"
}
], - "pci_devices": [
- {
- "host_address": "0000:01:00.0",
- "guest_address": "0000:05:00.0",
- "vendor": "NVIDIA Corporation",
- "product": "RTX 3080",
- "description": "NVIDIA GeForce RTX 3080",
- "rom_file": "/usr/share/vgabios/rtx3080.rom",
- "multifunction": false,
- "primary_gpu": true,
- "iommu_group": 1
}
], - "cloud_init": {
- "user_data": "#cloud-config\npackage_update: true\n",
- "meta_data": "instance-id: i-1234567890abcdef0\nlocal-hostname: web-server-01\n",
- "ssh_keys": [
- "ssh-rsa AAAAB3Nza..."
], - "packages": [
- "docker.io",
- "git"
]
}, - "template": "ubuntu-server-template",
- "autostart": true,
- "custom_xml": "<!-- custom libvirt XML snippet -->",
- "metadata": {
- "environment": "production",
- "owner": "team-a"
}, - "created_at": "2024-06-01T12:00:00Z",
- "updated_at": "2024-06-01T12:30:00Z",
- "persistent": true,
- "running": true
}
}| id required | string VM name or UUID |
| name required | string Name of the virtual machine |
| memory required | integer >= 256 Memory size in MB |
| vcpus required | integer [ 1 .. 256 ] Number of virtual CPUs |
| max_memory | integer >= 0 Maximum memory limit in MB (0 = same as memory) |
| max_vcpus | integer [ 0 .. 256 ] Maximum vCPU limit (0 = same as vcpus) |
object Optional CPU model and topology configuration.
If omitted, Vapor uses a simple topology-only CPU element:
| |
required | object (StorageConfig) |
| os_type | string Operating system type |
| os_variant | string Operating system variant |
object (OSInfoEnhanced) Detailed OS information for metadata and optimization | |
| architecture | string Default: "x86_64" System architecture |
| machine_type | string Default: "q35" Machine type (q35, pc, virt, etc) |
| uefi | boolean Default: false Use UEFI boot |
| secure_boot | boolean Default: false Enable secure boot |
| tpm | boolean Default: false Add TPM device |
Array of objects (NetworkCreateConfig) Network configurations | |
Array of objects (EnhancedGraphicsConfig) Graphics device configurations | |
Array of objects (PCIDeviceConfig) PCI devices for passthrough | |
object (CloudInit) Cloud-init configuration for VM initialization | |
| template | string Template name to base VM on |
| autostart | boolean Default: false Start VM automatically on host boot |
| custom_xml | string Custom libvirt XML snippet to merge |
object Custom metadata key-value pairs |
{- "name": "web-server-01",
- "memory": 4096,
- "vcpus": 2,
- "max_memory": 8192,
- "max_vcpus": 4,
- "cpu": {
- "mode": "host-model",
- "migratable": "on",
- "match": "exact",
- "check": "none",
- "topology": {
- "sockets": 1,
- "dies": 1,
- "cores": 4,
- "threads": 1
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "Skylake-Client",
- "fallback": "allow"
}
}, - "storage": {
- "disks": [
- {
- "action": "create",
- "size": 20,
- "format": "qcow2",
- "path": "existing-disk.qcow2",
- "storage_pool": "fast-ssd",
- "clone_from": "template-disk.qcow2",
- "bus": "virtio",
- "boot_order": 1,
- "cache": "none",
- "io_mode": "native",
- "readonly": false,
- "device": "disk",
- "target": "vda",
- "alias": "ua-myDisk"
}
]
}, - "os_type": "linux",
- "os_variant": "ubuntu20.04",
- "os_info": {
- "family": "linux",
- "distro": "ubuntu",
- "version": "20.04",
- "codename": "focal",
- "variant": "ubuntu20.04"
}, - "architecture": "x86_64",
- "machine_type": "q35",
- "uefi": false,
- "secure_boot": false,
- "tpm": false,
- "networks": [
- {
- "type": "network",
- "source": "default",
- "model": "virtio",
- "mac": "52:54:00:12:34:56",
- "alias": "ua-myNIC"
}
], - "graphics": [
- {
- "type": "vnc",
- "port": -1,
- "autoport": true,
- "listen": "0.0.0.0",
- "password": "pa$$word"
}
], - "pci_devices": [
- {
- "host_address": "0000:01:00.0",
- "guest_address": "0000:05:00.0",
- "rom_file": "/usr/share/vgabios/rtx3080.rom",
- "multifunction": false,
- "primary_gpu": false
}
], - "cloud_init": {
- "user_data": "#cloud-config\npackage_update: true\npackage_upgrade: true\n",
- "meta_data": "instance-id: i-1234567890abcdef0\nlocal-hostname: cloudimg\n",
- "network_data": "version: 2\nethernets:\n enp0s3:\n dhcp4: true\n",
- "ssh_keys": [
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...",
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOM..."
], - "users": [
- {
- "name": "devops",
- "ssh_authorized_keys": [
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC..."
], - "sudo": "ALL=(ALL) NOPASSWD:ALL",
- "groups": "admin,docker,wheel",
- "shell": "/bin/bash",
- "password": "$6$rounds=4096$saltsalt$..."
}
], - "packages": [
- "docker.io",
- "git",
- "vim",
- "htop"
]
}, - "template": "ubuntu-server-template",
- "autostart": false,
- "custom_xml": "string",
- "metadata": {
- "property1": "string",
- "property2": "string"
}
}{- "status": "success",
- "message": "string",
- "data": {
- "uuid": "string",
- "name": "string",
- "state": "string",
- "memory": 0,
- "max_memory": 0,
- "vcpus": 0,
- "max_vcpus": 0,
- "cpu": {
- "mode": "string",
- "match": "string",
- "check": "string",
- "migratable": "on",
- "topology": {
- "sockets": 0,
- "dies": 0,
- "cores": 0,
- "threads": 0
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "string",
- "fallback": "allow"
}
}, - "autostart": true,
- "persistent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "os": {
- "type": "string",
- "architecture": "string",
- "machine": "string",
- "boot": [
- "string"
], - "family": "string",
- "distro": "string",
- "version": "string",
- "codename": "string",
- "variant": "string"
}, - "disks": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "model": "string",
- "serial": "string",
- "type": "string",
- "drive_type": "string",
- "removable": true,
- "filesystem": "string",
- "mount_point": "string",
- "storage_pool": "string",
- "partitions": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "type": "string",
- "filesystem": "string",
- "mount_point": "string",
- "used": 0,
- "available": 0,
- "use_percent": 0
}
]
}
], - "networks": [
- {
- "type": "string",
- "source": "string",
- "model": "string",
- "mac": "string",
- "alias": "string",
- "target": "string",
- "ipv4": "string",
- "ipv6": "string"
}
]
}
}Execute various state-changing actions on a virtual machine. Available actions include: start, stop, restart, pause, resume, reset. Use the 'force' flag for forced stop or restart operations.
| id required | string VM name or UUID |
| action required | string Enum: "start" "stop" "force-stop" "destroy" "restart" "pause" "resume" "reset" The action to perform on the virtual machine |
| force | boolean Default: false Force the action (applicable for stop and restart). Note - use force-stop or destroy action for immediate forceful shutdown. |
{- "action": "start",
- "force": false
}{- "status": "success",
- "data": {
- "message": "VM action completed successfully",
- "action": "start",
- "vm_id": "vm-123"
}
}Clone an existing virtual machine to a new VM.
Notes:
| id required | string Example: web-server-01 Source VM name or UUID |
| name required | string Name of the new cloned VM |
| full_clone | boolean Default: true Whether to create a full clone instead of a linked clone |
| snapshots | boolean Default: false Whether to clone snapshots as well (currently not supported) |
| storage_pool | string Optional target storage pool for the cloned disks |
{- "name": "web-server-01-clone"
}{- "status": "success",
- "data": {
- "uuid": "string",
- "name": "string",
- "state": "string",
- "memory": 0,
- "max_memory": 0,
- "vcpus": 0,
- "max_vcpus": 0,
- "cpu": {
- "mode": "string",
- "match": "string",
- "check": "string",
- "migratable": "on",
- "topology": {
- "sockets": 0,
- "dies": 0,
- "cores": 0,
- "threads": 0
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "string",
- "fallback": "allow"
}
}, - "autostart": true,
- "persistent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "os": {
- "type": "string",
- "architecture": "string",
- "machine": "string",
- "boot": [
- "string"
], - "family": "string",
- "distro": "string",
- "version": "string",
- "codename": "string",
- "variant": "string"
}, - "disks": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "model": "string",
- "serial": "string",
- "type": "string",
- "drive_type": "string",
- "removable": true,
- "filesystem": "string",
- "mount_point": "string",
- "storage_pool": "string",
- "partitions": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "type": "string",
- "filesystem": "string",
- "mount_point": "string",
- "used": 0,
- "available": 0,
- "use_percent": 0
}
]
}
], - "networks": [
- {
- "type": "string",
- "source": "string",
- "model": "string",
- "mac": "string",
- "alias": "string",
- "target": "string",
- "ipv4": "string",
- "ipv6": "string"
}
]
}
}Change the link state of a virtual machine's network interface to disconnect (down) or reconnect (up). This is equivalent to the virsh commands:
virsh domif-setlink <domain> <interface> down - to disconnectvirsh domif-setlink <domain> <interface> up - to reconnectThe interface can be identified by either:
| id required | string VM name or UUID |
| interface required | string The network interface identifier. Can be either:
|
| state required | string Enum: "up" "down" The desired link state |
{- "interface": "vnet0",
- "state": "down"
}{- "status": "success",
- "message": "Network interface vnet0 link state changed to down",
- "interface": "vnet0",
- "state": "down",
- "mac": "52:54:00:12:34:56"
}Retrieve the current link state of a virtual machine's network interface. This is equivalent to the virsh command:
virsh domif-getlink <domain> <interface> - to check link stateThe interface can be identified by either:
Returns "up" if the interface is connected or "down" if disconnected. If no explicit link state is set, the default is "up".
| id required | string VM name or UUID |
| interface-name required | string Network interface name (e.g., "vnet0") or MAC address |
{- "status": "success",
- "message": "Network interface vnet0 link state retrieved",
- "interface": "vnet0",
- "state": "up",
- "mac": "52:54:00:12:34:56"
}Initiate live or offline migration of a virtual machine to another host.
Prerequisites for SSH-based Migration:
When using SSH transport (e.g., qemu+ssh://host2.example.com/system):
SSH Key Authentication Required:
root or libvirt) needs SSH keys configuredSetup Steps:
# On source host (as root or libvirt user):
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
ssh-copy-id root@destination-host
# Verify connectivity:
ssh root@destination-host 'virsh list'
Both Hosts Requirements:
copy_storage parameterAlternative Transport Options:
qemu+tcp:// - Unencrypted TCP (not recommended)qemu+tls:// - TLS with certificates (more secure for production)qemu+ssh://user@host/system - SSH with specific userSecurity Best Practices:
| id required | string VM name or UUID |
| destination_host required | string Target host for migration. The host must be accessible via the transport method specified in destination_uri (SSH by default). For SSH transport, passwordless SSH access must be configured from source to destination host. |
| destination_uri | string Optional custom libvirt URI for destination. Common formats:
SSH Requirements: The source host must have passwordless SSH access to the destination. SSH public key of the source host's libvirt user (usually root) must be in the destination host's authorized_keys file. Setup Example:
|
| live | boolean Default: true Perform live migration (VM stays running during migration). Requires stable network connection and compatible hosts. |
| tunneled | boolean Default: false Use tunneled migration. All migration data goes through the libvirt connection. More secure but potentially slower. |
| compressed | boolean Default: false Enable compression during migration. Reduces network bandwidth usage but increases CPU usage on both hosts. |
| auto_converge | boolean Default: false Enable auto-convergence to speed up migration. Automatically throttles VM CPU usage if migration is not converging. |
| allow_unsafe | boolean Default: false Allow unsafe migration operations. Use with caution as it may result in VM crashes or data corruption if hosts are incompatible. |
| max_bandwidth | integer Default: 0 Maximum bandwidth in MB/s for migration (0 for unlimited). Useful to prevent migration from saturating network links. |
| max_downtime | integer Default: 500 Maximum allowed downtime in milliseconds during live migration. Lower values mean less interruption but migration may take longer. |
| copy_storage | string Default: "none" Enum: "none" "all" "inc" Storage migration mode:
Note: Storage migration significantly increases migration time. |
{- "destination_host": "host2.example.com",
- "destination_uri": "qemu+ssh://host2.example.com/system",
- "live": true,
- "tunneled": false,
- "compressed": false,
- "auto_converge": false,
- "allow_unsafe": false,
- "max_bandwidth": 100,
- "max_downtime": 500,
- "copy_storage": "none"
}{- "status": "success",
- "data": {
- "migration_id": "mig-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "status": "initiated",
- "source_host": "host1.example.com",
- "dest_host": "host2.example.com",
- "started_at": "2025-01-15T10:30:00Z",
- "message": "Migration initiated successfully"
}
}Check the status of an ongoing VM migration
| id required | string VM name or UUID |
| migration_id | string Migration ID to check status for |
{- "status": "success",
- "data": {
- "migration_id": "mig-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "vm_name": "web-server-01",
- "status": "migrating",
- "progress": 45,
- "source_host": "host1.example.com",
- "dest_host": "host2.example.com",
- "data_processed": 1073741824,
- "data_remaining": 2147483648,
- "mem_processed": 536870912,
- "mem_remaining": 1073741824,
- "started_at": "2025-01-15T10:30:00Z",
- "completed_at": "2025-01-15T10:35:00Z",
- "error_message": "Connection to destination host lost"
}
}Retrieves console connection information for a virtual machine and generates a secure access token. The token is valid for a limited time (default 5 minutes) and can only be used once.
| id required | string VM ID (name or UUID) |
| type | string Default: "vnc" Enum: "vnc" "spice" Console type preference |
{- "status": "success",
- "data": {
- "type": "vnc",
- "host": "localhost",
- "port": 5901,
- "token": "a1b2c3d4e5f6789...",
- "ws_path": "/api/v1/virtualization/computes/vm-123/console/vnc/ws?token=a1b2c3d4e5f6789...",
- "expires_at": "2024-01-15T10:30:00Z",
- "tls_enabled": false,
- "password": "********"
}
}Establishes a WebSocket connection for VM console access. This endpoint upgrades the HTTP connection to a WebSocket connection and proxies data between the client and the VM's VNC/SPICE server.
Protocol: WebSocket (ws:// or wss://)
Data Flow: Binary frames containing VNC/SPICE protocol data
Error Messages: JSON messages for errors and status updates
| id required | string VM ID (name or UUID) |
| token required | string Access token from console information endpoint |
{- "status": "error"
}Retrieves statistics about active console connections for monitoring and debugging purposes.
| id required | string VM ID (name or UUID) |
{- "active_connections": 0,
- "total_bytes_sent": 0,
- "total_bytes_received": 0,
- "connections": [
- {
- "id": "string",
- "established": "2019-08-24T14:15:22Z",
- "last_activity": "2019-08-24T14:15:22Z",
- "bytes_sent": 0,
- "bytes_received": 0
}
]
}Returns information about all available console types for the specified virtual machine. This includes VNC and SPICE console availability based on VM configuration.
| id required | string VM name or UUID |
{- "status": "success",
- "data": {
- "vm_name": "vm-123",
- "vm_uuid": "11111111-2222-3333-4444-555555555555",
- "available": [
- "vnc",
- "spice"
], - "consoles": {
- "vnc": {
- "type": "vnc",
- "host": "localhost",
- "port": 5900,
- "token": "a1b2c3d4e5f6789...",
- "ws_path": "/api/v1/virtualization/computes/vm-123/console/vnc/ws?token=a1b2c3d4e5f6789...",
- "expires_at": "2024-01-15T10:30:00Z",
- "tls_enabled": false,
- "password": "********"
}, - "spice": {
- "type": "spice",
- "host": "localhost",
- "port": 5901,
- "token": "z9y8x7w6v5u4t3s2...",
- "ws_path": "/api/v1/virtualization/computes/vm-123/console/spice/ws?token=z9y8x7w6v5u4t3s2...",
- "expires_at": "2024-01-15T10:30:00Z",
- "tls_enabled": false
}
}, - "preferred": "spice"
}
}Returns VNC-specific console connection information for the virtual machine. Use this endpoint to get VNC server details before establishing a WebSocket connection.
| id required | string VM name or UUID |
{- "status": "success",
- "data": {
- "type": "vnc",
- "host": "localhost",
- "port": 5900,
- "token": "a1b2c3d4e5f6789...",
- "ws_path": "/api/v1/virtualization/computes/vm-123/console/vnc/ws?token=a1b2c3d4e5f6789...",
- "expires_at": "2024-01-15T10:30:00Z",
- "tls_enabled": false,
- "password": "********"
}
}Establishes a WebSocket connection for VNC console access to the virtual machine.
WebSocket Protocol:
Authentication:
?token=<jwt_token>Sec-WebSocket-Protocol: access_token, <jwt_token>| id required | string VM name or UUID |
| token | string JWT authentication token (alternative to header auth) |
{- "status": "error"
}Returns SPICE-specific console connection information for the virtual machine. Use this endpoint to get SPICE server details before establishing a WebSocket connection.
| id required | string VM name or UUID |
{- "status": "success",
- "data": {
- "type": "spice",
- "host": "localhost",
- "port": 5901,
- "token": "z9y8x7w6v5u4t3s2...",
- "ws_path": "/api/v1/virtualization/computes/vm-123/console/spice/ws?token=z9y8x7w6v5u4t3s2...",
- "expires_at": "2024-01-15T10:30:00Z",
- "tls_enabled": false,
- "password": "********"
}
}Establishes a WebSocket connection for SPICE console access to the virtual machine.
WebSocket Protocol:
Authentication:
?token=<jwt_token>Sec-WebSocket-Protocol: access_token, <jwt_token>| id required | string VM name or UUID |
| token | string JWT authentication token (alternative to header auth) |
{- "status": "error"
}Retrieves current performance metrics for a virtual machine including CPU, memory, disk I/O, and network statistics.
| id required | string Example: vm01 VM ID (name or UUID) |
{- "status": "success",
- "data": {
- "uuid": "550e8400-e29b-41d4-a716-446655440000",
- "timestamp": "2024-08-22T10:30:00Z",
- "cpu_time": 1234567890000,
- "cpu_usage": 45.2,
- "memory_used": 2097152,
- "memory_usage": 75.5,
- "disk_read": 1073741824,
- "disk_write": 536870912,
- "network_rx": 104857600,
- "network_tx": 52428800
}
}Establishes a WebSocket connection to stream real-time performance metrics for a virtual machine. The server sends metrics at regular intervals as JSON messages. Protocol: WebSocket (ws:// or wss://) Message Format: JSON objects containing VMMetrics data Default Interval: 5 seconds (configurable via query parameter) Client Messages: Send any message to keep connection alive (ping/pong) Server Messages: VMMetrics objects or error messages in JSON format
| id required | string Example: vm01 VM ID (name or UUID) |
| interval | integer >= 1 Default: 5 Example: interval=5 Metrics update interval in seconds (minimum 1, default 5) |
{- "code": "string",
- "message": "string",
- "details": "string"
}List all PCI devices available for passthrough to virtual machines. This includes GPUs, network cards, storage controllers, USB controllers, and other PCI devices.
Prerequisites:
| type | string Enum: "gpu" "network" "storage" "usb" "other" Filter devices by type |
{- "status": "success",
- "data": {
- "devices": [
- {
- "device_id": "pci_0000_01_00_0",
- "vendor_id": "10de",
- "product_id": "1e84",
- "vendor_name": "NVIDIA Corporation",
- "product_name": "GeForce RTX 2070 SUPER",
- "device_type": "gpu",
- "pci_address": "0000:01:00.0",
- "iommu_group": 14,
- "driver": "vfio-pci",
- "is_available": true,
- "assigned_to_vm": null,
- "capabilities": {
- "property1": "string",
- "property2": "string"
}, - "last_seen": "2025-01-15T10:00:00Z"
}
], - "count": 5,
- "device_type": "gpu"
}
}Attach a PCI device to a virtual machine for passthrough.
Important Notes:
| id required | string VM name or UUID |
| device_id required | string PCI device identifier to attach |
object VFIO driver options | |
| managed | boolean Default: true Let libvirt manage device binding |
{- "device_id": "pci_0000_01_00_0",
- "vfio_options": {
- "display": "on",
- "x_vga": true,
- "romfile": "/usr/share/vgabios/gpu.rom"
}, - "managed": true
}{- "status": "success",
- "data": {
- "vm_id": "web-server-01",
- "device_id": "pci_0000_01_00_0",
- "pci_address": "0000:01:00.0",
- "message": "PCI device attached successfully"
}
}Detach a PCI device from a virtual machine.
Notes:
| id required | string VM name or UUID |
| device_id required | string PCI device ID (e.g., pci_0000_01_00_0) |
{- "status": "success",
- "data": {
- "vm_id": "web-server-01",
- "device_id": "pci_0000_01_00_0",
- "message": "PCI device detached successfully"
}
}Dynamically add or remove resources to/from a running virtual machine.
Supported Resources:
Requirements:
| id required | string VM name or UUID |
| resource_type required | string Enum: "cpu" "memory" "disk" "network" "usb" Type of resource to hotplug |
| action required | string Enum: "add" "remove" Action to perform |
required | HotplugCPUConfig (object) or HotplugMemoryConfig (object) or HotplugDiskConfig (object) or HotplugNetworkConfig (object) or HotplugUSBConfig (object) Resource-specific configuration |
{- "resource_type": "cpu",
- "action": "add",
- "configuration": {
- "vcpus": 4
}
}{- "status": "success",
- "data": {
- "vm_id": "web-server-01",
- "resource_type": "cpu",
- "action": "add",
- "message": "Successfully added 2 vCPUs to VM",
- "details": {
- "property1": "string",
- "property2": "string"
}
}
}Check what snapshot operations are supported for a VM based on its disk formats.
This endpoint analyzes all disks attached to the VM and determines:
| id required | string VM name or UUID |
{- "status": "success",
- "data": {
- "capabilities": {
- "supports_snapshots": true,
- "supports_internal": false,
- "supports_external": true,
- "supports_memory": false,
- "disk_formats": [
- {
- "name": "vda",
- "path": "/var/lib/libvirt/images/vm1-vda.qcow2",
- "format": "qcow2",
- "supports_internal": true,
- "size_bytes": 10737418240
}
], - "warnings": [
- "Disk 'vdb' uses raw format, only external snapshots are supported",
- "Mixed disk formats detected (qcow2, raw)"
], - "recommendations": [
- "Convert all disks to qcow2 format for full snapshot capabilities",
- "Use external snapshots for this VM configuration"
]
}
}
}Retrieve all snapshots for a specific virtual machine
| id required | string VM name or UUID |
{- "status": "success",
- "data": {
- "snapshots": [
- {
- "id": "snap-123e4567-e89b-12d3-a456-426614174000",
- "name": "before-upgrade",
- "description": "Snapshot taken before system upgrade",
- "vm_name": "web-server-01",
- "vm_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "state": "active",
- "type": "memory-included",
- "parent": "initial-snapshot",
- "created_at": "2025-01-15T10:00:00Z",
- "size_bytes": 5368709120,
- "is_current": false
}
], - "count": 3,
- "vm_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Create a new snapshot of a virtual machine with enhanced disk format validation.
This endpoint performs comprehensive format checking for all VM disks and determines the appropriate snapshot type based on disk formats and user preferences.
Snapshot Types:
Format Requirements:
Validation Checks:
Warning Conditions:
Best Practices:
| id required | string VM name or UUID |
| name required | string [ 1 .. 255 ] characters Name for the snapshot |
| description | string <= 1024 characters Optional description of the snapshot |
| include_memory | boolean Default: false Include memory state in the snapshot.
|
| quiesce | boolean Default: false Quiesce the VM filesystem before snapshot (requires guest agent). This ensures filesystem consistency by flushing buffers. |
{- "name": "before-upgrade",
- "description": "Snapshot taken before system upgrade",
- "include_memory": true,
- "quiesce": true
}{- "status": "success",
- "data": {
- "snapshot": {
- "id": "snap-123e4567-e89b-12d3-a456-426614174000",
- "name": "before-upgrade",
- "description": "Snapshot taken before system upgrade",
- "vm_name": "web-server-01",
- "vm_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "state": "active",
- "type": "memory-included",
- "parent": "initial-snapshot",
- "created_at": "2025-01-15T10:00:00Z",
- "size_bytes": 5368709120,
- "is_current": false
}, - "message": "Snapshot created successfully"
}
}Retrieve details of a specific VM snapshot
| id required | string VM name or UUID |
| snapshot required | string Snapshot name |
{- "status": "success",
- "data": {
- "snapshot": {
- "id": "snap-123e4567-e89b-12d3-a456-426614174000",
- "name": "before-upgrade",
- "description": "Snapshot taken before system upgrade",
- "vm_name": "web-server-01",
- "vm_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "state": "active",
- "type": "memory-included",
- "parent": "initial-snapshot",
- "created_at": "2025-01-15T10:00:00Z",
- "size_bytes": 5368709120,
- "is_current": false,
- "disks": [
- {
- "disk_name": "vda",
- "snapshot_name": "vda.before-upgrade",
- "size_bytes": 10737418240,
- "type": "internal",
- "file_path": "/var/lib/libvirt/images/web-server-01.vda.before-upgrade.qcow2"
}
], - "memory_state": {
- "size_bytes": 2147483648,
- "file_path": "/var/lib/libvirt/qemu/save/web-server-01.before-upgrade.mem"
}, - "metadata": {
- "property1": "string",
- "property2": "string"
}, - "children": [
- "after-upgrade",
- "test-config"
]
}
}
}Revert a virtual machine to a previous snapshot state.
Warning: This operation will:
Revert Behavior: By default (flags=1), running VMs will stay running after revert. This is a live revert that only works for disk-only snapshots. If the snapshot includes memory state, libvirt must restore that memory, which effectively restarts the VM.
You can control the revert behavior using the flags parameter in the request body.
| id required | string VM name or UUID |
| snapshot required | string Snapshot name to revert to |
Optional revert configuration
| flags | integer <uint32> Default: 1 Libvirt snapshot revert flags to control revert behavior. Available flags:
Flags can be combined using bitwise OR. Default: 1 (DOMAIN_SNAPSHOT_REVERT_RUNNING) - keeps running VMs running. |
{- "flags": 1
}{- "status": "success",
- "data": {
- "vm_name": "web-server-01",
- "snapshot_name": "before-upgrade",
- "reverted_at": "2025-01-15T11:00:00Z",
- "message": "VM successfully reverted to snapshot 'before-upgrade'"
}
}List all backups for a specific virtual machine
| id required | string VM name or UUID |
{- "status": "success",
- "data": {
- "backups": [
- {
- "id": "backup-123e4567-e89b-12d3-a456-426614174000",
- "backup_id": "backup-123456",
- "vm_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vm_name": "web-server-01",
- "backup_type": "full",
- "status": "completed",
- "source_path": "/var/lib/libvirt/images/web-server-01.qcow2",
- "destination_path": "/backup/vms/web-server-01/",
- "size_bytes": 10737418240,
- "compressed": true,
- "compression": "gzip",
- "encryption": "AES-256",
- "parent_backup_id": "backup-123455",
- "started_at": "2025-01-15T10:00:00Z",
- "completed_at": "2025-01-15T10:30:00Z",
- "retention_days": 30,
- "include_memory": false,
- "error_message": "Failed to connect to storage"
}
], - "count": 2,
- "vm_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Create a backup of a virtual machine.
Backup Types:
full: Complete backup of all VM disksincremental: Only changes since last backupdifferential: Changes since last full backupOptions:
| id required | string VM name or UUID |
| backup_type | string Default: "full" Enum: "full" "incremental" "differential" Type of backup |
| destination_path required | string Where to store the backup |
| compression | string Default: "none" Enum: "none" "gzip" "bzip2" "xz" "zstd" Compression type |
| encryption | string Default: "none" Enum: "none" "AES-256" "AES-128" Encryption type |
| encryption_key | string Encryption key (required if encryption is enabled) |
| include_memory | boolean Default: false Include memory state in backup |
| retention_days | integer Default: 30 Number of days to retain the backup |
| description | string Optional description of the backup |
{- "backup_type": "full",
- "destination_path": "/backup/vms/",
- "compression": "gzip",
- "encryption": "AES-256",
- "encryption_key": "my-secret-key-123",
- "include_memory": true,
- "retention_days": 90,
- "description": "Weekly backup before maintenance"
}{- "status": "success",
- "data": {
- "backup": {
- "id": "backup-123e4567-e89b-12d3-a456-426614174000",
- "backup_id": "backup-123456",
- "vm_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vm_name": "web-server-01",
- "backup_type": "full",
- "status": "completed",
- "source_path": "/var/lib/libvirt/images/web-server-01.qcow2",
- "destination_path": "/backup/vms/web-server-01/",
- "size_bytes": 10737418240,
- "compressed": true,
- "compression": "gzip",
- "encryption": "AES-256",
- "parent_backup_id": "backup-123455",
- "started_at": "2025-01-15T10:00:00Z",
- "completed_at": "2025-01-15T10:30:00Z",
- "retention_days": 30,
- "include_memory": false,
- "error_message": "Failed to connect to storage"
}, - "message": "Backup initiated successfully"
}
}Restore a virtual machine from a backup.
Options:
| backup_id required | string ID of the backup to restore from |
| new_vm_name | string Name for the restored VM (optional, uses original name if not specified) |
| overwrite | boolean Default: false Whether to overwrite existing VM with same name |
| decryption_key | string Decryption key (required if backup is encrypted) |
| restore_memory | boolean Default: true Whether to restore memory state (if available) |
| storage_pool | string Storage pool to restore VM disks to |
{- "backup_id": "backup-123456",
- "new_vm_name": "web-server-01-restored",
- "overwrite": false,
- "decryption_key": "my-secret-key-123",
- "restore_memory": true,
- "storage_pool": "default"
}{- "status": "success",
- "data": {
- "vm": {
- "uuid": "string",
- "name": "string",
- "state": "string",
- "memory": 0,
- "max_memory": 0,
- "vcpus": 0,
- "max_vcpus": 0,
- "cpu": {
- "mode": "string",
- "match": "string",
- "check": "string",
- "migratable": "on",
- "topology": {
- "sockets": 0,
- "dies": 0,
- "cores": 0,
- "threads": 0
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "string",
- "fallback": "allow"
}
}, - "autostart": true,
- "persistent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "os": {
- "type": "string",
- "architecture": "string",
- "machine": "string",
- "boot": [
- "string"
], - "family": "string",
- "distro": "string",
- "version": "string",
- "codename": "string",
- "variant": "string"
}, - "disks": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "model": "string",
- "serial": "string",
- "type": "string",
- "drive_type": "string",
- "removable": true,
- "filesystem": "string",
- "mount_point": "string",
- "storage_pool": "string",
- "partitions": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "type": "string",
- "filesystem": "string",
- "mount_point": "string",
- "used": 0,
- "available": 0,
- "use_percent": 0
}
]
}
], - "networks": [
- {
- "type": "string",
- "source": "string",
- "model": "string",
- "mac": "string",
- "alias": "string",
- "target": "string",
- "ipv4": "string",
- "ipv6": "string"
}
]
}, - "message": "Virtual machine restored from backup"
}
}{- "status": "success",
- "data": {
- "templates": [
- {
- "id": 1,
- "name": "ubuntu-22.04",
- "description": "Ubuntu 22.04 LTS template",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "min_memory": 2048,
- "recommended_memory": 4096,
- "min_vcpus": 2,
- "recommended_vcpus": 4,
- "min_disk": 20,
- "recommended_disk": 50,
- "disk_format": "qcow2",
- "network_model": "virtio",
- "graphics_type": "vnc",
- "cloud_init": true,
- "uefi_boot": true,
- "secure_boot": false,
- "tpm": false,
- "default_user": "ubuntu",
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "created_at": "2025-01-15T10:00:00Z",
- "updated_at": "2025-01-15T10:00:00Z"
}
], - "count": 0
}
}Create a new VM template
| name required | string Template name (unique) |
| description | string Template description |
| os_type required | string Enum: "linux" "windows" "bsd" "other" "hvm" Operating system type |
| os_variant | string libosinfo / libvirt OS variant identifier |
| min_memory required | integer Minimum memory in MB |
| recommended_memory | integer Recommended memory in MB (must be >= min_memory when provided) |
| min_vcpus required | integer Minimum vCPUs |
| recommended_vcpus | integer Recommended vCPUs (must be >= min_vcpus when provided) |
| min_disk required | integer Minimum disk size in GB |
| recommended_disk | integer Recommended disk size in GB (must be >= min_disk when provided) |
| disk_format | string Default: "qcow2" Enum: "qcow2" "raw" "vmdk" "qed" "vdi" Disk image format to use for created disks |
| network_model | string Default: "virtio" Enum: "virtio" "e1000" "rtl8139" Recommended network model |
| graphics_type | string Default: "vnc" Enum: "vnc" "spice" "none" "egl-headless" Graphics type |
| cloud_init | boolean Whether the template supports cloud-init |
| uefi_boot | boolean Whether to use UEFI boot by default |
| secure_boot | boolean Whether to enable secure boot by default |
| tpm | boolean Whether to add a TPM device by default |
| default_user | string Default username to use when generating cloud-init user configuration |
object Additional metadata |
{- "name": "ubuntu-22.04",
- "description": "Ubuntu 22.04 LTS template",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "min_memory": 2048,
- "recommended_memory": 4096,
- "min_vcpus": 2,
- "recommended_vcpus": 4,
- "min_disk": 20,
- "recommended_disk": 50,
- "disk_format": "qcow2",
- "network_model": "virtio",
- "graphics_type": "vnc",
- "cloud_init": true,
- "uefi_boot": true,
- "secure_boot": false,
- "tpm": false,
- "default_user": "ubuntu",
- "metadata": {
- "property1": "string",
- "property2": "string"
}
}{- "status": "success",
- "data": {
- "id": 1,
- "name": "ubuntu-22.04",
- "description": "Ubuntu 22.04 LTS template",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "min_memory": 2048,
- "recommended_memory": 4096,
- "min_vcpus": 2,
- "recommended_vcpus": 4,
- "min_disk": 20,
- "recommended_disk": 50,
- "disk_format": "qcow2",
- "network_model": "virtio",
- "graphics_type": "vnc",
- "cloud_init": true,
- "uefi_boot": true,
- "secure_boot": false,
- "tpm": false,
- "default_user": "ubuntu",
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "created_at": "2025-01-15T10:00:00Z",
- "updated_at": "2025-01-15T10:00:00Z"
}
}Get detailed information about a specific VM template
| id required | integer Template ID |
{- "status": "success",
- "data": {
- "id": 1,
- "name": "ubuntu-22.04",
- "description": "Ubuntu 22.04 LTS template",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "min_memory": 2048,
- "recommended_memory": 4096,
- "min_vcpus": 2,
- "recommended_vcpus": 4,
- "min_disk": 20,
- "recommended_disk": 50,
- "disk_format": "qcow2",
- "network_model": "virtio",
- "graphics_type": "vnc",
- "cloud_init": true,
- "uefi_boot": true,
- "secure_boot": false,
- "tpm": false,
- "default_user": "ubuntu",
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "created_at": "2025-01-15T10:00:00Z",
- "updated_at": "2025-01-15T10:00:00Z"
}
}Update an existing VM template
| id required | integer Template ID |
| description | string Template description |
| os_type | string Enum: "linux" "windows" "bsd" "other" "hvm" Operating system type |
| os_variant | string libosinfo / libvirt OS variant identifier |
| min_memory | integer Minimum memory in MB |
| recommended_memory | integer Recommended memory in MB (must be >= min_memory when provided) |
| min_vcpus | integer Minimum vCPUs |
| recommended_vcpus | integer Recommended vCPUs (must be >= min_vcpus when provided) |
| min_disk | integer Minimum disk size in GB |
| recommended_disk | integer Recommended disk size in GB (must be >= min_disk when provided) |
| disk_format | string Enum: "qcow2" "raw" "vmdk" "qed" "vdi" Disk image format to use for created disks |
| network_model | string Enum: "virtio" "e1000" "rtl8139" Recommended network model |
| graphics_type | string Enum: "vnc" "spice" "none" "egl-headless" Graphics type |
| cloud_init | boolean Whether the template supports cloud-init |
| uefi_boot | boolean Whether to use UEFI boot by default |
| secure_boot | boolean Whether to enable secure boot by default |
| tpm | boolean Whether to add a TPM device by default |
| default_user | string Default username to use when generating cloud-init user configuration |
object Additional metadata |
{- "description": "Updated Ubuntu 22.04 LTS template",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "min_memory": 2048,
- "recommended_memory": 4096,
- "min_vcpus": 2,
- "recommended_vcpus": 4,
- "min_disk": 20,
- "recommended_disk": 50,
- "disk_format": "qcow2",
- "network_model": "virtio",
- "graphics_type": "vnc",
- "cloud_init": true,
- "uefi_boot": true,
- "secure_boot": false,
- "tpm": false,
- "default_user": "ubuntu",
- "metadata": {
- "property1": "string",
- "property2": "string"
}
}{- "status": "success",
- "data": {
- "id": 1,
- "name": "ubuntu-22.04",
- "description": "Ubuntu 22.04 LTS template",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "min_memory": 2048,
- "recommended_memory": 4096,
- "min_vcpus": 2,
- "recommended_vcpus": 4,
- "min_disk": 20,
- "recommended_disk": 50,
- "disk_format": "qcow2",
- "network_model": "virtio",
- "graphics_type": "vnc",
- "cloud_init": true,
- "uefi_boot": true,
- "secure_boot": false,
- "tpm": false,
- "default_user": "ubuntu",
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "created_at": "2025-01-15T10:00:00Z",
- "updated_at": "2025-01-15T10:00:00Z"
}
}Create a new VM template by extracting sizing and configuration defaults from an existing VM.
The backend derives the template fields from the VM's enhanced details (memory, vCPUs, disk, OS info, graphics, cloud-init detection, UEFI/SecureBoot/TPM flags).
| id required | string VM name or UUID |
| name required | string New template name (unique) |
| description | string Template description |
{- "name": "web-server-template",
- "description": "Template derived from VM web-server-01"
}{- "status": "success",
- "data": {
- "id": 1,
- "name": "ubuntu-22.04",
- "description": "Ubuntu 22.04 LTS template",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "min_memory": 2048,
- "recommended_memory": 4096,
- "min_vcpus": 2,
- "recommended_vcpus": 4,
- "min_disk": 20,
- "recommended_disk": 50,
- "disk_format": "qcow2",
- "network_model": "virtio",
- "graphics_type": "vnc",
- "cloud_init": true,
- "uefi_boot": true,
- "secure_boot": false,
- "tpm": false,
- "default_user": "ubuntu",
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "created_at": "2025-01-15T10:00:00Z",
- "updated_at": "2025-01-15T10:00:00Z"
}
}Create a new virtual machine using a predefined template.
The template provides base specifications including minimum and recommended values for memory, vCPUs, and disk size. User-provided values will override template recommendations but must meet minimum requirements.
Template Application:
| template_id required | integer Template ID to use for VM creation |
| name required | string Name for the new VM |
| memory | integer Memory in MB (overrides template recommendation, must meet minimum) |
| vcpus | integer Number of vCPUs (overrides template recommendation, must meet minimum) |
| disk_size | integer Disk size in GB (overrides template recommendation, must meet minimum) |
object Network configuration (overrides template defaults) | |
object Graphics configuration (overrides template defaults) | |
object Cloud-init configuration (if template supports cloud-init) | |
object Additional metadata for the VM |
{- "template_id": 1,
- "name": "my-ubuntu-vm",
- "memory": 4096,
- "vcpus": 2,
- "disk_size": 50,
- "network": {
- "type": "bridge",
- "source": "string",
- "model": "virtio",
- "mac": "string"
}, - "graphics": {
- "type": "vnc",
- "port": 0,
- "listen": "0.0.0.0",
- "password": "string"
}, - "cloud_init": {
- "users": [
- {
- "name": "string",
- "password": "string",
- "ssh_keys": [
- "string"
], - "sudo": "string",
- "groups": "string",
- "shell": "string"
}
], - "hostname": "string",
- "packages": [
- "string"
], - "runcmd": [
- "string"
]
}, - "metadata": {
- "property1": "string",
- "property2": "string"
}
}{- "status": "success",
- "data": {
- "vm": {
- "uuid": "string",
- "name": "string",
- "state": "string",
- "memory": 0,
- "max_memory": 0,
- "vcpus": 0,
- "max_vcpus": 0,
- "cpu": {
- "mode": "string",
- "match": "string",
- "check": "string",
- "migratable": "on",
- "topology": {
- "sockets": 0,
- "dies": 0,
- "cores": 0,
- "threads": 0
}, - "cache": {
- "mode": "passthrough"
}, - "model": {
- "name": "string",
- "fallback": "allow"
}
}, - "autostart": true,
- "persistent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "os": {
- "type": "string",
- "architecture": "string",
- "machine": "string",
- "boot": [
- "string"
], - "family": "string",
- "distro": "string",
- "version": "string",
- "codename": "string",
- "variant": "string"
}, - "disks": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "model": "string",
- "serial": "string",
- "type": "string",
- "drive_type": "string",
- "removable": true,
- "filesystem": "string",
- "mount_point": "string",
- "storage_pool": "string",
- "partitions": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "type": "string",
- "filesystem": "string",
- "mount_point": "string",
- "used": 0,
- "available": 0,
- "use_percent": 0
}
]
}
], - "networks": [
- {
- "type": "string",
- "source": "string",
- "model": "string",
- "mac": "string",
- "alias": "string",
- "target": "string",
- "ipv4": "string",
- "ipv6": "string"
}
]
}, - "message": "string"
}
}Authenticate a user and receive a JWT token.
Authentication Methods:
The auth_type field determines the authentication method.
| username required | string Username for authentication |
| password | string User password (required for password auth) |
| auth_type | string Default: "password" Enum: "password" "ssh_key" Authentication type |
| ssh_signature | string SSH signature for key-based auth |
| challenge | string Challenge string for SSH key auth |
{- "username": "string",
- "password": "string",
- "auth_type": "password",
- "ssh_signature": "string",
- "challenge": "string"
}{- "status": "success",
- "data": {
- "token": "string",
- "expires_at": 0,
- "refresh_token": "string",
- "token_type": "Bearer",
- "user": {
- "username": "string",
- "uid": "string",
- "groups": [
- "string"
]
}
}
}Refresh an existing JWT token. Supports refreshing expired tokens within a 7-day grace period.
{- "status": "success",
- "data": {
- "token": "string",
- "expires_at": 0,
- "refresh_token": "string",
- "token_type": "Bearer",
- "user": {
- "username": "string",
- "uid": "string",
- "groups": [
- "string"
]
}
}
}Create a challenge for SSH key-based authentication. The challenge must be signed with the user's private key.
| username required | string Username requesting the challenge |
| key_fingerprint | string Optional SSH key fingerprint to use |
{- "username": "string",
- "key_fingerprint": "string"
}{- "status": "success",
- "data": {
- "challenge": "string",
- "expires_at": 0,
- "username": "string"
}
}Verify a signed SSH challenge to complete authentication. Returns a JWT token upon successful verification.
| username required | string Username |
| challenge required | string Original challenge string |
| signature required | string Base64-encoded signature of the challenge |
| key_type | string Enum: "rsa" "ed25519" "ecdsa" SSH key type |
{- "username": "string",
- "challenge": "string",
- "signature": "string",
- "key_type": "rsa"
}{- "status": "success",
- "data": {
- "token": "string",
- "expires_at": 0,
- "refresh_token": "string",
- "token_type": "Bearer",
- "user": {
- "username": "string",
- "uid": "string",
- "groups": [
- "string"
]
}
}
}Retrieve the authorized SSH public keys for a specific user. Reads from the user's ~/.ssh/authorized_keys file.
| username required | string Username to get keys for |
{- "status": "success",
- "data": {
- "username": "string",
- "keys": [
- {
- "key": "string",
- "type": "string",
- "fingerprint": "string",
- "comment": "string"
}
]
}
}List all API tokens for the authenticated user
{- "status": "success",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "username": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "revoked_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z"
}
]
}Create a new API token
| name required | string Friendly name for the token |
| expires_at | string <date-time> Optional expiration time for the token |
{- "name": "string",
- "expires_at": "2019-08-24T14:15:22Z"
}{- "status": "success",
- "data": {
- "token": "string",
- "token_info": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "username": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "revoked_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z"
}
}
}Get detailed information about the token used for the current request
{- "status": "success",
- "data": {
- "username": "string",
- "type": "api_token",
- "id": "string",
- "name": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}
}Get details of a specific API token
| id required | string ID of the token |
{- "status": "success",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "username": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "revoked_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z"
}
}List network interfaces with optional filtering by type.
| type | string Example: type=bridge,device Filter interfaces by type (comma-separated for multiple types). Examples: bridge, device, vlan, bond, veth, tun, tap, dummy. |
{- "status": "success",
- "data": {
- "interfaces": [
- {
- "name": "string",
- "mac": "string",
- "mtu": 0,
- "state": "up",
- "type": "string",
- "addresses": [
- "string"
], - "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
]
}
}| name required | string Interface name |
{- "success": true,
- "data": {
- "interface": {
- "name": "string",
- "mac": "string",
- "mtu": 0,
- "state": "up",
- "type": "string",
- "addresses": [
- "string"
], - "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
}
}| name required | string |
| address required | string <ipv4> |
| netmask required | integer [ 0 .. 32 ] |
| gateway | string <ipv4> |
{- "address": "192.168.0.1",
- "netmask": 32,
- "gateway": "192.168.0.1"
}{- "status": "success",
- "data": {
- "message": "string"
}
}| name required | string |
| address required | string <ipv4> |
| netmask required | integer [ 0 .. 32 ] |
| gateway | string <ipv4> |
{- "address": "192.168.0.1",
- "netmask": 32,
- "gateway": "192.168.0.1"
}{- "status": "success",
- "data": {
- "message": "string"
}
}{- "success": true,
- "data": {
- "bridges": [
- {
- "name": "string",
- "mac": "string",
- "mtu": 0,
- "state": "up",
- "type": "string",
- "addresses": [
- "string"
], - "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
]
}
}| name required | string |
| interfaces | Array of strings |
{- "name": "string",
- "interfaces": [
- "string"
]
}{- "status": "success",
- "data": {
- "message": "Bridge br0 created",
- "successfully_added": [
- "eth1",
- "eth2"
], - "total_requested": 3,
- "total_added": 2,
- "failed": [
- {
- "interface": "eth3",
- "reason": "Interface not found"
}
], - "warning": "1 out of 3 interfaces could not be added",
- "persistence_warning": "Configuration applied but not persisted to disk. Changes will be lost on reboot."
}
}| name required | string Bridge name |
{- "success": true,
- "data": {
- "bridge": {
- "name": "string",
- "mac": "string",
- "mtu": 0,
- "state": "up",
- "type": "string",
- "addresses": [
- "string"
], - "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
}
}Updates bridge configuration by removing old members and adding new ones
| name required | string Bridge name |
| name required | string |
| interfaces | Array of strings |
{- "name": "string",
- "interfaces": [
- "string"
]
}{- "status": "success",
- "data": {
- "message": "Bridge br0 updated",
- "successfully_added": [
- "eth1",
- "eth2"
], - "total_requested": 3,
- "total_added": 2,
- "failed": [
- {
- "interface": "eth3",
- "reason": "Already enslaved to br1"
}
], - "warning": "1 out of 3 interfaces could not be added. Also failed to remove 1 old member(s): eth0",
- "persistence_warning": "Configuration applied but not persisted to disk. Changes will be lost on reboot.",
- "removal_failures": [
- "eth0"
]
}
}{- "success": true,
- "data": {
- "bonds": [
- {
- "name": "string",
- "mac": "string",
- "mtu": 0,
- "state": "up",
- "type": "string",
- "addresses": [
- "string"
], - "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
]
}
}| name required | string |
| mode required | string |
| interfaces required | Array of strings |
{- "name": "string",
- "mode": "string",
- "interfaces": [
- "string"
]
}{- "status": "success",
- "data": {
- "message": "Bond bond0 created",
- "successfully_added": [
- "eth1",
- "eth2"
], - "total_requested": 3,
- "total_added": 2,
- "failed": [
- {
- "interface": "eth3",
- "reason": "Interface not found"
}
], - "warning": "1 out of 3 interfaces could not be added",
- "persistence_warning": "Configuration applied but not persisted to disk. Changes will be lost on reboot."
}
}Updates bond configuration by removing old members and adding new ones
| name required | string Bond name |
| name required | string |
| mode required | string |
| interfaces required | Array of strings |
{- "name": "string",
- "mode": "string",
- "interfaces": [
- "string"
]
}{- "status": "success",
- "data": {
- "message": "Bond bond0 updated",
- "successfully_added": [
- "eth1",
- "eth2"
], - "total_requested": 3,
- "total_added": 2,
- "failed": [
- {
- "interface": "eth3",
- "reason": "Already enslaved to br1"
}
], - "warning": "1 out of 3 interfaces could not be added. Also failed to remove 1 old member(s): eth0",
- "persistence_warning": "Configuration applied but not persisted to disk. Changes will be lost on reboot.",
- "removal_failures": [
- "eth0"
]
}
}{- "success": true,
- "data": {
- "vlans": [
- {
- "name": "string",
- "mac": "string",
- "mtu": 0,
- "state": "up",
- "type": "string",
- "addresses": [
- "string"
], - "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
]
}
}| interface required | string |
| vlan_id required | integer [ 1 .. 4094 ] |
| name | string |
{- "interface": "string",
- "vlan_id": 1,
- "name": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}Updates VLAN configuration using delete and recreate pattern to change VLAN ID
| name required | string VLAN name |
| interface required | string |
| vlan_id required | integer [ 1 .. 4094 ] |
| name | string |
{- "interface": "string",
- "vlan_id": 1,
- "name": "string"
}{- "status": "success",
- "data": {
- "message": "VLAN vlan100 updated successfully",
- "warnings": [
- "Failed to restore 1 IP address(es)",
- "Failed to bring interface up"
], - "persistence_warning": "Configuration applied but not persisted to disk. Changes will be lost on reboot."
}
}{- "status": "success",
- "data": {
- "ovs": {
- "available": true,
- "binary_present": true,
- "database_connected": true,
- "version": "ovs-vsctl (Open vSwitch) 3.3.0",
- "bridges_count": 2,
- "error": "ovs-vsctl not found"
}
}
}{- "status": "success",
- "data": {
- "bridges": [
- {
- "name": "br-int",
- "ports": [
- "br-int",
- "patch-int"
], - "fail_mode": "secure",
- "stp_enable": false,
- "rstp_enable": false,
- "datapath_type": "system",
- "protocols": [
- "OpenFlow13"
]
}
], - "count": 2
}
}| name required | string |
| fail_mode | string Enum: "secure" "standalone" |
| stp_enable | boolean |
| rstp_enable | boolean |
| datapath_type | string |
| protocols | Array of strings |
{- "name": "br-int",
- "fail_mode": "secure",
- "stp_enable": false,
- "rstp_enable": false,
- "datapath_type": "system",
- "protocols": [
- "OpenFlow13"
]
}{- "status": "success",
- "data": {
- "message": "string"
}
}| name required | string OVS bridge name |
{- "status": "success",
- "data": {
- "bridge": {
- "name": "br-int",
- "ports": [
- "br-int",
- "patch-int"
], - "fail_mode": "secure",
- "stp_enable": false,
- "rstp_enable": false,
- "datapath_type": "system",
- "protocols": [
- "OpenFlow13"
]
}
}
}| name required | string OVS bridge name |
| fail_mode | string Enum: "secure" "standalone" |
| stp_enable | boolean |
| rstp_enable | boolean |
| datapath_type | string |
| protocols | Array of strings |
{- "fail_mode": "standalone",
- "stp_enable": true,
- "rstp_enable": false,
- "datapath_type": "netdev",
- "protocols": [
- "OpenFlow13",
- "OpenFlow14"
]
}{- "status": "success",
- "data": {
- "message": "string"
}
}| name required | string OVS bridge name |
| type | string Filter ports by OVS port type (for example system, internal, patch, vxlan, dpdk, tap, geneve, gre) |
| service_tags | string Example: service_tags=management,storage Filter ports by service tags using a comma-separated list (supported values are management, migration, shared-heartbeat, storage, replication, backup). A port must contain all requested tags. |
{- "status": "success",
- "data": {
- "bridge_name": "br-int",
- "ports": [
- {
- "name": "patch-int",
- "bridge": "br-int",
- "type": "patch",
- "tag": 120,
- "trunks": [
- 120,
- 140
], - "vlan_mode": "access",
- "bond_mode": "active-backup",
- "lacp": "active",
- "peer": "patch-ext",
- "service_tags": [
- "management",
- "storage"
], - "interfaces": [
- {
- "name": "patch-int",
- "mac": "52:54:00:12:34:56",
- "mtu": 1500,
- "state": "up",
- "type": "patch",
- "addresses": [ ],
- "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
]
}
], - "count": 3
}
}| name required | string OVS bridge name |
{- "status": "success",
- "data": {
- "topology": {
- "bridge": {
- "name": "br-int",
- "ports": [
- "br-int",
- "patch-int"
], - "fail_mode": "secure",
- "stp_enable": false,
- "rstp_enable": false,
- "datapath_type": "system",
- "protocols": [
- "OpenFlow13"
]
}, - "nodes": [
- {
- "id": "port:patch-int",
- "kind": "port",
- "lane": "left",
- "parent_id": "port:patch-int",
- "label": "patch-int",
- "state": "up",
- "resource_type": "ovs-port",
- "resource_name": "patch-int",
- "meta": { }
}
], - "edges": [
- {
- "from": "bridge:br-int",
- "to": "port:patch-int",
- "kind": "has-port",
- "meta": { }
}
], - "warnings": [
- "string"
]
}
}
}| type | string Filter ports by OVS port type (for example system, internal, patch, vxlan, dpdk, tap, geneve, gre) |
| service_tags | string Example: service_tags=management,storage Filter ports by service tags using a comma-separated list (supported values are management, migration, shared-heartbeat, storage, replication, backup). A port must contain all requested tags. |
{- "status": "success",
- "data": {
- "bridge_name": "br-int",
- "ports": [
- {
- "name": "patch-int",
- "bridge": "br-int",
- "type": "patch",
- "tag": 120,
- "trunks": [
- 120,
- 140
], - "vlan_mode": "access",
- "bond_mode": "active-backup",
- "lacp": "active",
- "peer": "patch-ext",
- "service_tags": [
- "management",
- "storage"
], - "interfaces": [
- {
- "name": "patch-int",
- "mac": "52:54:00:12:34:56",
- "mtu": 1500,
- "state": "up",
- "type": "patch",
- "addresses": [ ],
- "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
]
}
], - "count": 3
}
}| bridge required | string |
| name required | string |
| type | string |
| interfaces | Array of strings |
| tag | integer [ 0 .. 4094 ] |
| trunks | Array of integers |
| vlan_mode | string |
| bond_mode | string |
| lacp | string |
| peer | string |
| service_tags | Array of strings Items Enum: "management" "migration" "shared-heartbeat" "storage" "replication" "backup" |
| mtu_request | integer |
{- "bridge": "br-int",
- "name": "patch-int",
- "type": "patch",
- "interfaces": [
- "patch-int"
], - "tag": 120,
- "trunks": [
- 120,
- 140
], - "vlan_mode": "access",
- "bond_mode": "active-backup",
- "lacp": "active",
- "peer": "patch-ext",
- "service_tags": [
- "management",
- "storage"
], - "mtu_request": 1450
}{- "status": "success",
- "data": {
- "message": "string"
}
}| name required | string OVS port name |
{- "status": "success",
- "data": {
- "port": {
- "name": "patch-int",
- "bridge": "br-int",
- "type": "patch",
- "tag": 120,
- "trunks": [
- 120,
- 140
], - "vlan_mode": "access",
- "bond_mode": "active-backup",
- "lacp": "active",
- "peer": "patch-ext",
- "service_tags": [
- "management",
- "storage"
], - "interfaces": [
- {
- "name": "patch-int",
- "mac": "52:54:00:12:34:56",
- "mtu": 1500,
- "state": "up",
- "type": "patch",
- "addresses": [ ],
- "interfaces": [
- "string"
], - "statistics": {
- "rx_bytes": 0,
- "tx_bytes": 0,
- "rx_packets": 0,
- "tx_packets": 0,
- "rx_errors": 0,
- "tx_errors": 0
}
}
]
}
}
}| name required | string OVS port name |
| bridge | string |
| type | string |
| interfaces | Array of strings |
| tag | integer [ 0 .. 4094 ] |
| trunks | Array of integers |
| vlan_mode | string |
| bond_mode | string |
| lacp | string |
| peer | string |
| service_tags | Array of strings Items Enum: "management" "migration" "shared-heartbeat" "storage" "replication" "backup" |
| mtu_request | integer |
{- "bridge": "br-int",
- "type": "internal",
- "interfaces": [
- "patch-int"
], - "tag": 200,
- "trunks": [
- 120,
- 200
], - "vlan_mode": "trunk",
- "bond_mode": "balance-slb",
- "lacp": "passive",
- "peer": "patch-ext",
- "service_tags": [
- "migration",
- "backup"
], - "mtu_request": 1500
}{- "status": "success",
- "data": {
- "message": "string"
}
}{- "status": "success",
- "data": {
- "disks": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "model": "string",
- "serial": "string",
- "type": "string",
- "drive_type": "string",
- "removable": true,
- "filesystem": "string",
- "mount_point": "string",
- "storage_pool": "string",
- "partitions": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "type": "string",
- "filesystem": "string",
- "mount_point": "string",
- "used": 0,
- "available": 0,
- "use_percent": 0
}
]
}
]
}
}| device required | string |
| mount_point required | string |
| filesystem | string |
| options | string |
{- "device": "string",
- "mount_point": "string",
- "filesystem": "string",
- "options": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}| mount_point required | string |
| force | boolean Default: false |
{- "mount_point": "string",
- "force": false
}{- "status": "success",
- "data": {
- "message": "string"
}
}| device required | string |
| filesystem required | string Enum: "ext4" "ext3" "ext2" "xfs" "btrfs" |
| label | string |
{- "device": "string",
- "filesystem": "ext4",
- "label": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}| name required | string |
| devices required | Array of strings |
{- "name": "string",
- "devices": [
- "string"
]
}{- "status": "success",
- "data": {
- "message": "string"
}
}| name required | string |
| vg_name required | string |
| size required | string |
| filesystem | string Enum: "ext4" "ext3" "ext2" "xfs" "btrfs" |
{- "name": "string",
- "vg_name": "string",
- "size": "string",
- "filesystem": "ext4"
}{- "status": "success",
- "data": {
- "message": "string"
}
}| source required | string |
| destination required | string |
{- "source": "string",
- "destination": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}{- "status": "success",
- "data": {
- "devices": [
- {
- "name": "string",
- "path": "string",
- "level": "string",
- "state": "string",
- "size": 0,
- "devices": [
- "string"
], - "active_disks": 0,
- "total_disks": 0,
- "chunk_size": "string",
- "uuid": "string"
}
]
}
}| name required | string Name of the RAID device (e.g., raid0) |
| level required | string Enum: "0" "1" "5" "6" "10" RAID level |
| disks required | Array of strings >= 2 items List of disk paths to use for RAID |
| chunk_size | string Default: "512K" Chunk size (e.g., 512K, 1M) |
{- "name": "string",
- "level": "0",
- "disks": [
- "string",
- "string"
], - "chunk_size": "512K"
}{- "status": "success",
- "data": {
- "message": "string"
}
}| device required | string RAID device path to destroy |
{- "device": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}{- "status": "success",
- "data": {
- "containers": [
- {
- "id": "2309b08a1303d054769d3adba93ac148c6cc31748a6dbecda5b12156028b034c",
- "name": "reloader",
- "image": "sha256:5ea6cbf6dee9b4b67edbd108986d75c5958273e6f6faaf0c18e734572b6b8821",
- "state": "CONTAINER_RUNNING",
- "status": "CONTAINER_RUNNING",
- "created_at": "2025-07-25T09:38:51.086238448Z",
- "labels": {
- "io.kubernetes.container.name": "reloader"
}, - "runtime": "containerd"
}
], - "count": 151,
- "runtime": "containerd"
}
}Create a new container using the CRI runtime
| name | string Optional container name |
| image | string Docker image to use for the container |
| cmd | Array of strings Command to run in the container |
| entrypoint | Array of strings Override the image entrypoint |
| env | Array of strings List of environment variables to set in the container |
object Ports to expose from the container | |
object Port mappings for exposed container ports | |
object Metadata labels assigned to the container | |
| workingDir | string Working directory in the container |
Array of objects | |
| networkMode | string Which network to connect container to |
| cgroupParent | string Optional cgroup parent for the CRI sandbox (cgroupfs style, e.g., /system.slice). |
object Resource limits for the container | |
object |
{- "name": "my-nginx",
- "image": "nginx:latest",
- "env": [
- "ENV=production"
], - "portBindings": {
- "80/tcp": [
- {
- "hostPort": "8080"
}
]
}
}{- "status": "success",
- "data": {
- "containerId": "8dfafdbc3a40",
- "podSandboxId": "string",
- "message": "string",
- "success": true,
- "warnings": [
- "string"
]
}
}| id required | string Container ID |
{- "status": "success",
- "data": {
- "container": {
- "status": "string",
- "id": "string",
- "name": "string",
- "image": "string",
- "image_id": "string",
- "state": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "started_at": "2019-08-24T14:15:22Z",
- "finished_at": "2019-08-24T14:15:22Z",
- "exit_code": 0,
- "pid": 0,
- "restart_count": 0,
- "command": [
- "string"
], - "args": [
- "string"
], - "env": [
- "string"
], - "mounts": [
- {
- "source": "string",
- "destination": "string",
- "mode": "string",
- "type": "string",
- "read_only": true
}
], - "ports": [
- {
- "container_port": 0,
- "host_port": 0,
- "protocol": "string",
- "host_ip": "string"
}
], - "networks": [
- {
- "name": "string",
- "id": "string",
- "ip_address": "string",
- "ip_prefix_len": 0,
- "gateway": "string",
- "mac_address": "string",
- "ipv6_address": "string",
- "ipv6_gateway": "string",
- "aliases": [
- "string"
], - "driver_opts": {
- "property1": "string",
- "property2": "string"
}
}
], - "resources": {
- "cpu_shares": 0,
- "cpu_quota": 0,
- "cpu_period": 0,
- "cpuset_cpus": "string",
- "cpuset_mems": "string",
- "memory_limit": 0,
- "memory_reservation": 0,
- "memory_swap": 0,
- "memory_usage": 0,
- "memory_max_usage": 0,
- "cpu_usage_percent": 0.1,
- "pids_limit": 0,
- "pids_current": 0,
- "blkio_weight": 0,
- "io_read_bytes": 0,
- "io_write_bytes": 0,
- "network_rx_bytes": 0,
- "network_tx_bytes": 0
}, - "user": "string",
- "working_dir": "string",
- "hostname": "string",
- "domain_name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}, - "config": {
- "property1": { },
- "property2": { }
}
}, - "runtime": "docker",
- "execution_context": {
- "directory_state": {
- "pwd": "/Users/kandar/Workspaces/vapor/api",
- "home": "/Users/kandar"
}, - "operating_system": {
- "platform": "MacOS"
}, - "current_time": "2025-08-02T06:33:19Z",
- "shell": {
- "name": "zsh",
- "version": "5.9"
}
}
}
}{- "status": "success",
- "data": {
- "container_id": "abc123def456",
- "logs": "2025-08-02T09:00:00.000Z Started application\n2025-08-02T09:00:01.000Z Listening on port 8080\n",
- "runtime": "docker"
}
}{- "status": "success",
- "data": {
- "images": [
- {
- "id": "sha256:d12fc38c77e50eab23af17f302d5b94514173d9f84150b7662aecbfeb21f8717",
- "repo_tags": [
- "r.awan.app/library/remote-console-ipmi:2.0"
], - "repo_digests": [
- "quay.io/operatorhubio/catalog@sha256:096fa413e1b8dba2071020e5809597e7d86da5a2833ffdf97a20457af714e678"
], - "size": 109999465,
- "created_at": "2025-08-01T12:40:55.236465486Z",
- "runtime": "containerd"
}
], - "count": 92,
- "runtime": "containerd"
}
}| id required | string Image ID |
{- "status": "success",
- "data": {
- "image": {
- "status": "success",
- "id": "string",
- "repo_tags": [
- "string"
], - "repo_digests": [
- "string"
], - "parent": "string",
- "author": "string",
- "architecture": "string",
- "os": "string",
- "variant": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "size": 0,
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}, - "layers": [
- {
- "id": "string",
- "size": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "created_by": "string",
- "comment": "string"
}
], - "config": {
- "user": "string",
- "exposed_ports": [
- "string"
], - "env": [
- "string"
], - "cmd": [
- "string"
], - "entrypoint": [
- "string"
], - "volumes": [
- "string"
], - "working_dir": "string",
- "stop_signal": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}
}, - "manifest": {
- "property1": "string",
- "property2": "string"
}
}, - "runtime": "docker"
}
}Remove a container image from the local storage using CRI runtime (containerd, CRI-O)
| id required | string Image ID or reference |
{- "status": "success",
- "data": {
- "imageId": "string",
- "message": "Image removed successfully",
- "runtime": "containerd"
}
}| image | string <binary> |
{- "status": "success",
- "data": {
- "import_result": {
- "image_id": "sha256:abc123def456",
- "repo_tags": [
- "my-app:latest"
], - "size": 125829120,
- "imported_at": "2025-08-05T15:00:00Z",
- "runtime": "docker",
- "status": "success",
- "message": "Loaded image: my-app:latest"
}, - "runtime": "docker",
- "filename": "my-image.tar.gz"
}
}Alternative path for creating resumable upload session for container images using TUS protocol.
| Upload-Length required | integer <int64> Total size of the file to upload |
| Upload-Metadata | string Metadata about the upload (filename, etc.) |
{- "upload_id": "abc123-def456-ghi789",
- "upload_url": "/containers/images/upload/abc123-def456-ghi789",
- "expires_at": "2025-08-06T15:38:32Z"
}This endpoint lists all active TUS upload sessions for container images, allowing you to:
Upload sessions expire after 24 hours of inactivity.
{- "status": "success",
- "data": {
- "uploads": [
- {
- "upload_id": "string",
- "total_size": 0,
- "uploaded_size": 0,
- "progress": 0.1,
- "status": "created",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "filename": "string"
}
], - "count": 0
}
}Upload a chunk of data to a resumable upload session for container images
| id required | string Upload session ID |
| Upload-Offset required | integer Current upload offset |
| Content-Type required | string Value: "application/offset+octet-stream" Must be application/offset+octet-stream |
{- "status": "error"
}Get detailed status of a resumable upload session for container images
| id required | string Upload session ID |
{- "status": "success",
- "data": {
- "upload": {
- "upload_id": "string",
- "total_size": 0,
- "uploaded_size": 0,
- "progress": 0.1,
- "status": "created",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "filename": "string",
- "metadata": { }
}
}
}Complete the upload session and import the container image
| id required | string Upload session ID |
{- "status": "success",
- "data": {
- "upload_id": "string",
- "import_result": {
- "image_id": "sha256:abc123def456",
- "repo_tags": [
- "my-app:latest"
], - "size": 125829120,
- "imported_at": "2025-08-05T15:00:00Z",
- "runtime": "docker",
- "status": "success",
- "message": "Loaded image: my-app:latest"
}, - "runtime": "containerd",
- "filename": "string"
}
}Pull a container image from a registry using CRI runtime (containerd, CRI-O)
| image required | string Image reference (e.g., nginx:latest, docker.io/library/alpine:3.18) |
{- "image": "nginx:latest"
}{- "status": "success",
- "data": {
- "image": "string",
- "imageId": "string",
- "size": 0,
- "runtime": "string",
- "status": "string",
- "message": "string"
}
}| image | string <binary> |
{- "status": "success",
- "data": {
- "import_result": {
- "image_id": "sha256:abc123def456",
- "repo_tags": [
- "my-app:latest"
], - "size": 125829120,
- "imported_at": "2025-08-05T15:00:00Z",
- "runtime": "docker",
- "status": "success",
- "message": "Loaded image: my-app:latest"
}, - "runtime": "docker",
- "filename": "docker-image.tar.gz"
}
}Create a new resumable upload session for Docker image using TUS protocol
| Upload-Length required | integer <int64> Total size of the file to upload |
| Upload-Metadata | string Metadata about the upload (filename, etc.) |
{- "upload_id": "abc123-def456-ghi789",
- "upload_url": "/docker/images/upload/abc123-def456-ghi789",
- "expires_at": "2025-08-06T15:38:32Z"
}List all active resumable upload sessions
{- "status": "success",
- "data": {
- "uploads": [
- {
- "upload_id": "string",
- "total_size": 0,
- "uploaded_size": 0,
- "progress": 0.1,
- "status": "created",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "filename": "string"
}
], - "count": 0
}
}Upload a chunk of data to a resumable upload session
| id required | string Upload session ID |
| Upload-Offset required | integer <int64> Byte offset where this chunk starts |
| Content-Type required | string Value: "application/offset+octet-stream" Must be application/offset+octet-stream |
{- "status": "error"
}Get detailed status of a resumable upload session
| id required | string Upload session ID |
{- "status": "success",
- "data": {
- "upload_id": "string",
- "total_size": 0,
- "uploaded_size": 0,
- "progress": 0.1,
- "status": "created",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "chunk_size": 0
}
}Complete a resumable upload session and import the Docker image
| id required | string Upload session ID |
{- "status": "success",
- "data": {
- "upload_id": "string",
- "import_result": {
- "image_id": "sha256:abc123def456",
- "repo_tags": [
- "my-app:latest"
], - "size": 125829120,
- "imported_at": "2025-08-05T15:00:00Z",
- "runtime": "docker",
- "status": "success",
- "message": "Loaded image: my-app:latest"
}, - "runtime": "docker",
- "filename": "string"
}
}List Docker containers with optional filtering and pagination. Returns information about container state, image, ports, and resource usage.
{- "status": "success",
- "data": {
- "containers": [
- {
- "id": "9c7c8a3b0123",
- "names": [
- "my-container"
], - "image": "nginx:latest",
- "imageId": "sha256:abcd1234",
- "command": "nginx -g 'daemon off;'",
- "created": "2019-08-24T14:15:22Z",
- "state": "running",
- "status": "Up 2 hours",
- "ports": [
- {
- "ip": "0.0.0.0",
- "privatePort": 80,
- "publicPort": 8080,
- "type": "tcp"
}
], - "labels": {
- "property1": "string",
- "property2": "string"
}, - "sizeRw": 0,
- "sizeRootFs": 0,
- "hostConfig": {
- "networkMode": "bridge"
}, - "networkSettings": {
- "networks": {
- "property1": {
- "networkId": "string",
- "endpointId": "string",
- "gateway": "string",
- "ipAddress": "string",
- "ipPrefixLen": 0,
- "ipv6Gateway": "string",
- "macAddress": "string"
}, - "property2": {
- "networkId": "string",
- "endpointId": "string",
- "gateway": "string",
- "ipAddress": "string",
- "ipPrefixLen": 0,
- "ipv6Gateway": "string",
- "macAddress": "string"
}
}
}, - "mounts": [
- {
- "type": "bind",
- "source": "/host/path",
- "destination": "/container/path",
- "mode": "rw",
- "rw": true,
- "propagation": "rprivate"
}
]
}
]
}
}List all Docker images available on the system
{- "status": "success",
- "data": {
- "images": [
- {
- "id": "sha256:abcd1234",
- "parentId": "string",
- "repoTags": [
- "nginx:latest"
], - "repoDigests": [
- "string"
], - "created": "2019-08-24T14:15:22Z",
- "size": 0,
- "virtualSize": 0,
- "sharedSize": 0,
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "containers": 0
}
]
}
}Pull a Docker image from a registry (e.g., Docker Hub)
| imageName | string Name of the image to pull |
| tag | string Tag of the image to pull |
{- "imageName": "nginx",
- "tag": "latest"
}{- "status": "success",
- "data": {
- "imageName": "nginx:latest"
}
}Create a new Docker container from an image
| name | string Optional container name |
| image | string Docker image to use for the container |
| cmd | Array of strings Command to run in the container |
| entrypoint | Array of strings Override the image entrypoint |
| env | Array of strings List of environment variables to set in the container |
object Ports to expose from the container | |
object Port mappings for exposed container ports | |
object Metadata labels assigned to the container | |
| workingDir | string Working directory in the container |
Array of objects | |
| networkMode | string Which network to connect container to |
| cgroupParent | string Optional cgroup parent for the CRI sandbox (cgroupfs style, e.g., /system.slice). |
object Resource limits for the container | |
object |
{- "name": "my-nginx",
- "image": "nginx:latest",
- "env": [
- "ENV=production"
], - "portBindings": {
- "80/tcp": [
- {
- "hostPort": "8080"
}
]
}
}{- "status": "success",
- "data": {
- "containerId": "8dfafdbc3a40",
- "podSandboxId": "string",
- "message": "string",
- "success": true,
- "warnings": [
- "string"
]
}
}Remove a Docker image from the system
| id required | string Image ID or tag |
{- "status": "success",
- "data": {
- "imageId": "sha256:abc123def456",
- "action": "remove",
- "message": "Image removed successfully",
- "success": true
}
}List all Docker networks configured on the system
{- "status": "success",
- "data": {
- "networks": [
- {
- "id": "bridge",
- "name": "bridge",
- "driver": "bridge",
- "created": "2019-08-24T14:15:22Z",
- "scope": "local",
- "enableIPv6": true,
- "ipam": {
- "driver": "default",
- "options": {
- "property1": "string",
- "property2": "string"
}, - "config": [
- {
- "subnet": "172.18.0.0/16",
- "ipRange": "string",
- "gateway": "172.18.0.1",
- "auxAddress": {
- "property1": "string",
- "property2": "string"
}
}
]
}, - "internal": true,
- "attachable": true,
- "ingress": true,
- "configOnly": true,
- "options": {
- "property1": "string",
- "property2": "string"
}, - "labels": {
- "property1": "string",
- "property2": "string"
}, - "containers": {
- "property1": {
- "networkId": "string",
- "endpointId": "string",
- "gateway": "string",
- "ipAddress": "string",
- "ipPrefixLen": 0,
- "ipv6Gateway": "string",
- "macAddress": "string"
}, - "property2": {
- "networkId": "string",
- "endpointId": "string",
- "gateway": "string",
- "ipAddress": "string",
- "ipPrefixLen": 0,
- "ipv6Gateway": "string",
- "macAddress": "string"
}
}
}
]
}
}Create a new Docker network
| name required | string Name of the network to create |
| driver | string Enum: "bridge" "host" "overlay" "macvlan" "none" Network driver to use (defaults to 'bridge') |
| subnet | string Subnet in CIDR notation for custom IP allocation |
| gateway | string Gateway IP address for the subnet |
object Key-value labels to attach to the network |
{- "name": "my-network",
- "driver": "bridge"
}{- "status": "success",
- "data": {
- "id": "a1b2c3d4e5f6",
- "name": "my-network",
- "driver": "bridge",
- "message": "Network created successfully",
- "success": true
}
}Remove a Docker network from the system
| id required | string Network ID or name |
{- "status": "success",
- "data": {
- "networkId": "bridge",
- "action": "remove",
- "message": "Network removed successfully",
- "success": true
}
}List all Docker volumes available on the system
{- "status": "success",
- "data": {
- "volumes": [
- {
- "name": "my-volume",
- "driver": "local",
- "mountpoint": "/var/lib/docker/volumes/my-volume/_data",
- "createdAt": "2019-08-24T14:15:22Z",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "scope": "local",
- "options": {
- "property1": "string",
- "property2": "string"
}, - "usageData": {
- "size": 0,
- "refCount": 0
}
}
]
}
}Create a new Docker volume
| name required | string Name of the volume to create |
| driver | string Volume driver to use (defaults to 'local') |
object Key-value labels to attach to the volume |
{- "name": "my-data-volume",
- "driver": "local",
- "labels": {
- "app": "myapp"
}
}{- "status": "success",
- "data": {
- "name": "my-data-volume",
- "driver": "local",
- "mountpoint": "/var/lib/docker/volumes/my-data-volume/_data",
- "message": "Volume created successfully",
- "success": true
}
}Remove a Docker volume from the system
| id required | string Volume name |
{- "status": "success",
- "data": {
- "volumeId": "my-volume",
- "action": "remove",
- "message": "Volume removed successfully",
- "success": true
}
}Remove a Docker container (must be stopped first)
| id required | string Container ID or name |
{- "status": "success",
- "data": {
- "containerId": "abc123def456",
- "action": "start",
- "message": "Container started successfully",
- "success": true
}
}Start a stopped Docker container
| id required | string Container ID or name |
{- "status": "success",
- "data": {
- "containerId": "abc123def456",
- "action": "start",
- "message": "Container started successfully",
- "success": true
}
}Stop a running Docker container
| id required | string Container ID or name |
{- "status": "success",
- "data": {
- "containerId": "abc123def456",
- "action": "start",
- "message": "Container started successfully",
- "success": true
}
}Forcefully kill a running Docker container using SIGKILL
| id required | string Container ID or name |
{- "status": "success",
- "data": {
- "containerId": "abc123def456",
- "action": "start",
- "message": "Container started successfully",
- "success": true
}
}Get logs from a Docker container
| id required | string Container ID or name |
{- "status": "success",
- "data": {
- "containerId": "abc123def456",
- "logs": "2025-08-04T12:00:00.000Z Starting application...\n2025-08-04T12:00:01.000Z Server listening on port 8080\n"
}
}Returns a list of storage pools with optional filtering and pagination.
Filtering:
state: Filter by pool state (active, inactive, all)type: Filter by pool type (dir, logical, disk, netfs, etc.)Pagination:
page: Page number (default: 1)page_size: Number of items per page (default: 50, max: 100)| state | string Default: "all" Enum: "all" "active" "inactive" Example: state=active Filter by pool state |
| type | string Enum: "dir" "logical" "disk" "netfs" "iscsi" "scsi" "mpath" "rbd" "gluster" "zfs" "fs" Example: type=dir Filter by pool type |
| page | integer >= 1 Default: 1 Page number for pagination |
| page_size | integer [ 1 .. 100 ] Default: 50 Number of items per page |
{- "status": "success",
- "data": {
- "pools": [
- {
- "status": "success",
- "data": {
- "pools": [
- {
- "name": "string",
- "type": "string",
- "path": "string",
- "state": "string",
- "capacity": 0,
- "allocation": 0,
- "available": 0,
- "autostart": true
}
], - "count": 0
}
}
], - "pagination": {
- "total": 25,
- "page": 1,
- "page_size": 50,
- "total_pages": 1
}
}
}Creates a new storage pool for directory, NFS, logical volume, or block-device-backed filesystem sources.
Directory pools (type: "dir"):
path is required and must be an absolute directory path.Network filesystem pools (type: "netfs"):
source is required and should be an NFS source such as host:/export/path.target is required and must be an absolute mount path.Logical pools (type: "logical"):
source is required and should contain the source volume group name.target defaults to /dev/<volume-group> when omitted.Filesystem pools (type: "fs"):
source_device must be an available whole block device such as a local disk or multipath device.filesystem is required and must be one of ext4, xfs, or ocfs2.target is required and must be an absolute mount path.initialize_filesystem is enabled, libvirt will build the pool and initialize the selected device before mounting it.overwrite may be set together with initialize_filesystem to allow reinitializing an existing filesystem.ocfs2_heartbeat_mode: "global", provide dedicated heartbeat regions in ocfs2_heartbeat_regions (UUIDs or device paths).| name required | string Storage pool name. |
| type required | string Enum: "dir" "netfs" "logical" "fs" Storage pool type. |
| path | string Absolute path for directory-backed pools. |
| source | string NFS source ( |
| target | string Target mount point or target path for the pool. |
| autostart | boolean Whether the pool should start automatically on boot. |
| username | string Optional username for authenticated network-backed pools. |
| password | string Optional password for authenticated network-backed pools. |
| source_device | string Absolute block device path for filesystem-backed pools. |
| filesystem | string Enum: "ext4" "xfs" "ocfs2" Filesystem type for filesystem-backed pools. |
| initialize_filesystem | boolean Build or initialize the selected block device before starting a filesystem-backed pool. |
| overwrite | boolean Allow overwriting an existing filesystem when |
| ocfs2_heartbeat_mode | string Indicates whether the heartbeat should be |
| ocfs2_node_slots | integer Total number of allocated node slots for an OCFS2 cluster |
| ocfs2_local_node_ip | string IP Address assigned to this node for cluster communications |
| ocfs2_peer_node_ips | Array of strings Array of IP Addresses for remote cluster nodes |
| ocfs2_heartbeat_regions | Array of strings Dedicated OCFS2 heartbeat regions (UUIDs or device paths). Required when |
{- "name": "vm-storage",
- "type": "dir",
- "path": "/var/lib/libvirt/images/vm-storage",
- "autostart": true
}{- "status": "success",
- "data": {
- "pool": {
- "name": "string",
- "type": "string",
- "path": "string",
- "state": "string",
- "capacity": 0,
- "allocation": 0,
- "available": 0,
- "autostart": true
}, - "message": "string"
}
}| name required | string Storage pool name |
{- "status": "success",
- "data": {
- "pool": {
- "name": "string",
- "type": "string",
- "path": "string",
- "state": "string",
- "capacity": 0,
- "allocation": 0,
- "available": 0,
- "autostart": true
}
}
}Deletes a storage pool with validation to prevent accidental data loss.
Safety Features:
delete_volumes=true409 Conflict if pool contains volumes and delete_volumes is false or not setDeletion Process:
delete_volumes=false: reject with errordelete_volumes=true⚠️ Warning: Setting delete_volumes=true will permanently delete all volumes in the pool!
| name required | string Example: old-storage-pool Storage pool name |
| delete_volumes | boolean Default: false Whether to delete all volumes in the pool.
|
{- "status": "error",
- "error": {
- "code": "POOL_NOT_FOUND",
- "message": "Storage pool not found",
- "details": "storage pool not found: Domain not found: no storage pool with matching name 'nonexistent'"
}
}Updates the configuration of an existing storage pool. Currently supports updating autostart settings.
| name required | string Storage pool name |
| autostart | boolean Enable or disable autostart for the pool |
{- "autostart": true
}{- "status": "success",
- "data": {
- "status": "success",
- "data": {
- "pool": {
- "name": "string",
- "type": "string",
- "path": "string",
- "state": "string",
- "capacity": 0,
- "allocation": 0,
- "available": 0,
- "autostart": true
}
}
}
}Retrieves a list of all storage volumes across all storage pools in the libvirt environment. This provides a consolidated view of all volumes regardless of which pool they belong to.
{- "status": "success",
- "data": [
- {
- "name": "vm01.qcow2",
- "type": "file",
- "capacity": 10737418240,
- "allocation": 2147483648,
- "path": "/var/lib/libvirt/images/vm01.qcow2",
- "format": "qcow2",
- "created_at": "2024-08-22T10:30:00Z",
- "pool_name": "default"
}, - {
- "name": "vm02.qcow2",
- "type": "file",
- "capacity": 21474836480,
- "allocation": 5368709120,
- "path": "/var/lib/libvirt/images/vm02.qcow2",
- "format": "qcow2",
- "created_at": "2024-08-22T11:00:00Z",
- "pool_name": "default"
}, - {
- "name": "data-volume",
- "type": "file",
- "capacity": 107374182400,
- "allocation": 53687091200,
- "path": "/mnt/storage/data-volume",
- "format": "raw",
- "created_at": "2024-08-20T09:15:00Z",
- "pool_name": "data-pool"
}
]
}| pool_name required | string Storage pool name |
{- "status": "success",
- "data": {
- "volumes": [
- {
- "name": "string",
- "pool": "string",
- "path": "string",
- "type": "string",
- "capacity": 0,
- "allocation": 0
}
], - "count": 0
}
}Creates a new storage volume within the specified storage pool.
Validation rules:
name must be unique within the pool and use only letters, digits,
hyphen (-) and underscore (_)capacity is required and must be at least 1 MiB (1,048,576 bytes)format, if provided, must be one of: qcow2, raw, vmdk, qed, vdiIf the pool does not have enough free space, the request will fail with a validation error.
| pool_name required | string Storage pool name |
| name required | string Name of the volume to create |
| driver | string Volume driver to use (defaults to 'local') |
object Key-value labels to attach to the volume |
{- "name": "my-data-volume",
- "driver": "local",
- "labels": {
- "app": "myapp",
- "environment": "production"
}
}{- "status": "success",
- "data": {
- "volume": {
- "name": "string",
- "pool": "string",
- "path": "string",
- "type": "string",
- "capacity": 0,
- "allocation": 0
}, - "message": "string"
}
}| pool_name required | string Storage pool name |
| vol_name required | string Storage volume name |
{- "status": "success",
- "data": {
- "volume": {
- "name": "string",
- "pool": "string",
- "path": "string",
- "type": "string",
- "capacity": 0,
- "allocation": 0
}
}
}Deletes a storage volume from the specified storage pool.
By default, the API will prevent deletion of volumes that are still in
use by one or more virtual machines. To force deletion of an in-use
volume, set the force query parameter to true.
| pool_name required | string Storage pool name |
| vol_name required | string Storage volume name |
| force | boolean Default: false When set to |
{- "status": "error"
}Create a new resumable upload session for ISO images using TUS protocol.
This endpoint follows TUS protocol v1.0.0 for resumable uploads.
Required headers:
Example Upload-Metadata header:
Upload-Metadata: filename dWJ1bnR1LTIyLjA0LWRlc2t0b3AtYW1kNjQuaXNv,os_type bGludXg=,os_variant dWJ1bnR1MjIuMDQ=
| Upload-Length required | integer Total size of the ISO file in bytes |
| Upload-Metadata | string Base64-encoded metadata about the ISO |
| Tus-Resumable | string Default: 1.0.0 TUS protocol version (1.0.0) |
{- "upload_id": "string",
- "upload_url": "string",
- "expires_at": "2019-08-24T14:15:22Z",
- "metadata": {
- "filename": "string",
- "size": 0,
- "os_type": "string",
- "os_variant": "string",
- "architecture": "string",
- "description": "string",
- "pool_name": "string"
}
}Get a list of all active ISO upload sessions for the current user
{- "uploads": [
- {
- "upload_id": "string",
- "filename": "string",
- "status": "created",
- "progress": "45.50%",
- "total_size": 0,
- "uploaded_size": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}
], - "count": 0
}Upload a chunk of data for an ISO file using TUS protocol.
Required headers:
The request body should contain the raw binary data of the chunk.
| id required | string Upload session ID |
| Upload-Offset required | integer Current offset in bytes |
| Content-Type required | string Value: "application/offset+octet-stream" Must be application/offset+octet-stream |
| Tus-Resumable | string Default: 1.0.0 TUS protocol version |
{- "status": "error"
}Get detailed status of an ISO upload session
| id required | string Upload session ID |
{- "upload_id": "string",
- "status": "created",
- "total_size": 0,
- "uploaded_size": 0,
- "progress": "75.25%",
- "metadata": {
- "filename": "string",
- "os_type": "string",
- "os_variant": "string",
- "architecture": "string",
- "description": "string",
- "tags": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}Complete the upload session and register the ISO in the system. This will move the ISO to the final storage location and make it available for VM creation.
| id required | string Upload session ID |
{- "status": "success",
- "data": {
- "upload_id": "string",
- "iso": {
- "id": "iso-123e4567-e89b-12d3-a456-426614174000",
- "name": "ubuntu-22.04-live-server-amd64.iso",
- "path": "/var/lib/libvirt/images/iso/ubuntu-22.04-live-server-amd64.iso",
- "storage_pool": "default",
- "size": 1474560000,
- "checksum": "5e38b55d57d94ff029719342357325ed3bda38fa80054f9330dc789cd2d43931",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "description": "Ubuntu 22.04 LTS Server Installation Media",
- "created_at": "2025-01-15T10:00:00Z",
- "last_used": "2025-01-15T14:30:00Z",
- "source": "uploaded",
- "metadata": {
- "property1": "string",
- "property2": "string"
}
}, - "message": "ISO uploaded and registered successfully"
}
}List all available ISO images from the system.
Sources:
{- "status": "success",
- "data": {
- "isos": [
- {
- "id": "iso-123e4567-e89b-12d3-a456-426614174000",
- "name": "ubuntu-22.04-live-server-amd64.iso",
- "path": "/var/lib/libvirt/images/iso/ubuntu-22.04-live-server-amd64.iso",
- "storage_pool": "default",
- "size": 1474560000,
- "checksum": "5e38b55d57d94ff029719342357325ed3bda38fa80054f9330dc789cd2d43931",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "description": "Ubuntu 22.04 LTS Server Installation Media",
- "created_at": "2025-01-15T10:00:00Z",
- "last_used": "2025-01-15T14:30:00Z",
- "source": "uploaded",
- "metadata": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Upload (non resumable) a new ISO image to the system.
Options:
| file | string <binary> ISO file to upload |
| name | string Name for the ISO |
| description | string Description of the ISO |
| pool_name | string Optional associated storage pool name. Defaults to "default" when omitted. |
{- "status": "success",
- "data": {
- "iso": {
- "id": "iso-123e4567-e89b-12d3-a456-426614174000",
- "name": "ubuntu-22.04-live-server-amd64.iso",
- "path": "/var/lib/libvirt/images/iso/ubuntu-22.04-live-server-amd64.iso",
- "storage_pool": "default",
- "size": 1474560000,
- "checksum": "5e38b55d57d94ff029719342357325ed3bda38fa80054f9330dc789cd2d43931",
- "os_type": "linux",
- "os_variant": "ubuntu22.04",
- "description": "Ubuntu 22.04 LTS Server Installation Media",
- "created_at": "2025-01-15T10:00:00Z",
- "last_used": "2025-01-15T14:30:00Z",
- "source": "uploaded",
- "metadata": {
- "property1": "string",
- "property2": "string"
}
}
}
}{- "status": "success",
- "data": {
- "networks": [
- {
- "name": "string",
- "uuid": "string",
- "state": "active",
- "bridge": "string",
- "mode": "nat",
- "ip_range": {
- "address": "string",
- "netmask": "string",
- "gateway": "string"
}, - "dhcp": {
- "start": "string",
- "end": "string",
- "hosts": [
- {
- "mac": "string",
- "ip": "string",
- "name": "string"
}
]
}, - "autostart": true,
- "persistent": true
}
], - "count": 0
}
}| name required | string Name of the network to create |
| driver | string Enum: "bridge" "host" "overlay" "macvlan" "none" Network driver to use (defaults to 'bridge') |
| subnet | string Subnet in CIDR notation for custom IP allocation |
| gateway | string Gateway IP address for the subnet |
object Key-value labels to attach to the network |
{- "name": "my-network",
- "driver": "bridge",
- "subnet": "172.20.0.0/16",
- "gateway": "172.20.0.1",
- "labels": {
- "environment": "development"
}
}{- "status": "success",
- "data": {
- "network": {
- "name": "string",
- "uuid": "string",
- "state": "active",
- "bridge": "string",
- "mode": "nat",
- "ip_range": {
- "address": "string",
- "netmask": "string",
- "gateway": "string"
}, - "dhcp": {
- "start": "string",
- "end": "string",
- "hosts": [
- {
- "mac": "string",
- "ip": "string",
- "name": "string"
}
]
}, - "autostart": true,
- "persistent": true
}, - "message": "string"
}
}| name required | string Network name |
{- "status": "success",
- "data": {
- "network": {
- "name": "string",
- "uuid": "string",
- "state": "active",
- "bridge": "string",
- "mode": "nat",
- "ip_range": {
- "address": "string",
- "netmask": "string",
- "gateway": "string"
}, - "dhcp": {
- "start": "string",
- "end": "string",
- "hosts": [
- {
- "mac": "string",
- "ip": "string",
- "name": "string"
}
]
}, - "autostart": true,
- "persistent": true
}
}
}Update an existing virtual network configuration. The network will be stopped if active, updated, and restarted.
| name required | string Network name |
| mode | string Enum: "nat" "route" "bridge" "private" Network forwarding mode |
| bridge | string Bridge name for the network |
object (IPRange) IP range configuration for network | |
object (DHCPConfig) DHCP configuration for network | |
| autostart | boolean Whether to enable autostart for the network |
{- "mode": "nat",
- "bridge": "string",
- "ip_range": {
- "address": "string",
- "netmask": "string",
- "gateway": "string"
}, - "dhcp": {
- "start": "string",
- "end": "string",
- "hosts": [
- {
- "mac": "string",
- "ip": "string",
- "name": "string"
}
]
}, - "autostart": true
}{- "status": "success",
- "data": {
- "network": {
- "name": "string",
- "uuid": "string",
- "state": "active",
- "bridge": "string",
- "mode": "nat",
- "ip_range": {
- "address": "string",
- "netmask": "string",
- "gateway": "string"
}, - "dhcp": {
- "start": "string",
- "end": "string",
- "hosts": [
- {
- "mac": "string",
- "ip": "string",
- "name": "string"
}
]
}, - "autostart": true,
- "persistent": true
}, - "message": "string"
}
}Retrieve active DHCP leases for a virtual network
| name required | string Network name |
{- "status": "success",
- "data": {
- "network_name": "string",
- "leases": [
- {
- "interface": "string",
- "expiry_time": "2019-08-24T14:15:22Z",
- "type": "ipv4",
- "mac": "string",
- "iaid": "string",
- "ip_address": "string",
- "prefix": 0,
- "hostname": "string",
- "client_id": "string"
}
], - "count": 0
}
}Retrieve list of ports (VM interfaces) attached to a virtual network
| name required | string Network name |
{- "status": "success",
- "data": {
- "network_name": "string",
- "ports": [
- {
- "vm_name": "string",
- "vm_uuid": "string",
- "vm_state": "nostate",
- "interface_mac": "string",
- "interface_model": "string",
- "interface_type": "string",
- "interface_target": "string",
- "ip_address": "string",
- "attached_at": "2019-08-24T14:15:22Z"
}
], - "count": 0
}
}Retrieve list of portgroups for a virtual network
| name required | string Network name |
{- "status": "success",
- "data": {
- "portgroups": [
- {
- "name": "string",
- "default": true,
- "is_default": true
}
], - "count": 0,
- "network": "string"
}
}Add a new portgroup to a virtual network
| name required | string Network name |
| name required | string Name of the portgroup |
| default | boolean Default: false Whether this portgroup should be the default |
{- "name": "string",
- "default": false
}{- "status": "success",
- "data": {
- "name": "string",
- "default": true,
- "is_default": true
}
}Update an existing portgroup in a virtual network
| name required | string Network name |
| portgroup-name required | string Portgroup name |
| name required | string Name of the portgroup |
| default | boolean Default: false Whether this portgroup should be the default |
{- "name": "string",
- "default": false
}{- "status": "success",
- "data": {
- "name": "string",
- "default": true,
- "is_default": true
}
}Returns a unified list of all host storage adapters, including both physical HBAs (FC/SAS/NVMe PCIe) discovered from hardware and software adapters (iSCSI, future NVMe/TCP) from managed configuration. This is the primary inventory source for the frontend adapter table.
| class | string Enum: "physical" "software" Filter by adapter class |
| protocol | string Enum: "fc" "sas" "iscsi" "nvme_tcp" "pcie_nvme" "nvme_rdma" "scsi" Filter by adapter protocol |
| status | string Filter by adapter status |
{- "status": "success",
- "data": {
- "adapters": [
- {
- "id": "phy-host0",
- "name": "host0",
- "class": "physical",
- "protocol": "fc",
- "model": "QLogic QLE2742",
- "status": "online",
- "identifier": "0x5001a4a0b1c2d3e4",
- "targets_count": 2,
- "devices_count": 0,
- "source": "hardware_discovery",
- "driver": "qla2xxx",
- "pci": "0000:3b:00.0"
}, - {
- "id": "sw-iscsi-abc123",
- "name": "iscsi-primary",
- "class": "software",
- "protocol": "iscsi",
- "model": "iSCSI Software Adapter",
- "status": "configured",
- "identifier": "iqn.2024-01.com.example:storage",
- "targets_count": 0,
- "devices_count": 2,
- "capabilities": [
- "multipath",
- "chap"
], - "source": "software_config"
}
], - "count": 2
}
}Returns block devices currently mapped to the selected physical storage adapter.
| adapter_id required | string Inventory adapter identifier |
{- "status": "success",
- "data": {
- "disks": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "model": "string",
- "serial": "string",
- "type": "string",
- "drive_type": "string",
- "removable": true,
- "filesystem": "string",
- "mount_point": "string",
- "storage_pool": "string",
- "partitions": [
- {
- "name": "string",
- "path": "string",
- "size": 0,
- "type": "string",
- "filesystem": "string",
- "mount_point": "string",
- "used": 0,
- "available": 0,
- "use_percent": 0
}
]
}
], - "count": 0
}
}Triggers a host-level adapter inventory refresh (SCSI host rescan, re-enumeration of all providers) and returns a summary of discovered adapters.
{- "status": "success",
- "data": {
- "rescan": {
- "total_adapters": 4,
- "physical_count": 3,
- "software_count": 1
}
}
}This endpoint is deprecated and always returns 410 Gone. Use /api/v1/network/* to provision dedicated interfaces instead.
| name required | string Human-readable port name |
| fabric_type required | string Value: "linux_bridge" Network fabric type |
| bridge required | string Bridge interface name |
| uplink_interface required | string Physical NIC uplink |
| vlan_id | integer or null Optional VLAN tag |
| ip required | string IP address for iSCSI traffic |
| prefix required | integer Network prefix length |
| gateway | string Optional gateway address |
| mtu required | integer [ 1280 .. 9000 ] Maximum transmission unit |
| dedicated_for required | string Value: "iscsi" Port dedication purpose |
{- "name": "vmk-iscsi-01",
- "fabric_type": "linux_bridge",
- "bridge": "br-storage",
- "uplink_interface": "eth1",
- "vlan_id": 100,
- "ip": "10.0.10.1",
- "prefix": 24,
- "gateway": "10.0.10.254",
- "mtu": 9000,
- "dedicated_for": "iscsi"
}{- "status": "error"
}This endpoint is deprecated and always returns 410 Gone. Use /api/v1/network/* to update the underlying interface instead.
| port_id required | string |
| name | string |
| ip | string |
| prefix | integer |
| gateway | string |
| mtu | integer [ 1280 .. 9000 ] |
| vlan_id | integer or null |
{- "name": "string",
- "ip": "string",
- "prefix": 0,
- "gateway": "string",
- "mtu": 1280,
- "vlan_id": 0
}{- "status": "error"
}This endpoint is deprecated and always returns 410 Gone. Use /api/v1/network/* to manage the underlying interface instead.
| port_id required | string |
{- "status": "error"
}{- "status": "string",
- "data": {
- "adapter": {
- "id": "string",
- "name": "string",
- "initiator_iqn": "string",
- "mode": "single_path",
- "node_startup": "manual",
- "status": "created",
- "port_bindings": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}| name | string [ 1 .. 64 ] characters ^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,62}[A-Za-z0-9... Human-readable adapter name. If omitted or blank, the server generates iscsi-adapter-01. |
| initiator_iqn | string^iqn\.(\d{4})-(0[1-9]|1[0-2])\.[A-Za-z0-9](?:... iSCSI Qualified Name for the initiator. If omitted or blank, the server generates iqn. |
| mode | string Default: "single_path" Enum: "single_path" "multipath" Path mode for the adapter |
| node_startup | string Default: "automatic" Enum: "manual" "automatic" Startup policy for sessions |
{- "name": "iscsi-adapter-01",
- "initiator_iqn": "iqn.2026-03.node-01.example.local.mid-8de27706:iscsi-adapter-01",
- "mode": "single_path",
- "node_startup": "automatic"
}{- "status": "string",
- "data": {
- "adapter": {
- "id": "string",
- "name": "string",
- "initiator_iqn": "string",
- "mode": "single_path",
- "node_startup": "manual",
- "status": "created",
- "port_bindings": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}| name | string [ 1 .. 64 ] characters ^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,62}[A-Za-z0-9... |
| mode | string Enum: "single_path" "multipath" |
| node_startup | string Enum: "manual" "automatic" |
{- "name": "string",
- "mode": "single_path",
- "node_startup": "manual"
}{- "status": "string",
- "data": {
- "adapter": {
- "id": "string",
- "name": "string",
- "initiator_iqn": "string",
- "mode": "single_path",
- "node_startup": "manual",
- "status": "created",
- "port_bindings": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}{- "status": "success",
- "data": {
- "bindings": [
- {
- "id": "string",
- "interface_name": "string",
- "interface_address": "string",
- "port_id": "string",
- "port_name": "string",
- "port_ip": "string",
- "iface": "string",
- "status": "active",
- "created_at": "2019-08-24T14:15:22Z"
}
], - "count": 0
}
}Binds an existing host network interface to the software iSCSI adapter. Use /api/v1/network/interfaces to discover eligible interface names and the main /api/v1/network/* APIs to create bridges, VLANs, or bonds before binding them here. Single-path adapters support at most one binding. Multipath adapters require at least two bindings for login workflows.
| interface_name required | string Existing host network interface name to bind to the adapter |
| port_id | string Deprecated Deprecated legacy compatibility field |
{- "interface_name": "string",
- "port_id": "string"
}{- "status": "string",
- "data": {
- "binding": {
- "id": "string",
- "interface_name": "string",
- "interface_address": "string",
- "port_id": "string",
- "port_name": "string",
- "port_ip": "string",
- "iface": "string",
- "status": "active",
- "created_at": "2019-08-24T14:15:22Z"
}
}
}| portal | string Fallback target portal address (IP:port) used for paths without an explicit binding_portals override |
Array of objects (ISCSIBindingPortalRequest) Optional per-binding portal overrides for multipath discovery |
{- "portal": "172.16.1.2:3260",
- "binding_portals": [
- {
- "interface_name": "br_private0",
- "portal": "172.16.1.2:3260"
}
]
}{- "status": "string",
- "data": {
- "targets": [
- {
- "iqn": "iqn.2020-01.com.example:storage.lun1",
- "portal": "192.168.1.100",
- "port": 3260,
- "connected": true
}
], - "count": 0
}
}| target_iqn required | string Target IQN whose open-iscsi node record should be removed |
| portal required | string Target portal address (IP:port) for the node record to remove |
{- "target_iqn": "iqn.2022-04.world.srv:dlp.target01",
- "portal": "127.0.0.1:3260"
}{- "status": "string",
- "data": {
- "message": "string"
}
}| target_iqn required | string Target IQN to login to |
| portal | string Fallback target portal address (IP:port) used for paths without an explicit binding_portals override |
Array of objects (ISCSIBindingPortalRequest) Optional per-binding portal overrides for multipath login | |
| username | string Optional CHAP username; provide together with password |
| password | string Optional CHAP password (write-only); provide together with username |
{- "target_iqn": "iqn.2020-01.com.example:storage.lun1",
- "portal": "172.16.1.2:3260",
- "binding_portals": [
- {
- "interface_name": "br_private0",
- "portal": "172.16.1.2:3260"
}
], - "username": "string",
- "password": "string"
}{- "status": "string",
- "data": { }
}{- "status": "string",
- "data": {
- "luns": [
- {
- "lun_id": 0,
- "wwid": "string",
- "persistent_id": "string",
- "wwid_conflict": true,
- "device_path": "/dev/disk/by-id/scsi-3600508...",
- "device_node": "string",
- "size": 0,
- "vendor": "string",
- "model": "string",
- "target_iqn": "string",
- "portal": "string",
- "state": "running"
}
], - "count": 0
}
}{- "status": "success",
- "data": {
- "devices": [
- {
- "name": "string",
- "wwid": "360000000000000001",
- "dm_path": "/dev/dm-0",
- "by_id_path": "/dev/disk/by-id/dm-uuid-mpath-360000000000000001",
- "size": "100G",
- "vendor": "LIO-ORG",
- "product": "IBLOCK",
- "type": "multipath",
- "lun_id": 0,
- "storage_pool": "string",
- "policy": "round_robin",
- "priority": 0,
- "state": "active",
- "path_count": 0,
- "active_path": 0,
- "paths": [
- {
- "device": "string",
- "device_path": "/dev/sda",
- "state": "active",
- "priority": 0,
- "wwid": "string",
- "host_id": "string",
- "target_iqn": "string",
- "portal": "string"
}
]
}
], - "count": 0
}
}Returns all multipath devices with path details and health status
{- "status": "success",
- "data": {
- "devices": [
- {
- "name": "string",
- "wwid": "360000000000000001",
- "dm_path": "/dev/dm-0",
- "by_id_path": "/dev/disk/by-id/dm-uuid-mpath-360000000000000001",
- "size": "100G",
- "vendor": "LIO-ORG",
- "product": "IBLOCK",
- "type": "multipath",
- "lun_id": 0,
- "storage_pool": "string",
- "policy": "round_robin",
- "priority": 0,
- "state": "active",
- "path_count": 0,
- "active_path": 0,
- "paths": [
- {
- "device": "string",
- "device_path": "/dev/sda",
- "state": "active",
- "priority": 0,
- "wwid": "string",
- "host_id": "string",
- "target_iqn": "string",
- "portal": "string"
}
]
}
], - "count": 0
}
}| wwid required | string World Wide Identifier of the multipath device |
{- "status": "string",
- "data": {
- "device": {
- "name": "string",
- "wwid": "360000000000000001",
- "dm_path": "/dev/dm-0",
- "by_id_path": "/dev/disk/by-id/dm-uuid-mpath-360000000000000001",
- "size": "100G",
- "vendor": "LIO-ORG",
- "product": "IBLOCK",
- "type": "multipath",
- "lun_id": 0,
- "storage_pool": "string",
- "policy": "round_robin",
- "priority": 0,
- "state": "active",
- "path_count": 0,
- "active_path": 0,
- "paths": [
- {
- "device": "string",
- "device_path": "/dev/sda",
- "state": "active",
- "priority": 0,
- "wwid": "string",
- "host_id": "string",
- "target_iqn": "string",
- "portal": "string"
}
]
}
}
}| wwid required | string |
{- "status": "string",
- "data": {
- "paths": [
- {
- "device": "string",
- "device_path": "/dev/sda",
- "state": "active",
- "priority": 0,
- "wwid": "string",
- "host_id": "string",
- "target_iqn": "string",
- "portal": "string"
}
], - "count": 0
}
}Change the path selection policy for a multipath device
| wwid required | string |
| policy required | string Enum: "round_robin" "failover" Path selection policy |
{- "policy": "round_robin"
}{- "status": "error"
}Returns the running state of the multipathd daemon including device and path statistics
{- "status": "string",
- "data": {
- "status": {
- "daemon_state": "running",
- "pid": 0,
- "polling_interval": 0,
- "checker": "string",
- "config_file": "string",
- "find_multipaths": "string",
- "user_friendly_names": "string",
- "device_count": 0,
- "path_count": 0,
- "active_paths": 0,
- "faulty_paths": 0
}
}
}Returns the current defaults section from the running multipathd configuration
{- "status": "string",
- "data": {
- "defaults": {
- "polling_interval": 0,
- "path_grouping_policy": "failover",
- "path_selector": "string",
- "path_checker": "tur",
- "features": "string",
- "no_path_retry": "string",
- "rr_min_io": 0,
- "rr_min_io_rq": 0,
- "user_friendly_names": "yes",
- "find_multipaths": "yes",
- "flush_on_last_del": "yes",
- "max_fds": 0,
- "verbosity": 0
}
}
}Applies a partial update to multipath defaults via a drop-in config file and reconfigures the daemon
| polling_interval | integer |
| path_grouping_policy | string |
| path_selector | string |
| path_checker | string |
| features | string |
| no_path_retry | string |
| rr_min_io | integer |
| rr_min_io_rq | integer |
| user_friendly_names | string |
| find_multipaths | string |
| flush_on_last_del | string |
| max_fds | integer |
| verbosity | integer |
{- "polling_interval": 0,
- "path_grouping_policy": "string",
- "path_selector": "string",
- "path_checker": "string",
- "features": "string",
- "no_path_retry": "string",
- "rr_min_io": 0,
- "rr_min_io_rq": 0,
- "user_friendly_names": "string",
- "find_multipaths": "string",
- "flush_on_last_del": "string",
- "max_fds": 0,
- "verbosity": 0
}{- "status": "success",
- "data": {
- "message": "string"
}
}Returns the blacklist and blacklist_exceptions sections from the running multipathd configuration
{- "status": "string",
- "data": {
- "blacklist": {
- "devnodes": [
- "string"
], - "wwids": [
- "string"
], - "devices": [
- {
- "vendor": "string",
- "product": "string"
}
]
}, - "exceptions": {
- "devnodes": [
- "string"
], - "wwids": [
- "string"
], - "devices": [
- {
- "vendor": "string",
- "product": "string"
}
]
}
}
}Replaces the blacklist and blacklist_exceptions via a drop-in config file and reconfigures the daemon
required | object (MultipathBlacklistSection) |
required | object (MultipathBlacklistSection) |
{- "blacklist": {
- "devnodes": [
- "string"
], - "wwids": [
- "string"
], - "devices": [
- {
- "vendor": "string",
- "product": "string"
}
]
}, - "exceptions": {
- "devnodes": [
- "string"
], - "wwids": [
- "string"
], - "devices": [
- {
- "vendor": "string",
- "product": "string"
}
]
}
}{- "status": "success",
- "data": {
- "message": "string"
}
}Returns the full topology tree of multipath maps, path groups, and paths
{- "status": "string",
- "data": {
- "maps": [
- {
- "name": "string",
- "wwid": "string",
- "dm_path": "string",
- "vendor": "string",
- "product": "string",
- "size": "string",
- "features": "string",
- "queuing": "string",
- "state": "active",
- "path_groups": [
- {
- "selector": "string",
- "priority": 0,
- "status": "active",
- "paths": [
- {
- "device": "string",
- "device_path": "string",
- "host_id": "string",
- "state": "string",
- "dm_state": "string",
- "checker_state": "string",
- "priority": 0
}
]
}
]
}
], - "count": 0
}
}Creates a new OCFS2 cluster via o2cb. The cluster name must contain only alpha-numeric characters.
| name required | string Cluster name (alpha-numeric characters only) |
{- "name": "vapor"
}{- "status": "string",
- "data": {
- "message": "string",
- "cluster": "string"
}
}Returns detailed information about a specific OCFS2 cluster, including nodes and heartbeat regions.
| cluster required | string Cluster name |
{- "status": "string",
- "data": {
- "cluster": {
- "name": "vapor",
- "heartbeat_mode": "local",
- "node_count": 2,
- "nodes": [
- {
- "name": "node1",
- "cluster": "vapor",
- "number": 0,
- "ip": "192.168.1.10",
- "port": 7777
}
], - "heartbeats": [
- {
- "cluster": "vapor",
- "region": "/dev/mapper/mpathb"
}
]
}
}
}Returns the online/offline status of an OCFS2 cluster.
| cluster required | string Cluster name |
{- "status": "string",
- "data": {
- "cluster": "string",
- "online": true,
- "status": "string"
}
}Returns all nodes registered in the specified OCFS2 cluster.
| cluster required | string Cluster name |
{- "status": "string",
- "data": {
- "nodes": [
- {
- "name": "node1",
- "cluster": "vapor",
- "number": 0,
- "ip": "192.168.1.10",
- "port": 7777
}
], - "count": 0
}
}Adds a new node to the specified OCFS2 cluster. The node port defaults to 7777 if not specified.
| cluster required | string Cluster name |
| name required | string Node name |
| ip required | string IP address of the node |
| port | integer Port the node listens on (defaults to 7777) |
| number | integer Optional explicit node number assignment |
{- "name": "node1",
- "ip": "192.168.1.10",
- "port": 7777,
- "number": 0
}{- "status": "string",
- "data": {
- "message": "string",
- "node": "string",
- "cluster": "string"
}
}Returns all heartbeat regions registered for the specified OCFS2 cluster.
| cluster required | string Cluster name |
{- "status": "string",
- "data": {
- "heartbeats": [
- {
- "cluster": "vapor",
- "region": "/dev/mapper/mpathb"
}
], - "count": 0
}
}Adds a heartbeat region for a block device to the specified OCFS2 cluster.
| cluster required | string Cluster name |
| device required | string Block device path for the heartbeat region |
{- "device": "/dev/mapper/mpathb"
}{- "status": "string",
- "data": {
- "message": "string",
- "device": "string",
- "cluster": "string"
}
}Removes a heartbeat region from the specified OCFS2 cluster.
| cluster required | string Cluster name |
| device required | string Block device path for the heartbeat region |
{- "device": "/dev/mapper/mpathb"
}{- "status": "error"
}Sets the heartbeat mode (global or local) for the specified OCFS2 cluster.
| cluster required | string Cluster name |
| mode required | string Enum: "global" "local" Heartbeat mode for the cluster |
{- "mode": "global"
}{- "status": "string",
- "data": {
- "message": "string",
- "mode": "string",
- "cluster": "string"
}
}Registers the specified OCFS2 cluster with the kernel configfs interface, making it active.
| cluster required | string Cluster name |
{- "status": "string",
- "data": {
- "message": "string",
- "cluster": "string"
}
}Unregisters the specified OCFS2 cluster from the kernel configfs interface.
| cluster required | string Cluster name |
{- "status": "string",
- "data": {
- "message": "string",
- "cluster": "string"
}
}Starts the global heartbeat mechanism for the specified OCFS2 cluster.
| cluster required | string Cluster name |
{- "status": "string",
- "data": {
- "message": "string",
- "cluster": "string"
}
}Stops the global heartbeat mechanism for the specified OCFS2 cluster.
| cluster required | string Cluster name |
{- "status": "string",
- "data": {
- "message": "string",
- "cluster": "string"
}
}| username required | string |
| password | string |
| groups | string |
{- "username": "string",
- "password": "string",
- "groups": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}| username required | string |
| username required | string |
| password | string |
| groups | string |
{- "username": "string",
- "password": "string",
- "groups": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}| username required | string The username of the user whose password to reset |
| password required | string >= 6 characters New password for the user (minimum 6 characters) |
{- "password": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}| service | string Filter by service name |
| priority | string Enum: "emergency" "alert" "critical" "error" "warning" "notice" "info" "debug" Filter by priority |
| since | string Show logs since timestamp |
| until | string Show logs until timestamp |
| page | integer Default: 1 |
| page_size | integer <= 1000 Default: 100 |
{- "status": "success",
- "data": {
- "logs": [
- {
- "timestamp": "2019-08-24T14:15:22Z",
- "priority": "string",
- "unit": "string",
- "message": "string",
- "hostname": "string",
- "pid": 0
}
], - "total_count": 0,
- "page": 0,
- "page_size": 0
}
}{- "status": "success",
- "data": {
- "hostname": "string",
- "os": "string",
- "platform": "string",
- "platform_family": "string",
- "platform_version": "string",
- "kernel_version": "string",
- "uptime": 0,
- "boot_time": 0,
- "cpu_count": 0
}
}{- "status": "success",
- "data": {
- "hostname": "string",
- "architecture": "string",
- "virtualization": "string",
- "role": "string",
- "kernel_version": "string",
- "bios_manufacturer": "string",
- "bios_version": "string",
- "bios_release_date": "string",
- "motherboard_model": "string",
- "motherboard_vendor": "string",
- "board_asset_tag": "string",
- "serial_number": "string",
- "enclosure_serial": "string",
- "tag": "string",
- "other_identifying_info": "string",
- "asset_tag": "string",
- "sys_vendor": "string",
- "product_name": "string",
- "product_family": "string",
- "cpu_model": "string",
- "cpu_speed_mhz": 0.1,
- "cpu_sockets": 0,
- "cpu_cores_per_socket": 0,
- "cpu_logical_count": 0,
- "hyperthreading": true,
- "memory_total": 0,
- "memory_used": 0,
- "memory_free": 0,
- "memory_available": 0,
- "memory_used_percent": 0.1
}
}Returns firmware details for the system (BIOS, BMC/IPMI), storage adapters (SCSI hosts and NVMe controllers), and physical network adapters. Driver versions are resolved via modinfo; NIC firmware is read via ethtool.
{- "status": "success",
- "data": {
- "system": {
- "bios_manufacturer": "string",
- "bios_version": "string",
- "motherboard_model": "string",
- "bmc_firmware": "string",
- "bmc_manufacturer": "string",
- "ipmi_version": "string"
}, - "storage_adapters": [
- {
- "device": "string",
- "model": "string",
- "firmware_version": "string",
- "driver": "string",
- "driver_version": "string"
}
], - "network_adapters": [
- {
- "device": "string",
- "model": "string",
- "firmware_version": "string",
- "driver": "string",
- "driver_version": "string"
}
]
}
}Returns combined tracking information, NTP sources, and parsed configuration
{- "status": "success",
- "data": {
- "tracking": {
- "referenceId": "A59AE413",
- "referenceName": "165.154.228.19",
- "stratum": 5,
- "refTime": "string",
- "systemTime": 0.000157668,
- "lastOffset": 0.1,
- "rmsOffset": 0.1,
- "frequency": 9.05,
- "residualFreq": 0.1,
- "skew": 0.1,
- "rootDelay": 0.1,
- "rootDispersion": 0.1,
- "updateInterval": 1024,
- "leapStatus": "Normal"
}, - "sources": [
- {
- "mode": "server",
- "state": "selected",
- "name": "165.154.228.19",
- "stratum": 4,
- "poll": 10,
- "reach": 377,
- "lastRx": "197",
- "lastSample": "string",
- "offset": 0.1
}
], - "config": {
- "sources": [
- {
- "type": "server",
- "address": "string",
- "options": [
- "string"
], - "iburst": true,
- "maxSources": 0
}
], - "driftfile": "string",
- "keyfile": "string",
- "logdir": "string",
- "makestep": "1 3",
- "rtcsync": true,
- "maxupdateskew": "string"
}
}
}Returns the current NTP source list from chronyc
{- "status": "success",
- "data": {
- "sources": [
- {
- "mode": "server",
- "state": "selected",
- "name": "string",
- "stratum": 0,
- "poll": 0,
- "reach": 0,
- "lastRx": "string",
- "lastSample": "string",
- "offset": 0.1
}
]
}
}Add a new server or pool entry to chrony.conf and reload
| type required | string Enum: "server" "pool" Whether to add as a server or pool |
| address required | string NTP server hostname or IP address |
| iburst | boolean Default: false Enable iburst for faster initial sync |
| maxSources | integer [ 1 .. 16 ] Maximum sources for pool type |
{- "type": "server",
- "address": "time.google.com",
- "iburst": false,
- "maxSources": 4
}{- "status": "success",
- "data": {
- "message": "NTP server 'time.google.com' added successfully"
}
}Remove a server or pool entry from chrony.conf and reload
| address required | string Example: time.google.com NTP server hostname or IP address to remove |
{- "status": "success",
- "data": {
- "message": "NTP source 'time.google.com' removed successfully"
}
}Update chrony configuration options such as makestep, rtcsync, maxupdateskew, and logdir
| makestep | string Makestep threshold and limit (e.g. '1 3') |
| rtcsync | boolean Enable or disable kernel RTC synchronization |
| maxupdateskew | string Maximum allowed skew in ppm |
| logdir | string Chrony log directory path |
{- "makestep": "1 3",
- "rtcsync": true,
- "maxupdateskew": "100.0",
- "logdir": "/var/log/chrony"
}{- "status": "success",
- "data": {
- "message": "Chrony configuration updated successfully"
}
}Establish a WebSocket connection to receive event channels (metrics, logs, VM/storage/network events, and durable sync-events).
To subscribe: 1. Send {"type":"auth","payload":{"token":"<jwt>"}} 2. Send {"type":"subscribe","payload":{"channel":"sync-events","resume_from":18442}}
For sync-events, replay is ordered by seq and at-least-once. If host is not actively managed by Cockpit, subscribe returns an error with code=not_managed_by_cockpit. If resume_from is too old (pruned), server sends an error message with code=cursor_expired and oldest_available_seq; clients must re-fetch /api/v1/sync/snapshot and resume from snapshot_end_seq.
| token | string Authentication token |
{- "status": "error"
}Returns the current inventory snapshot used by Cockpit reconciliation and watermark cursors from a consistent-cut snapshot barrier. snapshot_start_seq and snapshot_end_seq are captured while event commits are blocked, so replaying /sync/events?after=snapshot_end_seq guarantees no missed mutations. watermark_seq is retained for backward compatibility and equals snapshot_end_seq.
{- "status": "success",
- "data": {
- "watermark_seq": 18442,
- "snapshot_start_seq": 18442,
- "snapshot_end_seq": 18442,
- "generated_at": "2019-08-24T14:15:22Z",
- "host": { },
- "vms": [
- { }
], - "networks": [
- { }
], - "storage_pools": [
- { }
], - "volumes": [
- { }
], - "vm_nic_mapping": {
- "property1": [
- { }
], - "property2": [
- { }
]
}
}, - "error": null
}Replays durable mutation events ordered by increasing global seq. The server returns only events where seq > after. Replay is at-least-once: clients should de-duplicate with (resource_type, resource_id, resource_version). For snapshots, use /sync/snapshot and replay with after=snapshot_end_seq (or watermark_seq for legacy clients).
| after | integer <int64> >= 0 Default: 0 Replay cursor. Only events with |
| limit | integer [ 1 .. 1000 ] Default: 200 Maximum events to return in this page. |
{- "status": "success",
- "data": {
- "events": [
- {
- "seq": 0,
- "resource_type": "host",
- "resource_id": "string",
- "operation": "created",
- "resource_version": 0,
- "occurred_at": "2019-08-24T14:15:22Z",
- "payload": { }
}
], - "next_after": 0,
- "has_more": true
}, - "error": null
}Claims active management ownership for this Vapor host on behalf of a Cockpit control plane. If the same owner re-claims while lease is active, the call is idempotent and renews heartbeat/lease timestamps. If a different owner holds an active lease, returns 409 owner_conflict.
| control_plane_id required | string <uuid> Cockpit |
| site_name required | string Cockpit |
{- "control_plane_id": "5869c439-9b48-401c-a9ef-46fffae045df",
- "site_name": "string"
}{- "status": "success",
- "data": {
- "claim_enabled": true,
- "lease_ttl_seconds": 180,
- "managed_status": "managed",
- "status": "claimed",
- "control_plane_id": "5869c439-9b48-401c-a9ef-46fffae045df",
- "site_name": "string",
- "claimed_at": "2019-08-24T14:15:22Z",
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "lease_expires_at": "2019-08-24T14:15:22Z",
- "claim_start_seq": 0,
- "server_time": "2019-08-24T14:15:22Z"
}, - "error": null
}Releases active management ownership for the current control plane owner. If no claim currently exists, this operation is idempotent and returns success with an unmanaged/unclaimed status. If an active claim exists, only the current owner can release it; mismatched owners return 409 owner_conflict.
| control_plane_id required | string <uuid> Cockpit |
| site_name required | string Cockpit |
{- "control_plane_id": "5869c439-9b48-401c-a9ef-46fffae045df",
- "site_name": "string"
}{- "status": "success",
- "data": {
- "claim_enabled": true,
- "lease_ttl_seconds": 180,
- "managed_status": "managed",
- "status": "claimed",
- "control_plane_id": "5869c439-9b48-401c-a9ef-46fffae045df",
- "site_name": "string",
- "claimed_at": "2019-08-24T14:15:22Z",
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "lease_expires_at": "2019-08-24T14:15:22Z",
- "claim_start_seq": 0,
- "server_time": "2019-08-24T14:15:22Z"
}, - "error": null
}Renews last_heartbeat_at and lease_expires_at for the current active owner. If no claim exists or ownership mismatches, returns conflict.
| control_plane_id required | string <uuid> Cockpit |
| site_name required | string Cockpit |
{- "control_plane_id": "5869c439-9b48-401c-a9ef-46fffae045df",
- "site_name": "string"
}{- "status": "success",
- "data": {
- "claim_enabled": true,
- "lease_ttl_seconds": 180,
- "managed_status": "managed",
- "status": "claimed",
- "control_plane_id": "5869c439-9b48-401c-a9ef-46fffae045df",
- "site_name": "string",
- "claimed_at": "2019-08-24T14:15:22Z",
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "lease_expires_at": "2019-08-24T14:15:22Z",
- "claim_start_seq": 0,
- "server_time": "2019-08-24T14:15:22Z"
}, - "error": null
}Returns current claim owner, heartbeat lease timestamps, managed status (managed, unmanaged, expired), and optional claim_start_seq.
{- "status": "success",
- "data": {
- "claim_enabled": true,
- "lease_ttl_seconds": 180,
- "managed_status": "managed",
- "status": "claimed",
- "control_plane_id": "5869c439-9b48-401c-a9ef-46fffae045df",
- "site_name": "string",
- "claimed_at": "2019-08-24T14:15:22Z",
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "lease_expires_at": "2019-08-24T14:15:22Z",
- "claim_start_seq": 0,
- "server_time": "2019-08-24T14:15:22Z"
}, - "error": null
}Establish a WebSocket connection to receive real-time system metrics.
WebSocket URL: ws://localhost:8080/ws/metrics
Authentication: Send JWT token in the first message after connection:
{
"type": "auth",
"payload": {
"token": "your-jwt-token"
}
}
Subscribe to metrics:
{
"type": "subscribe"
}
Unsubscribe from metrics:
{
"type": "unsubscribe"
}
Server messages will be in the format:
{
"type": "metric",
"metric": "cpu",
"timestamp": "2024-01-01T00:00:00Z",
"data": { ... }
}
{- "status": "error"
}Establish a WebSocket connection to receive real-time system logs.
WebSocket URL: ws://localhost:8080/ws/logs
Authentication: Send JWT token in the first message after connection:
{
"type": "auth",
"payload": {
"token": "your-jwt-token"
}
}
Subscribe Examples:
{
"type": "subscribe",
"payload": {
"filters": {
"follow": true
}
}
}
{
"type": "subscribe",
"payload": {
"filters": {
"unit": "sshd",
"priority": "info",
"follow": true
}
}
}
{
"type": "subscribe",
"payload": {
"filters": {
"unit": "kernel",
"follow": true
}
}
}
{
"type": "subscribe",
"payload": {
"filters": {
"since": "10 minutes ago",
"follow": true
}
}
}
Server Response Format:
{
"type": "data",
"payload": {
"timestamp": "2024-01-15T10:30:00Z",
"level": "info",
"unit": "sshd.service",
"message": "Accepted publickey for john from 192.168.1.100 port 52341 ssh2"
}
}
Priority Levels (from least to most severe):
debug - Debugging messagesinfo - Informational messages notice - Normal but significant messageswarning - Warning messageserror - Error messagescritical - Critical messages{- "status": "error"
}Establish a WebSocket connection for an interactive terminal session.
WebSocket URL: ws://localhost:8080/ws/terminal
Authentication: Send JWT token in the first message after connection:
{
"type": "auth",
"payload": {
"token": "your-jwt-token"
}
}
Start terminal session:
{
"type": "subscribe",
"payload": {
"cols": 80,
"rows": 24,
"shell": "/bin/bash"
}
}
Send input:
{
"type": "input",
"data": "ls -la\n"
}
Resize terminal:
{
"type": "resize",
"payload": {
"cols": 120,
"rows": 40
}
}
Server messages will be in the format:
{
"type": "output",
"data": "terminal output..."
}
{- "status": "error"
}Establish a WebSocket connection to receive event channels (metrics, logs, VM/storage/network events, and durable sync-events).
To subscribe: 1. Send {"type":"auth","payload":{"token":"<jwt>"}} 2. Send {"type":"subscribe","payload":{"channel":"sync-events","resume_from":18442}}
For sync-events, replay is ordered by seq and at-least-once. If host is not actively managed by Cockpit, subscribe returns an error with code=not_managed_by_cockpit. If resume_from is too old (pruned), server sends an error message with code=cursor_expired and oldest_available_seq; clients must re-fetch /api/v1/sync/snapshot and resume from snapshot_end_seq.
| token | string Authentication token |
{- "status": "error"
}Returns OS variants from the libosinfo database by running osinfo-query os.
This endpoint is used by the frontend to provide suggestions for:
| q | string Case-insensitive substring filter applied to short_id, name, version, distro, vendor, id. |
| family | string Filter by OS family (e.g. linux, windows). |
| limit | integer [ 0 .. 2000 ] Maximum number of results to return. |
{- "status": "success",
- "data": {
- "variants": [
- {
- "short_id": "ubuntu22.04",
- "name": "Ubuntu 22.04 LTS",
- "version": "22.04",
- "family": "linux",
- "distro": "ubuntu",
- "vendor": "Canonical Ltd.",
}
], - "count": 0
}
}Returns parsed libvirt domain capabilities (including machine types)
| arch | string Architecture to query (default derived from host) |
| virt_type | string Virtualization type (kvm or qemu) |
| machine_type | string Machine type to query for |
| emulator | string Emulator binary path to use |
| include_raw | boolean Include raw domain capabilities XML |
{- "status": "success",
- "data": {
- "emulator": "/usr/bin/qemu-system-x86_64",
- "arch": "x86_64",
- "domain": "kvm",
- "machine_types": [
- "q35",
- "pc-i440fx-7.2"
], - "enums": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "raw_xml": "string"
}
}{- "status": "success",
- "data": {
- "crds": [
- {
- "name": "string",
- "group": "string",
- "version": "string",
- "kind": "string",
- "scope": "Namespaced",
- "names": [
- "string"
], - "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "creationTimestamp": "2019-08-24T14:15:22Z"
}
]
}
}Create or update a Custom Resource Definition in the Kubernetes cluster using apply semantics. If the CRD doesn't exist, it will be created. If it exists, it will be updated.
Supports both JSON and YAML formats. If Content-Type is not specified, defaults to JSON.
{- "apiVersion": "apiextensions.k8s.io/v1",
- "kind": "CustomResourceDefinition",
- "metadata": {
- "name": "crontabs.stable.example.com"
}, - "spec": {
- "group": "stable.example.com",
- "versions": [
- {
- "name": "v1",
- "served": true,
- "storage": true,
- "schema": {
- "openAPIV3Schema": {
- "type": "object",
- "properties": {
- "spec": {
- "type": "object",
- "properties": {
- "cronSpec": {
- "type": "string"
}, - "image": {
- "type": "string"
}, - "replicas": {
- "type": "integer"
}
}
}
}
}
}
}
], - "scope": "Namespaced",
- "names": {
- "plural": "crontabs",
- "singular": "crontab",
- "kind": "CronTab",
- "shortNames": [
- "ct"
]
}
}
}{- "status": "string",
- "data": {
- "crd": { }
}
}Get detailed information about a specific Custom Resource Definition
| name required | string CRD name |
{- "status": "success",
- "data": {
- "crd": {
- "name": "string",
- "group": "string",
- "version": "string",
- "kind": "string",
- "scope": "Namespaced",
- "names": [
- "string"
], - "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "creationTimestamp": "2019-08-24T14:15:22Z",
- "spec": {
- "versions": [
- {
- "name": "string",
- "served": true,
- "storage": true,
- "schema": { }
}
], - "conversion": {
- "strategy": "string"
}, - "preserveUnknownFields": true
}
}
}
}Update an existing Custom Resource Definition in the Kubernetes cluster.
Supports both JSON and YAML formats. If Content-Type is not specified, defaults to JSON.
| name required | string CRD name |
{ }{- "status": "string",
- "data": {
- "crd": { }
}
}Update an existing Custom Resource Definition in the Kubernetes cluster.
Supports both JSON and YAML formats. If Content-Type is not specified, defaults to JSON.
| name required | string CRD name |
{ }{- "status": "string",
- "data": {
- "crd": { }
}
}List all custom resource instances for a specific CRD with complete object data. Returns full objects including metadata, spec, status, and all custom fields defined by the CRD.
| name required | string CRD name |
| namespace | string Namespace to filter objects by. If not provided, all namespaces are searched for cluster-scoped CRDs, and the default namespace is used for namespaced-scoped CRDs. |
{- "status": "success",
- "data": {
- "instances": [
- {
- "apiVersion": "stable.example.com/v1",
- "kind": "CronTab",
- "metadata": {
- "name": "my-crontab",
- "namespace": "default",
- "uid": "12345678-1234-1234-1234-123456789abc",
- "resourceVersion": "12345",
- "generation": 1,
- "creationTimestamp": "2023-01-01T00:00:00Z",
- "labels": {
- "app": "scheduler"
}
}, - "spec": {
- "cronSpec": "*/5 * * * *",
- "image": "busybox:latest",
- "replicas": 3
}, - "status": {
- "active": 2,
- "lastScheduleTime": "2023-01-01T12:00:00Z"
}
}
], - "count": 1
}
}Create a new instance of a Custom Resource Definition.
Supports both JSON and YAML request formats based on the Content-Type header:
application/json - JSON formatapplication/yaml, text/yaml - YAML formatThe namespace can be specified either:
The API will automatically set the appropriate apiVersion and kind if not provided.
| name required | string CRD name (e.g., mycrds.example.com) |
| namespace | string Namespace for the CRD instance. Required for namespaced CRDs, must be omitted for cluster-scoped CRDs. |
CRD object specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "example.com/v1",
- "kind": "MyCRD",
- "metadata": {
- "name": "my-instance"
}, - "spec": {
- "field1": "value1",
- "field2": "value2"
}
}{- "success": true,
- "data": {
- "object": { }
}
}Get a specific instance of a Custom Resource Definition.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns CRD object wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| name required | string CRD name |
| namespace required | string Namespace |
| object-name required | string Object name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "data": {
- "object": { }
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing instance of a Custom Resource Definition.
Supports both JSON and YAML request formats based on the Content-Type header:
application/json - JSON formatapplication/yaml, text/yaml - YAML formatFor namespaced CRDs, the namespace must be specified in the path. For cluster-scoped CRDs, use "-" as the namespace parameter.
The object name in the path must match the metadata.name in the request body.
| name required | string CRD name (e.g., mycrds.example.com) |
| namespace required | string Namespace of the CRD instance. Use "-" for cluster-scoped CRDs. |
| object-name required | string Name of the CRD object instance |
Updated CRD object specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "example.com/v1",
- "kind": "MyCRD",
- "metadata": {
- "name": "my-instance"
}, - "spec": {
- "field1": "updated-value1",
- "field2": "updated-value2"
}
}{- "success": true,
- "data": {
- "object": { }
}
}Partially update an existing instance of a Custom Resource Definition.
This endpoint behaves identically to PUT for CRD objects, performing a full update. Both JSON and YAML formats are supported based on the Content-Type header.
For namespaced CRDs, the namespace must be specified in the path. For cluster-scoped CRDs, use "-" as the namespace parameter.
| name required | string CRD name (e.g., mycrds.example.com) |
| namespace required | string Namespace of the CRD instance. Use "-" for cluster-scoped CRDs. |
| object-name required | string Name of the CRD object instance |
Partial or full CRD object specification in JSON or YAML format
| property name* additional property | any |
{ }{- "success": true,
- "data": {
- "object": { }
}
}Delete an existing instance of a Custom Resource Definition.
For namespaced CRDs, the namespace must be specified in the path. For cluster-scoped CRDs, use "-" as the namespace parameter.
| name required | string CRD name (e.g., mycrds.example.com) |
| namespace required | string Namespace of the CRD instance. Use "-" for cluster-scoped CRDs. |
| object-name required | string Name of the CRD object instance to delete |
{- "success": true,
- "data": {
- "message": "CRD object deleted successfully"
}
}List all pods across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "pods": [
- {
- "name": "string",
- "namespace": "string",
- "status": "string",
- "ready": "string",
- "restarts": 0,
- "age": "string",
- "ip": "string",
- "node": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create a new pod or update an existing pod using Kubernetes apply semantics.
Supports both JSON and YAML content types:
If no Content-Type is specified, JSON is assumed by default.
Pod specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "Pod",
- "metadata": {
- "name": "nginx-pod",
- "namespace": "default",
- "labels": {
- "app": "nginx"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:latest",
- "ports": [
- {
- "containerPort": 80
}
]
}
]
}
}{- "status": "success",
- "pod_detail": {
- "apiVersion": "v1",
- "kind": "Pod",
- "metadata": {
- "name": "nginx-pod",
- "namespace": "default",
- "uid": "12345678-1234-1234-1234-123456789012",
- "resourceVersion": "1234",
- "creationTimestamp": "2024-01-15T10:30:00Z",
- "labels": {
- "app": "nginx",
- "environment": "production"
}, - "annotations": {
- "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Pod\",...}\n"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21",
- "ports": [
- {
- "containerPort": 80,
- "protocol": "TCP"
}
], - "resources": {
- "limits": {
- "cpu": "1",
- "memory": "1Gi"
}, - "requests": {
- "cpu": "100m",
- "memory": "128Mi"
}
}, - "volumeMounts": [
- {
- "name": "config",
- "mountPath": "/etc/nginx"
}
]
}
], - "volumes": [
- {
- "name": "config",
- "configMap": {
- "name": "nginx-config"
}
}
], - "restartPolicy": "Always",
- "serviceAccountName": "default",
- "nodeName": "worker-node-1"
}, - "status": {
- "phase": "Running",
- "conditions": [
- {
- "type": "Ready",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:31:00Z"
}, - {
- "type": "ContainersReady",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:31:00Z"
}, - {
- "type": "PodScheduled",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:30:30Z"
}
], - "hostIP": "10.0.1.100",
- "podIP": "172.16.1.10",
- "podIPs": [
- {
- "ip": "172.16.1.10"
}
], - "startTime": "2024-01-15T10:30:30Z",
- "containerStatuses": [
- {
- "name": "nginx",
- "state": {
- "running": {
- "startedAt": "2024-01-15T10:31:00Z"
}
}, - "lastState": { },
- "ready": true,
- "restartCount": 0,
- "image": "nginx:1.21",
- "imageID": "docker://sha256:abcdef123456",
- "containerID": "docker://abcdef123456789",
- "started": true
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}List all deployments across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "deployments": [
- {
- "name": "string",
- "namespace": "string",
- "ready": "string",
- "up_to_date": 0,
- "available": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create a new Deployment or update an existing Deployment using Kubernetes apply semantics.
Deployment specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "apps/v1",
- "kind": "Deployment",
- "metadata": {
- "name": "nginx-deployment",
- "namespace": "default",
- "uid": "22345678-2234-2234-2234-223456789012",
- "resourceVersion": "5678",
- "generation": 3,
- "creationTimestamp": "2024-01-15T09:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "deployment.kubernetes.io/revision": "3"
}
}, - "spec": {
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "nginx"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "nginx"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21-alpine",
- "ports": [
- {
- "containerPort": 80
}
], - "resources": {
- "limits": {
- "cpu": "500m",
- "memory": "512Mi"
}, - "requests": {
- "cpu": "250m",
- "memory": "256Mi"
}
}
}
]
}
}, - "strategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "maxSurge": 1,
- "maxUnavailable": 1
}
}, - "minReadySeconds": 10,
- "revisionHistoryLimit": 10,
- "progressDeadlineSeconds": 600
}, - "status": {
- "observedGeneration": 3,
- "replicas": 3,
- "updatedReplicas": 3,
- "readyReplicas": 3,
- "availableReplicas": 3,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:05:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "Deployment has minimum availability."
}, - {
- "type": "Progressing",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:01:00Z",
- "reason": "NewReplicaSetAvailable",
- "message": "ReplicaSet \"nginx-deployment-6b474476c4\" has successfully progressed."
}
]
}
}{- "status": "error"
}List all services across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "services": [
- {
- "name": "string",
- "namespace": "string",
- "type": "string",
- "cluster_ip": "string",
- "external_ip": "string",
- "ports": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create a new Service or update an existing Service using Kubernetes apply semantics.
Service specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "Service",
- "metadata": {
- "name": "nginx-service",
- "namespace": "default",
- "uid": "42345678-4234-4234-4234-423456789012",
- "resourceVersion": "9999",
- "creationTimestamp": "2024-01-15T10:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "service.beta.kubernetes.io/aws-load-balancer-type": "nlb"
}
}, - "spec": {
- "type": "LoadBalancer",
- "selector": {
- "app": "nginx"
}, - "ports": [
- {
- "name": "http",
- "port": 80,
- "targetPort": 8080,
- "protocol": "TCP",
- "nodePort": 30080
}, - {
- "name": "https",
- "port": 443,
- "targetPort": 8443,
- "protocol": "TCP",
- "nodePort": 30443
}
], - "clusterIP": "10.96.0.44",
- "externalTrafficPolicy": "Cluster",
- "sessionAffinity": "None",
- "loadBalancerSourceRanges": [
- "0.0.0.0/0"
]
}, - "status": {
- "loadBalancer": {
- "ingress": [
- {
- "ip": "192.168.1.100",
- "hostname": "a1234567890abcdef.elb.us-west-2.amazonaws.com"
}
]
}, - "conditions": [
- {
- "type": "LoadBalancerReady",
- "status": "True",
- "lastTransitionTime": "2024-01-15T10:05:00Z",
- "reason": "LoadBalancerProvisioned",
- "message": "Load balancer is ready"
}
]
}
}{- "status": "error"
}List all ingresses across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "ingresses": [
- {
- "name": "string",
- "namespace": "string",
- "class": "string",
- "hosts": "string",
- "address": "string",
- "ports": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create a new Ingress or update an existing Ingress using Kubernetes apply semantics.
Ingress specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "networking.k8s.io/v1",
- "kind": "Ingress",
- "metadata": {
- "name": "app-ingress",
- "namespace": "default",
- "uid": "52345678-5234-5234-5234-523456789012",
- "resourceVersion": "11111",
- "creationTimestamp": "2024-01-15T11:00:00Z",
- "labels": {
- "app": "webapp",
- "environment": "production"
}, - "annotations": {
- "nginx.ingress.kubernetes.io/rewrite-target": "/",
- "cert-manager.io/cluster-issuer": "letsencrypt-prod",
- "nginx.ingress.kubernetes.io/ssl-redirect": "true"
}
}, - "spec": {
- "ingressClassName": "nginx",
- "tls": [
- {
- "hosts": [
- "app.example.com",
- "www.app.example.com"
], - "secretName": "app-tls-secret"
}
], - "rules": [
- {
- "host": "app.example.com",
- "http": {
- "paths": [
- {
- "path": "/api",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "api-service",
- "port": {
- "number": 8080
}
}
}
}, - {
- "path": "/",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "frontend-service",
- "port": {
- "number": 80
}
}
}
}
]
}
}, - {
- "host": "www.app.example.com",
- "http": {
- "paths": [
- {
- "path": "/",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "frontend-service",
- "port": {
- "number": 80
}
}
}
}
]
}
}
]
}, - "status": {
- "loadBalancer": {
- "ingress": [
- {
- "ip": "203.0.113.10",
- "hostname": "a234567890abcdef.elb.us-west-2.amazonaws.com"
}
]
}
}
}{- "status": "error"
}List all PVCs across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "pvcs": [
- {
- "name": "string",
- "namespace": "string",
- "status": "string",
- "volume": "string",
- "capacity": "string",
- "access_modes": "string",
- "storage_class": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create a new PVC or update an existing PVC using Kubernetes apply semantics.
PVC specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "PersistentVolumeClaim",
- "metadata": {
- "name": "postgres-pvc",
- "namespace": "database",
- "uid": "62345678-6234-6234-6234-623456789012",
- "resourceVersion": "12345",
- "creationTimestamp": "2024-01-15T07:30:00Z",
- "labels": {
- "app": "postgres",
- "environment": "production"
}, - "annotations": {
- "volume.beta.kubernetes.io/storage-provisioner": "ebs.csi.aws.com",
- "pv.kubernetes.io/bind-completed": "yes",
- "pv.kubernetes.io/bound-by-controller": "yes"
}, - "finalizers": [
- "kubernetes.io/pvc-protection"
]
}, - "spec": {
- "accessModes": [
- "ReadWriteOnce"
], - "resources": {
- "requests": {
- "storage": "20Gi"
}
}, - "storageClassName": "gp3-encrypted",
- "volumeMode": "Filesystem",
- "volumeName": "pvc-62345678-6234-6234-6234-623456789012"
}, - "status": {
- "phase": "Bound",
- "accessModes": [
- "ReadWriteOnce"
], - "capacity": {
- "storage": "20Gi"
}, - "conditions": [
- {
- "type": "Resizing",
- "status": "False",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T07:31:00Z"
}, - {
- "type": "FileSystemResizePending",
- "status": "False",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T07:31:00Z"
}
]
}
}{- "status": "error"
}List all PVs in the Kubernetes cluster
{- "status": "success",
- "data": {
- "pvs": [
- {
- "name": "string",
- "capacity": "string",
- "access_modes": "string",
- "reclaim_policy": "string",
- "status": "string",
- "claim": "string",
- "storage_class": "string",
- "reason": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create a new PV or update an existing PV using Kubernetes apply semantics.
PV specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "PersistentVolume",
- "metadata": {
- "name": "postgres-pv",
- "uid": "72345678-7234-7234-7234-723456789012",
- "resourceVersion": "56789",
- "creationTimestamp": "2024-01-15T07:00:00Z",
- "labels": {
- "type": "gp3-encrypted",
- "app": "postgres"
}, - "annotations": {
- "pv.kubernetes.io/provisioned-by": "ebs.csi.aws.com"
}, - "finalizers": [
- "kubernetes.io/pv-protection"
]
}, - "spec": {
- "capacity": {
- "storage": "20Gi"
}, - "accessModes": [
- "ReadWriteOnce"
], - "persistentVolumeReclaimPolicy": "Retain",
- "storageClassName": "gp3-encrypted",
- "mountOptions": [
- "debug"
], - "volumeMode": "Filesystem",
- "csi": {
- "driver": "ebs.csi.aws.com",
- "fsType": "ext4",
- "volumeHandle": "vol-0a1b2c3d4e5f6g7h8"
}
}, - "status": {
- "phase": "Bound",
- "reason": "",
- "message": "",
- "conditions": [
- {
- "type": "Resizing",
- "status": "False",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T07:45:00Z"
}
]
}
}{- "status": "error"
}List all secrets across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "secrets": [
- {
- "name": "string",
- "namespace": "string",
- "type": "string",
- "data": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}List all config maps across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "configmaps": [
- {
- "name": "string",
- "namespace": "string",
- "data": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}List all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "namespaces": [
- {
- "name": "string",
- "status": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create a new Namespace or update an existing one using Kubernetes apply semantics.
Namespace specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "Namespace",
- "metadata": {
- "name": "production",
- "uid": "a2345678-a234-a234-a234-a23456789012",
- "resourceVersion": "89012",
- "creationTimestamp": "2024-01-15T04:00:00Z",
- "labels": {
- "name": "production"
}
}, - "status": {
- "phase": "Active"
}
}{- "status": "error"
}List all nodes in the Kubernetes cluster
{- "status": "success",
- "data": {
- "count": 0,
- "nodes": [
- {
- "name": "string",
- "status": "string",
- "roles": "string",
- "age": "string",
- "version": "string",
- "internalIP": "string",
- "externalIP": "string",
- "os": "string",
- "kernelVersion": "string",
- "containerRuntime": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "creationTimestamp": "2019-08-24T14:15:22Z"
}
]
}
}List all daemon sets across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "daemonsets": [
- {
- "name": "string",
- "namespace": "string",
- "desired": 0,
- "current": 0,
- "ready": 0,
- "up_to_date": 0,
- "available": 0,
- "node_selector": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create or update a daemon set in the Kubernetes cluster using apply semantics. If the daemon set doesn't exist, it will be created. If it exists, it will be updated.
Supports both JSON and YAML formats. If Content-Type is not specified, defaults to JSON.
| property name* additional property | any |
{- "apiVersion": "apps/v1",
- "kind": "DaemonSet",
- "metadata": {
- "name": "fluentd-elasticsearch",
- "namespace": "kube-system"
}, - "spec": {
- "selector": {
- "matchLabels": {
- "name": "fluentd-elasticsearch"
}
}, - "template": {
- "metadata": {
- "labels": {
- "name": "fluentd-elasticsearch"
}
}, - "spec": {
- "containers": [
- {
- "name": "fluentd-elasticsearch",
- "image": "quay.io/fluentd_elasticsearch/fluentd:v2.5.2"
}
]
}
}
}
}{- "status": "success",
- "daemonset_detail": {
- "apiVersion": "apps/v1",
- "kind": "DaemonSet",
- "metadata": {
- "name": "prometheus-node-exporter",
- "namespace": "monitoring",
- "uid": "c2345678-c234-c234-c234-c23456789012",
- "resourceVersion": "91234",
- "creationTimestamp": "2024-01-15T02:00:00Z",
- "labels": {
- "app": "node-exporter",
- "environment": "production"
}
}, - "spec": {
- "selector": {
- "matchLabels": {
- "app": "node-exporter"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "node-exporter"
}
}, - "spec": {
- "containers": [
- {
- "name": "node-exporter",
- "image": "prom/node-exporter:v1.0.1",
- "resources": {
- "limits": {
- "cpu": "100m",
- "memory": "200Mi"
}, - "requests": {
- "cpu": "100m",
- "memory": "200Mi"
}
}
}
]
}
}, - "updateStrategy": {
- "type": "RollingUpdate"
}, - "minReadySeconds": 5
}, - "status": {
- "currentNumberScheduled": 5,
- "numberMisscheduled": 0,
- "desiredNumberScheduled": 5,
- "numberReady": 5,
- "observedGeneration": 1
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}List all stateful sets across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "statefulsets": [
- {
- "name": "string",
- "namespace": "string",
- "ready": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create or update a stateful set in the Kubernetes cluster using apply semantics. If the stateful set doesn't exist, it will be created. If it exists, it will be updated.
Supports both JSON and YAML formats. If Content-Type is not specified, defaults to JSON.
| property name* additional property | any |
{- "apiVersion": "apps/v1",
- "kind": "StatefulSet",
- "metadata": {
- "name": "web",
- "namespace": "default"
}, - "spec": {
- "serviceName": "nginx",
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "nginx"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "nginx"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.14.2",
- "ports": [
- {
- "containerPort": 80,
- "name": "web"
}
]
}
]
}
}, - "volumeClaimTemplates": [
- {
- "metadata": {
- "name": "www"
}, - "spec": {
- "accessModes": [
- "ReadWriteOnce"
], - "resources": {
- "requests": {
- "storage": "1Gi"
}
}
}
}
]
}
}{- "status": "success",
- "statefulset_detail": {
- "apiVersion": "apps/v1",
- "kind": "StatefulSet",
- "metadata": {
- "name": "postgres-statefulset",
- "namespace": "database",
- "uid": "32345678-3234-3234-3234-323456789012",
- "resourceVersion": "8901",
- "generation": 2,
- "creationTimestamp": "2024-01-15T08:00:00Z",
- "labels": {
- "app": "postgres",
- "tier": "database"
}
}, - "spec": {
- "serviceName": "postgres-service",
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "postgres"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "postgres"
}
}, - "spec": {
- "containers": [
- {
- "name": "postgres",
- "image": "postgres:14.5",
- "ports": [
- {
- "containerPort": 5432,
- "name": "postgres"
}
], - "env": [
- {
- "name": "POSTGRES_DB",
- "value": "mydb"
}, - {
- "name": "POSTGRES_USER",
- "value": "myuser"
}, - {
- "name": "POSTGRES_PASSWORD",
- "valueFrom": {
- "secretKeyRef": {
- "name": "postgres-secret",
- "key": "password"
}
}
}
], - "volumeMounts": [
- {
- "name": "postgres-storage",
- "mountPath": "/var/lib/postgresql/data"
}
]
}
]
}
}, - "volumeClaimTemplates": [
- {
- "metadata": {
- "name": "postgres-storage"
}, - "spec": {
- "accessModes": [
- "ReadWriteOnce"
], - "storageClassName": "fast-ssd",
- "resources": {
- "requests": {
- "storage": "10Gi"
}
}
}
}
], - "updateStrategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "partition": 0
}
}, - "podManagementPolicy": "OrderedReady",
- "persistentVolumeClaimRetentionPolicy": {
- "whenDeleted": "Retain",
- "whenScaled": "Retain"
}
}, - "status": {
- "observedGeneration": 2,
- "replicas": 3,
- "readyReplicas": 3,
- "currentReplicas": 3,
- "updatedReplicas": 3,
- "currentRevision": "postgres-statefulset-6d4cf56b5f",
- "updateRevision": "postgres-statefulset-6d4cf56b5f",
- "collisionCount": 0,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastTransitionTime": "2024-01-15T08:10:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "StatefulSet has minimum availability."
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}List all jobs across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "jobs": [
- {
- "name": "string",
- "namespace": "string",
- "completions": "string",
- "duration": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create or update a job in the Kubernetes cluster using apply semantics. If the job doesn't exist, it will be created. If it exists, it will be updated.
Supports both JSON and YAML formats. If Content-Type is not specified, defaults to JSON.
| property name* additional property | any |
{- "apiVersion": "batch/v1",
- "kind": "Job",
- "metadata": {
- "name": "pi",
- "namespace": "default"
}, - "spec": {
- "template": {
- "spec": {
- "containers": [
- {
- "name": "pi",
- "image": "perl:5.34.0",
- "command": [
- "perl",
- "-Mbignum=bpi",
- "-wle",
- "print bpi(2000)"
]
}
], - "restartPolicy": "Never"
}
}, - "backoffLimit": 4
}
}{- "status": "success",
- "job_detail": {
- "apiVersion": "batch/v1",
- "kind": "Job",
- "metadata": {
- "name": "backup-job",
- "namespace": "backup",
- "uid": "d2345678-d234-d234-d234-d23456789012",
- "resourceVersion": "92345",
- "creationTimestamp": "2024-01-15T01:00:00Z",
- "labels": {
- "batch": "backup",
- "environment": "production"
}
}, - "spec": {
- "template": {
- "metadata": {
- "labels": {
- "batch": "backup"
}
}, - "spec": {
- "containers": [
- {
- "name": "backup-container",
- "image": "myorg/backup:1.0",
- "command": [
- "/bin/sh",
- "-c",
- "echo Backup started..."
]
}
], - "restartPolicy": "Never"
}
}, - "backoffLimit": 3
}, - "status": {
- "conditions": [
- {
- "type": "Complete",
- "status": "True",
- "lastProbeTime": "2024-01-15T01:20:00Z",
- "lastTransitionTime": "2024-01-15T01:15:00Z"
}
], - "startTime": "2024-01-15T01:00:00Z",
- "completionTime": "2024-01-15T01:30:00Z",
- "succeeded": 1
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}List all cron jobs across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "cronjobs": [
- {
- "name": "string",
- "namespace": "string",
- "schedule": "string",
- "suspend": true,
- "active": 0,
- "last_schedule": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
]
}
}Create or update a cron job in the Kubernetes cluster using apply semantics. If the cron job doesn't exist, it will be created. If it exists, it will be updated.
Supports both JSON and YAML formats. If Content-Type is not specified, defaults to JSON.
| property name* additional property | any |
{- "apiVersion": "batch/v1",
- "kind": "CronJob",
- "metadata": {
- "name": "hello",
- "namespace": "default"
}, - "spec": {
- "schedule": "*/1 * * * *",
- "jobTemplate": {
- "spec": {
- "template": {
- "spec": {
- "containers": [
- {
- "name": "hello",
- "image": "busybox:1.28",
- "command": [
- "/bin/sh",
- "-c",
- "date; echo Hello from the Kubernetes cluster"
]
}
], - "restartPolicy": "OnFailure"
}
}
}
}
}
}{- "status": "success",
- "cronjob_detail": {
- "apiVersion": "batch/v1",
- "kind": "CronJob",
- "metadata": {
- "name": "database-backup",
- "namespace": "backups",
- "uid": "e2345678-e234-e234-e234-e23456789012",
- "resourceVersion": "93456",
- "creationTimestamp": "2024-01-14T23:00:00Z",
- "labels": {
- "batch": "cron-job",
- "environment": "production"
}
}, - "spec": {
- "schedule": "0 1 * * *",
- "jobTemplate": {
- "spec": {
- "template": {
- "metadata": {
- "labels": {
- "batch": "cron-job"
}
}, - "spec": {
- "containers": [
- {
- "name": "backup-container",
- "image": "myorg/backup:1.0",
- "command": [
- "/bin/sh",
- "-c",
- "echo Performing backup..."
]
}
], - "restartPolicy": "OnFailure"
}
}
}
}, - "successfulJobsHistoryLimit": 3,
- "failedJobsHistoryLimit": 1
}, - "status": {
- "lastScheduleTime": "2024-01-19T01:00:00Z",
- "active": [
- {
- "name": "database-backup-273987",
- "namespace": "backups",
- "uid": "f2345678-f234-f234-f234-f23456789012"
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Get basic information about the Kubernetes cluster
{- "status": "success",
- "data": {
- "cluster": {
- "version": "string",
- "platform": "string",
- "nodes": 0,
- "namespaces": 0,
- "pods": 0,
- "services": 0
}
}
}List all ingress classes in the Kubernetes cluster
{- "status": "success",
- "data": {
- "ingressClasses": [
- {
- "name": "string",
- "controller": "string",
- "parameters": {
- "apiGroup": "string",
- "kind": "string",
- "name": "string"
}, - "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0
}
}Create a new IngressClass or update an existing IngressClass using Kubernetes apply semantics.
IngressClass specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "networking.k8s.io/v1",
- "kind": "IngressClass",
- "metadata": {
- "name": "nginx",
- "uid": "f3345678-f334-f334-f334-f33456789012",
- "resourceVersion": "94567",
- "creationTimestamp": "2024-01-14T22:00:00Z",
- "labels": {
- "app.kubernetes.io/component": "controller",
- "app.kubernetes.io/instance": "nginx",
- "app.kubernetes.io/name": "ingress-nginx"
}, - "annotations": {
- "ingressclass.kubernetes.io/is-default-class": "true"
}
}, - "spec": {
- "controller": "k8s.io/ingress-nginx",
- "parameters": {
- "apiGroup": "v1",
- "kind": "ConfigMap",
- "name": "nginx-load-balancer-microk8s-conf",
- "namespace": "ingress"
}
}
}{- "status": "error"
}Get detailed information about a specific IngressClass.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns IngressClass wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| name required | string IngressClass name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "ingressclass_detail": {
- "apiVersion": "networking.k8s.io/v1",
- "kind": "IngressClass",
- "metadata": {
- "name": "nginx",
- "uid": "f3345678-f334-f334-f334-f33456789012",
- "resourceVersion": "94567",
- "creationTimestamp": "2024-01-14T22:00:00Z",
- "labels": {
- "app.kubernetes.io/component": "controller",
- "app.kubernetes.io/instance": "nginx",
- "app.kubernetes.io/name": "ingress-nginx"
}, - "annotations": {
- "ingressclass.kubernetes.io/is-default-class": "true"
}
}, - "spec": {
- "controller": "k8s.io/ingress-nginx",
- "parameters": {
- "apiGroup": "v1",
- "kind": "ConfigMap",
- "name": "nginx-load-balancer-microk8s-conf",
- "namespace": "ingress"
}
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing IngressClass
| name required | string IngressClass name |
IngressClass specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "networking.k8s.io/v1",
- "kind": "IngressClass",
- "metadata": {
- "name": "nginx",
- "uid": "f3345678-f334-f334-f334-f33456789012",
- "resourceVersion": "94567",
- "creationTimestamp": "2024-01-14T22:00:00Z",
- "labels": {
- "app.kubernetes.io/component": "controller",
- "app.kubernetes.io/instance": "nginx",
- "app.kubernetes.io/name": "ingress-nginx"
}, - "annotations": {
- "ingressclass.kubernetes.io/is-default-class": "true"
}
}, - "spec": {
- "controller": "k8s.io/ingress-nginx",
- "parameters": {
- "apiGroup": "v1",
- "kind": "ConfigMap",
- "name": "nginx-load-balancer-microk8s-conf",
- "namespace": "ingress"
}
}
}{- "status": "error"
}List all network policies across all namespaces in the Kubernetes cluster
{- "status": "success",
- "data": {
- "networkPolicies": [
- {
- "name": "string",
- "namespace": "string",
- "pod_selector": {
- "property1": "string",
- "property2": "string"
}, - "policy_types": [
- "Ingress"
], - "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0
}
}Create a new NetworkPolicy or update an existing NetworkPolicy using Kubernetes apply semantics.
NetworkPolicy specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "networking.k8s.io/v1",
- "kind": "NetworkPolicy",
- "metadata": {
- "name": "web-deny-all",
- "namespace": "default",
- "uid": "f4345678-f434-f434-f434-f43456789012",
- "resourceVersion": "95678",
- "creationTimestamp": "2024-01-14T21:00:00Z",
- "labels": {
- "app": "web",
- "environment": "production"
}
}, - "spec": {
- "podSelector": {
- "matchLabels": {
- "app": "web"
}
}, - "policyTypes": [
- "Ingress",
- "Egress"
], - "ingress": [
- {
- "from": [
- {
- "namespaceSelector": {
- "matchLabels": {
- "name": "production"
}
}
}, - {
- "podSelector": {
- "matchLabels": {
- "role": "frontend"
}
}
}
], - "ports": [
- {
- "protocol": "TCP",
- "port": 80
}
]
}
], - "egress": [
- {
- "to": [
- {
- "podSelector": {
- "matchLabels": {
- "role": "database"
}
}
}
], - "ports": [
- {
- "protocol": "TCP",
- "port": 5432
}
]
}
]
}
}{- "status": "error"
}Get detailed information about a specific NetworkPolicy in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns NetworkPolicy wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string NetworkPolicy namespace |
| name required | string NetworkPolicy name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "networkpolicy_detail": {
- "apiVersion": "networking.k8s.io/v1",
- "kind": "NetworkPolicy",
- "metadata": {
- "name": "web-deny-all",
- "namespace": "default",
- "uid": "f4345678-f434-f434-f434-f43456789012",
- "resourceVersion": "95678",
- "creationTimestamp": "2024-01-14T21:00:00Z",
- "labels": {
- "app": "web",
- "environment": "production"
}
}, - "spec": {
- "podSelector": {
- "matchLabels": {
- "app": "web"
}
}, - "policyTypes": [
- "Ingress",
- "Egress"
], - "ingress": [
- {
- "from": [
- {
- "namespaceSelector": {
- "matchLabels": {
- "name": "production"
}
}
}, - {
- "podSelector": {
- "matchLabels": {
- "role": "frontend"
}
}
}
], - "ports": [
- {
- "protocol": "TCP",
- "port": 80
}
]
}
], - "egress": [
- {
- "to": [
- {
- "podSelector": {
- "matchLabels": {
- "role": "database"
}
}
}
], - "ports": [
- {
- "protocol": "TCP",
- "port": 5432
}
]
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing NetworkPolicy
| namespace required | string NetworkPolicy namespace |
| name required | string NetworkPolicy name |
NetworkPolicy specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "networking.k8s.io/v1",
- "kind": "NetworkPolicy",
- "metadata": {
- "name": "web-deny-all",
- "namespace": "default",
- "uid": "f4345678-f434-f434-f434-f43456789012",
- "resourceVersion": "95678",
- "creationTimestamp": "2024-01-14T21:00:00Z",
- "labels": {
- "app": "web",
- "environment": "production"
}
}, - "spec": {
- "podSelector": {
- "matchLabels": {
- "app": "web"
}
}, - "policyTypes": [
- "Ingress",
- "Egress"
], - "ingress": [
- {
- "from": [
- {
- "namespaceSelector": {
- "matchLabels": {
- "name": "production"
}
}
}, - {
- "podSelector": {
- "matchLabels": {
- "role": "frontend"
}
}
}
], - "ports": [
- {
- "protocol": "TCP",
- "port": 80
}
]
}
], - "egress": [
- {
- "to": [
- {
- "podSelector": {
- "matchLabels": {
- "role": "database"
}
}
}
], - "ports": [
- {
- "protocol": "TCP",
- "port": 5432
}
]
}
]
}
}{- "status": "error"
}Delete a specific network policy from a namespace
| namespace required | string NetworkPolicy namespace |
| name required | string NetworkPolicy name |
{- "status": "success",
- "data": {
- "message": "string"
}
}List all pods in the specified namespace
| namespace required | string The namespace to list pods from |
{- "success": true,
- "data": {
- "pods": [
- {
- "name": "string",
- "namespace": "string",
- "status": "string",
- "ready": "string",
- "restarts": 0,
- "age": "string",
- "ip": "string",
- "node": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all deployments in the specified namespace
| namespace required | string The namespace to list deployments from |
{- "success": true,
- "data": {
- "deployments": [
- {
- "name": "string",
- "namespace": "string",
- "ready": "string",
- "up_to_date": 0,
- "available": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all services in the specified namespace
| namespace required | string The namespace to list services from |
{- "success": true,
- "data": {
- "services": [
- {
- "name": "string",
- "namespace": "string",
- "type": "string",
- "cluster_ip": "string",
- "external_ip": "string",
- "ports": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all ingresses in the specified namespace
| namespace required | string The namespace to list ingresses from |
{- "success": true,
- "data": {
- "ingresses": [
- {
- "name": "string",
- "namespace": "string",
- "class": "string",
- "hosts": "string",
- "address": "string",
- "ports": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all persistent in the specified namespace
| namespace required | string The namespace to list persistent from |
{- "success": true,
- "data": {
- "persistentvolumeclaims": [
- {
- "name": "string",
- "namespace": "string",
- "status": "string",
- "volume": "string",
- "capacity": "string",
- "access_modes": "string",
- "storage_class": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all secrets in the specified namespace
| namespace required | string The namespace to list secrets from |
{- "success": true,
- "data": {
- "secrets": [
- {
- "name": "string",
- "namespace": "string",
- "type": "string",
- "data": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all config in the specified namespace
| namespace required | string The namespace to list config from |
{- "success": true,
- "data": {
- "configmaps": [
- {
- "name": "string",
- "namespace": "string",
- "data": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all daemon in the specified namespace
| namespace required | string The namespace to list daemon from |
{- "success": true,
- "data": {
- "daemonsets": [
- {
- "name": "string",
- "namespace": "string",
- "desired": 0,
- "current": 0,
- "ready": 0,
- "up_to_date": 0,
- "available": 0,
- "node_selector": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all stateful in the specified namespace
| namespace required | string The namespace to list stateful from |
{- "success": true,
- "data": {
- "statefulsets": [
- {
- "name": "string",
- "namespace": "string",
- "ready": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all jobs in the specified namespace
| namespace required | string The namespace to list jobs from |
{- "success": true,
- "data": {
- "jobs": [
- {
- "name": "string",
- "namespace": "string",
- "completions": "string",
- "duration": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all cron in the specified namespace
| namespace required | string The namespace to list cron from |
{- "success": true,
- "data": {
- "cronjobs": [
- {
- "name": "string",
- "namespace": "string",
- "schedule": "string",
- "suspend": true,
- "active": 0,
- "last_schedule": "string",
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all network in the specified namespace
| namespace required | string The namespace to list network from |
{- "success": true,
- "data": {
- "networkpolicies": [
- {
- "name": "string",
- "namespace": "string",
- "pod_selector": {
- "property1": "string",
- "property2": "string"
}, - "policy_types": [
- "Ingress"
], - "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "annotations": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all replica in the specified namespace
| namespace required | string The namespace to list replica from |
{- "success": true,
- "data": {
- "replicasets": [
- {
- "name": "string",
- "namespace": "string",
- "desired": 0,
- "current": 0,
- "ready": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all service in the specified namespace
| namespace required | string The namespace to list service from |
{- "success": true,
- "data": {
- "serviceaccounts": [
- {
- "name": "string",
- "namespace": "string",
- "secrets": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all roles in the specified namespace
| namespace required | string The namespace to list roles from |
{- "success": true,
- "data": {
- "roles": [
- {
- "name": "string",
- "namespace": "string",
- "rules": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all role in the specified namespace
| namespace required | string The namespace to list role from |
{- "success": true,
- "data": {
- "rolebindings": [
- {
- "name": "string",
- "namespace": "string",
- "roleRef": "string",
- "subjects": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}List all horizontal in the specified namespace
| namespace required | string The namespace to list horizontal from |
{- "success": true,
- "data": {
- "horizontalpodautoscalers": [
- {
- "name": "string",
- "namespace": "string",
- "reference": "string",
- "minReplicas": 0,
- "maxReplicas": 0,
- "currentReplicas": 0,
- "age": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}
}
], - "count": 0,
- "namespace": "string"
}
}Get detailed information about a specific pod in a namespace
| namespace required | string Pod namespace |
| name required | string Pod name |
{- "status": "success",
- "pod_detail": {
- "apiVersion": "v1",
- "kind": "Pod",
- "metadata": {
- "name": "nginx-pod",
- "namespace": "default",
- "uid": "12345678-1234-1234-1234-123456789012",
- "resourceVersion": "1234",
- "creationTimestamp": "2024-01-15T10:30:00Z",
- "labels": {
- "app": "nginx",
- "environment": "production"
}, - "annotations": {
- "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Pod\",...}\n"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21",
- "ports": [
- {
- "containerPort": 80,
- "protocol": "TCP"
}
], - "resources": {
- "limits": {
- "cpu": "1",
- "memory": "1Gi"
}, - "requests": {
- "cpu": "100m",
- "memory": "128Mi"
}
}, - "volumeMounts": [
- {
- "name": "config",
- "mountPath": "/etc/nginx"
}
]
}
], - "volumes": [
- {
- "name": "config",
- "configMap": {
- "name": "nginx-config"
}
}
], - "restartPolicy": "Always",
- "serviceAccountName": "default",
- "nodeName": "worker-node-1"
}, - "status": {
- "phase": "Running",
- "conditions": [
- {
- "type": "Ready",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:31:00Z"
}, - {
- "type": "ContainersReady",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:31:00Z"
}, - {
- "type": "PodScheduled",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:30:30Z"
}
], - "hostIP": "10.0.1.100",
- "podIP": "172.16.1.10",
- "podIPs": [
- {
- "ip": "172.16.1.10"
}
], - "startTime": "2024-01-15T10:30:30Z",
- "containerStatuses": [
- {
- "name": "nginx",
- "state": {
- "running": {
- "startedAt": "2024-01-15T10:31:00Z"
}
}, - "lastState": { },
- "ready": true,
- "restartCount": 0,
- "image": "nginx:1.21",
- "imageID": "docker://sha256:abcdef123456",
- "containerID": "docker://abcdef123456789",
- "started": true
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing Pod
| namespace required | string Pod namespace |
| name required | string Pod name |
Pod specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "Pod",
- "metadata": {
- "name": "nginx-pod",
- "namespace": "default",
- "uid": "12345678-1234-1234-1234-123456789012",
- "resourceVersion": "1234",
- "creationTimestamp": "2024-01-15T10:30:00Z",
- "labels": {
- "app": "nginx",
- "environment": "production"
}, - "annotations": {
- "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Pod\",...}\n"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21",
- "ports": [
- {
- "containerPort": 80,
- "protocol": "TCP"
}
], - "resources": {
- "limits": {
- "cpu": "1",
- "memory": "1Gi"
}, - "requests": {
- "cpu": "100m",
- "memory": "128Mi"
}
}, - "volumeMounts": [
- {
- "name": "config",
- "mountPath": "/etc/nginx"
}
]
}
], - "volumes": [
- {
- "name": "config",
- "configMap": {
- "name": "nginx-config"
}
}
], - "restartPolicy": "Always",
- "serviceAccountName": "default",
- "nodeName": "worker-node-1"
}, - "status": {
- "phase": "Running",
- "conditions": [
- {
- "type": "Ready",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:31:00Z"
}, - {
- "type": "ContainersReady",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:31:00Z"
}, - {
- "type": "PodScheduled",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:30:30Z"
}
], - "hostIP": "10.0.1.100",
- "podIP": "172.16.1.10",
- "podIPs": [
- {
- "ip": "172.16.1.10"
}
], - "startTime": "2024-01-15T10:30:30Z",
- "containerStatuses": [
- {
- "name": "nginx",
- "state": {
- "running": {
- "startedAt": "2024-01-15T10:31:00Z"
}
}, - "lastState": { },
- "ready": true,
- "restartCount": 0,
- "image": "nginx:1.21",
- "imageID": "docker://sha256:abcdef123456",
- "containerID": "docker://abcdef123456789",
- "started": true
}
]
}
}{- "status": "error"
}Update one or more container images in a Pod specification.
Important limitations:
For running Pods, you must:
This is equivalent to running:
kubectl set image pod/{name} container1=image1 container2=image2 -n {namespace}
Note: Unlike workload resources (Deployments, StatefulSets, DaemonSets), Pods do not support rollout operations like restart or undo since they are not managed by a controller and don't maintain revision history.
| namespace required | string Example: default Pod namespace |
| name required | string Example: standalone-pod Pod name |
Array of container name to image mappings. Each object in the array should have a single key-value pair where:
Note: This operation does not support updating init container images.
| property name* additional property | string |
[- {
- "nginx": "nginx:1.21.0"
}, - {
- "sidecar": "busybox:1.35.0"
}
]{- "success": true,
- "message": "Successfully updated images for Pod default/standalone-pod",
- "warning": "Pod image update was applied to the specification, but the Pod must be deleted and recreated for changes to take effect.",
- "updated_images": {
- "nginx": "nginx:1.21.0",
- "sidecar": "busybox:1.35.0"
}, - "pod": {
- "apiVersion": "v1",
- "kind": "Pod",
- "metadata": {
- "name": "nginx-pod",
- "namespace": "default",
- "uid": "12345678-1234-1234-1234-123456789012",
- "resourceVersion": "1234",
- "creationTimestamp": "2024-01-15T10:30:00Z",
- "labels": {
- "app": "nginx",
- "environment": "production"
}, - "annotations": {
- "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Pod\",...}\n"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21",
- "ports": [
- {
- "containerPort": 80,
- "protocol": "TCP"
}
], - "resources": {
- "limits": {
- "cpu": "1",
- "memory": "1Gi"
}, - "requests": {
- "cpu": "100m",
- "memory": "128Mi"
}
}, - "volumeMounts": [
- {
- "name": "config",
- "mountPath": "/etc/nginx"
}
]
}
], - "volumes": [
- {
- "name": "config",
- "configMap": {
- "name": "nginx-config"
}
}
], - "restartPolicy": "Always",
- "serviceAccountName": "default",
- "nodeName": "worker-node-1"
}, - "status": {
- "phase": "Running",
- "conditions": [
- {
- "type": "Ready",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:31:00Z"
}, - {
- "type": "ContainersReady",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:31:00Z"
}, - {
- "type": "PodScheduled",
- "status": "True",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T10:30:30Z"
}
], - "hostIP": "10.0.1.100",
- "podIP": "172.16.1.10",
- "podIPs": [
- {
- "ip": "172.16.1.10"
}
], - "startTime": "2024-01-15T10:30:30Z",
- "containerStatuses": [
- {
- "name": "nginx",
- "state": {
- "running": {
- "startedAt": "2024-01-15T10:31:00Z"
}
}, - "lastState": { },
- "ready": true,
- "restartCount": 0,
- "image": "nginx:1.21",
- "imageID": "docker://sha256:abcdef123456",
- "containerID": "docker://abcdef123456789",
- "started": true
}
]
}
}
}Retrieve logs from a specific pod
| namespace required | string Pod namespace |
| name required | string Pod name |
| follow | boolean Default: false Follow the log output |
| lines | integer Default: 100 Number of lines to retrieve from the end of the logs |
{- "status": "success",
- "logs": "string"
}Get detailed information about a specific deployment in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns deployment wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string Deployment namespace |
| name required | string Deployment name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "deployment_detail": {
- "apiVersion": "apps/v1",
- "kind": "Deployment",
- "metadata": {
- "name": "nginx-deployment",
- "namespace": "default",
- "uid": "22345678-2234-2234-2234-223456789012",
- "resourceVersion": "5678",
- "generation": 3,
- "creationTimestamp": "2024-01-15T09:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "deployment.kubernetes.io/revision": "3"
}
}, - "spec": {
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "nginx"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "nginx"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21-alpine",
- "ports": [
- {
- "containerPort": 80
}
], - "resources": {
- "limits": {
- "cpu": "500m",
- "memory": "512Mi"
}, - "requests": {
- "cpu": "250m",
- "memory": "256Mi"
}
}
}
]
}
}, - "strategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "maxSurge": 1,
- "maxUnavailable": 1
}
}, - "minReadySeconds": 10,
- "revisionHistoryLimit": 10,
- "progressDeadlineSeconds": 600
}, - "status": {
- "observedGeneration": 3,
- "replicas": 3,
- "updatedReplicas": 3,
- "readyReplicas": 3,
- "availableReplicas": 3,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:05:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "Deployment has minimum availability."
}, - {
- "type": "Progressing",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:01:00Z",
- "reason": "NewReplicaSetAvailable",
- "message": "ReplicaSet \"nginx-deployment-6b474476c4\" has successfully progressed."
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing Deployment
| namespace required | string Deployment namespace |
| name required | string Deployment name |
Deployment specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "apps/v1",
- "kind": "Deployment",
- "metadata": {
- "name": "nginx-deployment",
- "namespace": "default",
- "uid": "22345678-2234-2234-2234-223456789012",
- "resourceVersion": "5678",
- "generation": 3,
- "creationTimestamp": "2024-01-15T09:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "deployment.kubernetes.io/revision": "3"
}
}, - "spec": {
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "nginx"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "nginx"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21-alpine",
- "ports": [
- {
- "containerPort": 80
}
], - "resources": {
- "limits": {
- "cpu": "500m",
- "memory": "512Mi"
}, - "requests": {
- "cpu": "250m",
- "memory": "256Mi"
}
}
}
]
}
}, - "strategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "maxSurge": 1,
- "maxUnavailable": 1
}
}, - "minReadySeconds": 10,
- "revisionHistoryLimit": 10,
- "progressDeadlineSeconds": 600
}, - "status": {
- "observedGeneration": 3,
- "replicas": 3,
- "updatedReplicas": 3,
- "readyReplicas": 3,
- "availableReplicas": 3,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:05:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "Deployment has minimum availability."
}, - {
- "type": "Progressing",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:01:00Z",
- "reason": "NewReplicaSetAvailable",
- "message": "ReplicaSet \"nginx-deployment-6b474476c4\" has successfully progressed."
}
]
}
}{- "status": "error"
}Trigger a rolling restart of all pods managed by a deployment.
This operation works by adding or updating a restart annotation
(kubectl.kubernetes.io/restartedAt) on the deployment's pod template,
which triggers Kubernetes to perform a rolling update with new pods.
This is equivalent to running:
kubectl rollout restart deployment/{name} -n {namespace}
| namespace required | string Example: default Deployment namespace |
| name required | string Example: nginx-deployment Deployment name |
{- "success": true,
- "message": "Deployment default/nginx-deployment has been restarted",
- "deployment": {
- "apiVersion": "apps/v1",
- "kind": "Deployment",
- "metadata": {
- "name": "nginx-deployment",
- "namespace": "default",
- "uid": "22345678-2234-2234-2234-223456789012",
- "resourceVersion": "5678",
- "generation": 3,
- "creationTimestamp": "2024-01-15T09:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "deployment.kubernetes.io/revision": "3"
}
}, - "spec": {
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "nginx"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "nginx"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21-alpine",
- "ports": [
- {
- "containerPort": 80
}
], - "resources": {
- "limits": {
- "cpu": "500m",
- "memory": "512Mi"
}, - "requests": {
- "cpu": "250m",
- "memory": "256Mi"
}
}
}
]
}
}, - "strategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "maxSurge": 1,
- "maxUnavailable": 1
}
}, - "minReadySeconds": 10,
- "revisionHistoryLimit": 10,
- "progressDeadlineSeconds": 600
}, - "status": {
- "observedGeneration": 3,
- "replicas": 3,
- "updatedReplicas": 3,
- "readyReplicas": 3,
- "availableReplicas": 3,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:05:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "Deployment has minimum availability."
}, - {
- "type": "Progressing",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:01:00Z",
- "reason": "NewReplicaSetAvailable",
- "message": "ReplicaSet \"nginx-deployment-6b474476c4\" has successfully progressed."
}
]
}
}
}Rollback a deployment to its previous revision.
This operation retrieves the previous revision from the deployment's ReplicaSets and updates the deployment to use the pod template from that previous revision. The rollback triggers a rolling update to replace current pods with pods from the previous configuration.
This is equivalent to running:
kubectl rollout undo deployment/{name} -n {namespace}
Note: This operation requires at least one previous revision to exist. If the deployment has never been updated, the rollback will fail.
| namespace required | string Example: default Deployment namespace |
| name required | string Example: nginx-deployment Deployment name |
{- "success": true,
- "message": "Deployment default/nginx-deployment has been rolled back to revision 2",
- "deployment": {
- "apiVersion": "apps/v1",
- "kind": "Deployment",
- "metadata": {
- "name": "nginx-deployment",
- "namespace": "default",
- "uid": "22345678-2234-2234-2234-223456789012",
- "resourceVersion": "5678",
- "generation": 3,
- "creationTimestamp": "2024-01-15T09:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "deployment.kubernetes.io/revision": "3"
}
}, - "spec": {
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "nginx"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "nginx"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21-alpine",
- "ports": [
- {
- "containerPort": 80
}
], - "resources": {
- "limits": {
- "cpu": "500m",
- "memory": "512Mi"
}, - "requests": {
- "cpu": "250m",
- "memory": "256Mi"
}
}
}
]
}
}, - "strategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "maxSurge": 1,
- "maxUnavailable": 1
}
}, - "minReadySeconds": 10,
- "revisionHistoryLimit": 10,
- "progressDeadlineSeconds": 600
}, - "status": {
- "observedGeneration": 3,
- "replicas": 3,
- "updatedReplicas": 3,
- "readyReplicas": 3,
- "availableReplicas": 3,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:05:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "Deployment has minimum availability."
}, - {
- "type": "Progressing",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:01:00Z",
- "reason": "NewReplicaSetAvailable",
- "message": "ReplicaSet \"nginx-deployment-6b474476c4\" has successfully progressed."
}
]
}
}
}Update one or more container images in a deployment.
This operation performs a strategic merge patch to update specific container images without affecting other deployment settings. The update triggers a rolling update to replace pods with the new images.
This is equivalent to running:
kubectl set image deployment/{name} container1=image1 container2=image2 -n {namespace}
Note: Container names must match existing containers in the deployment.
| namespace required | string Example: default Deployment namespace |
| name required | string Example: nginx-deployment Deployment name |
Array of container name to image mappings. Each object in the array should have a single key-value pair where:
| property name* additional property | string |
[- {
- "nginx": "nginx:1.21.0"
}, - {
- "sidecar": "busybox:1.35.0"
}
]{- "success": true,
- "message": "Successfully updated images for deployment default/nginx-deployment",
- "updated_images": {
- "nginx": "nginx:1.21.0",
- "sidecar": "busybox:1.35.0"
}, - "deployment": {
- "apiVersion": "apps/v1",
- "kind": "Deployment",
- "metadata": {
- "name": "nginx-deployment",
- "namespace": "default",
- "uid": "22345678-2234-2234-2234-223456789012",
- "resourceVersion": "5678",
- "generation": 3,
- "creationTimestamp": "2024-01-15T09:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "deployment.kubernetes.io/revision": "3"
}
}, - "spec": {
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "nginx"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "nginx"
}
}, - "spec": {
- "containers": [
- {
- "name": "nginx",
- "image": "nginx:1.21-alpine",
- "ports": [
- {
- "containerPort": 80
}
], - "resources": {
- "limits": {
- "cpu": "500m",
- "memory": "512Mi"
}, - "requests": {
- "cpu": "250m",
- "memory": "256Mi"
}
}
}
]
}
}, - "strategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "maxSurge": 1,
- "maxUnavailable": 1
}
}, - "minReadySeconds": 10,
- "revisionHistoryLimit": 10,
- "progressDeadlineSeconds": 600
}, - "status": {
- "observedGeneration": 3,
- "replicas": 3,
- "updatedReplicas": 3,
- "readyReplicas": 3,
- "availableReplicas": 3,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:05:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "Deployment has minimum availability."
}, - {
- "type": "Progressing",
- "status": "True",
- "lastUpdateTime": "2024-01-15T09:05:00Z",
- "lastTransitionTime": "2024-01-15T09:01:00Z",
- "reason": "NewReplicaSetAvailable",
- "message": "ReplicaSet \"nginx-deployment-6b474476c4\" has successfully progressed."
}
]
}
}
}Get detailed information about a specific service in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns service wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string Service namespace |
| name required | string Service name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "service_detail": {
- "apiVersion": "v1",
- "kind": "Service",
- "metadata": {
- "name": "nginx-service",
- "namespace": "default",
- "uid": "42345678-4234-4234-4234-423456789012",
- "resourceVersion": "9999",
- "creationTimestamp": "2024-01-15T10:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "service.beta.kubernetes.io/aws-load-balancer-type": "nlb"
}
}, - "spec": {
- "type": "LoadBalancer",
- "selector": {
- "app": "nginx"
}, - "ports": [
- {
- "name": "http",
- "port": 80,
- "targetPort": 8080,
- "protocol": "TCP",
- "nodePort": 30080
}, - {
- "name": "https",
- "port": 443,
- "targetPort": 8443,
- "protocol": "TCP",
- "nodePort": 30443
}
], - "clusterIP": "10.96.0.44",
- "externalTrafficPolicy": "Cluster",
- "sessionAffinity": "None",
- "loadBalancerSourceRanges": [
- "0.0.0.0/0"
]
}, - "status": {
- "loadBalancer": {
- "ingress": [
- {
- "ip": "192.168.1.100",
- "hostname": "a1234567890abcdef.elb.us-west-2.amazonaws.com"
}
]
}, - "conditions": [
- {
- "type": "LoadBalancerReady",
- "status": "True",
- "lastTransitionTime": "2024-01-15T10:05:00Z",
- "reason": "LoadBalancerProvisioned",
- "message": "Load balancer is ready"
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing Service
| namespace required | string Service namespace |
| name required | string Service name |
Service specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "Service",
- "metadata": {
- "name": "nginx-service",
- "namespace": "default",
- "uid": "42345678-4234-4234-4234-423456789012",
- "resourceVersion": "9999",
- "creationTimestamp": "2024-01-15T10:00:00Z",
- "labels": {
- "app": "nginx",
- "tier": "frontend"
}, - "annotations": {
- "service.beta.kubernetes.io/aws-load-balancer-type": "nlb"
}
}, - "spec": {
- "type": "LoadBalancer",
- "selector": {
- "app": "nginx"
}, - "ports": [
- {
- "name": "http",
- "port": 80,
- "targetPort": 8080,
- "protocol": "TCP",
- "nodePort": 30080
}, - {
- "name": "https",
- "port": 443,
- "targetPort": 8443,
- "protocol": "TCP",
- "nodePort": 30443
}
], - "clusterIP": "10.96.0.44",
- "externalTrafficPolicy": "Cluster",
- "sessionAffinity": "None",
- "loadBalancerSourceRanges": [
- "0.0.0.0/0"
]
}, - "status": {
- "loadBalancer": {
- "ingress": [
- {
- "ip": "192.168.1.100",
- "hostname": "a1234567890abcdef.elb.us-west-2.amazonaws.com"
}
]
}, - "conditions": [
- {
- "type": "LoadBalancerReady",
- "status": "True",
- "lastTransitionTime": "2024-01-15T10:05:00Z",
- "reason": "LoadBalancerProvisioned",
- "message": "Load balancer is ready"
}
]
}
}{- "status": "error"
}Get detailed information about a specific ingress in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns ingress wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string Ingress namespace |
| name required | string Ingress name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "ingress_detail": {
- "apiVersion": "networking.k8s.io/v1",
- "kind": "Ingress",
- "metadata": {
- "name": "app-ingress",
- "namespace": "default",
- "uid": "52345678-5234-5234-5234-523456789012",
- "resourceVersion": "11111",
- "creationTimestamp": "2024-01-15T11:00:00Z",
- "labels": {
- "app": "webapp",
- "environment": "production"
}, - "annotations": {
- "nginx.ingress.kubernetes.io/rewrite-target": "/",
- "cert-manager.io/cluster-issuer": "letsencrypt-prod",
- "nginx.ingress.kubernetes.io/ssl-redirect": "true"
}
}, - "spec": {
- "ingressClassName": "nginx",
- "tls": [
- {
- "hosts": [
- "app.example.com",
- "www.app.example.com"
], - "secretName": "app-tls-secret"
}
], - "rules": [
- {
- "host": "app.example.com",
- "http": {
- "paths": [
- {
- "path": "/api",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "api-service",
- "port": {
- "number": 8080
}
}
}
}, - {
- "path": "/",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "frontend-service",
- "port": {
- "number": 80
}
}
}
}
]
}
}, - {
- "host": "www.app.example.com",
- "http": {
- "paths": [
- {
- "path": "/",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "frontend-service",
- "port": {
- "number": 80
}
}
}
}
]
}
}
]
}, - "status": {
- "loadBalancer": {
- "ingress": [
- {
- "ip": "203.0.113.10",
- "hostname": "a234567890abcdef.elb.us-west-2.amazonaws.com"
}
]
}
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing Ingress
| namespace required | string Ingress namespace |
| name required | string Ingress name |
Ingress specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "networking.k8s.io/v1",
- "kind": "Ingress",
- "metadata": {
- "name": "app-ingress",
- "namespace": "default",
- "uid": "52345678-5234-5234-5234-523456789012",
- "resourceVersion": "11111",
- "creationTimestamp": "2024-01-15T11:00:00Z",
- "labels": {
- "app": "webapp",
- "environment": "production"
}, - "annotations": {
- "nginx.ingress.kubernetes.io/rewrite-target": "/",
- "cert-manager.io/cluster-issuer": "letsencrypt-prod",
- "nginx.ingress.kubernetes.io/ssl-redirect": "true"
}
}, - "spec": {
- "ingressClassName": "nginx",
- "tls": [
- {
- "hosts": [
- "app.example.com",
- "www.app.example.com"
], - "secretName": "app-tls-secret"
}
], - "rules": [
- {
- "host": "app.example.com",
- "http": {
- "paths": [
- {
- "path": "/api",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "api-service",
- "port": {
- "number": 8080
}
}
}
}, - {
- "path": "/",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "frontend-service",
- "port": {
- "number": 80
}
}
}
}
]
}
}, - {
- "host": "www.app.example.com",
- "http": {
- "paths": [
- {
- "path": "/",
- "pathType": "Prefix",
- "backend": {
- "service": {
- "name": "frontend-service",
- "port": {
- "number": 80
}
}
}
}
]
}
}
]
}, - "status": {
- "loadBalancer": {
- "ingress": [
- {
- "ip": "203.0.113.10",
- "hostname": "a234567890abcdef.elb.us-west-2.amazonaws.com"
}
]
}
}
}{- "status": "error"
}Get detailed information about a specific PersistentVolumeClaim in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns PVC wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string PVC namespace |
| name required | string PVC name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "pvc_detail": {
- "apiVersion": "v1",
- "kind": "PersistentVolumeClaim",
- "metadata": {
- "name": "postgres-pvc",
- "namespace": "database",
- "uid": "62345678-6234-6234-6234-623456789012",
- "resourceVersion": "12345",
- "creationTimestamp": "2024-01-15T07:30:00Z",
- "labels": {
- "app": "postgres",
- "environment": "production"
}, - "annotations": {
- "volume.beta.kubernetes.io/storage-provisioner": "ebs.csi.aws.com",
- "pv.kubernetes.io/bind-completed": "yes",
- "pv.kubernetes.io/bound-by-controller": "yes"
}, - "finalizers": [
- "kubernetes.io/pvc-protection"
]
}, - "spec": {
- "accessModes": [
- "ReadWriteOnce"
], - "resources": {
- "requests": {
- "storage": "20Gi"
}
}, - "storageClassName": "gp3-encrypted",
- "volumeMode": "Filesystem",
- "volumeName": "pvc-62345678-6234-6234-6234-623456789012"
}, - "status": {
- "phase": "Bound",
- "accessModes": [
- "ReadWriteOnce"
], - "capacity": {
- "storage": "20Gi"
}, - "conditions": [
- {
- "type": "Resizing",
- "status": "False",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T07:31:00Z"
}, - {
- "type": "FileSystemResizePending",
- "status": "False",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T07:31:00Z"
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Get detailed information about a specific PersistentVolume.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns PV wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| name required | string PV name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "pv_detail": {
- "apiVersion": "v1",
- "kind": "PersistentVolume",
- "metadata": {
- "name": "postgres-pv",
- "uid": "72345678-7234-7234-7234-723456789012",
- "resourceVersion": "56789",
- "creationTimestamp": "2024-01-15T07:00:00Z",
- "labels": {
- "type": "gp3-encrypted",
- "app": "postgres"
}, - "annotations": {
- "pv.kubernetes.io/provisioned-by": "ebs.csi.aws.com"
}, - "finalizers": [
- "kubernetes.io/pv-protection"
]
}, - "spec": {
- "capacity": {
- "storage": "20Gi"
}, - "accessModes": [
- "ReadWriteOnce"
], - "persistentVolumeReclaimPolicy": "Retain",
- "storageClassName": "gp3-encrypted",
- "mountOptions": [
- "debug"
], - "volumeMode": "Filesystem",
- "csi": {
- "driver": "ebs.csi.aws.com",
- "fsType": "ext4",
- "volumeHandle": "vol-0a1b2c3d4e5f6g7h8"
}
}, - "status": {
- "phase": "Bound",
- "reason": "",
- "message": "",
- "conditions": [
- {
- "type": "Resizing",
- "status": "False",
- "lastProbeTime": null,
- "lastTransitionTime": "2024-01-15T07:45:00Z"
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Get detailed information about a specific secret in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns secret wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string Secret namespace |
| name required | string Secret name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "secret_detail": {
- "apiVersion": "v1",
- "kind": "Secret",
- "metadata": {
- "name": "postgres-secret",
- "namespace": "database",
- "uid": "82345678-8234-8234-8234-823456789012",
- "resourceVersion": "67890",
- "creationTimestamp": "2024-01-15T06:00:00Z",
- "labels": {
- "app": "postgres"
}, - "annotations": {
- "kubernetes.io/service-account.name": "postgres"
}
}, - "data": {
- "password": "cG9zdGdyZXM=",
- "username": "cG9zdGdyZXVzZXI="
}, - "type": "Opaque"
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing Secret
| namespace required | string Secret namespace |
| name required | string Secret name |
Secret specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "Secret",
- "metadata": {
- "name": "postgres-secret",
- "namespace": "database",
- "uid": "82345678-8234-8234-8234-823456789012",
- "resourceVersion": "67890",
- "creationTimestamp": "2024-01-15T06:00:00Z",
- "labels": {
- "app": "postgres"
}, - "annotations": {
- "kubernetes.io/service-account.name": "postgres"
}
}, - "data": {
- "password": "cG9zdGdyZXM=",
- "username": "cG9zdGdyZXVzZXI="
}, - "type": "Opaque"
}{- "status": "error"
}Get detailed information about a specific ConfigMap in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns ConfigMap wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string ConfigMap namespace |
| name required | string ConfigMap name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "configmap_detail": {
- "apiVersion": "v1",
- "kind": "ConfigMap",
- "metadata": {
- "name": "nginx-config",
- "namespace": "default",
- "uid": "92345678-9234-9234-9234-923456789012",
- "resourceVersion": "78901",
- "creationTimestamp": "2024-01-15T05:00:00Z",
- "labels": {
- "app": "nginx"
}
}, - "data": {
- "nginx.conf": "server {\n listen 80;\n server_name localhost;\n location / {\n root /usr/share/nginx/html;\n index index.html index.htm;\n }\n}\n"
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing ConfigMap
| namespace required | string ConfigMap namespace |
| name required | string ConfigMap name |
ConfigMap specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "ConfigMap",
- "metadata": {
- "name": "nginx-config",
- "namespace": "default",
- "uid": "92345678-9234-9234-9234-923456789012",
- "resourceVersion": "78901",
- "creationTimestamp": "2024-01-15T05:00:00Z",
- "labels": {
- "app": "nginx"
}
}, - "data": {
- "nginx.conf": "server {\n listen 80;\n server_name localhost;\n location / {\n root /usr/share/nginx/html;\n index index.html index.htm;\n }\n}\n"
}
}{- "status": "error"
}Get detailed information about a specific Namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns Namespace wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| name required | string Namespace name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "namespace_detail": {
- "apiVersion": "v1",
- "kind": "Namespace",
- "metadata": {
- "name": "production",
- "uid": "a2345678-a234-a234-a234-a23456789012",
- "resourceVersion": "89012",
- "creationTimestamp": "2024-01-15T04:00:00Z",
- "labels": {
- "name": "production"
}
}, - "status": {
- "phase": "Active"
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Update an existing Namespace
| name required | string Namespace name |
Namespace specification in JSON or YAML format
| property name* additional property | any |
{- "apiVersion": "v1",
- "kind": "Namespace",
- "metadata": {
- "name": "production",
- "uid": "a2345678-a234-a234-a234-a23456789012",
- "resourceVersion": "89012",
- "creationTimestamp": "2024-01-15T04:00:00Z",
- "labels": {
- "name": "production"
}
}, - "status": {
- "phase": "Active"
}
}{- "status": "error"
}Get detailed information about a specific Node.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns Node wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| name required | string Node name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "node_detail": {
- "apiVersion": "v1",
- "kind": "Node",
- "metadata": {
- "name": "worker-node-1",
- "uid": "b2345678-b234-b234-b234-b23456789012",
- "resourceVersion": "90123",
- "creationTimestamp": "2024-01-15T03:00:00Z",
- "labels": {
- "node-role.kubernetes.io/worker": ""
}
}, - "spec": {
- "podCIDR": "192.168.1.0/24",
- "providerID": "aws:///us-west-2a/i-0a1b2c3d4e5f6g7h8"
}, - "status": {
- "capacity": {
- "cpu": "4",
- "memory": "16384Mi",
- "pods": "110"
}, - "allocatable": {
- "cpu": "4",
- "memory": "16384Mi",
- "pods": "110"
}, - "addresses": [
- {
- "type": "InternalIP",
- "address": "10.0.1.100"
}, - {
- "type": "ExternalIP",
- "address": "52.10.15.20"
}, - {
- "type": "Hostname",
- "address": "worker-node-1.example.com"
}
], - "conditions": [
- {
- "type": "Ready",
- "status": "True",
- "lastHeartbeatTime": "2024-01-15T03:10:00Z",
- "lastTransitionTime": "2024-01-15T03:05:00Z",
- "reason": "KubeletReady",
- "message": "kubelet is posting ready status"
}
], - "nodeInfo": {
- "machineID": "ec2540b5b2540123",
- "systemUUID": "ecb4567-ebfd-44b1-a312-a23456789012",
- "bootID": "ec7c257e-a128-11ec-9620-a23456789012",
- "kernelVersion": "5.4.0-1045-aws",
- "osImage": "Ubuntu 20.04.2 LTS",
- "containerRuntimeVersion": "docker://20.10.6",
- "kubeletVersion": "v1.21.1",
- "kubeProxyVersion": "v1.21.1",
- "operatingSystem": "linux",
- "architecture": "amd64"
}
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Marks a node as unschedulable, preventing new pods from being scheduled on it
| name required | string Node name |
{- "status": "success",
- "message": "Node worker-1 cordoned successfully"
}Marks a node as schedulable, allowing new pods to be scheduled on it
| name required | string Node name |
{- "status": "success",
- "message": "Node worker-1 uncordoned successfully"
}Safely evicts all pods from a node before maintenance
| name required | string Node name |
| gracePeriodSeconds | integer Default: 30 Grace period for pod eviction |
| timeout | integer Default: 300 Timeout for drain operation in seconds |
| ignoreDaemonSets | boolean Default: true Ignore DaemonSet-managed pods |
| deleteEmptyDirData | boolean Default: false Allow deletion of pods with emptyDir volumes |
{- "gracePeriodSeconds": 30,
- "timeout": 300,
- "ignoreDaemonSets": true,
- "deleteEmptyDirData": false
}{- "status": "success",
- "message": "Node worker-1 drained successfully"
}Get detailed information about a specific DaemonSet in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns DaemonSet wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string DaemonSet namespace |
| name required | string DaemonSet name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "daemonset_detail": {
- "apiVersion": "apps/v1",
- "kind": "DaemonSet",
- "metadata": {
- "name": "prometheus-node-exporter",
- "namespace": "monitoring",
- "uid": "c2345678-c234-c234-c234-c23456789012",
- "resourceVersion": "91234",
- "creationTimestamp": "2024-01-15T02:00:00Z",
- "labels": {
- "app": "node-exporter",
- "environment": "production"
}
}, - "spec": {
- "selector": {
- "matchLabels": {
- "app": "node-exporter"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "node-exporter"
}
}, - "spec": {
- "containers": [
- {
- "name": "node-exporter",
- "image": "prom/node-exporter:v1.0.1",
- "resources": {
- "limits": {
- "cpu": "100m",
- "memory": "200Mi"
}, - "requests": {
- "cpu": "100m",
- "memory": "200Mi"
}
}
}
]
}
}, - "updateStrategy": {
- "type": "RollingUpdate"
}, - "minReadySeconds": 5
}, - "status": {
- "currentNumberScheduled": 5,
- "numberMisscheduled": 0,
- "desiredNumberScheduled": 5,
- "numberReady": 5,
- "observedGeneration": 1
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Trigger a rolling restart of all pods managed by a DaemonSet.
This operation works by adding or updating a restart annotation
(kubectl.kubernetes.io/restartedAt) on the DaemonSet's pod template,
which triggers Kubernetes to perform a rolling update with new pods.
This is equivalent to running:
kubectl rollout restart daemonset/{name} -n {namespace}
Note: DaemonSets update pods on each node according to the update strategy. By default, this is a rolling update that respects maxUnavailable settings.
| namespace required | string Example: kube-system DaemonSet namespace |
| name required | string Example: fluentd DaemonSet name |
{- "success": true,
- "message": "DaemonSet kube-system/fluentd has been restarted",
- "daemonset": {
- "apiVersion": "apps/v1",
- "kind": "DaemonSet",
- "metadata": {
- "name": "prometheus-node-exporter",
- "namespace": "monitoring",
- "uid": "c2345678-c234-c234-c234-c23456789012",
- "resourceVersion": "91234",
- "creationTimestamp": "2024-01-15T02:00:00Z",
- "labels": {
- "app": "node-exporter",
- "environment": "production"
}
}, - "spec": {
- "selector": {
- "matchLabels": {
- "app": "node-exporter"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "node-exporter"
}
}, - "spec": {
- "containers": [
- {
- "name": "node-exporter",
- "image": "prom/node-exporter:v1.0.1",
- "resources": {
- "limits": {
- "cpu": "100m",
- "memory": "200Mi"
}, - "requests": {
- "cpu": "100m",
- "memory": "200Mi"
}
}
}
]
}
}, - "updateStrategy": {
- "type": "RollingUpdate"
}, - "minReadySeconds": 5
}, - "status": {
- "currentNumberScheduled": 5,
- "numberMisscheduled": 0,
- "desiredNumberScheduled": 5,
- "numberReady": 5,
- "observedGeneration": 1
}
}
}Rollback a DaemonSet to its previous revision.
This operation retrieves the previous revision from the DaemonSet's ControllerRevisions and updates the DaemonSet to use the pod template from that previous revision. The rollback triggers a rolling update to replace current pods with pods from the previous configuration.
This is equivalent to running:
kubectl rollout undo daemonset/{name} -n {namespace}
Note: This operation requires at least one previous revision to exist. DaemonSets use ControllerRevisions to track their history.
| namespace required | string Example: kube-system DaemonSet namespace |
| name required | string Example: fluentd DaemonSet name |
{- "success": true,
- "message": "DaemonSet kube-system/fluentd has been rolled back to revision 2",
- "daemonset": {
- "apiVersion": "apps/v1",
- "kind": "DaemonSet",
- "metadata": {
- "name": "prometheus-node-exporter",
- "namespace": "monitoring",
- "uid": "c2345678-c234-c234-c234-c23456789012",
- "resourceVersion": "91234",
- "creationTimestamp": "2024-01-15T02:00:00Z",
- "labels": {
- "app": "node-exporter",
- "environment": "production"
}
}, - "spec": {
- "selector": {
- "matchLabels": {
- "app": "node-exporter"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "node-exporter"
}
}, - "spec": {
- "containers": [
- {
- "name": "node-exporter",
- "image": "prom/node-exporter:v1.0.1",
- "resources": {
- "limits": {
- "cpu": "100m",
- "memory": "200Mi"
}, - "requests": {
- "cpu": "100m",
- "memory": "200Mi"
}
}
}
]
}
}, - "updateStrategy": {
- "type": "RollingUpdate"
}, - "minReadySeconds": 5
}, - "status": {
- "currentNumberScheduled": 5,
- "numberMisscheduled": 0,
- "desiredNumberScheduled": 5,
- "numberReady": 5,
- "observedGeneration": 1
}
}
}Update one or more container images in a DaemonSet.
This operation performs a strategic merge patch to update specific container images without affecting other DaemonSet settings. The update triggers a rolling update to replace pods with the new images.
This is equivalent to running:
kubectl set image daemonset/{name} container1=image1 container2=image2 -n {namespace}
Note: Container names must match existing containers in the DaemonSet. The update will be applied to all pods managed by the DaemonSet across all nodes.
| namespace required | string Example: kube-system DaemonSet namespace |
| name required | string Example: fluentd DaemonSet name |
Array of container name to image mappings. Each object in the array should have a single key-value pair where:
| property name* additional property | string |
[- {
- "fluentd": "fluent/fluentd:v1.14.6"
}, - {
- "sidecar": "busybox:1.35.0"
}
]{- "success": true,
- "message": "Successfully updated images for DaemonSet kube-system/fluentd",
- "updated_images": {
- "fluentd": "fluent/fluentd:v1.14.6",
- "sidecar": "busybox:1.35.0"
}, - "daemonset": {
- "apiVersion": "apps/v1",
- "kind": "DaemonSet",
- "metadata": {
- "name": "prometheus-node-exporter",
- "namespace": "monitoring",
- "uid": "c2345678-c234-c234-c234-c23456789012",
- "resourceVersion": "91234",
- "creationTimestamp": "2024-01-15T02:00:00Z",
- "labels": {
- "app": "node-exporter",
- "environment": "production"
}
}, - "spec": {
- "selector": {
- "matchLabels": {
- "app": "node-exporter"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "node-exporter"
}
}, - "spec": {
- "containers": [
- {
- "name": "node-exporter",
- "image": "prom/node-exporter:v1.0.1",
- "resources": {
- "limits": {
- "cpu": "100m",
- "memory": "200Mi"
}, - "requests": {
- "cpu": "100m",
- "memory": "200Mi"
}
}
}
]
}
}, - "updateStrategy": {
- "type": "RollingUpdate"
}, - "minReadySeconds": 5
}, - "status": {
- "currentNumberScheduled": 5,
- "numberMisscheduled": 0,
- "desiredNumberScheduled": 5,
- "numberReady": 5,
- "observedGeneration": 1
}
}
}Get detailed information about a specific StatefulSet in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns StatefulSet wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string StatefulSet namespace |
| name required | string StatefulSet name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "statefulset_detail": {
- "apiVersion": "apps/v1",
- "kind": "StatefulSet",
- "metadata": {
- "name": "postgres-statefulset",
- "namespace": "database",
- "uid": "32345678-3234-3234-3234-323456789012",
- "resourceVersion": "8901",
- "generation": 2,
- "creationTimestamp": "2024-01-15T08:00:00Z",
- "labels": {
- "app": "postgres",
- "tier": "database"
}
}, - "spec": {
- "serviceName": "postgres-service",
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "postgres"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "postgres"
}
}, - "spec": {
- "containers": [
- {
- "name": "postgres",
- "image": "postgres:14.5",
- "ports": [
- {
- "containerPort": 5432,
- "name": "postgres"
}
], - "env": [
- {
- "name": "POSTGRES_DB",
- "value": "mydb"
}, - {
- "name": "POSTGRES_USER",
- "value": "myuser"
}, - {
- "name": "POSTGRES_PASSWORD",
- "valueFrom": {
- "secretKeyRef": {
- "name": "postgres-secret",
- "key": "password"
}
}
}
], - "volumeMounts": [
- {
- "name": "postgres-storage",
- "mountPath": "/var/lib/postgresql/data"
}
]
}
]
}
}, - "volumeClaimTemplates": [
- {
- "metadata": {
- "name": "postgres-storage"
}, - "spec": {
- "accessModes": [
- "ReadWriteOnce"
], - "storageClassName": "fast-ssd",
- "resources": {
- "requests": {
- "storage": "10Gi"
}
}
}
}
], - "updateStrategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "partition": 0
}
}, - "podManagementPolicy": "OrderedReady",
- "persistentVolumeClaimRetentionPolicy": {
- "whenDeleted": "Retain",
- "whenScaled": "Retain"
}
}, - "status": {
- "observedGeneration": 2,
- "replicas": 3,
- "readyReplicas": 3,
- "currentReplicas": 3,
- "updatedReplicas": 3,
- "currentRevision": "postgres-statefulset-6d4cf56b5f",
- "updateRevision": "postgres-statefulset-6d4cf56b5f",
- "collisionCount": 0,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastTransitionTime": "2024-01-15T08:10:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "StatefulSet has minimum availability."
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Trigger a rolling restart of all pods managed by a StatefulSet.
This operation works by adding or updating a restart annotation
(kubectl.kubernetes.io/restartedAt) on the StatefulSet's pod template,
which triggers Kubernetes to perform a rolling update with new pods.
This is equivalent to running:
kubectl rollout restart statefulset/{name} -n {namespace}
Note: StatefulSets update pods in order, one at a time, respecting the updateStrategy settings. Pods are updated in reverse ordinal order (from highest to lowest) by default.
| namespace required | string Example: default StatefulSet namespace |
| name required | string Example: mysql StatefulSet name |
{- "success": true,
- "message": "StatefulSet default/mysql has been restarted",
- "statefulset": {
- "apiVersion": "apps/v1",
- "kind": "StatefulSet",
- "metadata": {
- "name": "postgres-statefulset",
- "namespace": "database",
- "uid": "32345678-3234-3234-3234-323456789012",
- "resourceVersion": "8901",
- "generation": 2,
- "creationTimestamp": "2024-01-15T08:00:00Z",
- "labels": {
- "app": "postgres",
- "tier": "database"
}
}, - "spec": {
- "serviceName": "postgres-service",
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "postgres"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "postgres"
}
}, - "spec": {
- "containers": [
- {
- "name": "postgres",
- "image": "postgres:14.5",
- "ports": [
- {
- "containerPort": 5432,
- "name": "postgres"
}
], - "env": [
- {
- "name": "POSTGRES_DB",
- "value": "mydb"
}, - {
- "name": "POSTGRES_USER",
- "value": "myuser"
}, - {
- "name": "POSTGRES_PASSWORD",
- "valueFrom": {
- "secretKeyRef": {
- "name": "postgres-secret",
- "key": "password"
}
}
}
], - "volumeMounts": [
- {
- "name": "postgres-storage",
- "mountPath": "/var/lib/postgresql/data"
}
]
}
]
}
}, - "volumeClaimTemplates": [
- {
- "metadata": {
- "name": "postgres-storage"
}, - "spec": {
- "accessModes": [
- "ReadWriteOnce"
], - "storageClassName": "fast-ssd",
- "resources": {
- "requests": {
- "storage": "10Gi"
}
}
}
}
], - "updateStrategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "partition": 0
}
}, - "podManagementPolicy": "OrderedReady",
- "persistentVolumeClaimRetentionPolicy": {
- "whenDeleted": "Retain",
- "whenScaled": "Retain"
}
}, - "status": {
- "observedGeneration": 2,
- "replicas": 3,
- "readyReplicas": 3,
- "currentReplicas": 3,
- "updatedReplicas": 3,
- "currentRevision": "postgres-statefulset-6d4cf56b5f",
- "updateRevision": "postgres-statefulset-6d4cf56b5f",
- "collisionCount": 0,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastTransitionTime": "2024-01-15T08:10:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "StatefulSet has minimum availability."
}
]
}
}
}Rollback a StatefulSet to its previous revision.
This operation retrieves the previous revision from the StatefulSet's ControllerRevisions and updates the StatefulSet to use the pod template from that previous revision. The rollback triggers an ordered update to replace current pods with pods from the previous configuration.
This is equivalent to running:
kubectl rollout undo statefulset/{name} -n {namespace}
Note: This operation requires at least one previous revision to exist. StatefulSets use ControllerRevisions to track their history. Pods will be updated in reverse ordinal order, maintaining the StatefulSet's ordering guarantees.
| namespace required | string Example: default StatefulSet namespace |
| name required | string Example: mysql StatefulSet name |
{- "success": true,
- "message": "StatefulSet default/mysql has been rolled back to revision 2",
- "statefulset": {
- "apiVersion": "apps/v1",
- "kind": "StatefulSet",
- "metadata": {
- "name": "postgres-statefulset",
- "namespace": "database",
- "uid": "32345678-3234-3234-3234-323456789012",
- "resourceVersion": "8901",
- "generation": 2,
- "creationTimestamp": "2024-01-15T08:00:00Z",
- "labels": {
- "app": "postgres",
- "tier": "database"
}
}, - "spec": {
- "serviceName": "postgres-service",
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "postgres"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "postgres"
}
}, - "spec": {
- "containers": [
- {
- "name": "postgres",
- "image": "postgres:14.5",
- "ports": [
- {
- "containerPort": 5432,
- "name": "postgres"
}
], - "env": [
- {
- "name": "POSTGRES_DB",
- "value": "mydb"
}, - {
- "name": "POSTGRES_USER",
- "value": "myuser"
}, - {
- "name": "POSTGRES_PASSWORD",
- "valueFrom": {
- "secretKeyRef": {
- "name": "postgres-secret",
- "key": "password"
}
}
}
], - "volumeMounts": [
- {
- "name": "postgres-storage",
- "mountPath": "/var/lib/postgresql/data"
}
]
}
]
}
}, - "volumeClaimTemplates": [
- {
- "metadata": {
- "name": "postgres-storage"
}, - "spec": {
- "accessModes": [
- "ReadWriteOnce"
], - "storageClassName": "fast-ssd",
- "resources": {
- "requests": {
- "storage": "10Gi"
}
}
}
}
], - "updateStrategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "partition": 0
}
}, - "podManagementPolicy": "OrderedReady",
- "persistentVolumeClaimRetentionPolicy": {
- "whenDeleted": "Retain",
- "whenScaled": "Retain"
}
}, - "status": {
- "observedGeneration": 2,
- "replicas": 3,
- "readyReplicas": 3,
- "currentReplicas": 3,
- "updatedReplicas": 3,
- "currentRevision": "postgres-statefulset-6d4cf56b5f",
- "updateRevision": "postgres-statefulset-6d4cf56b5f",
- "collisionCount": 0,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastTransitionTime": "2024-01-15T08:10:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "StatefulSet has minimum availability."
}
]
}
}
}Update one or more container images in a StatefulSet.
This operation performs a strategic merge patch to update specific container images without affecting other StatefulSet settings. The update triggers an ordered rolling update to replace pods with the new images.
This is equivalent to running:
kubectl set image statefulset/{name} container1=image1 container2=image2 -n {namespace}
Note: Container names must match existing containers in the StatefulSet. Pods will be updated in reverse ordinal order (highest to lowest) according to the StatefulSet's updateStrategy. This ensures stable network identities and storage are maintained.
| namespace required | string Example: default StatefulSet namespace |
| name required | string Example: mysql StatefulSet name |
Array of container name to image mappings. Each object in the array should have a single key-value pair where:
| property name* additional property | string |
[- {
- "mysql": "mysql:8.0.32"
}, - {
- "xtrabackup": "percona/percona-xtrabackup:8.0.32"
}
]{- "success": true,
- "message": "Successfully updated images for StatefulSet default/mysql",
- "updated_images": {
- "mysql": "mysql:8.0.32",
- "xtrabackup": "percona/percona-xtrabackup:8.0.32"
}, - "statefulset": {
- "apiVersion": "apps/v1",
- "kind": "StatefulSet",
- "metadata": {
- "name": "postgres-statefulset",
- "namespace": "database",
- "uid": "32345678-3234-3234-3234-323456789012",
- "resourceVersion": "8901",
- "generation": 2,
- "creationTimestamp": "2024-01-15T08:00:00Z",
- "labels": {
- "app": "postgres",
- "tier": "database"
}
}, - "spec": {
- "serviceName": "postgres-service",
- "replicas": 3,
- "selector": {
- "matchLabels": {
- "app": "postgres"
}
}, - "template": {
- "metadata": {
- "labels": {
- "app": "postgres"
}
}, - "spec": {
- "containers": [
- {
- "name": "postgres",
- "image": "postgres:14.5",
- "ports": [
- {
- "containerPort": 5432,
- "name": "postgres"
}
], - "env": [
- {
- "name": "POSTGRES_DB",
- "value": "mydb"
}, - {
- "name": "POSTGRES_USER",
- "value": "myuser"
}, - {
- "name": "POSTGRES_PASSWORD",
- "valueFrom": {
- "secretKeyRef": {
- "name": "postgres-secret",
- "key": "password"
}
}
}
], - "volumeMounts": [
- {
- "name": "postgres-storage",
- "mountPath": "/var/lib/postgresql/data"
}
]
}
]
}
}, - "volumeClaimTemplates": [
- {
- "metadata": {
- "name": "postgres-storage"
}, - "spec": {
- "accessModes": [
- "ReadWriteOnce"
], - "storageClassName": "fast-ssd",
- "resources": {
- "requests": {
- "storage": "10Gi"
}
}
}
}
], - "updateStrategy": {
- "type": "RollingUpdate",
- "rollingUpdate": {
- "partition": 0
}
}, - "podManagementPolicy": "OrderedReady",
- "persistentVolumeClaimRetentionPolicy": {
- "whenDeleted": "Retain",
- "whenScaled": "Retain"
}
}, - "status": {
- "observedGeneration": 2,
- "replicas": 3,
- "readyReplicas": 3,
- "currentReplicas": 3,
- "updatedReplicas": 3,
- "currentRevision": "postgres-statefulset-6d4cf56b5f",
- "updateRevision": "postgres-statefulset-6d4cf56b5f",
- "collisionCount": 0,
- "conditions": [
- {
- "type": "Available",
- "status": "True",
- "lastTransitionTime": "2024-01-15T08:10:00Z",
- "reason": "MinimumReplicasAvailable",
- "message": "StatefulSet has minimum availability."
}
]
}
}
}Get detailed information about a specific Job in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns Job wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string Job namespace |
| name required | string Job name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "job_detail": {
- "apiVersion": "batch/v1",
- "kind": "Job",
- "metadata": {
- "name": "backup-job",
- "namespace": "backup",
- "uid": "d2345678-d234-d234-d234-d23456789012",
- "resourceVersion": "92345",
- "creationTimestamp": "2024-01-15T01:00:00Z",
- "labels": {
- "batch": "backup",
- "environment": "production"
}
}, - "spec": {
- "template": {
- "metadata": {
- "labels": {
- "batch": "backup"
}
}, - "spec": {
- "containers": [
- {
- "name": "backup-container",
- "image": "myorg/backup:1.0",
- "command": [
- "/bin/sh",
- "-c",
- "echo Backup started..."
]
}
], - "restartPolicy": "Never"
}
}, - "backoffLimit": 3
}, - "status": {
- "conditions": [
- {
- "type": "Complete",
- "status": "True",
- "lastProbeTime": "2024-01-15T01:20:00Z",
- "lastTransitionTime": "2024-01-15T01:15:00Z"
}
], - "startTime": "2024-01-15T01:00:00Z",
- "completionTime": "2024-01-15T01:30:00Z",
- "succeeded": 1
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}Get detailed information about a specific CronJob in a namespace.
Supports both JSON and YAML response formats based on the Accept header:
application/json (default) - Returns CronJob wrapped in API responseapplication/yaml, text/yaml, application/x-yaml - Returns raw Kubernetes YAML with cleaned metadataWhen YAML format is requested, the following fields are automatically removed for cleaner output:
metadata.managedFields - Verbose internal field trackingmetadata.selfLink - Deprecated field metadata.uid - Auto-generated identifier| namespace required | string CronJob namespace |
| name required | string CronJob name |
| Accept | string Default: application/json Enum: "application/json" "application/yaml" "application/x-yaml" "application/yml" "text/yaml" "text/yml" "text/x-yaml" Response format preference. Supported values:
|
{- "status": "success",
- "cronjob_detail": {
- "apiVersion": "batch/v1",
- "kind": "CronJob",
- "metadata": {
- "name": "database-backup",
- "namespace": "backups",
- "uid": "e2345678-e234-e234-e234-e23456789012",
- "resourceVersion": "93456",
- "creationTimestamp": "2024-01-14T23:00:00Z",
- "labels": {
- "batch": "cron-job",
- "environment": "production"
}
}, - "spec": {
- "schedule": "0 1 * * *",
- "jobTemplate": {
- "spec": {
- "template": {
- "metadata": {
- "labels": {
- "batch": "cron-job"
}
}, - "spec": {
- "containers": [
- {
- "name": "backup-container",
- "image": "myorg/backup:1.0",
- "command": [
- "/bin/sh",
- "-c",
- "echo Performing backup..."
]
}
], - "restartPolicy": "OnFailure"
}
}
}
}, - "successfulJobsHistoryLimit": 3,
- "failedJobsHistoryLimit": 1
}, - "status": {
- "lastScheduleTime": "2024-01-19T01:00:00Z",
- "active": [
- {
- "name": "database-backup-273987",
- "namespace": "backups",
- "uid": "f2345678-f234-f234-f234-f23456789012"
}
]
}
}, - "error": {
- "code": "string",
- "message": "string",
- "details": "string"
}
}List all Helm releases from all namespaces in the Kubernetes cluster by default. Use namespace parameter to filter to a specific namespace.
| namespace | string Example: namespace=default Filter releases by specific namespace (overrides default all-namespace behavior) |
| all | boolean Default: true Explicitly control whether to show releases from all namespaces (default: true) |
| filter | string Example: filter=nginx Filter releases by name pattern |
{- "status": "success",
- "data": {
- "releases": [
- {
- "name": "nginx-release",
- "namespace": "default",
- "version": 1,
- "status": "deployed",
- "chart": "nginx",
- "chart_version": "1.0.0",
- "app_version": "1.21.0",
- "updated": "2025-08-05T12:00:00Z",
- "description": "Install complete",
- "labels": {
- "app.kubernetes.io/managed-by": "Helm"
}
}
], - "count": 3
}
}Search all Helm charts from configured repositories (equivalent to 'helm search repo -l')
| repository | string Example: repository=bitnami Filter charts by repository name |
| all_versions | boolean Default: true Show all versions of charts (equivalent to -l flag in helm search) |
| devel | boolean Default: false Include development versions (equivalent to --devel flag) |
{- "status": "success",
- "data": {
- "charts": [
- {
- "name": "bitnami/nginx",
- "version": "13.2.23",
- "description": "NGINX Open Source plus a number of useful modules",
- "repository": "bitnami",
- "app_version": "1.25.3"
}
], - "count": 6
}
}Add a new Helm repository to the configuration (equivalent to 'helm repo add')
| name required | string non-empty Name to assign to the repository |
| url required | string <uri> URL of the Helm repository |
| username | string Username for authenticated repositories |
| password | string Password for authenticated repositories |
| cert_file | string Path to TLS certificate file |
| key_file | string Path to TLS key file |
| ca_file | string Path to CA bundle file |
| insecure_skip_tls_verify | boolean Default: false Skip TLS certificate verification |
| pass_credentials_all | boolean Default: false Pass credentials to all domains |
| force_update | boolean Default: false Force update the repository if it already exists |
{- "name": "bitnami",
- "username": "",
- "password": "",
- "cert_file": "",
- "key_file": "",
- "ca_file": "",
- "insecure_skip_tls_verify": false,
- "pass_credentials_all": false,
- "force_update": false
}{- "status": "success",
- "data": {
- "message": "Repository has been added",
- "updated": false
}
}Update a specific Helm repository to fetch the latest charts (equivalent to 'helm repo update {repo-name}')
| name required | string Example: bitnami Name of the repository to update |
{- "status": "success",
- "data": {
- "message": "Successfully got an update from the 'bitnami' chart repository",
- "updated_at": "2025-08-07T00:10:12Z"
}
}Returns a list of all available Ansible playbooks in the system
{- "status": "success",
- "data": {
- "playbooks": [
- {
- "name": "site.yml",
- "path": "/opt/ansible/playbooks/site.yml",
- "size": 2048,
- "modified": "2025-01-15T10:30:00Z",
- "is_directory": false
}
], - "count": 0
}
}Returns detailed information about a specific playbook including its content
| name required | string Name of the playbook |
{- "status": "success",
- "data": {
- "playbook": {
- "name": "site.yml",
- "path": "/opt/ansible/playbooks/site.yml",
- "content": "---\n- name: Configure web servers\n hosts: webservers\n become: yes\n tasks:\n - name: Install nginx\n package:\n name: nginx\n state: present\n",
- "size": 2048,
- "modified": "2025-01-15T10:30:00Z"
}
}
}Uploads a new playbook to the server
| name required | string Name of the playbook file |
| content required | string Base64 encoded playbook content |
| overwrite | boolean Default: false Whether to overwrite existing playbook |
{- "name": "deploy.yml",
- "content": "LS0tCi0gbmFtZTogRGVwbG95IGFwcGxpY2F0aW9uCiAgaG9zdHM6IGFsbAogIHRhc2tzOgogICAgLSBuYW1lOiBVcGRhdGUgYXBwCiAgICAgIGNvbW1hbmQ6IC9iaW4vdXBkYXRlLnNo",
- "overwrite": true
}{- "status": "success",
- "data": {
- "message": "string"
}
}Validates playbook syntax using ansible-playbook --syntax-check
| name required | string Name of the playbook to validate |
{- "name": "string"
}{- "status": "success",
- "data": {
- "valid": true,
- "message": "Playbook syntax is valid",
- "errors": [
- "ERROR! 'hosts' is not a valid attribute for a Play"
], - "warnings": [
- "[WARNING]: No inventory was parsed"
]
}
}Executes an Ansible playbook with specified parameters
| playbook required | string Name of the playbook to run |
| inventory | string Inventory to use (name or content) |
| limit | string Limit execution to specific hosts/groups |
| tags | Array of strings Run only tasks with these tags |
| skip_tags | Array of strings Skip tasks with these tags |
object Extra variables to pass to playbook | |
| check | boolean Default: false Run in check mode (dry run) |
| diff | boolean Default: false Show differences |
| verbose | integer [ 0 .. 4 ] Default: 0 Verbosity level (0-4) |
| become | boolean Default: false Run with become (sudo) |
| become_user | string User to become |
| private_key | string Path to SSH private key |
| timeout | integer Default: 10 Connection timeout in seconds |
| forks | integer Default: 5 Number of parallel processes |
{- "playbook": "site.yml",
- "inventory": "production",
- "limit": "webservers",
- "tags": [
- "deploy",
- "config"
], - "skip_tags": [
- "test"
], - "extra_vars": {
- "app_version": "1.2.3",
- "environment": "production"
}, - "check": false,
- "diff": true,
- "verbose": 2,
- "become": true,
- "become_user": "root",
- "private_key": "/home/user/.ssh/id_rsa",
- "timeout": 30,
- "forks": 10
}{- "status": "success",
- "data": {
- "execution_id": "exec-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "status": "starting",
- "type": "playbook",
- "started_at": "2025-01-15T10:30:00Z",
- "stream_url": "/api/v1/ansible/executions/exec-a1b2c3d4/stream"
}
}Returns a list of available playbook templates
{- "status": "success",
- "data": {
- "templates": [
- {
- "id": "nginx-setup",
- "name": "Nginx Web Server Setup",
- "description": "Sets up Nginx with SSL and basic configuration",
- "category": "Web Servers",
- "variables": [
- {
- "name": "domain_name",
- "description": "The domain name for the website",
- "type": "string",
- "required": true,
- "default": "example.com",
- "validation": "^[a-z0-9.-]+$"
}
], - "tags": [
- "web",
- "nginx",
- "ssl"
]
}
]
}
}Creates a new playbook from a template with variable substitution
| template_id required | string Template identifier |
| name required | string Name for the new playbook |
object Template variable values |
{- "template_id": "nginx-setup",
- "name": "production-nginx.yml",
- "variables": {
- "domain_name": "mysite.com",
- "ssl_enabled": "true",
- "worker_processes": "4"
}
}{- "status": "success",
- "data": {
- "message": "string"
}
}Syncs playbooks from a Git repository
| url required | string <uri> Git repository URL |
| branch | string Default: "main" Git branch to sync |
| path | string Path within repository |
| auth_token | string Authentication token for private repos |
| ssh_key | string SSH private key for authentication |
| sync_as_symlink | boolean Default: false Create symlink instead of copying |
{- "branch": "main",
- "path": "playbooks/",
- "auth_token": "ghp_xxxxxxxxxxxxxxxxxxxx",
- "ssh_key": "string",
- "sync_as_symlink": false
}{- "status": "success",
- "data": {
- "message": "string"
}
}Installs roles or collections from Ansible Galaxy
| type | string Enum: "role" "collection" Resource type to install |
| name | string Name of role/collection |
| version | string Version to install |
| requirements_file | string Path to requirements file |
| force | boolean Default: false Force reinstall |
{- "type": "collection",
- "name": "community.general",
- "version": "5.0.0",
- "requirements_file": "requirements.yml",
- "force": false
}{- "status": "success",
- "data": {
- "message": "string"
}
}Downloads a playbook from a URL
| url required | string <uri> URL of the playbook to download |
| name required | string Name to save the playbook as |
{- "name": "string"
}{- "status": "success",
- "data": {
- "message": "string"
}
}Executes an ad-hoc Ansible command
| hosts required | string Host pattern to run against |
| module required | string Ansible module to run |
| args | string Module arguments |
| inventory | string Inventory to use |
object Extra variables | |
| become | boolean Default: false Run with become (sudo) |
| verbose | integer [ 0 .. 4 ] Default: 0 Verbosity level |
| forks | integer Default: 5 Number of parallel processes |
{- "hosts": "all",
- "module": "ping",
- "args": "data=pong",
- "inventory": "production",
- "extra_vars": {
- "property1": "string",
- "property2": "string"
}, - "become": false,
- "verbose": 0,
- "forks": 5
}{- "status": "success",
- "data": {
- "execution_id": "exec-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "status": "starting",
- "type": "playbook",
- "started_at": "2025-01-15T10:30:00Z",
- "stream_url": "/api/v1/ansible/executions/exec-a1b2c3d4/stream"
}
}Returns a list of all Ansible execution results
| status | string Enum: "running" "success" "failed" Filter by execution status |
| type | string Enum: "playbook" "adhoc" Filter by execution type |
| limit | integer Default: 100 Maximum number of results to return |
{- "status": "success",
- "data": {
- "executions": [
- {
- "id": "exec-a1b2c3d4",
- "type": "playbook",
- "playbook": "site.yml",
- "module": "ping",
- "status": "success",
- "started_at": "2025-01-15T10:30:00Z",
- "finished_at": "2025-01-15T10:35:00Z",
- "duration": 300,
- "hosts_summary": {
- "ok": 10,
- "changed": 5,
- "unreachable": 0,
- "failed": 1,
- "skipped": 2,
- "rescued": 0,
- "ignored": 0
}
}
], - "count": 25
}
}Returns detailed information about a specific execution
| id required | string Execution ID |
{- "status": "success",
- "data": {
- "execution": {
- "id": "exec-a1b2c3d4",
- "type": "playbook",
- "playbook": "site.yml",
- "module": "ping",
- "status": "success",
- "started_at": "2025-01-15T10:30:00Z",
- "finished_at": "2025-01-15T10:35:00Z",
- "duration": 300,
- "hosts_summary": {
- "ok": 10,
- "changed": 5,
- "unreachable": 0,
- "failed": 1,
- "skipped": 2,
- "rescued": 0,
- "ignored": 0
}, - "command": "ansible-playbook -i production site.yml",
- "parameters": { },
- "output": "PLAY [Configure web servers] ***\n\nTASK [Gathering Facts] ***\nok: [web1]\n",
- "exit_code": 0,
- "host_results": [
- {
- "host": "web1.example.com",
- "ok": 10,
- "changed": 3,
- "unreachable": false,
- "failed": false,
- "skipped": 1,
- "rescued": 0,
- "ignored": 0
}
]
}
}
}Establishes a WebSocket connection to stream real-time execution output.
WebSocket URL: ws://localhost:8080/api/v1/ansible/executions/{id}/stream
Authentication: Send JWT token as query parameter or in first message.
Message Format:
{
"type": "output",
"content": "TASK [Update packages] *****",
"time": 1705315800
}
Completion Message:
{
"type": "complete",
"result": {
"id": "exec-123456",
"status": "success",
"exit_code": 0
}
}
| id required | string Execution ID |
{- "status": "error"
}Generates a dynamic inventory from current system state
{- "status": "success",
- "data": {
- "inventory": {
- "_meta": {
- "hostvars": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}, - "all": {
- "hosts": [
- "web1.example.com",
- "web2.example.com"
], - "children": [
- "webservers",
- "databases"
], - "vars": {
- "property1": "string",
- "property2": "string"
}
}, - "webservers": {
- "hosts": [
- "web1.example.com",
- "web2.example.com"
], - "vars": {
- "http_port": "80",
- "max_clients": "200"
}
}, - "databases": {
- "hosts": [
- "db1.example.com"
], - "vars": {
- "property1": "string",
- "property2": "string"
}
}
}
}
}Saves an inventory configuration
| name required | string Inventory name |
| content required | string Inventory content (INI or YAML format) |
| format | string Default: "ini" Enum: "ini" "yaml" "json" Inventory format |
{- "name": "production",
- "content": "[webservers]\nweb1.example.com\nweb2.example.com\n\n[databases]\ndb1.example.com\n",
- "format": "ini"
}{- "status": "success",
- "data": {
- "message": "string"
}
}Retrieves a saved inventory (not yet implemented)
| name required | string Inventory name |
{- "status": "success",
- "data": {
- "inventory": {
- "_meta": {
- "hostvars": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}, - "all": {
- "hosts": [
- "web1.example.com",
- "web2.example.com"
], - "children": [
- "webservers",
- "databases"
], - "vars": {
- "property1": "string",
- "property2": "string"
}
}, - "webservers": {
- "hosts": [
- "web1.example.com",
- "web2.example.com"
], - "vars": {
- "http_port": "80",
- "max_clients": "200"
}
}, - "databases": {
- "hosts": [
- "db1.example.com"
], - "vars": {
- "property1": "string",
- "property2": "string"
}
}
}
}
}Returns all scheduled Ansible tasks (not yet implemented)
{- "status": "success",
- "data": {
- "schedules": [
- {
- "id": "sched-123456",
- "name": "Daily backup",
- "playbook": "backup.yml",
- "cron": "0 2 * * *",
- "enabled": true,
- "last_run": "2025-01-14T02:00:00Z",
- "next_run": "2025-01-15T02:00:00Z",
- "parameters": { }
}
], - "count": 0
}
}Creates a scheduled playbook execution (not yet implemented)
| name required | string Schedule name |
| playbook required | string Playbook to run |
| cron required | string Cron expression |
| enabled | boolean Default: true Enable schedule immediately |
object (PlaybookRunRequest) | |
| timezone | string Default: "UTC" Timezone for schedule |
{- "name": "Daily backup",
- "playbook": "backup.yml",
- "cron": "0 2 * * *",
- "enabled": true,
- "parameters": {
- "playbook": "site.yml",
- "inventory": "production",
- "limit": "webservers",
- "tags": [
- "deploy",
- "config"
], - "skip_tags": [
- "test"
], - "extra_vars": {
- "app_version": "1.2.3",
- "environment": "production"
}, - "check": false,
- "diff": true,
- "verbose": 2,
- "become": true,
- "become_user": "root",
- "private_key": "/home/user/.ssh/id_rsa",
- "timeout": 30,
- "forks": 10
}, - "timezone": "America/New_York"
}{- "status": "success",
- "data": {
- "message": "string"
}
}