Merge lp:~wallyworld/juju-core/deprecate-tools-url into lp:~go-bot/juju-core/trunk

Proposed by Ian Booth
Status: Merged
Approved by: Ian Booth
Approved revision: no longer in the source branch.
Merged at revision: 2043
Proposed branch: lp:~wallyworld/juju-core/deprecate-tools-url
Merge into: lp:~go-bot/juju-core/trunk
Diff against target: 175 lines (+115/-3)
2 files modified
environs/config/config.go (+28/-0)
environs/config/config_test.go (+87/-3)
To merge this branch: bzr merge lp:~wallyworld/juju-core/deprecate-tools-url
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+194649@code.launchpad.net

Commit message

Add back support for deprecated tools-url

Removing tools-url from config too early breaks
upgrades so add it back for the next release.

https://codereview.appspot.com/24340043/

Description of the change

Add back support for deprecated tools-url

Removing tools-url from config too early breaks
upgrades so add it back for the next release.

https://codereview.appspot.com/24340043/

To post a comment you must log in.
Revision history for this message
Ian Booth (wallyworld) wrote :

Reviewers: mp+194649_code.launchpad.net,

Message:
Please take a look.

Description:
Add back support for deprecated tools-url

Removing tools-url from config too early breaks
upgrades so add it back for the next release.

https://code.launchpad.net/~wallyworld/juju-core/deprecate-tools-url/+merge/194649

(do not edit description out of merge proposal)

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

Affected files (+117, -3 lines):
   A [revision details]
   M environs/config/config.go
   M environs/config/config_test.go

Revision history for this message
John A Meinel (jameinel) wrote :
Revision history for this message
Go Bot (go-bot) wrote :
Download full text (18.3 KiB)

The attempt to merge lp:~wallyworld/juju-core/deprecate-tools-url into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core/agent 1.131s
ok launchpad.net/juju-core/agent/tools 0.224s
ok launchpad.net/juju-core/bzr 6.920s
ok launchpad.net/juju-core/cert 3.767s
ok launchpad.net/juju-core/charm 0.557s
? launchpad.net/juju-core/charm/hooks [no test files]
ok launchpad.net/juju-core/cloudinit 0.026s
ok launchpad.net/juju-core/cmd 0.226s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/juju 177.696s
ok launchpad.net/juju-core/cmd/jujud 55.687s
ok launchpad.net/juju-core/cmd/plugins/juju-metadata 2.814s
ok launchpad.net/juju-core/constraints 0.027s
ok launchpad.net/juju-core/container/lxc 0.289s
? launchpad.net/juju-core/container/lxc/mock [no test files]
ok launchpad.net/juju-core/downloader 5.272s
ok launchpad.net/juju-core/environs 3.156s
ok launchpad.net/juju-core/environs/bootstrap 5.013s
ok launchpad.net/juju-core/environs/cloudinit 0.527s
ok launchpad.net/juju-core/environs/config 1.419s
ok launchpad.net/juju-core/environs/configstore 0.040s
ok launchpad.net/juju-core/environs/filestorage 0.031s
ok launchpad.net/juju-core/environs/httpstorage 0.989s
ok launchpad.net/juju-core/environs/imagemetadata 0.500s
? launchpad.net/juju-core/environs/imagemetadata/testing [no test files]
ok launchpad.net/juju-core/environs/instances 0.051s
ok launchpad.net/juju-core/environs/jujutest 0.248s
ok launchpad.net/juju-core/environs/manual 5.727s
ok launchpad.net/juju-core/environs/simplestreams 0.348s
? launchpad.net/juju-core/environs/simplestreams/testing [no test files]
ok launchpad.net/juju-core/environs/sshstorage 1.065s
ok launchpad.net/juju-core/environs/storage 1.133s
ok launchpad.net/juju-core/environs/sync 28.383s
ok launchpad.net/juju-core/environs/testing 0.186s
ok launchpad.net/juju-core/environs/tools 6.671s
? launchpad.net/juju-core/environs/tools/testing [no test files]
ok launchpad.net/juju-core/errors 0.015s
ok launchpad.net/juju-core/instance 0.021s
? launchpad.net/juju-core/instance/testing [no test files]
ok launchpad.net/juju-core/juju 17.879s
ok launchpad.net/juju-core/juju/osenv 0.018s
? launchpad.net/juju-core/juju/testing [no test files]
ok launchpad.net/juju-core/log 0.016s
ok launchpad.net/juju-core/log/syslog 0.024s
ok launchpad.net/juju-core/names 0.024s
? launchpad.net/juju-core/provider [no test files]
? launchpad.net/juju-core/provider/all [no test files]
ok launchpad.net/juju-core/provider/azure 6.427s
ok launchpad.net/juju-core/provider/common 0.333s
ok launchpad.net/juju-core/provider/dummy 21.159s
ok launchpad.net/juju-core/provider/ec2 5.056s
ok launchpad.net/juju-core/provider/ec2/httpstorage 0.233s
ok launchpad.net/juju-core/provider/local 2.196s
ok launchpad.net/juju-core/provider/maas 9.985s
ok launchpad.net/juju-core/provider/null 1.347s
ok launchpad.net/juju-core/provider/openstack 11.639s
ok launchpad.net/juju-core/rpc 0.077s
ok launchpad.net/juju-core/rpc/json...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'environs/config/config.go'
2--- environs/config/config.go 2013-11-04 02:01:19 +0000
3+++ environs/config/config.go 2013-11-11 02:04:03 +0000
4@@ -244,6 +244,28 @@
5 }
6 }
7 }
8+
9+ // The tools url has changed so see if the old one is still in use.
10+ if oldToolsURL := cfg.m["tools-url"]; oldToolsURL != nil && oldToolsURL.(string) != "" {
11+ _, newToolsSpecified := cfg.ToolsURL()
12+ var msg string
13+ if newToolsSpecified {
14+ msg = fmt.Sprintf(
15+ "Config attribute %q (%v) is deprecated and will be ignored since\n"+
16+ "the new tools URL attribute %q has also been used.\n"+
17+ "The attribute % should be removed from your configuration.",
18+ "tools-url", oldToolsURL, "tools-metadata-url", "tools-url")
19+ } else {
20+ msg = fmt.Sprintf(
21+ "Config attribute %q (%v) is deprecated.\n"+
22+ "The location to find tools is now specified using the %q attribute.\n"+
23+ "Your configuration should be upddated to set %q as follows\n%v: %v.",
24+ "tools-url", oldToolsURL, "tools-metadata-url", "tools-metadata-url", "tools-metadata-url", oldToolsURL)
25+ cfg.m["tools-metadata-url"] = oldToolsURL
26+ }
27+ logger.Warningf(msg)
28+ delete(cfg.m, "tools-url")
29+ }
30 return nil
31 }
32
33@@ -495,6 +517,9 @@
34 "state-port": schema.ForceInt(),
35 "api-port": schema.ForceInt(),
36 "logging-config": schema.String(),
37+
38+ // Deprecated fields, retain for backwards compatibility.
39+ "tools-url": schema.String(),
40 }
41
42 // alwaysOptional holds configuration defaults for attributes that may
43@@ -514,6 +539,9 @@
44 "ca-private-key-path": schema.Omit,
45 "logging-config": schema.Omit,
46
47+ // Deprecated fields, retain for backwards compatibility.
48+ "tools-url": schema.Omit,
49+
50 // For backward compatibility reasons, the following
51 // attributes default to empty strings rather than being
52 // omitted.
53
54=== modified file 'environs/config/config_test.go'
55--- environs/config/config_test.go 2013-11-04 02:01:19 +0000
56+++ environs/config/config_test.go 2013-11-11 02:04:03 +0000
57@@ -5,6 +5,7 @@
58
59 import (
60 "fmt"
61+ "strings"
62 stdtesting "testing"
63 "time"
64
65@@ -79,6 +80,23 @@
66 "tools-metadata-url": "tools-metadata-url",
67 },
68 }, {
69+ about: "Deprecated tools metadata URL used",
70+ useDefaults: config.UseDefaults,
71+ attrs: testing.Attrs{
72+ "type": "my-type",
73+ "name": "my-name",
74+ "tools-url": "tools-metadata-url",
75+ },
76+ }, {
77+ about: "Deprecated tools metadata URL ignored",
78+ useDefaults: config.UseDefaults,
79+ attrs: testing.Attrs{
80+ "type": "my-type",
81+ "name": "my-name",
82+ "tools-metadata-url": "tools-metadata-url",
83+ "tools-url": "ignore-me",
84+ },
85+ }, {
86 about: "Explicit series",
87 useDefaults: config.UseDefaults,
88 attrs: testing.Attrs{
89@@ -745,13 +763,21 @@
90 } else {
91 c.Assert(urlPresent, jc.IsFalse)
92 }
93- url, urlPresent = cfg.ToolsURL()
94- if v, _ := test.attrs["tools-metadata-url"].(string); v != "" {
95- c.Assert(url, gc.Equals, v)
96+ toolsURL, urlPresent := cfg.ToolsURL()
97+ deprecatedToolsURLTestValue, deprecatedURLPresent := test.attrs["tools-url"]
98+ toolsURLTestValue := test.attrs["tools-metadata-url"]
99+ if toolsURLTestValue == nil {
100+ toolsURLTestValue = deprecatedToolsURLTestValue
101+ }
102+ if toolsURLTestValue != nil && toolsURLTestValue != "" {
103+ c.Assert(toolsURL, gc.Equals, toolsURLTestValue)
104 c.Assert(urlPresent, jc.IsTrue)
105 } else {
106 c.Assert(urlPresent, jc.IsFalse)
107+ c.Assert(deprecatedURLPresent, jc.IsFalse)
108 }
109+ _, urlPresent = cfg.AllAttrs()["tools-url"]
110+ c.Assert(urlPresent, jc.IsFalse)
111 }
112
113 func (s *ConfigSuite) TestConfigAttrs(c *gc.C) {
114@@ -1101,3 +1127,61 @@
115 MIIBOgIBAAJAZabKgKInuOxj5vDWLwHHQtK3/45KB+32D15w94Nt83BmuGxo90lw
116 -----END CERTIFICATE-----
117 `[1:]
118+
119+type ConfigDeprecationSuite struct {
120+ ConfigSuite
121+ writer *testWriter
122+}
123+
124+var _ = gc.Suite(&ConfigDeprecationSuite{})
125+
126+func (s *ConfigDeprecationSuite) SetUpTest(c *gc.C) {
127+ s.ConfigSuite.SetUpTest(c)
128+}
129+
130+func (s *ConfigDeprecationSuite) TearDownTest(c *gc.C) {
131+ s.ConfigSuite.TearDownTest(c)
132+}
133+
134+func (s *ConfigDeprecationSuite) setupLogger(c *gc.C) {
135+ var err error
136+ s.writer = &testWriter{}
137+ err = loggo.RegisterWriter("test", s.writer, loggo.WARNING)
138+ c.Assert(err, gc.IsNil)
139+}
140+
141+func (s *ConfigDeprecationSuite) resetLogger(c *gc.C) {
142+ _, _, err := loggo.RemoveWriter("test")
143+ c.Assert(err, gc.IsNil)
144+}
145+
146+type testWriter struct {
147+ messages []string
148+}
149+
150+func (t *testWriter) Write(level loggo.Level, module, filename string, line int, timestamp time.Time, message string) {
151+ t.messages = append(t.messages, message)
152+}
153+
154+func (s *ConfigDeprecationSuite) setupEnv(c *gc.C, deprecatedKey, value string) {
155+ attrs := testing.FakeConfig().Merge(testing.Attrs{
156+ "name": "testenv",
157+ "type": "openstack",
158+ deprecatedKey: value,
159+ })
160+ _, err := config.New(config.NoDefaults, attrs)
161+ c.Assert(err, gc.IsNil)
162+}
163+
164+func (s *ConfigDeprecationSuite) TestDeprecationWarnings(c *gc.C) {
165+ for attr, value := range map[string]string{
166+ "tools-url": "foo",
167+ } {
168+ s.setupLogger(c)
169+ s.setupEnv(c, attr, value)
170+ s.resetLogger(c)
171+ stripped := strings.Replace(s.writer.messages[0], "\n", "", -1)
172+ expected := fmt.Sprintf(`.*Config attribute "%s" \(%s\) is deprecated.*`, attr, value)
173+ c.Assert(stripped, gc.Matches, expected)
174+ }
175+}

Subscribers

People subscribed via source and target branches

to status/vote changes: