func (d *Driver) Create() error { if err := d.setUserSubscription(); err != nil { return err } log.Info("Creating Azure machine...") vmConfig, err := vmClient.CreateAzureVMConfiguration(d.MachineName, d.Size, d.Image, d.Location) if err != nil { return err } log.Debug("Generating certificate for Azure...") if err := d.generateCertForAzure(); err != nil { return err } log.Debug("Adding Linux provisioning...") vmConfig, err = vmClient.AddAzureLinuxProvisioningConfig(vmConfig, d.GetSSHUsername(), d.UserPassword, d.azureCertPath(), d.SSHPort) if err != nil { return err } log.Debug("Authorizing ports...") if err := d.addDockerEndpoints(vmConfig); err != nil { return err } log.Debug("Creating VM...") if err := vmClient.CreateAzureVM(vmConfig, d.MachineName, d.Location); err != nil { return err } return nil }
func (driver *Driver) Create() error { if err := driver.setUserSubscription(); err != nil { return err } log.Infof("Creating Azure host...") vmConfig, err := vmClient.CreateAzureVMConfiguration(driver.Name, driver.Size, driver.Image, driver.Location) if err != nil { return err } if err := driver.generateCertForAzure(); err != nil { return err } vmConfig, err = vmClient.AddAzureLinuxProvisioningConfig(vmConfig, driver.UserName, driver.UserPassword, driver.azureCertPath(), driver.SSHPort) if err != nil { return err } if err := driver.addDockerEndpoint(vmConfig); err != nil { return err } if err := vmClient.CreateAzureVM(vmConfig, driver.Name, driver.Location); err != nil { return err } log.Infof("Waiting for SSH...") if err := ssh.WaitForTCP(fmt.Sprintf("%s:%d", driver.getHostname(), driver.SSHPort)); err != nil { return err } cmd, err := driver.GetSSHCommand("if [ ! -e /usr/bin/docker ]; then curl get.docker.io | sudo sh -; fi") if err := cmd.Run(); err != nil { return err } cmd, err = driver.GetSSHCommand("sudo stop docker") if err := cmd.Run(); err != nil { return err } log.Debugf("HACK: Downloading version of Docker with identity auth...") cmd, err = driver.GetSSHCommand("sudo curl -sS -o /usr/bin/docker https://bfirsh.s3.amazonaws.com/docker/docker-1.3.1-dev-identity-auth") if err := cmd.Run(); err != nil { return err } log.Debugf("Updating /etc/default/docker to use identity auth...") cmd, err = driver.GetSSHCommand("echo 'export DOCKER_OPTS=\"--auth=identity --host=tcp://0.0.0.0:2376 --auth-authorized-dir=/root/.docker/authorized-keys.d\"' | sudo tee -a /etc/default/docker") if err := cmd.Run(); err != nil { return err } log.Debugf("Adding key to authorized-keys.d...") // HACK: temporarily chown to ssh user for providers using non-root accounts cmd, err = driver.GetSSHCommand(fmt.Sprintf("sudo mkdir -p /root/.docker && sudo chown -R %s /root/.docker", driver.UserName)) if err := cmd.Run(); err != nil { return err } f, err := os.Open(filepath.Join(os.Getenv("HOME"), ".docker/public-key.json")) if err != nil { return err } defer f.Close() cmdString := fmt.Sprintf("sudo mkdir -p %q && sudo tee -a %q", "/root/.docker/authorized-keys.d", "/root/.docker/authorized-keys.d/docker-host.json") cmd, err = driver.GetSSHCommand(cmdString) cmd.Stdin = f if err := cmd.Run(); err != nil { return err } // HACK: change back ownership cmd, err = driver.GetSSHCommand("sudo mkdir -p /root/.docker && sudo chown -R root /root/.docker") if err := cmd.Run(); err != nil { return err } cmd, err = driver.GetSSHCommand("sudo start docker") if err := cmd.Run(); err != nil { return err } return nil }