-
Notifications
You must be signed in to change notification settings - Fork 0
/
run_instances.go
69 lines (55 loc) · 2.21 KB
/
run_instances.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
package commands
import (
"os"
"strconv"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/fuku2014/nifpo/nifcloud"
)
func runInstances() *cobra.Command {
cmd := &cobra.Command{
Use: "run-instances",
Short: "Create computing instance",
Run: func(cmd *cobra.Command, args []string) {
res, err := runRunInstances()
if err != nil {
cmd.Printf(err.Error())
os.Exit(1)
}
cmd.Printf(res)
},
}
// TODO 起動スクリプト
flags := cmd.Flags()
flags.StringP("image-id", "", "", "OS image ID.")
flags.StringP("key-name", "", "", "SSH Key Name.")
flags.StringP("security-group", "", "", "FW Group Name.")
flags.StringP("instance-type", "", "", "Server Type.")
flags.StringP("availability-zone", "", "", "Zone.")
flags.BoolP("disable-api-termination", "", false, "Whether to delete servers from the API.")
flags.StringP("accounting-type", "", "2", "Price type.")
flags.StringP("instance-id", "", "", "Server Name.")
flags.StringP("admin", "", "", "Admin Account Name for windows.")
flags.StringP("password", "", "", "Admin Account PW for windows.")
flags.StringP("ip-type", "", "static", "IP address type.")
flags.StringP("public-ip", "", "", "Elastic public IP address.")
flags.BoolP("agreement", "", false, "Red Hat Enterprise Linux 5.8 64bit / 6.3 64bit, or consent if SPLA server is specified.")
flags.StringP("description", "", "", "Description.")
viper.BindPFlag("computing.describe-instances.instance-ids", flags.Lookup("instance-ids"))
viper.BindPFlag("computing.describe-instances.tenancys", flags.Lookup("tenancys"))
return cmd
}
func runRunInstances() (res string, err error) {
client := nifcloud.NewClient(viper.GetString("region"), viper.GetString("access-key"), viper.GetString("secret-key"), viper.GetBool("debug"))
params := map[string]string{"Action": "RunInstances"}
instanceIds := viper.GetStringSlice("computing.describe-instances.instance-ids")
tenancys := viper.GetStringSlice("computing.describe-instances.tenancys")
for n, instanceId := range instanceIds {
params["InstanceId."+strconv.Itoa(n+1)] = instanceId
}
for n, tenancy := range tenancys {
params["Tenancy."+strconv.Itoa(n+1)] = tenancy
}
res, err = client.CallComputingAPI(params)
return
}