github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/agent/tools/toolsdir_linux.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  
    13  // ChangeAgentTools atomically replaces the agent-specific symlink
    14  // under dataDir so it points to the previously unpacked
    15  // version vers. It returns the new tools read.
    16  func ChangeAgentTools(dataDir string, agentName string, vers version.Binary) (*coretools.Tools, error) {
    17      tools, err := ReadTools(dataDir, vers)
    18      if err != nil {
    19          return nil, err
    20      }
    21      tmpName := ToolsDir(dataDir, "tmplink-"+agentName)
    22      err = utils.Symlink(tools.Version.String(), tmpName)
    23      if err != nil {
    24          return nil, fmt.Errorf("cannot create tools symlink: %v", err)
    25      }
    26      err = os.Rename(tmpName, ToolsDir(dataDir, agentName))
    27      if err != nil {
    28          return nil, fmt.Errorf("cannot update tools symlink: %v", err)
    29      }
    30      return tools, nil
    31  }