()
| 790 | } |
| 791 | |
| 792 | func newGuestsCreateVMCmd() *cobra.Command { |
| 793 | cmd := &cobra.Command{ |
| 794 | Use: "vm", |
| 795 | Short: "Create a new QEMU VM", |
| 796 | Long: "Create a new QEMU VM on a Proxmox node.", |
| 797 | Example: ` # Minimal VM with a new disk |
| 798 | pvetui guests create vm --node pve --name myvm --disk-storage local-zfs --disk-size 32 |
| 799 | |
| 800 | # Import an existing volume |
| 801 | pvetui guests create vm --node pve --name myvm --disk-storage local-zfs --import-from local:import/disk.img |
| 802 | |
| 803 | # With ISO, custom resources, start after create |
| 804 | pvetui guests create vm --node pve --name myvm --disk-storage local-zfs --disk-size 32 \ |
| 805 | --iso local:iso/debian-12.iso --memory 4096 --cores 4 --start |
| 806 | |
| 807 | # Return UPID immediately without waiting |
| 808 | pvetui guests create vm --node pve --name myvm --disk-storage local-zfs --disk-size 32 --no-wait`, |
| 809 | RunE: runGuestsCreateVM, |
| 810 | } |
| 811 | |
| 812 | cmd.Flags().String("node", "", "Target node name (required)") |
| 813 | cmd.Flags().String("name", "", "VM name (required)") |
| 814 | cmd.Flags().Int("vmid", 0, "VM ID (auto-assigned if omitted)") |
| 815 | cmd.Flags().Int("memory", 2048, "Memory in MB") |
| 816 | cmd.Flags().Int("cores", 2, "Number of CPU cores") |
| 817 | cmd.Flags().Int("sockets", 1, "Number of CPU sockets") |
| 818 | cmd.Flags().String("disk-storage", "", "Storage name for the primary disk (required)") |
| 819 | cmd.Flags().Int("disk-size", 0, "Primary disk size in GB (required unless --import-from)") |
| 820 | cmd.Flags().String("import-from", "", "Volume to import as primary disk (replaces --disk-size)") |
| 821 | cmd.Flags().String("iso", "", "ISO volume for CD-ROM (e.g. local:iso/debian-12.iso)") |
| 822 | cmd.Flags().String("bridge", "vmbr0", "Network bridge") |
| 823 | cmd.Flags().Bool("start", false, "Start VM after creation") |
| 824 | addNoWaitFlag(cmd) |
| 825 | |
| 826 | _ = cmd.MarkFlagRequired("node") |
| 827 | _ = cmd.MarkFlagRequired("name") |
| 828 | _ = cmd.MarkFlagRequired("disk-storage") |
| 829 | |
| 830 | cmd.ValidArgsFunction = cobra.NoFileCompletions |
| 831 | |
| 832 | return cmd |
| 833 | } |
| 834 | |
| 835 | func runGuestsCreateVM(cmd *cobra.Command, _ []string) error { |
| 836 | session, err := initCLISession(cmd) |
no test coverage detected