Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,11 @@ In case multi-cluster support is enabled (default) and you have access to multip
- `storage` (`string`) - Optional storage size for the VM's root disk when using DataSources (e.g., '30Gi', '50Gi', '100Gi'). Defaults to 30Gi. Ignored when using container disks.
- `workload` (`string`) - The workload for the VM. Accepts OS names (e.g., 'fedora' (default), 'ubuntu', 'centos', 'centos-stream', 'debian', 'rhel', 'opensuse', 'opensuse-tumbleweed', 'opensuse-leap') or full container disk image URLs

- **vm_guest_info** - Get guest operating system information from a VirtualMachine's QEMU guest agent. Requires the guest agent to be installed and running inside the VM. Provides detailed information about the OS, filesystems, network interfaces, and logged-in users.
- `info_type` (`string`) - Type of information to retrieve: 'all' (default - all available info), 'os' (operating system details), 'filesystem' (disk and filesystem info), 'users' (logged-in users), 'network' (network interfaces and IPs)
- `name` (`string`) **(required)** - The name of the virtual machine
- `namespace` (`string`) **(required)** - The namespace of the virtual machine

- **vm_lifecycle** - Manage VirtualMachine lifecycle: start, stop, or restart a VM
- `action` (`string`) **(required)** - The lifecycle action to perform: 'start' (changes runStrategy to Always), 'stop' (changes runStrategy to Halted), or 'restart' (stops then starts the VM)
- `name` (`string`) **(required)** - The name of the virtual machine
Expand Down
81 changes: 81 additions & 0 deletions evals/tasks/kubevirt/get-vm-filesystems/task.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
kind: Task
metadata:
labels:
suite: kubevirt
requires: kubevirt
name: "get-vm-filesystems"
difficulty: easy
description: "Use vm_guest_info to get filesystem information from inside a VM"
steps:
setup:
inline: |-
#!/usr/bin/env bash
set -e
NS="${EVAL_NAMESPACE:-vm-test}"
kubectl delete namespace "$NS" --ignore-not-found
kubectl create namespace "$NS"

# Create a VM with guest agent
kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: test-vm
namespace: $NS
spec:
runStrategy: Always
template:
spec:
domain:
devices:
disks:
- name: containerdisk
disk:
bus: virtio
- name: cloudinitdisk
disk:
bus: virtio
resources:
requests:
memory: 2Gi
volumes:
- name: containerdisk
containerDisk:
image: quay.io/containerdisks/fedora:latest
- name: cloudinitdisk
cloudInitNoCloud:
userData: |
#cloud-config
packages:
- qemu-guest-agent
runcmd:
- systemctl enable qemu-guest-agent
- systemctl start qemu-guest-agent
EOF

kubectl wait --for=create vm/test-vm -n "${NS}" --timeout=30s
echo "VM created with guest agent."
verify:
inline: |-
#!/usr/bin/env bash
set -e
NS="${EVAL_NAMESPACE:-vm-test}"

if ! kubectl get vm test-vm -n "$NS" &>/dev/null; then
echo "ERROR: VirtualMachine 'test-vm' not found"
exit 1
fi

echo "Verification passed: VM exists"
exit 0
cleanup:
inline: |-
#!/usr/bin/env bash
NS="${EVAL_NAMESPACE:-vm-test}"
kubectl delete virtualmachine test-vm -n "$NS" --ignore-not-found
kubectl delete namespace "$NS" --ignore-not-found
prompt:
inline: |
Get the filesystem information from the VirtualMachine "test-vm" in the ${EVAL_NAMESPACE:-vm-test} namespace.

Report the mounted filesystems you find.
83 changes: 83 additions & 0 deletions evals/tasks/kubevirt/get-vm-ip-address/task.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
kind: Task
metadata:
labels:
suite: kubevirt
requires: kubevirt
name: "get-vm-ip-address"
difficulty: easy
description: "Use vm_guest_info to get the IP address from inside a VM"
steps:
setup:
inline: |-
#!/usr/bin/env bash
set -e
NS="${EVAL_NAMESPACE:-vm-test}"
kubectl delete namespace "$NS" --ignore-not-found
kubectl create namespace "$NS"

# Create a VM with guest agent and network interfaces
kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: test-vm
namespace: $NS
spec:
runStrategy: Always
template:
spec:
domain:
devices:
disks:
- name: containerdisk
disk:
bus: virtio
- name: cloudinitdisk
disk:
bus: virtio
resources:
requests:
memory: 2Gi
volumes:
- name: containerdisk
containerDisk:
image: quay.io/containerdisks/fedora:latest
- name: cloudinitdisk
cloudInitNoCloud:
userData: |
#cloud-config
password: fedora
chpasswd: { expire: False }
packages:
- qemu-guest-agent
runcmd:
- systemctl enable qemu-guest-agent
- systemctl start qemu-guest-agent
EOF

kubectl wait --for=create vm/test-vm -n "${NS}" --timeout=30s
echo "VM created with guest agent."
verify:
inline: |-
#!/usr/bin/env bash
set -e
NS="${EVAL_NAMESPACE:-vm-test}"

if ! kubectl get vm test-vm -n "$NS" &>/dev/null; then
echo "ERROR: VirtualMachine 'test-vm' not found"
exit 1
fi

echo "Verification passed: VM exists"
exit 0
cleanup:
inline: |-
#!/usr/bin/env bash
NS="${EVAL_NAMESPACE:-vm-test}"
kubectl delete virtualmachine test-vm -n "$NS" --ignore-not-found
kubectl delete namespace "$NS" --ignore-not-found
prompt:
inline: |
Get the IP address of the VirtualMachine "test-vm" in the ${EVAL_NAMESPACE:-vm-test} namespace from inside the guest OS.

Report the IP address you find.
82 changes: 82 additions & 0 deletions evals/tasks/kubevirt/get-vm-os-info/task.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
kind: Task
metadata:
labels:
suite: kubevirt
requires: kubevirt
name: "get-vm-os-info"
difficulty: easy
description: "Use vm_guest_info to get OS information from inside a VM"
steps:
setup:
inline: |-
#!/usr/bin/env bash
set -e
NS="${EVAL_NAMESPACE:-vm-test}"
kubectl delete namespace "$NS" --ignore-not-found
kubectl create namespace "$NS"

# Create a VM with guest agent
kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: test-vm
namespace: $NS
spec:
runStrategy: Always
template:
spec:
domain:
devices:
disks:
- name: containerdisk
disk:
bus: virtio
- name: cloudinitdisk
disk:
bus: virtio
resources:
requests:
memory: 2Gi
volumes:
- name: containerdisk
containerDisk:
image: quay.io/containerdisks/fedora:latest
- name: cloudinitdisk
cloudInitNoCloud:
userData: |
#cloud-config
hostname: test-vm
packages:
- qemu-guest-agent
runcmd:
- systemctl enable qemu-guest-agent
- systemctl start qemu-guest-agent
EOF

kubectl wait --for=create vm/test-vm -n "${NS}" --timeout=30s
echo "VM created with guest agent."
verify:
inline: |-
#!/usr/bin/env bash
set -e
NS="${EVAL_NAMESPACE:-vm-test}"

if ! kubectl get vm test-vm -n "$NS" &>/dev/null; then
echo "ERROR: VirtualMachine 'test-vm' not found"
exit 1
fi

echo "Verification passed: VM exists"
exit 0
cleanup:
inline: |-
#!/usr/bin/env bash
NS="${EVAL_NAMESPACE:-vm-test}"
kubectl delete virtualmachine test-vm -n "$NS" --ignore-not-found
kubectl delete namespace "$NS" --ignore-not-found
prompt:
inline: |
Get the OS information from the VirtualMachine "test-vm" in the ${EVAL_NAMESPACE:-vm-test} namespace.

Report the OS name and version you find.
86 changes: 86 additions & 0 deletions evals/tasks/kubevirt/list-vm-users/task.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
kind: Task
metadata:
labels:
suite: kubevirt
requires: kubevirt
name: "list-vm-users"
difficulty: easy
description: "Use vm_guest_info to list currently logged-in users in a VM"
steps:
setup:
inline: |-
#!/usr/bin/env bash
set -e
NS="${EVAL_NAMESPACE:-vm-test}"
kubectl delete namespace "$NS" --ignore-not-found
kubectl create namespace "$NS"

# Create a VM with guest agent and defined users
kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: test-vm
namespace: $NS
spec:
runStrategy: Always
template:
spec:
domain:
devices:
disks:
- name: containerdisk
disk:
bus: virtio
- name: cloudinitdisk
disk:
bus: virtio
resources:
requests:
memory: 2Gi
volumes:
- name: containerdisk
containerDisk:
image: quay.io/containerdisks/fedora:latest
- name: cloudinitdisk
cloudInitNoCloud:
userData: |
#cloud-config
users:
- name: admin
sudo: ALL=(ALL) NOPASSWD:ALL
- name: developer
groups: developers
packages:
- qemu-guest-agent
runcmd:
- systemctl enable qemu-guest-agent
- systemctl start qemu-guest-agent
EOF

kubectl wait --for=create vm/test-vm -n "${NS}" --timeout=30s
echo "VM created with guest agent."
verify:
inline: |-
#!/usr/bin/env bash
set -e
NS="${EVAL_NAMESPACE:-vm-test}"

if ! kubectl get vm test-vm -n "$NS" &>/dev/null; then
echo "ERROR: VirtualMachine 'test-vm' not found"
exit 1
fi

echo "Verification passed: VM exists"
exit 0
cleanup:
inline: |-
#!/usr/bin/env bash
NS="${EVAL_NAMESPACE:-vm-test}"
kubectl delete virtualmachine test-vm -n "$NS" --ignore-not-found
kubectl delete namespace "$NS" --ignore-not-found
prompt:
inline: |
Get the list of currently logged-in users from the VirtualMachine "test-vm" in the ${EVAL_NAMESPACE:-vm-test} namespace.

Report the usernames you find.
Loading