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

View File

@ -2,10 +2,9 @@ package rackspace
import (
"fmt"
"os"
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/openstack"
)
@ -32,60 +31,60 @@ type CreateFlags struct {
func init() {
drivers.Register("rackspace", &drivers.RegisteredDriver{
New: NewDriver,
RegisterCreateFlags: RegisterCreateFlags,
New: NewDriver,
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.
func RegisterCreateFlags(cmd *flag.FlagSet) interface{} {
createFlags := new(CreateFlags)
createFlags.Username = cmd.String(
[]string{"-rackspace-username"},
os.Getenv("OS_USERNAME"),
"Rackspace account username",
)
createFlags.APIKey = cmd.String(
[]string{"-rackspace-api-key"},
os.Getenv("OS_API_KEY"),
"Rackspace API key",
)
createFlags.Region = cmd.String(
[]string{"-rackspace-region"},
os.Getenv("OS_REGION_NAME"),
"Rackspace region name",
)
endpointDefault := os.Getenv("OS_ENDPOINT_TYPE")
if endpointDefault == "" {
endpointDefault = "publicURL"
func GetCreateFlags() []cli.Flag {
return []cli.Flag{
cli.StringFlag{
EnvVar: "OS_USERNAME",
Name: "rackspace-username",
Usage: "Rackspace account username",
Value: "",
},
cli.StringFlag{
EnvVar: "OS_API_KEY",
Name: "rackspace-api-key",
Usage: "Rackspace API key",
Value: "",
},
cli.StringFlag{
EnvVar: "OS_REGION_NAME",
Name: "rackspace-region",
Usage: "Rackspace region name",
Value: "",
},
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.
@ -111,19 +110,16 @@ func (d *Driver) DriverName() string {
}
// SetConfigFromFlags assigns and verifies the command-line arguments presented to the driver.
func (d *Driver) SetConfigFromFlags(flagsInterface interface{}) error {
flags := flagsInterface.(*CreateFlags)
d.Username = *flags.Username
d.APIKey = *flags.APIKey
d.Region = *flags.Region
d.EndpointType = *flags.EndpointType
d.ImageId = *flags.ImageID
d.FlavorId = *flags.FlavorID
d.SSHUser = *flags.SSHUser
d.SSHPort = *flags.SSHPort
return d.checkConfig()
func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
d.Username = flags.String("rackspace-username")
d.APIKey = flags.String("rackspace-api-key")
d.Region = flags.String("rackspace-region")
d.EndpointType = flags.String("rackspace-endpoint-type")
d.ImageId = flags.String("rackspace-image-id")
d.FlavorId = flags.String("rackspace-flavor-id")
d.SSHUser = flags.String("rackspace-ssh-user")
d.SSHPort = flags.Int("rackspace-ssh-port")
return nil
}
func missingEnvOrOption(setting, envVar, opt string) error {