forked from yadutaf/docker-machine-driver-ovh
/
driver.go
117 lines (105 loc) · 3.02 KB
/
driver.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package main
import (
"fmt"
"strings"
"github.com/docker/machine/drivers/openstack"
"github.com/docker/machine/libmachine/drivers"
"github.com/docker/machine/libmachine/mcnflag"
)
// Driver is a machine driver for OVH. It's a specialization of the generic OpenStack one.
type Driver struct {
*openstack.Driver
}
// GetCreateFlags registers the "machine create" flags recognized by this driver, including
// their help text and defaults.
func (d *Driver) GetCreateFlags() []mcnflag.Flag {
return []mcnflag.Flag{
mcnflag.StringFlag{
EnvVar: "OS_USERNAME",
Name: "ovh-username",
Usage: "OVH Cloud username",
Value: "",
},
mcnflag.StringFlag{
EnvVar: "OS_PASSWORD",
Name: "ovh-password",
Usage: "OVH Cloud password",
Value: "",
},
mcnflag.StringFlag{
EnvVar: "OS_TENANT_NAME",
Name: "ovh-tenant-name",
Usage: "OVH Cloud project name",
Value: "",
},
mcnflag.StringFlag{
EnvVar: "OS_TENANT_ID",
Name: "ovh-tenant-id",
Usage: "OVH Cloud project id",
Value: "",
},
mcnflag.StringFlag{
EnvVar: "OS_REGION_NAME",
Name: "ovh-region",
Usage: "OVH Cloud region name",
Value: defaultRegionName,
},
mcnflag.StringFlag{
EnvVar: "OS_FLAVOR_NAME",
Name: "ovh-flavor",
Usage: "OVH Cloud flavor name. Default: VPS SSD 2GB",
Value: defaultFlavorName,
},
mcnflag.StringFlag{
EnvVar: "OS_SECURITY_GROUPS",
Name: "ovh-sec-groups",
Usage: "OVH Cloud comma separated security groups for the machine",
Value: defaultSecurityGroup,
},
}
}
// DriverName returns the name of the driver
func (d *Driver) DriverName() string {
return "ovh"
}
func missingEnvOrOption(setting, envVar, opt string) error {
return fmt.Errorf(
"%s must be specified either using the environment variable %s or the CLI option %s",
setting,
envVar,
opt,
)
}
// SetConfigFromFlags assigns and verifies the command-line arguments presented to the driver.
func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
d.AuthUrl = authUrl
d.Username = flags.String("ovh-username")
d.Password = flags.String("ovh-password")
d.TenantId = flags.String("ovh-tenant-id")
d.TenantName = flags.String("ovh-tenant-name")
d.Region = flags.String("ovh-region")
d.FlavorName = flags.String("ovh-flavor")
d.ImageName = imageName
d.SSHUser = SSHUser
d.IpVersion = 4
d.NetworkName = networkName
if flags.String("ovh-sec-groups") != "" {
d.SecurityGroups = strings.Split(flags.String("ovh-sec-groups"), ",")
}
d.SwarmMaster = flags.Bool("swarm-master")
d.SwarmHost = flags.String("swarm-host")
d.SwarmDiscovery = flags.String("swarm-discovery")
if d.Username == "" {
return missingEnvOrOption("Username", "OS_USERNAME", "--ovh-username")
}
if d.Username == "" {
return missingEnvOrOption("Password", "OS_PASSWORD", "--ovh-password")
}
if d.Username == "" {
return missingEnvOrOption("Project name", "OS_TENANT_NAME", "--ovh-tenant_name")
}
if d.Username == "" {
return missingEnvOrOption("Project ID", "OS_TENANT_ID", "--ovh-tenant-id")
}
return nil
}