virtigo/argv.go

77 lines
3.1 KiB
Go

package main
import "go.wit.com/log"
/*
this parses the command line arguements
this enables command line options from other packages like 'gui' and 'log'
*/
var argv args
type args struct {
List *ListCmd `arg:"subcommand:list" help:"list things"`
Droplet *DropletCmd `arg:"subcommand:droplet" help:"send events to a droplet"`
Config string `arg:"env:VIRTIGO_HOME" help:"defaults to ~/.config/virtigo/"`
Server string `arg:"env:VIRTIGO_SERVER" help:"what virtigo cluster to connect to"`
Localhost bool `arg:"--localhost" help:"use the local libvirt"`
Daemon bool `arg:"--daemon" help:"run as a daemon"`
Verbose bool `arg:"--verbose" help:"talk more"`
Port int `arg:"--port" default:"8080" help:"allow droplet events via http"`
Xml []string `arg:"--libvirt" help:"import qemu xml files: --libvirt /etc/libvirt/qemu/*.xml"`
Admin bool `arg:"--admin" help:"enter admin mode"`
Bash bool `arg:"--bash" help:"generate bash completion"`
BashAuto []string `arg:"--auto-complete" help:"todo: move this to go-arg"`
}
type EmptyCmd struct {
}
type testCmd string
type ListCmd struct {
Droplets *EmptyCmd `arg:"subcommand:droplets" help:"list droplets"`
Hypervisors *EmptyCmd `arg:"subcommand:hypervisors" help:"list hypervisors"`
On bool `arg:"--on" help:"only show things that are on"`
}
type DropletCmd struct {
Start *EmptyCmd `arg:"subcommand:start" help:"start droplet"`
Stop *EmptyCmd `arg:"subcommand:stop" help:"stop droplet"`
Show *EmptyCmd `arg:"subcommand:show" help:"show droplet"`
Console *EmptyCmd `arg:"subcommand:console" help:"open serial console"`
VNC *EmptyCmd `arg:"subcommand:vnc" help:"open VNC console"`
Spice *EmptyCmd `arg:"subcommand:spice" help:"open spiceconsole"`
Name string `arg:"--name" help:"what droplet to start"`
}
func (a args) Description() string {
return `
virtigo: control your cluster
This maintains a master list of all your vm's (aka 'droplets')
in your homelab cloud. You can import libvirt xml files.
This app talks to your hypervisors via the virtigod daemon.
`
}
func (args) Version() string {
return ARGNAME + " " + VERSION + " Built on " + BUILDTIME
}
var INFO *log.LogFlag
var POLL *log.LogFlag
var WARN *log.LogFlag
var EVENT *log.LogFlag
func init() {
full := "go.wit.com/apps/virtigo"
short := "virtigo"
INFO = log.NewFlag("INFO", false, full, short, "general virtigo")
POLL = log.NewFlag("POLL", false, full, short, "virtigo polling")
WARN = log.NewFlag("WARN", true, full, short, "bad things")
EVENT = log.NewFlag("EVENT", true, full, short, "hypeprvisor/droplet events")
}