Refactor option management to use codegangsta/cli

Signed-off-by: Guillaume Giamarchi <guillaume.giamarchi@gmail.com>
This commit is contained in:
Guillaume Giamarchi 2014-12-13 03:28:54 +01:00
parent c304288a82
commit c16adeb46f
2 changed files with 177 additions and 177 deletions

View File

@ -3,13 +3,12 @@ package openstack
import ( import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os"
"os/exec" "os/exec"
"path" "path"
"strings" "strings"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
flag "github.com/docker/docker/pkg/mflag" "github.com/codegangsta/cli"
"github.com/docker/docker/utils" "github.com/docker/docker/utils"
"github.com/docker/machine/drivers" "github.com/docker/machine/drivers"
"github.com/docker/machine/ssh" "github.com/docker/machine/ssh"
@ -63,99 +62,106 @@ type CreateFlags struct {
func init() { func init() {
drivers.Register("openstack", &drivers.RegisteredDriver{ drivers.Register("openstack", &drivers.RegisteredDriver{
New: NewDriver, New: NewDriver,
RegisterCreateFlags: RegisterCreateFlags, GetCreateFlags: GetCreateFlags,
}) })
} }
func RegisterCreateFlags(cmd *flag.FlagSet) interface{} { func GetCreateFlags() []cli.Flag {
createFlags := new(CreateFlags) return []cli.Flag{
createFlags.AuthUrl = cmd.String( cli.StringFlag{
[]string{"-openstack-auth-url"}, EnvVar: "OS_AUTH_URL",
os.Getenv("OS_AUTH_URL"), Name: "openstack-auth-url",
"OpenStack authentication URL", Usage: "OpenStack authentication URL",
) Value: "",
createFlags.Username = cmd.String( },
[]string{"-openstack-username"}, cli.StringFlag{
os.Getenv("OS_USERNAME"), EnvVar: "OS_USERNAME",
"OpenStack username", Name: "openstack-username",
) Usage: "OpenStack username",
createFlags.Password = cmd.String( Value: "",
[]string{"-openstack-password"}, },
os.Getenv("OS_PASSWORD"), cli.StringFlag{
"OpenStack password", EnvVar: "OS_PASSWORD",
) Name: "openstack-password",
createFlags.TenantName = cmd.String( Usage: "OpenStack password",
[]string{"-openstack-tenant-name"}, Value: "",
os.Getenv("OS_TENANT_NAME"), },
"OpenStack tenant name", cli.StringFlag{
) EnvVar: "OS_TENANT_NAME",
createFlags.TenantId = cmd.String( Name: "openstack-tenant-name",
[]string{"-openstack-tenant-id"}, Usage: "OpenStack tenant name",
os.Getenv("OS_TENANT_ID"), Value: "",
"OpenStack tenant id", },
) cli.StringFlag{
createFlags.Region = cmd.String( EnvVar: "OS_TENANT_ID",
[]string{"-openstack-region"}, Name: "openstack-tenant-id",
os.Getenv("OS_REGION_NAME"), Usage: "OpenStack tenant id",
"OpenStack region name", Value: "",
) },
createFlags.EndpointType = cmd.String( cli.StringFlag{
[]string{"-openstack-endpoint-type"}, EnvVar: "OS_REGION_NAME",
os.Getenv("OS_ENDPOINT_TYPE"), Name: "openstack-region",
"OpenStack endpoint type (adminURL, internalURL or the default publicURL)", Usage: "OpenStack region name",
) Value: "",
createFlags.FlavorId = cmd.String( },
[]string{"-openstack-flavor-id"}, cli.StringFlag{
"", EnvVar: "OS_ENDPOINT_TYPE",
"OpenStack flavor id to use for the instance", Name: "openstack-endpoint-type",
) Usage: "OpenStack endpoint type (adminURL, internalURL or publicURL)",
createFlags.FlavorName = cmd.String( Value: "",
[]string{"-openstack-flavor-name"}, },
"", cli.StringFlag{
"OpenStack flavor name to use for the instance", Name: "openstack-flavor-id",
) Usage: "OpenStack flavor id to use for the instance",
createFlags.ImageId = cmd.String( Value: "",
[]string{"-openstack-image-id"}, },
"", cli.StringFlag{
"OpenStack image id to use for the instance", Name: "openstack-flavor-name",
) Usage: "OpenStack flavor name to use for the instance",
createFlags.ImageName = cmd.String( Value: "",
[]string{"-openstack-image-name"}, },
"", cli.StringFlag{
"OpenStack image name to use for the instance", Name: "openstack-image-id",
) Usage: "OpenStack image id to use for the instance",
createFlags.NetworkId = cmd.String( Value: "",
[]string{"-openstack-net-id"}, },
"", cli.StringFlag{
"OpenStack network id the machine will be connected on", Name: "openstack-image-name",
) Usage: "OpenStack image name to use for the instance",
createFlags.NetworkName = cmd.String( Value: "",
[]string{"-openstack-net-name"}, },
"", cli.StringFlag{
"OpenStack network name the machine will be connected on", Name: "openstack-net-id",
) Usage: "OpenStack image name to use for the instance",
createFlags.SecurityGroups = cmd.String( Value: "",
[]string{"-openstack-sec-groups"}, },
"", cli.StringFlag{
"OpenStack comma separated security groups for the machine", Name: "openstack-net-name",
) Usage: "OpenStack network name the machine will be connected on",
createFlags.FloatingIpPool = cmd.String( Value: "",
[]string{"-openstack-floatingip-pool"}, },
"", cli.StringFlag{
"OpenStack floating IP pool to get an IP from to assign to the instance", Name: "openstack-sec-groups",
) Usage: "OpenStack comma separated security groups for the machine",
createFlags.SSHUser = cmd.String( Value: "",
[]string{"-openstack-ssh-user"}, },
"root", cli.StringFlag{
"OpenStack SSH user. Set to root by default", Name: "openstack-floatingip-pool",
) Usage: "OpenStack floating IP pool to get an IP from to assign to the instance",
createFlags.SSHPort = cmd.Int( Value: "",
[]string{"-openstack-ssh-port"}, },
22, cli.StringFlag{
"OpenStack SSH port. Set to 22 by default", Name: "openstack-ssh-user",
) Usage: "OpenStack SSH user",
return createFlags Value: "root",
},
cli.IntFlag{
Name: "openstack-ssh-port",
Usage: "OpenStack SSH port",
Value: 22,
},
}
} }
func NewDriver(storePath string) (drivers.Driver, error) { func NewDriver(storePath string) (drivers.Driver, error) {
@ -177,28 +183,26 @@ func (d *Driver) DriverName() string {
return "openstack" return "openstack"
} }
func (d *Driver) SetConfigFromFlags(flagsInterface interface{}) error { func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
flags := flagsInterface.(*CreateFlags) d.AuthUrl = flags.String("openstack-auth-url")
d.AuthUrl = *flags.AuthUrl d.Username = flags.String("openstack-username")
d.Username = *flags.Username d.Password = flags.String("openstack-password")
d.Password = *flags.Password d.TenantName = flags.String("openstack-tenant-name")
d.TenantName = *flags.TenantName d.TenantId = flags.String("openstack-tenant-id")
d.TenantId = *flags.TenantId d.Region = flags.String("openstack-region")
d.Region = *flags.Region d.EndpointType = flags.String("openstack-endpoint-type")
d.EndpointType = *flags.EndpointType d.FlavorId = flags.String("openstack-flavor-id")
d.FlavorName = *flags.FlavorName d.FlavorName = flags.String("openstack-flavor-name")
d.FlavorId = *flags.FlavorId d.ImageId = flags.String("openstack-image-id")
d.ImageName = *flags.ImageName d.ImageName = flags.String("openstack-image-name")
d.ImageId = *flags.ImageId d.NetworkId = flags.String("openstack-net-id")
d.NetworkId = *flags.NetworkId d.NetworkName = flags.String("openstack-net-name")
d.NetworkName = *flags.NetworkName if flags.String("openstack-sec-groups") != "" {
if *flags.SecurityGroups != "" { d.SecurityGroups = strings.Split(flags.String("openstack-sec-groups"), ",")
d.SecurityGroups = strings.Split(*flags.SecurityGroups, ",")
} }
d.FloatingIpPool = *flags.FloatingIpPool d.FloatingIpPool = flags.String("openstack-floatingip-pool")
d.SSHUser = *flags.SSHUser d.SSHUser = flags.String("openstack-ssh-user")
d.SSHPort = *flags.SSHPort d.SSHPort = flags.Int("openstack-ssh-port")
return d.checkConfig() return d.checkConfig()
} }

View File

@ -2,10 +2,9 @@ package rackspace
import ( import (
"fmt" "fmt"
"os"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
flag "github.com/docker/docker/pkg/mflag" "github.com/codegangsta/cli"
"github.com/docker/machine/drivers" "github.com/docker/machine/drivers"
"github.com/docker/machine/drivers/openstack" "github.com/docker/machine/drivers/openstack"
) )
@ -32,60 +31,60 @@ type CreateFlags struct {
func init() { func init() {
drivers.Register("rackspace", &drivers.RegisteredDriver{ drivers.Register("rackspace", &drivers.RegisteredDriver{
New: NewDriver, New: NewDriver,
RegisterCreateFlags: RegisterCreateFlags, GetCreateFlags: GetCreateFlags,
}) })
} }
// RegisterCreateFlags registers the "machine create" flags recognized by this driver, including // GetCreateFlags registers the "machine create" flags recognized by this driver, including
// their help text and defaults. // their help text and defaults.
func RegisterCreateFlags(cmd *flag.FlagSet) interface{} { func GetCreateFlags() []cli.Flag {
createFlags := new(CreateFlags) return []cli.Flag{
createFlags.Username = cmd.String( cli.StringFlag{
[]string{"-rackspace-username"}, EnvVar: "OS_USERNAME",
os.Getenv("OS_USERNAME"), Name: "rackspace-username",
"Rackspace account username", Usage: "Rackspace account username",
) Value: "",
createFlags.APIKey = cmd.String( },
[]string{"-rackspace-api-key"}, cli.StringFlag{
os.Getenv("OS_API_KEY"), EnvVar: "OS_API_KEY",
"Rackspace API key", Name: "rackspace-api-key",
) Usage: "Rackspace API key",
createFlags.Region = cmd.String( Value: "",
[]string{"-rackspace-region"}, },
os.Getenv("OS_REGION_NAME"), cli.StringFlag{
"Rackspace region name", EnvVar: "OS_REGION_NAME",
) Name: "rackspace-region",
endpointDefault := os.Getenv("OS_ENDPOINT_TYPE") Usage: "Rackspace region name",
if endpointDefault == "" { Value: "",
endpointDefault = "publicURL" },
cli.StringFlag{
EnvVar: "OS_ENDPOINT_TYPE",
Name: "rackspace-endpoint-type",
Usage: "Rackspace endpoint type (adminURL, internalURL or the default publicURL)",
Value: "publicURL",
},
cli.StringFlag{
Name: "rackspace-image-id",
Usage: "Rackspace image ID. Default: Ubuntu 14.10 (Utopic Unicorn) (PVHVM)",
Value: "",
},
cli.StringFlag{
Name: "rackspace-flavor-id",
Usage: "Rackspace flavor ID. Default: General Purpose 1GB",
Value: "general1-1",
},
cli.StringFlag{
Name: "rackspace-ssh-user",
Usage: "SSH user for the newly booted machine. Set to root by default",
Value: "root",
},
cli.IntFlag{
Name: "rackspace-ssh-port",
Usage: "SSH port for the newly booted machine. Set to 22 by default",
Value: 22,
},
} }
createFlags.EndpointType = cmd.String(
[]string{"-rackspace-endpoint-type"},
endpointDefault,
"Rackspace endpoint type (adminURL, internalURL or the default publicURL)",
)
createFlags.ImageID = cmd.String(
[]string{"-rackspace-image-id"},
"",
"Rackspace image ID. Default: Ubuntu 14.10 (Utopic Unicorn) (PVHVM)",
)
createFlags.FlavorID = cmd.String(
[]string{"-rackspace-flavor-id"},
"general1-1",
"Rackspace flavor ID. Default: General Purpose 1GB",
)
createFlags.SSHUser = cmd.String(
[]string{"-rackspace-ssh-user"},
"root",
"SSH user for the newly booted machine. Set to root by default",
)
createFlags.SSHPort = cmd.Int(
[]string{"-rackspace-ssh-port"},
22,
"SSH port for the newly booted machine. Set to 22 by default",
)
return createFlags
} }
// NewDriver instantiates a Rackspace driver. // NewDriver instantiates a Rackspace driver.
@ -111,19 +110,16 @@ func (d *Driver) DriverName() string {
} }
// SetConfigFromFlags assigns and verifies the command-line arguments presented to the driver. // SetConfigFromFlags assigns and verifies the command-line arguments presented to the driver.
func (d *Driver) SetConfigFromFlags(flagsInterface interface{}) error { func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
flags := flagsInterface.(*CreateFlags) d.Username = flags.String("rackspace-username")
d.APIKey = flags.String("rackspace-api-key")
d.Username = *flags.Username d.Region = flags.String("rackspace-region")
d.APIKey = *flags.APIKey d.EndpointType = flags.String("rackspace-endpoint-type")
d.Region = *flags.Region d.ImageId = flags.String("rackspace-image-id")
d.EndpointType = *flags.EndpointType d.FlavorId = flags.String("rackspace-flavor-id")
d.ImageId = *flags.ImageID d.SSHUser = flags.String("rackspace-ssh-user")
d.FlavorId = *flags.FlavorID d.SSHPort = flags.Int("rackspace-ssh-port")
d.SSHUser = *flags.SSHUser return nil
d.SSHPort = *flags.SSHPort
return d.checkConfig()
} }
func missingEnvOrOption(setting, envVar, opt string) error { func missingEnvOrOption(setting, envVar, opt string) error {