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 }