package befehle import ( "fmt" "strings" "github.com/spf13/cobra" ) func (u *umgebung) templateBefehl() *cobra.Command { gruppe := &cobra.Command{Use: "template", Short: "Templates ansehen und bauen"} var listeServer string liste := &cobra.Command{ Use: "list", Short: "ProxDeploy-Templates eines Servers", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { c, instanz, err := u.client() if err != nil { return err } if listeServer == "" { listeServer = instanz.Server } if listeServer == "" { return bedienfehler("--server fehlt") } templates, err := c.TemplatesListe(cmd.Context(), listeServer) if err != nil { return err } if u.opt.json { return u.jsonAusgeben(templates) } zeilen := [][]string{} for _, t := range templates { profile := "–" if len(t.Profile) > 0 { profile = strings.Join(t.Profile, ", ") } zeilen = append(zeilen, []string{fmt.Sprint(t.Vmid), t.Name, t.Knoten, wert(t.DistributionId), profile}) } u.tabelle(u.stil(), []string{"VMID", "NAME", "NODE", "DISTRIBUTION", "PROFILE"}, zeilen) return nil }, } liste.Flags().StringVar(&listeServer, "server", "", "Proxmox-Server") var server, distro, knoten, storage, bridge string var vlan int var profile []string var nichtWarten bool bauen := &cobra.Command{ Use: "build", Short: "Template aus dem Cloud-Image bauen", Example: " proxdeploy template build --server rz1 --distro debian-13\n proxdeploy template build --server rz1 --distro debian-13 --profile base,docker", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { c, instanz, err := u.client() if err != nil { return err } if server == "" { server = instanz.Server } if server == "" { return bedienfehler("--server fehlt") } if distro == "" { return bedienfehler("--distro fehlt (siehe `proxdeploy distros --type vm`)") } anfrage := map[string]any{"distribution": distro} gesetzt := cmd.Flags().Changed if gesetzt("node") { anfrage["knoten"] = knoten } if gesetzt("storage") { anfrage["storage"] = storage } if gesetzt("bridge") { anfrage["bridge"] = bridge } if gesetzt("vlan") { anfrage["vlan"] = vlan } if gesetzt("profile") { anfrage["profile"] = profile } angenommen, err := c.TemplateBauen(cmd.Context(), server, anfrage) if err != nil { return err } return u.angenommen(cmd.Context(), c, angenommen, nichtWarten) }, } f := bauen.Flags() f.StringVar(&server, "server", "", "Proxmox-Server") f.StringVar(&distro, "distro", "", "Distribution, z. B. debian-13") f.StringVar(&knoten, "node", "", "Node (Standard: aus den Server-Einstellungen bzw. der erste)") f.StringVar(&storage, "storage", "", "Storage für die Disk (Standard: aus den Server-Einstellungen)") f.StringVar(&bridge, "bridge", "", "Bridge der Vorbereitungs-VM (Standard: vmbr0)") f.IntVar(&vlan, "vlan", 0, "VLAN der Vorbereitungs-VM") f.StringSliceVar(&profile, "profile", nil, "Profile einbacken, z. B. base,docker") f.BoolVar(&nichtWarten, "no-wait", false, "nicht verfolgen, nur die Auftrags-ID ausgeben") gruppe.AddCommand(liste, bauen) return gruppe }