Skip to content
This repository has been archived by the owner on Sep 26, 2021. It is now read-only.

Hostnames #219

Merged
merged 1 commit into from
Jan 14, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 32 additions & 7 deletions drivers/amazonec2/amazonec2.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ type Driver struct {
InstanceId string
InstanceType string
IPAddress string
MachineName string
SecurityGroupId string
ReservationId string
RootSize int64
Expand Down Expand Up @@ -126,9 +127,9 @@ func GetCreateFlags() []cli.Flag {
}
}

func NewDriver(storePath string) (drivers.Driver, error) {
func NewDriver(machineName string, storePath string) (drivers.Driver, error) {
id := generateId()
return &Driver{Id: id, storePath: storePath}, nil
return &Driver{Id: id, MachineName: machineName, storePath: storePath}, nil
}

func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
Expand Down Expand Up @@ -171,7 +172,7 @@ func (d *Driver) Create() error {

group, err := d.createSecurityGroup()
if err != nil {
return err
log.Fatalf("Please make sure you don't have a security group named: %s", d.MachineName)
}

bdm := &amz.BlockDeviceMapping{
Expand Down Expand Up @@ -219,15 +220,39 @@ func (d *Driver) Create() error {
d.InstanceId,
d.IPAddress)

log.Infof("Waiting for SSH...")
log.Infof("Waiting for SSH on %s:%d", d.IPAddress, 22)

if err := ssh.WaitForTCP(fmt.Sprintf("%s:%d", d.IPAddress, 22)); err != nil {
return err
}

log.Debug("Settings tags for instance")
tags := map[string]string{
"Name": d.MachineName,
}

if err = d.getClient().CreateTags(d.InstanceId, tags); err != nil {
return err
}

log.Debugf("Setting hostname: %s", d.MachineName)
cmd, err := d.GetSSHCommand(fmt.Sprintf(
"echo \"127.0.0.1 %s\" | sudo tee -a /etc/hosts && sudo hostname %s && echo \"%s\" | sudo tee /etc/hostname",
d.MachineName,
d.MachineName,
d.MachineName,
))

if err != nil {
return err
}
if err := cmd.Run(); err != nil {
return err
}

log.Debugf("Installing Docker")

cmd, err := d.GetSSHCommand("if [ ! -e /usr/bin/docker ]; then curl get.docker.io | sudo sh -; fi")
cmd, err = d.GetSSHCommand("if [ ! -e /usr/bin/docker ]; then curl get.docker.io | sudo sh -; fi")
if err != nil {
return err
}
Expand Down Expand Up @@ -483,7 +508,7 @@ func (d *Driver) createKeyPair() error {
return err
}

keyName := fmt.Sprintf("docker-machine-%s", d.Id)
keyName := d.MachineName

log.Debugf("creating key pair: %s", keyName)

Expand Down Expand Up @@ -511,7 +536,7 @@ func (d *Driver) terminate() error {
func (d *Driver) createSecurityGroup() (*amz.SecurityGroup, error) {
log.Debugf("creating security group in %s", d.VpcId)

grpName := fmt.Sprintf("docker-machine-%s", d.Id)
grpName := d.MachineName
group, err := d.getClient().CreateSecurityGroup(grpName, "Docker Machine", d.VpcId)
if err != nil {
return nil, err
Expand Down
28 changes: 28 additions & 0 deletions drivers/amazonec2/amz/ec2.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,34 @@ func (e *EC2) ImportKeyPair(name, publicKey string) error {
return nil
}

func (e *EC2) CreateTags(id string, tags map[string]string) error {
v := url.Values{}
v.Set("Action", "CreateTags")
v.Set("ResourceId.1", id)

counter := 1
for k, val := range tags {
v.Set(fmt.Sprintf("Tag.%d.Key", counter), k)
v.Set(fmt.Sprintf("Tag.%d.Value", counter), val)

counter += 1
}

resp, err := e.awsApiCall(v)
defer resp.Body.Close()
if err != nil {
return err
}

createTagsResponse := &CreateTagsResponse{}

if err := getDecodedResponse(resp, &createTagsResponse); err != nil {
return fmt.Errorf("Error decoding create tags response: %s", err)
}

return nil
}

func (e *EC2) CreateSecurityGroup(name string, description string, vpcId string) (*SecurityGroup, error) {
v := url.Values{}
v.Set("Action", "CreateSecurityGroup")
Expand Down
6 changes: 6 additions & 0 deletions drivers/amazonec2/amz/tags.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package amz

type CreateTagsResponse struct {
RequestId string `xml:"requestId"`
Return bool `xml:"return"`
}
45 changes: 21 additions & 24 deletions drivers/azure/azure.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
)

type Driver struct {
MachineName string
SubscriptionID string
SubscriptionCert string
PublishSettingsFilePath string
Expand Down Expand Up @@ -105,8 +106,8 @@ func GetCreateFlags() []cli.Flag {
}
}

func NewDriver(storePath string) (drivers.Driver, error) {
driver := &Driver{storePath: storePath}
func NewDriver(machineName string, storePath string) (drivers.Driver, error) {
driver := &Driver{MachineName: machineName, storePath: storePath}
return driver, nil
}

Expand All @@ -119,7 +120,6 @@ func (driver *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {

cert := flags.String("azure-subscription-cert")
publishSettings := flags.String("azure-publish-settings-file")
name := flags.String("azure-name")
image := flags.String("azure-image")
username := flags.String("azure-username")

Expand All @@ -141,12 +141,6 @@ func (driver *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
return fmt.Errorf("Please specify azure subscription params using options: --azure-subscription-id and --azure-subscription-cert or --azure-publish-settings-file")
}

if name == "" {
driver.Name = generateVMName()
} else {
driver.Name = name
}

if image == "" {
driver.Image = "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20140927-en-us-30GB"
} else {
Expand All @@ -173,8 +167,11 @@ func (driver *Driver) Create() error {
return err
}

t := time.Now().Format("20060102150405")
name := fmt.Sprintf("%s-%s", driver.MachineName, t)

log.Infof("Creating Azure host...")
vmConfig, err := vmClient.CreateAzureVMConfiguration(driver.Name, driver.Size, driver.Image, driver.Location)
vmConfig, err := vmClient.CreateAzureVMConfiguration(name, driver.Size, driver.Image, driver.Location)
if err != nil {
return err
}
Expand All @@ -192,7 +189,7 @@ func (driver *Driver) Create() error {
return err
}

if err := vmClient.CreateAzureVM(vmConfig, driver.Name, driver.Location); err != nil {
if err := vmClient.CreateAzureVM(vmConfig, name, driver.Location); err != nil {
return err
}

Expand Down Expand Up @@ -358,7 +355,7 @@ func (driver *Driver) GetState() (state.State, error) {
return state.Error, err
}

dockerVM, err := vmClient.GetVMDeployment(driver.Name, driver.Name)
dockerVM, err := vmClient.GetVMDeployment(driver.MachineName, driver.MachineName)
if err != nil {
if strings.Contains(err.Error(), "Code: ResourceNotFound") {
return state.Error, fmt.Errorf("Azure host was not found. Please check your Azure subscription.")
Expand Down Expand Up @@ -395,9 +392,9 @@ func (driver *Driver) Start() error {
return nil
}

log.Debugf("starting %s", driver.Name)
log.Debugf("starting %s", driver.MachineName)

err = vmClient.StartRole(driver.Name, driver.Name, driver.Name)
err = vmClient.StartRole(driver.MachineName, driver.MachineName, driver.MachineName)
if err != nil {
return err
}
Expand Down Expand Up @@ -426,9 +423,9 @@ func (driver *Driver) Stop() error {
return nil
}

log.Debugf("stopping %s", driver.Name)
log.Debugf("stopping %s", driver.MachineName)

err = vmClient.ShutdownRole(driver.Name, driver.Name, driver.Name)
err = vmClient.ShutdownRole(driver.MachineName, driver.MachineName, driver.MachineName)
if err != nil {
return err
}
Expand All @@ -440,17 +437,17 @@ func (driver *Driver) Remove() error {
if err != nil {
return err
}
available, _, err := vmClient.CheckHostedServiceNameAvailability(driver.Name)
available, _, err := vmClient.CheckHostedServiceNameAvailability(driver.MachineName)
if err != nil {
return err
}
if available {
return nil
}

log.Debugf("removing %s", driver.Name)
log.Debugf("removing %s", driver.MachineName)

err = vmClient.DeleteHostedService(driver.Name)
err = vmClient.DeleteHostedService(driver.MachineName)
if err != nil {
return err
}
Expand All @@ -471,9 +468,9 @@ func (driver *Driver) Restart() error {
return fmt.Errorf("Host is already stopped, use start command to run it")
}

log.Debugf("restarting %s", driver.Name)
log.Debugf("restarting %s", driver.MachineName)

err = vmClient.RestartRole(driver.Name, driver.Name, driver.Name)
err = vmClient.RestartRole(driver.MachineName, driver.MachineName, driver.MachineName)
if err != nil {
return err
}
Expand Down Expand Up @@ -502,9 +499,9 @@ func (driver *Driver) Kill() error {
return nil
}

log.Debugf("killing %s", driver.Name)
log.Debugf("killing %s", driver.MachineName)

err = vmClient.ShutdownRole(driver.Name, driver.Name, driver.Name)
err = vmClient.ShutdownRole(driver.MachineName, driver.MachineName, driver.MachineName)
if err != nil {
return err
}
Expand Down Expand Up @@ -639,5 +636,5 @@ func (driver *Driver) azureCertPath() string {
}

func (driver *Driver) getHostname() string {
return driver.Name + ".cloudapp.net"
return driver.MachineName + ".cloudapp.net"
}
37 changes: 22 additions & 15 deletions drivers/digitalocean/digitalocean.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
log "github.com/Sirupsen/logrus"
"github.com/codegangsta/cli"
"github.com/digitalocean/godo"
"github.com/docker/docker/utils"
// "github.com/docker/docker/utils"
"github.com/docker/machine/drivers"
"github.com/docker/machine/ssh"
"github.com/docker/machine/state"
Expand All @@ -21,9 +21,9 @@ import (
type Driver struct {
AccessToken string
DropletID int
DropletName string
Image string
IPAddress string
MachineName string
Region string
SSHKeyID int
Size string
Expand Down Expand Up @@ -67,8 +67,8 @@ func GetCreateFlags() []cli.Flag {
}
}

func NewDriver(storePath string) (drivers.Driver, error) {
return &Driver{storePath: storePath}, nil
func NewDriver(machineName string, storePath string) (drivers.Driver, error) {
return &Driver{MachineName: machineName, storePath: storePath}, nil
}

func (d *Driver) DriverName() string {
Expand All @@ -89,8 +89,6 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
}

func (d *Driver) Create() error {
d.setDropletNameIfNotSet()

log.Infof("Creating SSH key...")

key, err := d.createSSHKey()
Expand All @@ -106,7 +104,7 @@ func (d *Driver) Create() error {

createRequest := &godo.DropletCreateRequest{
Image: d.Image,
Name: d.DropletName,
Name: d.MachineName,
Region: d.Region,
Size: d.Size,
SSHKeys: []interface{}{d.SSHKeyID},
Expand Down Expand Up @@ -147,9 +145,24 @@ func (d *Driver) Create() error {
return err
}

log.Debugf("Setting hostname: %s", d.MachineName)
cmd, err := d.GetSSHCommand(fmt.Sprintf(
"echo \"127.0.0.1 %s\" | sudo tee -a /etc/hosts && sudo hostname %s && echo \"%s\" | sudo tee /etc/hostname",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't Digital Ocean set the hostname to be the droplet name?

d.MachineName,
d.MachineName,
d.MachineName,
))

if err != nil {
return err
}
if err := cmd.Run(); err != nil {
return err
}

log.Debugf("HACK: Downloading version of Docker with identity auth...")

cmd, err := d.GetSSHCommand("stop docker")
cmd, err = d.GetSSHCommand("stop docker")
if err != nil {
return err
}
Expand Down Expand Up @@ -203,7 +216,7 @@ func (d *Driver) createSSHKey() (*godo.Key, error) {
}

createRequest := &godo.KeyCreateRequest{
Name: d.DropletName,
Name: d.MachineName,
PublicKey: string(publicKey),
}

Expand Down Expand Up @@ -303,12 +316,6 @@ func (d *Driver) GetSSHCommand(args ...string) (*exec.Cmd, error) {
return ssh.GetSSHCommand(d.IPAddress, 22, "root", d.sshKeyPath(), args...), nil
}

func (d *Driver) setDropletNameIfNotSet() {
if d.DropletName == "" {
d.DropletName = fmt.Sprintf("docker-host-%s", utils.GenerateRandomID())
}
}

func (d *Driver) getClient() *godo.Client {
t := &oauth.Transport{
Token: &oauth.Token{AccessToken: d.AccessToken},
Expand Down
6 changes: 3 additions & 3 deletions drivers/drivers.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ type Driver interface {
// - RegisterCreateFlags: a function that takes the FlagSet for
// "docker hosts create" and returns an object to pass to SetConfigFromFlags
type RegisteredDriver struct {
New func(storePath string) (Driver, error)
New func(machineName string, storePath string) (Driver, error)
GetCreateFlags func() []cli.Flag
}

Expand All @@ -92,12 +92,12 @@ func Register(name string, registeredDriver *RegisteredDriver) error {
}

// NewDriver creates a new driver of type "name"
func NewDriver(name string, storePath string) (Driver, error) {
func NewDriver(name string, machineName string, storePath string) (Driver, error) {
driver, exists := drivers[name]
if !exists {
return nil, fmt.Errorf("hosts: Unknown driver %q", name)
}
return driver.New(storePath)
return driver.New(machineName, storePath)
}

// GetCreateFlags runs GetCreateFlags for all of the drivers and
Expand Down
Loading