mirror of https://github.com/docker/docs.git
FIX #2171 Fix faulty flag and add tests for SetConfigFromFlags
Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
parent
d07e4e259a
commit
11922080a1
|
@ -150,7 +150,7 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
|
|||
Usage: "AWS spot instance bid price (in dollar)",
|
||||
Value: defaultSpotPrice,
|
||||
},
|
||||
mcnflag.StringFlag{
|
||||
mcnflag.BoolFlag{
|
||||
Name: "amazonec2-private-address-only",
|
||||
Usage: "Only use a private IP address",
|
||||
},
|
||||
|
|
|
@ -7,6 +7,8 @@ import (
|
|||
|
||||
"github.com/docker/machine/commands/mcndirs"
|
||||
"github.com/docker/machine/drivers/amazonec2/amz"
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -235,3 +237,22 @@ func TestValidateAwsRegionInvalid(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver, err := getTestDriver()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"amazonec2-region": "us-west-2",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package digitalocean
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"digitalocean-access-token": "TOKEN",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package exoscale
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"exoscale-api-key": "API_KEY",
|
||||
"exoscale-api-secret-key": "API_SECRET_KEY",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package generic
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"generic-ip-address": "localhost",
|
||||
"generic-ssh-key": "path",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package google
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"google-project": "PROJECT",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package hyperv
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package openstack
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"openstack-auth-url": "http://url",
|
||||
"openstack-username": "user",
|
||||
"openstack-password": "pwd",
|
||||
"openstack-tenant-id": "ID",
|
||||
"openstack-flavor-id": "ID",
|
||||
"openstack-image-id": "ID",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package rackspace
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"rackspace-region": "REGION",
|
||||
"rackspace-username": "user",
|
||||
"rackspace-api-key": "KEY",
|
||||
"rackspace-endpoint-type": "publicURL",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -6,6 +6,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/docker/machine/commands/mcndirs"
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
@ -101,3 +102,23 @@ func TestHostnameDefaultsToMachineName(t *testing.T) {
|
|||
assert.Equal(t, machineTestName, d.deviceConfig.Hostname)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"softlayer-api-key": "KEY",
|
||||
"softlayer-user": "user",
|
||||
"softlayer-api-endpoint": "ENDPOINT",
|
||||
"softlayer-domain": "DOMAIN",
|
||||
"softlayer-region": "REGION",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/docker/machine/libmachine/state"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
@ -180,3 +181,17 @@ func TestInvalidNetworkIpCIDR(t *testing.T) {
|
|||
func newTestDriver(name string) *Driver {
|
||||
return NewDriver(name, "")
|
||||
}
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package vmwarefusion
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package vmwarevcloudair
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{
|
||||
"vmwarevcloudair-username": "root",
|
||||
"vmwarevcloudair-password": "pwd",
|
||||
"vmwarevcloudair-vdcid": "ID",
|
||||
"vmwarevcloudair-publicip": "IP",
|
||||
},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package vmwarevsphere
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSetConfigFromFlags(t *testing.T) {
|
||||
driver := NewDriver("default", "path")
|
||||
|
||||
checkFlags := &drivers.CheckDriverOptions{
|
||||
FlagsValues: map[string]interface{}{},
|
||||
CreateFlags: driver.GetCreateFlags(),
|
||||
}
|
||||
|
||||
err := driver.SetConfigFromFlags(checkFlags)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, checkFlags.InvalidFlags)
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
package drivers
|
||||
|
||||
import "github.com/docker/machine/libmachine/mcnflag"
|
||||
|
||||
// CheckDriverOptions implements DriverOptions and is used to validate flag parsing
|
||||
type CheckDriverOptions struct {
|
||||
FlagsValues map[string]interface{}
|
||||
CreateFlags []mcnflag.Flag
|
||||
InvalidFlags []string
|
||||
}
|
||||
|
||||
func (o *CheckDriverOptions) String(key string) string {
|
||||
for _, flag := range o.CreateFlags {
|
||||
if flag.String() == key {
|
||||
_, ok := flag.(mcnflag.StringFlag)
|
||||
if !ok {
|
||||
o.InvalidFlags = append(o.InvalidFlags, flag.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
value, present := o.FlagsValues[key].(string)
|
||||
if present {
|
||||
return value
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (o *CheckDriverOptions) StringSlice(key string) []string {
|
||||
for _, flag := range o.CreateFlags {
|
||||
if flag.String() == key {
|
||||
_, ok := flag.(mcnflag.StringSliceFlag)
|
||||
if !ok {
|
||||
o.InvalidFlags = append(o.InvalidFlags, flag.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
value, present := o.FlagsValues[key].([]string)
|
||||
if present {
|
||||
return value
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (o *CheckDriverOptions) Int(key string) int {
|
||||
for _, flag := range o.CreateFlags {
|
||||
if flag.String() == key {
|
||||
_, ok := flag.(mcnflag.IntFlag)
|
||||
if !ok {
|
||||
o.InvalidFlags = append(o.InvalidFlags, flag.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
value, present := o.FlagsValues[key].(int)
|
||||
if present {
|
||||
return value
|
||||
}
|
||||
return 42
|
||||
}
|
||||
|
||||
func (o *CheckDriverOptions) Bool(key string) bool {
|
||||
for _, flag := range o.CreateFlags {
|
||||
if flag.String() == key {
|
||||
_, ok := flag.(mcnflag.BoolFlag)
|
||||
if !ok {
|
||||
o.InvalidFlags = append(o.InvalidFlags, flag.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
value, present := o.FlagsValues[key].(bool)
|
||||
if present {
|
||||
return value
|
||||
}
|
||||
return false
|
||||
}
|
Loading…
Reference in New Issue