github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/agent/tools/toolsdir_windows.go (about)

     1  package tools
     2  
     3  import (
     4      "fmt"
     5      "os"
     6  
     7      coretools "launchpad.net/juju-core/tools"
     8      "launchpad.net/juju-core/version"
     9      "launchpad.net/juju-core/utils"
    10  )
    11  
    12  // ChangeAgentTools atomically replaces the agent-specific symlink
    13  // under dataDir so it points to the previously unpacked
    14  // version vers. It returns the new tools read.
    15  func ChangeAgentTools(dataDir string, agentName string, vers version.Binary) (*coretools.Tools, error) {
    16      logger.Infof("reading tools %q --> %q", dataDir, vers)
    17      tools, err := ReadTools(dataDir, vers)
    18      logger.Infof("-->reading tools %q --> %q", tools, err)
    19      if err != nil {
    20          return nil, err
    21      }
    22      tmpName := ToolsDir(dataDir, "tmplink-"+agentName)
    23      toolPath := ToolsDir(dataDir, tools.Version.String())
    24      logger.Infof("Create symlink %q --> %q", tmpName, tools.Version.String())
    25      err = utils.Symlink(toolPath, tmpName)
    26      logger.Infof("-->Create symlink %q", err)
    27      if err != nil {
    28          return nil, fmt.Errorf("cannot create tools symlink: %v", err)
    29      }
    30      err = os.Rename(tmpName, ToolsDir(dataDir, agentName))
    31      logger.Infof("-->Rename %q", err)
    32      if err != nil {
    33          return nil, fmt.Errorf("cannot update tools symlink: %v", err)
    34      }
    35      logger.Infof("-->Tools %q", tools)
    36      return tools, nil
    37  }