| name | kcli-ksushy |
| description | Guides interaction with kcli VMs via ksushy (Redfish emulator). Use when booting, stopping, or managing baremetal-like VMs through the Redfish API, deploying the ksushy service, or working with sushy/redfish in general. |
kcli ksushy (Redfish Emulation)
ksushy provides a REST interface to interact with VMs using Redfish. It offers functionality similar to sushy-emulator but extends it to more providers (typically vSphere, KubeVirt, and oVirt) and through more friendly URLs.
Requirements
ksushy is bundled within kcli. SSL support requires installing cherrypy and pyopenssl manually.
Deploying the ksushy service
kcli create sushy-service
This creates a systemd unit listening on port 9000. The following environment variables are supported:
| Variable | Description |
|---|
KSUSHY_LISTEN_PORT | Use a specific port |
KSUSHY_DEBUG | Enable debug |
KSUSHY_USER | Username for basic authentication |
KSUSHY_PASSWORD | Password for basic authentication |
KSUSHY_BOOTONCE | Enable bootonce |
Determining the ksushy endpoint
The ksushy endpoint is derived from the hypervisor hosting the VMs, NOT from the VM itself or the local machine hostname:
- Identify the current hypervisor with
kcli list hosts (look for the Current column).
- Get the hypervisor's FQDN or IP with
kcli info host <host_name> (use the host: field), or look it up in ~/.kcli/config.yml. If the host is a short name, check ~/.ssh/config for the actual Hostname (IP or FQDN).
- The ksushy base URL is
https://<host_ip>:9000/redfish/v1/Systems.
API Structure
Systems are organized by provider under /redfish/v1/Systems/<provider>/<vm_name>.
The <provider> matches the provider name as defined in ~/.kcli/config.yml. For local libvirt VMs, the provider is local.
curl -ks https://<host>:9000/redfish/v1/Systems
curl -ks https://<host>:9000/redfish/v1/Systems/local
curl -ks https://<host>:9000/redfish/v1/Systems/myotherprovider/mynode
curl -ks https://<host>:9000/redfish/v1/Systems/local/<vm_name>
VM Power Operations
Typical redfish operations (start, stop, info, listing NICs) are supported for all providers.
curl -ks https://<host>:9000/redfish/v1/Systems/local/<vm_name>/Actions/ComputerSystem.Reset \
-H "Content-Type: application/json" \
-d '{"ResetType": "On"}'
curl -ks https://<host>:9000/redfish/v1/Systems/local/<vm_name>/Actions/ComputerSystem.Reset \
-H "Content-Type: application/json" \
-d '{"ResetType": "ForceOff"}'
curl -ks https://<host>:9000/redfish/v1/Systems/local/<vm_name>/Actions/ComputerSystem.Reset \
-H "Content-Type: application/json" \
-d '{"ResetType": "ForceRestart"}'
Virtual Media (ISO)
ISO plugging is only supported on virtualization providers.
curl -ks https://<host>:9000/redfish/v1/Systems/local/<vm_name>/VirtualMedia/Cd/Actions/VirtualMedia.InsertMedia \
-H "Content-Type: application/json" \
-d '{"Image": "http://<iso_server>/<image>.iso"}'
curl -ks https://<host>:9000/redfish/v1/Systems/local/<vm_name>/VirtualMedia/Cd/Actions/VirtualMedia.EjectMedia \
-H "Content-Type: application/json" -d '{}'
Authentication
When the service is deployed with KSUSHY_USER and KSUSHY_PASSWORD, access is secured through basic authentication:
curl -ks -u myuser:mypassword https://<host>:9000/redfish/v1/Systems/local/<vm_name>
Typical Workflow
-
Create baremetal-like VMs with kcli:
kcli create vm -P start=false -P memory=20480 -P numcpus=16 -P 'disks=[200]' -P uefi=true -P 'nets=[default]' -c 3 mycluster
-
Determine the ksushy endpoint (see above).
-
Boot VMs via redfish:
for i in 0 1 2; do
curl -ks https://<host>:9000/redfish/v1/Systems/local/mycluster-$i/Actions/ComputerSystem.Reset \
-H "Content-Type: application/json" \
-d '{"ResetType": "On"}'
done