Update core components including CLI, Nushell libraries, plugins system, and utility scripts for the provisioning system. CLI Updates: - Command implementations - CLI utilities and dispatching - Help system improvements - Command validation Library Updates: - Configuration management system - Infrastructure validation - Extension system improvements - Secrets management - Workspace operations - Cache management system Plugin System: - Interactive form plugin (inquire) - KCL integration plugin - Performance optimization plugins - Plugin registration system Utilities: - Build and distribution scripts - Installation procedures - Testing utilities - Development tools Documentation: - Library module documentation - Extension API guides - Plugin usage guides - Service management documentation All changes are backward compatible. No breaking changes.
266 lines
5.9 KiB
Plaintext
266 lines
5.9 KiB
Plaintext
# Virtual Machine CLI Commands
|
|
#
|
|
# User-facing commands for VM management.
|
|
# Part of Phase 1: VM Lifecycle Foundation
|
|
|
|
use lib_provisioning/vm/ {
|
|
"vm-create"
|
|
"vm-start"
|
|
"vm-stop"
|
|
"vm-delete"
|
|
"vm-list"
|
|
"vm-info"
|
|
"vm-ssh"
|
|
"vm-scp-to"
|
|
"vm-scp-from"
|
|
"vm-exec"
|
|
}
|
|
|
|
export def "vm create" [
|
|
name: string # VM name
|
|
--base-image: string # Base OS image
|
|
--cpu: int = 2 # CPU cores
|
|
--memory: int = 4096 # Memory in MB
|
|
--disk: int = 20 # Disk in GB
|
|
--permanent = false # Keep after restart
|
|
--temporary = false # Auto-cleanup
|
|
--auto-cleanup-hours: int = 24 # TTL if temporary
|
|
--taskserv: string # Single taskserv to install
|
|
--network: string = "bridge" # Network mode
|
|
]: table {
|
|
"""
|
|
Create a virtual machine.
|
|
|
|
Examples:
|
|
# Temporary test VM
|
|
provisioning vm create test-k8s \\
|
|
--temporary \\
|
|
--cpu 4 --memory 8192
|
|
|
|
# Permanent dev VM
|
|
provisioning vm create dev-rust \\
|
|
--permanent \\
|
|
--cpu 8 --memory 16384 --disk 50 \\
|
|
--taskserv rust
|
|
|
|
# With custom image
|
|
provisioning vm create test \\
|
|
--base-image ubuntu-22.04 \\
|
|
--temporary
|
|
"""
|
|
|
|
let config = {
|
|
name: $name
|
|
base_image: ($base_image // "ubuntu-22.04")
|
|
cpu: $cpu
|
|
memory_mb: $memory
|
|
disk_gb: $disk
|
|
permanent: $permanent
|
|
temporary: $temporary
|
|
auto_cleanup: $temporary
|
|
auto_cleanup_hours: $auto_cleanup_hours
|
|
taskserv: $taskserv
|
|
network_mode: $network
|
|
backend: "libvirt"
|
|
}
|
|
|
|
let result = (vm-create $config)
|
|
|
|
if $result.success {
|
|
print $"✓ VM '($name)' created successfully"
|
|
print $" ID: ($result.vm_id)"
|
|
print $" Disk: ($result.disk_path)"
|
|
} else {
|
|
print $"✗ Failed to create VM: ($result.error)"
|
|
}
|
|
|
|
[$result]
|
|
}
|
|
|
|
export def "vm list" [
|
|
--permanent = false # List only permanent
|
|
--temporary = false # List only temporary
|
|
--running = false # List only running
|
|
]: table {
|
|
"""
|
|
List virtual machines.
|
|
|
|
Examples:
|
|
# List all VMs
|
|
provisioning vm list
|
|
|
|
# List permanent VMs
|
|
provisioning vm list --permanent
|
|
|
|
# List running VMs
|
|
provisioning vm list --running
|
|
"""
|
|
|
|
vm-list --permanent=$permanent --temporary=$temporary --running=$running
|
|
}
|
|
|
|
export def "vm start" [
|
|
name: string # VM name
|
|
]: table {
|
|
"""
|
|
Start a virtual machine.
|
|
|
|
Examples:
|
|
provisioning vm start dev-rust
|
|
"""
|
|
|
|
let result = (vm-start $name)
|
|
|
|
if $result.success {
|
|
print $"✓ VM '$name' started"
|
|
} else {
|
|
print $"✗ Failed to start VM: ($result.error)"
|
|
}
|
|
|
|
[$result]
|
|
}
|
|
|
|
export def "vm stop" [
|
|
name: string # VM name
|
|
--force = false # Force shutdown
|
|
]: table {
|
|
"""
|
|
Stop a virtual machine.
|
|
|
|
Examples:
|
|
provisioning vm stop dev-rust
|
|
provisioning vm stop test --force
|
|
"""
|
|
|
|
let result = (vm-stop $name --force=$force)
|
|
|
|
if $result.success {
|
|
print $"✓ VM '$name' stopped"
|
|
} else {
|
|
print $"✗ Failed to stop VM: ($result.error)"
|
|
}
|
|
|
|
[$result]
|
|
}
|
|
|
|
export def "vm delete" [
|
|
name: string # VM name
|
|
--force = false # Force deletion
|
|
]: table {
|
|
"""
|
|
Delete a virtual machine.
|
|
|
|
Examples:
|
|
provisioning vm delete test-k8s
|
|
"""
|
|
|
|
let result = (vm-delete $name --force=$force)
|
|
|
|
if $result.success {
|
|
print $"✓ VM '$name' deleted"
|
|
} else {
|
|
print $"✗ Failed to delete VM: ($result.error)"
|
|
}
|
|
|
|
[$result]
|
|
}
|
|
|
|
export def "vm info" [
|
|
name: string # VM name
|
|
]: record {
|
|
"""
|
|
Get VM information.
|
|
|
|
Examples:
|
|
provisioning vm info dev-rust
|
|
"""
|
|
|
|
vm-info $name
|
|
}
|
|
|
|
export def "vm ssh" [
|
|
name: string # VM name
|
|
--command: string # Command to execute
|
|
]: table {
|
|
"""
|
|
SSH into VM or execute command.
|
|
|
|
Examples:
|
|
# Interactive shell
|
|
provisioning vm ssh dev-rust
|
|
|
|
# Execute command
|
|
provisioning vm ssh dev-rust --command "uname -a"
|
|
|
|
# Run remote script
|
|
provisioning vm ssh test --command "bash /path/to/script.sh"
|
|
"""
|
|
|
|
let result = (vm-ssh $name --command=$command)
|
|
|
|
if not $result.success {
|
|
print $"✗ SSH failed: ($result.error)"
|
|
}
|
|
|
|
[$result]
|
|
}
|
|
|
|
export def "vm exec" [
|
|
name: string # VM name
|
|
command: string # Command to execute
|
|
]: table {
|
|
"""
|
|
Execute command in VM.
|
|
|
|
Examples:
|
|
provisioning vm exec dev-rust "cargo --version"
|
|
provisioning vm exec test "kubectl get nodes"
|
|
"""
|
|
|
|
let result = (vm-exec $name $command)
|
|
|
|
if $result.success {
|
|
print $result.output
|
|
} else {
|
|
print $"✗ Command failed: ($result.error)"
|
|
}
|
|
|
|
[$result]
|
|
}
|
|
|
|
export def "vm scp" [
|
|
direction: string # "to" or "from"
|
|
vm_name: string # VM name
|
|
src: string # Source path
|
|
dst: string # Destination path
|
|
]: table {
|
|
"""
|
|
Copy files to/from VM.
|
|
|
|
Examples:
|
|
# Copy to VM
|
|
provisioning vm scp to dev-rust /local/file /remote/path
|
|
|
|
# Copy from VM
|
|
provisioning vm scp from dev-rust /remote/file /local/path
|
|
"""
|
|
|
|
let result = (
|
|
if $direction == "to" {
|
|
vm-scp-to $vm_name $src $dst
|
|
} else if $direction == "from" {
|
|
vm-scp-from $vm_name $src $dst
|
|
} else {
|
|
{success: false, error: "Direction must be 'to' or 'from'"}
|
|
}
|
|
)
|
|
|
|
if $result.success {
|
|
print $"✓ ($result.message)"
|
|
} else {
|
|
print $"✗ Copy failed: ($result.error)"
|
|
}
|
|
|
|
[$result]
|
|
}
|