// EnsureBootstrapTools finds tools, syncing with an external tools source as // necessary; it then selects the newest tools to bootstrap with, and sets // agent-version. func EnsureBootstrapTools(ctx environs.BootstrapContext, env environs.Environ, series string, arch *string) (coretools.List, error) { possibleTools, err := bootstrap.EnsureToolsAvailability(ctx, env, series, arch) if err != nil { return nil, err } return bootstrap.SetBootstrapTools(env, possibleTools) }
func (s *bootstrapSuite) TestSetBootstrapTools(c *gc.C) { availableVersions := []version.Binary{ version.MustParseBinary("1.18.0-trusty-arm64"), version.MustParseBinary("1.18.1-trusty-arm64"), version.MustParseBinary("1.18.1.1-trusty-arm64"), version.MustParseBinary("1.18.1.2-trusty-arm64"), version.MustParseBinary("1.18.1.3-trusty-arm64"), } availableTools := make(tools.List, len(availableVersions)) for i, v := range availableVersions { availableTools[i] = &tools.Tools{Version: v} } type test struct { currentVersion version.Number expectedTools version.Number expectedAgentVersion version.Number } tests := []test{{ currentVersion: version.MustParse("1.18.0"), expectedTools: version.MustParse("1.18.0"), expectedAgentVersion: version.MustParse("1.18.1.3"), }, { currentVersion: version.MustParse("1.18.1.4"), expectedTools: version.MustParse("1.18.1.3"), expectedAgentVersion: version.MustParse("1.18.1.3"), }, { // build number is ignored unless major/minor don't // match the latest. currentVersion: version.MustParse("1.18.1.2"), expectedTools: version.MustParse("1.18.1.3"), expectedAgentVersion: version.MustParse("1.18.1.3"), }, { // If the current patch level exceeds whatever's in // the tools source (e.g. when bootstrapping from trunk) // then the latest available tools will be chosen. currentVersion: version.MustParse("1.18.2"), expectedTools: version.MustParse("1.18.1.3"), expectedAgentVersion: version.MustParse("1.18.1.3"), }} env := newEnviron("foo", useDefaultKeys, nil) for i, t := range tests { c.Logf("test %d: %+v", i, t) cfg, err := env.Config().Remove([]string{"agent-version"}) c.Assert(err, gc.IsNil) err = env.SetConfig(cfg) c.Assert(err, gc.IsNil) s.PatchValue(&version.Current.Number, t.currentVersion) bootstrapTools, err := bootstrap.SetBootstrapTools(env, availableTools) c.Assert(err, gc.IsNil) c.Assert(bootstrapTools, gc.HasLen, 1) c.Assert(bootstrapTools[0].Version.Number, gc.Equals, t.expectedTools) agentVersion, _ := env.Config().AgentVersion() c.Assert(agentVersion, gc.Equals, t.expectedAgentVersion) } }