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 }