Added support for identity auth in Azure driver

Added support for identity auth in Azure driver

Signed-off-by: Ruslan Gabitov <ruslan.gabitov@live.com>
This commit is contained in:
Ruslan Gabitov 2014-12-09 14:08:09 -08:00
parent 05ab691caf
commit 3df09689e6
1 changed files with 81 additions and 0 deletions

View File

@ -224,6 +224,87 @@ func (driver *Driver) Create() error {
return err
}
if err:= driver.hackForIdentityAuth(); err != nil {
return err
}
return nil
}
func (driver *Driver) hackForIdentityAuth() error {
log.Debugf("HACK: Downloading version of Docker with identity auth...")
numberOfRetries := 3
if err:= driver.runSSHCommand("sudo stop docker", numberOfRetries); err != nil {
return err
}
if err:= driver.runSSHCommand("sudo bash -c \"curl -sS https://bfirsh.s3.amazonaws.com/docker/docker-1.3.1-dev-identity-auth > /usr/bin/docker\"", numberOfRetries); err != nil {
return err
}
log.Debugf("Updating /etc/default/docker to use identity auth...")
cmdString := fmt.Sprintf(`sudo bash -c 'cat <<EOF > /etc/default/docker
export DOCKER_OPTS="--auth=identity --host=tcp://0.0.0.0:%v"
EOF'`, driver.DockerPort)
if err:= driver.runSSHCommand(cmdString, numberOfRetries); err != nil {
return err
}
log.Debugf("Adding key to authorized-keys.d...")
if err := driver.addPublicKeyToAuthorizedHosts("/tmp/.docker/authorized-keys.d", numberOfRetries); err != nil {
return err
}
if err:= driver.runSSHCommand("sudo cp -a /tmp/.docker/ /", numberOfRetries); err != nil {
return err
}
if err:= driver.runSSHCommand("rm -r /tmp/.docker/", numberOfRetries); err != nil {
return err
}
if err:= driver.runSSHCommand("sudo start docker", numberOfRetries); err != nil {
return err
}
return nil
}
func (driver *Driver) addPublicKeyToAuthorizedHosts(authorizedKeysPath string, retries int) error {
if err := drivers.AddPublicKeyToAuthorizedHosts(driver, authorizedKeysPath ); err != nil {
if err.Error() == "exit status 255" {
if retries == 0 {
return err
}
return driver.addPublicKeyToAuthorizedHosts(authorizedKeysPath, retries -1)
}
return err
}
return nil
}
func (driver *Driver) runSSHCommand(command string, retries int) error {
cmd, err := driver.GetSSHCommand(command)
if err != nil {
return err
}
if err := cmd.Run(); err != nil {
if err.Error() == "exit status 255" {
if retries == 0 {
return err
}
return driver.runSSHCommand(command, retries -1)
}
return err
}
return nil
}