-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathhostctl.go
77 lines (65 loc) · 1.78 KB
/
hostctl.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package main
import (
"os"
"github.com/MattAitchison/env"
"github.com/gliderlabs/pkg/usage"
"github.com/spf13/cobra"
)
var (
Version string
versionChecker = usage.NewChecker("hostctl", Version)
providerName string
defaultName string
namespace string
hostImage string
hostFlavor string
hostRegion string
hostKeyname string
hostUserdata string
sshUser string
profile string
)
func readEnv() {
env.Clear()
providerName = env.String("HOSTCTL_PROVIDER", "digitalocean", "cloud provider")
defaultName = env.String("HOSTCTL_NAME", "", "optional default name")
namespace = env.String("HOSTCTL_NAMESPACE", "", "optional namespace for names")
hostImage = env.String("HOSTCTL_IMAGE", "", "vm image")
hostFlavor = env.String("HOSTCTL_FLAVOR", "", "vm flavor")
hostRegion = env.String("HOSTCTL_REGION", "", "vm region")
hostKeyname = env.String("HOSTCTL_KEYNAME", "", "vm keyname")
hostUserdata = env.String("HOSTCTL_USERDATA", "", "optional vm user data")
sshUser = env.String("HOSTCTL_USER", os.Getenv("USER"), "ssh user")
}
func init() {
readEnv()
Hostctl.PersistentFlags().StringVarP(&profile, "profile", "p", "", "profile to source")
Hostctl.AddCommand(versionCmd)
}
func main() {
fatal(Hostctl.Execute())
}
var Hostctl = &cobra.Command{
Use: "hostctl",
Short: "An opinionated tool for provisioning cloud VMs",
Run: func(cmd *cobra.Command, args []string) {
cmd.Help()
},
PersistentPreRun: func(cmd *cobra.Command, args []string) {
if exists(expandHome("~/.hostctl")) {
fatal(source(expandHome("~/.hostctl")))
readEnv()
}
if profile != "" {
fatal(source(profile))
readEnv()
}
},
}
var versionCmd = &cobra.Command{
Use: "version",
Short: "Show version",
Run: func(cmd *cobra.Command, args []string) {
versionChecker.PrintVersion()
},
}