Merge lp:~rogpeppe/juju-core/039-init-agent-version into lp:~juju/juju-core/trunk

Proposed by Roger Peppe
Status: Rejected
Rejected by: Roger Peppe
Proposed branch: lp:~rogpeppe/juju-core/039-init-agent-version
Merge into: lp:~juju/juju-core/trunk
Prerequisite: lp:~rogpeppe/juju-core/041-config-agent-version
Diff against target: 137 lines (+24/-5)
6 files modified
cmd/jujud/bootstrap.go (+3/-0)
cmd/jujud/bootstrap_test.go (+11/-4)
cmd/jujud/provisioning_test.go (+1/-1)
environs/dummy/environs.go (+2/-0)
environs/jujutest/livetests.go (+3/-0)
state/state_test.go (+4/-0)
To merge this branch: bzr merge lp:~rogpeppe/juju-core/039-init-agent-version
Reviewer Review Type Date Requested Status
The Go Language Gophers Pending
Review via email: mp+122019@code.launchpad.net

Description of the change

state: write agent tools version into initial EnvironConfig

We will use this mechanism to trigger upgrades.
Note that because we use the EnvironConfig to hold
the version, environment providers can no longer be
strict about the fields they accept.

https://codereview.appspot.com/6494057/

To post a comment you must log in.
Revision history for this message
Roger Peppe (rogpeppe) wrote :
Download full text (3.5 KiB)

Reviewers: mp+122019_code.launchpad.net,

Message:
Please take a look.

Description:
state: write agent tools version into initial EnvironConfig

We will use this mechanism to trigger upgrades.
Note that because we use the EnvironConfig to hold
the version, environment providers can no longer be
strict about the fields they accept.

https://code.launchpad.net/~rogpeppe/juju-core/039-init-agent-version/+merge/122019

Requires:
https://code.launchpad.net/~rogpeppe/juju-core/041-config-agent-version/+merge/122016

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/6494057/

Affected files:
   A [revision details]
   M cmd/jujud/provisioning_test.go
   M state/open.go
   M state/state_test.go

Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: <email address hidden>
+New revision: <email address hidden>

Index: state/open.go
=== modified file 'state/open.go'
--- state/open.go 2012-08-20 01:19:38 +0000
+++ state/open.go 2012-08-29 17:42:03 +0000
@@ -3,9 +3,9 @@
  import (
   "errors"
   "fmt"
- "launchpad.net/goyaml"
   "launchpad.net/gozk/zookeeper"
   "launchpad.net/juju-core/log"
+ "launchpad.net/juju-core/version"
   "strings"
   "time"
  )
@@ -110,16 +110,16 @@
   if _, err := s.zk.Create("/relations", "", 0, zkPermAll); err != nil {
    return err
   }
- // TODO Create node for bootstrap machine.
-
- if config != nil {
- yaml, err := goyaml.Marshal(config)
- if err != nil {
- return err
- }
- if _, err := s.zk.Create(zkEnvironmentPath, string(yaml), 0, zkPermAll);
err != nil {
- return err
- }
+ if _, err = s.zk.Create(zkEnvironmentPath, "", 0, zkPermAll); err != nil {
+ return err
+ }
+ n, err := createConfigNode(s.zk, zkEnvironmentPath, config)
+ if err != nil {
+ return err
+ }
+ n.Set("agent-version", version.Current.Number.String())
+ if _, err = n.Write(); err != nil {
+ return err
   }

   // Finally creation of /initialized as marker.

Index: state/state_test.go
=== modified file 'state/state_test.go'
--- state/state_test.go 2012-08-24 01:45:40 +0000
+++ state/state_test.go 2012-08-29 17:44:53 +0000
@@ -8,6 +8,7 @@
   "launchpad.net/juju-core/juju/testing"
   "launchpad.net/juju-core/state"
   coretesting "launchpad.net/juju-core/testing"
+ "launchpad.net/juju-core/version"
   "net/url"
   "sort"
   stdtesting "testing"
@@ -79,6 +80,12 @@
   case <-time.After(1e9):
    c.Fatalf("state.Open blocked forever")
   }
+
+ cfg, err := st.EnvironConfig()
+ c.Assert(err, IsNil)
+ c.Assert(cfg.Map(), DeepEquals, map[string]interface{}{
+ "agent-version": version.Current.Number.String(),
+ })
  }

  func (s *StateSuite) TestInitalizeWithConfig(c *C) {
@@ -90,6 +97,7 @@
    "type": "dummy",
    "zookeeper": true,
    "authorized-keys": "i-am-a-key",
+ "agent-version": version.Current.Number.String(),
   }
   st, err := state.Initialize(s.StateInfo(c), m)
   c.Assert(err, IsNil)

Index: cmd/jujud/provisioning_test.go
=== modified file 'cmd/jujud/provis...

Read more...

Revision history for this message
Gustavo Niemeyer (niemeyer) wrote :

https://codereview.appspot.com/6494057/diff/2001/state/open.go
File state/open.go (right):

https://codereview.appspot.com/6494057/diff/2001/state/open.go#newcode120
state/open.go:120: n.Set("agent-version",
version.Current.Number.String())
It'd be nice to avoid yet another place where the environment
configuration is manipulated magically. What's wrong with doing it when
that configuration is created?

https://codereview.appspot.com/6494057/

Revision history for this message
Roger Peppe (rogpeppe) wrote :
Revision history for this message
Gustavo Niemeyer (niemeyer) wrote :

We've discussed the use of environs.BootstrapConfig on IRC.

https://codereview.appspot.com/6494057/

Unmerged revisions

452. By Roger Peppe

merge 041-config-agent-version

451. By Roger Peppe

merge trunk

450. By Roger Peppe

environs: make Bootstrap responsible for setting agent version in environ config

449. By Roger Peppe

revert to bootstrap agent version set

448. By Roger Peppe

merge 041-config-agent-version

447. By Roger Peppe

environs/dummy: reinstate strict field checking

446. By Roger Peppe

gofmt

445. By Roger Peppe

state: write agent tools into initial EnvironConfig

444. By Roger Peppe

cmd/jujud: init store agent version

443. By Roger Peppe

testing: define and use all fixture methods.

When a helper suite defines only a subset of the available
fixture methods, it invites problems if that subset changes.
By making all helper suites define all fixture methods,
we make it easy to mechanically check that
a helper suite is being used correctly without going
to look at the source for that suite.

R=niemeyer
CC=
https://codereview.appspot.com/6472053

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'cmd/jujud/bootstrap.go'
2--- cmd/jujud/bootstrap.go 2012-08-20 01:52:41 +0000
3+++ cmd/jujud/bootstrap.go 2012-08-30 12:29:18 +0000
4@@ -7,6 +7,7 @@
5 "launchpad.net/goyaml"
6 "launchpad.net/juju-core/cmd"
7 "launchpad.net/juju-core/state"
8+ "launchpad.net/juju-core/version"
9 )
10
11 type BootstrapCommand struct {
12@@ -26,6 +27,7 @@
13 stateInfoVar(f, &c.StateInfo, "zookeeper-servers", []string{"127.0.0.1:2181"}, "address of zookeeper to initialize")
14 f.StringVar(&c.InstanceId, "instance-id", "", "instance id of this machine")
15 f.StringVar(&c.EnvType, "env-type", "", "environment type")
16+ c.EnvConfig = make(map[string]interface{})
17 yamlBase64Var(f, &c.EnvConfig, "env-config", "", "initial environment configuration (yaml, base64 encoded)")
18 if err := f.Parse(true, args); err != nil {
19 return err
20@@ -39,6 +41,7 @@
21 if c.EnvType == "" {
22 return requiredError("env-type")
23 }
24+ c.EnvConfig["agent-version"] = version.Current.Number.String()
25 return cmd.CheckEmpty(f.Args())
26 }
27
28
29=== modified file 'cmd/jujud/bootstrap_test.go'
30--- cmd/jujud/bootstrap_test.go 2012-08-17 07:58:51 +0000
31+++ cmd/jujud/bootstrap_test.go 2012-08-30 12:29:18 +0000
32@@ -4,6 +4,7 @@
33 "encoding/base64"
34 . "launchpad.net/gocheck"
35 "launchpad.net/juju-core/juju/testing"
36+ "launchpad.net/juju-core/version"
37 )
38
39 type BootstrapSuite struct {
40@@ -70,12 +71,12 @@
41 // no value supplied
42 nil,
43 "",
44- nil,
45+ map[string]interface{}{"agent-version": "3.4.5"},
46 }, {
47 // empty
48 []string{"--env-config", ""},
49 "",
50- nil,
51+ map[string]interface{}{"agent-version": "3.4.5"},
52 }, {
53 // wrong, should be base64
54 []string{"--env-config", "name: banana\n"},
55@@ -84,12 +85,18 @@
56 }, {
57 []string{"--env-config", base64.StdEncoding.EncodeToString([]byte("name: banana\n"))},
58 "",
59- map[string]interface{}{"name": "banana"},
60+ map[string]interface{}{"agent-version": "3.4.5", "name": "banana"},
61 },
62 }
63
64 func (s *BootstrapSuite) TestBase64Config(c *C) {
65- for _, t := range base64ConfigTests {
66+ oldVersion := version.Current
67+ defer func() {
68+ version.Current = oldVersion
69+ }()
70+ version.Current = version.MustParseBinary("3.4.5-foo-bar")
71+ for i, t := range base64ConfigTests {
72+ c.Logf("test %d", i)
73 args := []string{"--zookeeper-servers"}
74 args = append(args, s.StateInfo(c).Addrs...)
75 args = append(args, "--instance-id", "over9000", "--env-type", "dummy")
76
77=== modified file 'cmd/jujud/provisioning_test.go'
78--- cmd/jujud/provisioning_test.go 2012-08-27 05:56:21 +0000
79+++ cmd/jujud/provisioning_test.go 2012-08-30 12:29:18 +0000
80@@ -86,7 +86,7 @@
81 }
82 c.Logf("discarding unknown event %#v", op)
83 case <-time.After(2 * time.Second):
84- c.Errorf("time out wating for operation")
85+ c.Fatalf("time out wating for operation")
86 }
87 }
88 panic("not reached")
89
90=== modified file 'environs/dummy/environs.go'
91--- environs/dummy/environs.go 2012-08-30 02:34:58 +0000
92+++ environs/dummy/environs.go 2012-08-30 12:29:18 +0000
93@@ -29,6 +29,7 @@
94 "launchpad.net/juju-core/schema"
95 "launchpad.net/juju-core/state"
96 "launchpad.net/juju-core/testing"
97+ "launchpad.net/juju-core/version"
98 "net"
99 "net/http"
100 "os"
101@@ -359,6 +360,7 @@
102 "zookeeper": true,
103 "name": e.ecfg().Name(),
104 "authorized-keys": e.ecfg().AuthorizedKeys(),
105+ "agent-version": version.Current.Number.String(),
106 }
107 st, err := state.Initialize(info, config)
108 if err != nil {
109
110=== modified file 'environs/jujutest/livetests.go'
111--- environs/jujutest/livetests.go 2012-08-24 01:45:40 +0000
112+++ environs/jujutest/livetests.go 2012-08-30 12:29:18 +0000
113@@ -178,6 +178,9 @@
114 v, ok = cfg.Get("authorized-keys")
115 c.Assert(ok, Equals, true)
116 c.Assert(v, Not(Equals), "")
117+ v, ok = cfg.Get("agent-version")
118+ c.Assert(ok, Equals, true)
119+ c.Assert(v, Equals, version.Current.Number.String())
120
121 t.checkUpgradeMachineAgent(c, m)
122
123
124=== modified file 'state/state_test.go'
125--- state/state_test.go 2012-08-24 01:45:40 +0000
126+++ state/state_test.go 2012-08-30 12:29:18 +0000
127@@ -79,6 +79,10 @@
128 case <-time.After(1e9):
129 c.Fatalf("state.Open blocked forever")
130 }
131+
132+ cfg, err := st.EnvironConfig()
133+ c.Assert(err, IsNil)
134+ c.Assert(cfg.Map(), DeepEquals, map[string]interface{}{})
135 }
136
137 func (s *StateSuite) TestInitalizeWithConfig(c *C) {

Subscribers

People subscribed via source and target branches