diff --git a/drivers/openstack/client.go b/drivers/openstack/client.go index 8b5cb37318..791a66f45e 100644 --- a/drivers/openstack/client.go +++ b/drivers/openstack/client.go @@ -41,8 +41,7 @@ type Client interface { GetPublicKey(keyPairName string) ([]byte, error) CreateKeyPair(d *Driver, name string, publicKey string) error DeleteKeyPair(d *Driver, name string) error - GetNetworkIDs(d *Driver) ([]string, error) - GetNetworkID(d *Driver, networkName string) (string, error) + GetNetworkID(d *Driver) (string, error) GetFlavorID(d *Driver) (string, error) GetImageID(d *Driver) (string, error) AssignFloatingIP(d *Driver, floatingIP *FloatingIP) error @@ -67,12 +66,12 @@ func (c *GenericClient) CreateInstance(d *Driver) (string, error) { SecurityGroups: d.SecurityGroups, AvailabilityZone: d.AvailabilityZone, } - if len(d.NetworkIds) > 0 { - networks := make([]servers.Network, len(d.NetworkIds)) - for i, networkId := range d.NetworkIds { - networks[i] = servers.Network{UUID: networkId} + if d.NetworkId != "" { + serverOpts.Networks = []servers.Network{ + { + UUID: d.NetworkId, + }, } - serverOpts.Networks = networks } log.Info("Creating machine...") @@ -200,23 +199,15 @@ func (c *GenericClient) GetInstanceIPAddresses(d *Driver) ([]IPAddress, error) { return addresses, nil } -func (c *GenericClient) GetNetworkIDs(d *Driver) ([]string, error) { - networkIDs := make([]string, len(d.NetworkNames)) - for i, networkName := range d.NetworkNames { - id, err := c.GetNetworkID(d, networkName) - if err != nil { - return nil, err - } - networkIDs[i] = id - } - return networkIDs, nil +func (c *GenericClient) GetNetworkID(d *Driver) (string, error) { + return c.getNetworkID(d, d.NetworkName) } func (c *GenericClient) GetFloatingIPPoolID(d *Driver) (string, error) { - return c.GetNetworkID(d, d.FloatingIPPool) + return c.getNetworkID(d, d.FloatingIpPool) } -func (c *GenericClient) GetNetworkID(d *Driver, networkName string) (string, error) { +func (c *GenericClient) getNetworkID(d *Driver, networkName string) (string, error) { opts := networks.ListOpts{Name: networkName} pager := networks.List(c.Network, opts) networkID := "" @@ -354,7 +345,7 @@ func (c *GenericClient) AssignFloatingIP(d *Driver, floatingIP *FloatingIP) erro func (c *GenericClient) assignNovaFloatingIP(d *Driver, floatingIP *FloatingIP) error { if floatingIP.Ip == "" { f, err := compute_ips.Create(c.Compute, compute_ips.CreateOpts{ - Pool: d.FloatingIPPool, + Pool: d.FloatingIpPool, }).Extract() if err != nil { return err @@ -372,7 +363,7 @@ func (c *GenericClient) assignNeutronFloatingIP(d *Driver, floatingIP *FloatingI } if floatingIP.Id == "" { f, err := floatingips.Create(c.Network, floatingips.CreateOpts{ - FloatingNetworkID: d.FloatingIPPoolId, + FloatingNetworkID: d.FloatingIpPoolId, PortID: portID, }).Extract() if err != nil { @@ -409,7 +400,7 @@ func (c *GenericClient) getNovaNetworkFloatingIPs(d *Driver) ([]FloatingIP, erro ipListing, err := compute_ips.ExtractFloatingIPs(page) for _, ip := range ipListing { - if ip.InstanceID == "" && ip.Pool == d.FloatingIPPool { + if ip.InstanceID == "" && ip.Pool == d.FloatingIpPool { ips = append(ips, FloatingIP{ Id: ip.ID, Ip: ip.IP, @@ -424,11 +415,11 @@ func (c *GenericClient) getNovaNetworkFloatingIPs(d *Driver) ([]FloatingIP, erro func (c *GenericClient) getNeutronNetworkFloatingIPs(d *Driver) ([]FloatingIP, error) { log.Debug("Listing floating IPs", map[string]string{ - "FloatingNetworkId": d.FloatingIPPoolId, + "FloatingNetworkId": d.FloatingIpPoolId, "TenantID": d.TenantId, }) pager := floatingips.List(c.Network, floatingips.ListOpts{ - FloatingNetworkID: d.FloatingIPPoolId, + FloatingNetworkID: d.FloatingIpPoolId, TenantID: d.TenantId, }) @@ -458,7 +449,7 @@ func (c *GenericClient) getNeutronNetworkFloatingIPs(d *Driver) ([]FloatingIP, e func (c *GenericClient) GetInstancePortID(d *Driver) (string, error) { pager := ports.List(c.Network, ports.ListOpts{ DeviceID: d.MachineId, - NetworkID: d.NetworkIds[0], + NetworkID: d.NetworkId, }) var portID string diff --git a/drivers/openstack/openstack.go b/drivers/openstack/openstack.go index 2d08a21aee..3b31e8a3f7 100644 --- a/drivers/openstack/openstack.go +++ b/drivers/openstack/openstack.go @@ -35,13 +35,13 @@ type Driver struct { ImageName string ImageId string KeyPairName string - NetworkNames []string - NetworkIds []string + NetworkName string + NetworkId string PrivateKeyFile string SecurityGroups []string - FloatingIPPool string + FloatingIpPool string ComputeNetwork bool - FloatingIPPoolId string + FloatingIpPoolId string IpVersion int client Client } @@ -149,22 +149,22 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { Usage: "OpenStack keypair to use to SSH to the instance", Value: "", }, + mcnflag.StringFlag{ + EnvVar: "OS_NETWORK_ID", + Name: "openstack-net-id", + Usage: "OpenStack network id the machine will be connected on", + Value: "", + }, mcnflag.StringFlag{ EnvVar: "OS_PRIVATE_KEY_FILE", Name: "openstack-private-key-file", Usage: "Private keyfile to use for SSH (absolute path)", Value: "", }, - mcnflag.StringFlag{ - EnvVar: "OS_NETWORK_ID", - Name: "openstack-net-id", - Usage: "OpenStack comma separated networks id the machine will be connected on", - Value: "", - }, mcnflag.StringFlag{ EnvVar: "OS_NETWORK_NAME", Name: "openstack-net-name", - Usage: "OpenStack comma separated network names the machine will be connected on", + Usage: "OpenStack network name the machine will be connected on", Value: "", }, mcnflag.StringFlag{ @@ -181,7 +181,7 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { mcnflag.StringFlag{ EnvVar: "OS_FLOATINGIP_POOL", Name: "openstack-floatingip-pool", - Usage: "OpenStack floating IP pool to get an IP from to assign to the instance (first network only)", + Usage: "OpenStack floating IP pool to get an IP from to assign to the instance", Value: "", }, mcnflag.IntFlag{ @@ -258,16 +258,12 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { d.FlavorName = flags.String("openstack-flavor-name") d.ImageId = flags.String("openstack-image-id") d.ImageName = flags.String("openstack-image-name") - if flags.String("openstack-net-id") != "" { - d.NetworkIds = strings.Split(flags.String("openstack-net-id"), ",") - } - if flags.String("openstack-net-name") != "" { - d.NetworkNames = strings.Split(flags.String("openstack-net-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.String("openstack-floatingip-pool") + d.FloatingIpPool = flags.String("openstack-floatingip-pool") d.IpVersion = flags.Int("openstack-ip-version") d.ComputeNetwork = flags.Bool("openstack-nova-network") d.SSHUser = flags.String("openstack-ssh-user") @@ -307,7 +303,7 @@ func (d *Driver) GetIP() (string, error) { } addressType := Fixed - if d.FloatingIPPool != "" { + if d.FloatingIpPool != "" { addressType = Floating } @@ -380,7 +376,7 @@ func (d *Driver) Create() error { if err := d.waitForInstanceActive(); err != nil { return err } - if d.FloatingIPPool != "" { + if d.FloatingIpPool != "" { if err := d.assignFloatingIP(); err != nil { return err } @@ -477,8 +473,8 @@ func (d *Driver) checkConfig() error { return fmt.Errorf(errorExclusiveOptions, "Image name", "Image id") } - if len(d.NetworkNames) > 0 && len(d.NetworkIds) > 0 { - return fmt.Errorf(errorExclusiveOptions, "Network names", "Network ids") + if d.NetworkName != "" && d.NetworkId != "" { + return fmt.Errorf(errorExclusiveOptions, "Network name", "Network id") } if d.EndpointType != "" && (d.EndpointType != "publicURL" && d.EndpointType != "adminURL" && d.EndpointType != "internalURL") { return fmt.Errorf(errorWrongEndpointType) @@ -490,26 +486,26 @@ func (d *Driver) checkConfig() error { } func (d *Driver) resolveIds() error { - if len(d.NetworkNames) > 0 && !d.ComputeNetwork { + if d.NetworkName != "" && !d.ComputeNetwork { if err := d.initNetwork(); err != nil { return err } - networkIds, err := d.client.GetNetworkIDs(d) + + networkID, err := d.client.GetNetworkID(d) + if err != nil { return err } - if len(networkIds) == 0 { - return fmt.Errorf(errorUnknownNetworkName, strings.Join(d.NetworkNames, ",")) // TODO specific name + if networkID == "" { + return fmt.Errorf(errorUnknownNetworkName, d.NetworkName) } - d.NetworkIds = networkIds - for i, networkName := range d.NetworkNames { - log.Debug("Found network id using its name", map[string]string{ - "Name": networkName, - "ID": d.NetworkIds[i], - }) - } + d.NetworkId = networkID + log.Debug("Found network id using its name", map[string]string{ + "Name": d.NetworkName, + "ID": d.NetworkId, + }) } if d.FlavorName != "" { @@ -554,7 +550,7 @@ func (d *Driver) resolveIds() error { }) } - if d.FloatingIPPool != "" && !d.ComputeNetwork { + if d.FloatingIpPool != "" && !d.ComputeNetwork { if err := d.initNetwork(); err != nil { return err } @@ -565,13 +561,13 @@ func (d *Driver) resolveIds() error { } if f == "" { - return fmt.Errorf(errorUnknownNetworkName, d.FloatingIPPool) + return fmt.Errorf(errorUnknownNetworkName, d.FloatingIpPool) } - d.FloatingIPPoolId = f + d.FloatingIpPoolId = f log.Debug("Found floating IP pool id using its name", map[string]string{ - "Name": d.FloatingIPPool, - "ID": d.FloatingIPPoolId, + "Name": d.FloatingIpPool, + "ID": d.FloatingIpPoolId, }) } @@ -712,7 +708,7 @@ func (d *Driver) assignFloatingIP() error { log.Debugf("Looking for an available floating IP", map[string]string{ "MachineId": d.MachineId, - "Pool": d.FloatingIPPool, + "Pool": d.FloatingIpPool, }) for _, ip := range ips { diff --git a/drivers/rackspace/client.go b/drivers/rackspace/client.go index baa65f7d6f..b73263fd06 100644 --- a/drivers/rackspace/client.go +++ b/drivers/rackspace/client.go @@ -53,44 +53,6 @@ func (c *Client) Authenticate(d *openstack.Driver) error { return nil } -func (c *Client) InitNetworkClient(d *openstack.Driver) error { - if c.Network != nil { - return nil - } - - network, err := rackspace.NewNetworkV2(c.Provider, gophercloud.EndpointOpts{ - Region: d.Region, - }) - if err != nil { - return err - } - c.Network = network - return nil -} - -func (c *Client) GetNetworkIDs(d *openstack.Driver) ([]string, error) { - networkIds := make([]string, len(d.NetworkNames)) - for i, networkName := range d.NetworkNames { - id, err := c.GetNetworkID(d, networkName) - if err != nil { - return nil, err - } - networkIds[i] = id - } - return networkIds, nil -} - -func (c *Client) GetNetworkID(d *openstack.Driver, networkName string) (string, error) { - switch networkName { - case "public", "PublicNet": - return "00000000-0000-0000-0000-000000000000", nil - case "private", "ServiceNet": - return "11111111-1111-1111-1111-111111111111", nil - default: - return c.GenericClient.GetNetworkID(d, networkName) - } -} - // StartInstance is unfortunately not supported on Rackspace at this time. func (c *Client) StartInstance(d *openstack.Driver) error { return unsupportedOpErr("start") diff --git a/drivers/rackspace/rackspace.go b/drivers/rackspace/rackspace.go index d396f3a063..863b411995 100644 --- a/drivers/rackspace/rackspace.go +++ b/drivers/rackspace/rackspace.go @@ -2,7 +2,6 @@ package rackspace import ( "fmt" - "strings" "github.com/docker/machine/drivers/openstack" "github.com/docker/machine/libmachine/drivers" @@ -63,16 +62,6 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { Value: defaultFlavorID, EnvVar: "OS_FLAVOR_ID", }, - mcnflag.StringFlag{ - Name: "rackspace-net-id", - Usage: "Rackspace comma separated network ids the machine will be connected on", - Value: "", - }, - mcnflag.StringFlag{ - Name: "rackspace-net-name", - Usage: "Rackspace comma separated network names the machine will be connected on (eg, PublicNet,ServiceNet,MyNet)", - Value: "", - }, mcnflag.StringFlag{ Name: "rackspace-ssh-user", Usage: "SSH user for the newly booted machine. Set to root by default", @@ -128,12 +117,6 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { d.EndpointType = flags.String("rackspace-endpoint-type") d.ImageId = flags.String("rackspace-image-id") d.FlavorId = flags.String("rackspace-flavor-id") - if flags.String("rackspace-net-id") != "" { - d.NetworkIds = strings.Split(flags.String("rackspace-net-id"), ",") - } - if flags.String("rackspace-net-name") != "" { - d.NetworkNames = strings.Split(flags.String("rackspace-net-name"), ",") - } d.SSHUser = flags.String("rackspace-ssh-user") d.SSHPort = flags.Int("rackspace-ssh-port") d.SetSwarmConfigFromFlags(flags)