Merge lp:~themue/juju-core/049-prepare-ec2 into lp:~go-bot/juju-core/trunk

Proposed by Frank Mueller
Status: Rejected
Rejected by: William Reade
Proposed branch: lp:~themue/juju-core/049-prepare-ec2
Merge into: lp:~go-bot/juju-core/trunk
Diff against target: 65 lines (+47/-1)
2 files modified
provider/ec2/config_test.go (+30/-0)
provider/ec2/ec2.go (+17/-1)
To merge this branch: bzr merge lp:~themue/juju-core/049-prepare-ec2
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+188865@code.launchpad.net

Description of the change

ec2: implemented preparing of configuration

Currently the providers don't use Prepare() for the
preparing of their configuration. Here this is changed
for EC2. So far only the existance and type of
"control-bucket" are checked. Other providers will
have different checks.

https://codereview.appspot.com/14282044/

To post a comment you must log in.
Revision history for this message
Frank Mueller (themue) wrote :

Reviewers: mp+188865_code.launchpad.net,

Message:
Please take a look.

Description:
ec2: implemented preparing of configuration

Currently the providers don't use Prepare() for the
preparing of their configuration. Here this is changed
for EC2. So far only the existance and type of
"control-bucket" are checked. Other providers will
have different checks.

https://code.launchpad.net/~themue/juju-core/049-prepare-ec2/+merge/188865

(do not edit description out of merge proposal)

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

Affected files (+49, -1 lines):
   A [revision details]
   M provider/ec2/config_test.go
   M provider/ec2/ec2.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: tarmac-20131002130110-6i0rmclha2rfugvw
+New revision: <email address hidden>

Index: provider/ec2/config_test.go
=== modified file 'provider/ec2/config_test.go'
--- provider/ec2/config_test.go 2013-09-27 02:00:34 +0000
+++ provider/ec2/config_test.go 2013-10-02 14:55:45 +0000
@@ -327,3 +327,33 @@
   test.err = "environment has no access-key or secret-key"
   test.check(c)
  }
+
+func (s *ConfigSuite) TestPrepare(c *gc.C) {
+ // No value for control bucket.
+ attrs := testing.FakeConfig().Merge(testing.Attrs{
+ "type": "ec2",
+ })
+ cfg, err := config.New(config.NoDefaults, attrs)
+ c.Assert(err, gc.IsNil)
+ p, err := environs.Provider(cfg.Type())
+ c.Assert(err, gc.IsNil)
+ e, err := p.Prepare(cfg)
+ c.Assert(err, gc.IsNil)
+ ecfg := e.(*environ).ecfg()
+ c.Assert(ecfg.controlBucket(), gc.Matches, "juju-[a-f0-9]{32}")
+
+ // Wrong type of control bucket value.
+ attrs = testing.FakeConfig().Merge(testing.Attrs{
+ "type": "ec2",
+ "control-bucket": 1234,
+ })
+ cfg, err = config.New(config.NoDefaults, attrs)
+ c.Assert(err, gc.IsNil)
+ p, err = environs.Provider(cfg.Type())
+ c.Assert(err, gc.IsNil)
+ e, err = p.Prepare(cfg)
+ c.Assert(err, gc.IsNil)
+ ecfg = e.(*environ).ecfg()
+ c.Assert(ecfg.controlBucket(), gc.Matches, "juju-[a-f0-9]{32}")
+
+}

Index: provider/ec2/ec2.go
=== modified file 'provider/ec2/ec2.go'
--- provider/ec2/ec2.go 2013-10-02 00:29:29 +0000
+++ provider/ec2/ec2.go 2013-10-02 14:55:45 +0000
@@ -213,7 +213,23 @@

  func (p environProvider) Prepare(cfg *config.Config) (environs.Environ,
error) {
   logger.Infof("preparing environment %q", cfg.Name())
- // TODO create/verify control bucket if necessary.
+ attrs := cfg.AllAttrs()
+
+ // Check control bucket.
+ controlBucket, ok := attrs["control-bucket"].(string)
+ if !ok || controlBucket == "" {
+ uuid, err := utils.NewUUID()
+ if err != nil {
+ panic(fmt.Errorf("error generating random id: %v", err))
+ }
+ attrs["control-bucket"] = fmt.Sprintf("juju-%x", uuid.Raw())
+ }
+
+ // Apply changes.
+ cfg, err := cfg.Apply(attrs)
+ if err != nil {
+ return nil, err
+ }
   return p.Open(cfg)
  }

Revision history for this message
William Reade (fwereade) wrote :

If you're on holiday now, I might try to take these over.

https://codereview.appspot.com/14282044/diff/1/provider/ec2/config_test.go
File provider/ec2/config_test.go (right):

https://codereview.appspot.com/14282044/diff/1/provider/ec2/config_test.go#newcode348
provider/ec2/config_test.go:348: "control-bucket": 1234,
I don't think we should be accepting bad data and turning it into good
-- let's stick to inserting missing data.

https://codereview.appspot.com/14282044/

Revision history for this message
William Reade (fwereade) wrote :

Unmerged revisions

1928. By Frank Mueller

ec2: implemented configuration preparing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'provider/ec2/config_test.go'
2--- provider/ec2/config_test.go 2013-09-27 02:00:34 +0000
3+++ provider/ec2/config_test.go 2013-10-02 15:21:49 +0000
4@@ -327,3 +327,33 @@
5 test.err = "environment has no access-key or secret-key"
6 test.check(c)
7 }
8+
9+func (s *ConfigSuite) TestPrepare(c *gc.C) {
10+ // No value for control bucket.
11+ attrs := testing.FakeConfig().Merge(testing.Attrs{
12+ "type": "ec2",
13+ })
14+ cfg, err := config.New(config.NoDefaults, attrs)
15+ c.Assert(err, gc.IsNil)
16+ p, err := environs.Provider(cfg.Type())
17+ c.Assert(err, gc.IsNil)
18+ e, err := p.Prepare(cfg)
19+ c.Assert(err, gc.IsNil)
20+ ecfg := e.(*environ).ecfg()
21+ c.Assert(ecfg.controlBucket(), gc.Matches, "juju-[a-f0-9]{32}")
22+
23+ // Wrong type of control bucket value.
24+ attrs = testing.FakeConfig().Merge(testing.Attrs{
25+ "type": "ec2",
26+ "control-bucket": 1234,
27+ })
28+ cfg, err = config.New(config.NoDefaults, attrs)
29+ c.Assert(err, gc.IsNil)
30+ p, err = environs.Provider(cfg.Type())
31+ c.Assert(err, gc.IsNil)
32+ e, err = p.Prepare(cfg)
33+ c.Assert(err, gc.IsNil)
34+ ecfg = e.(*environ).ecfg()
35+ c.Assert(ecfg.controlBucket(), gc.Matches, "juju-[a-f0-9]{32}")
36+
37+}
38
39=== modified file 'provider/ec2/ec2.go'
40--- provider/ec2/ec2.go 2013-10-02 00:29:29 +0000
41+++ provider/ec2/ec2.go 2013-10-02 15:21:49 +0000
42@@ -213,7 +213,23 @@
43
44 func (p environProvider) Prepare(cfg *config.Config) (environs.Environ, error) {
45 logger.Infof("preparing environment %q", cfg.Name())
46- // TODO create/verify control bucket if necessary.
47+ attrs := cfg.AllAttrs()
48+
49+ // Check control bucket.
50+ controlBucket, ok := attrs["control-bucket"].(string)
51+ if !ok || controlBucket == "" {
52+ uuid, err := utils.NewUUID()
53+ if err != nil {
54+ panic(fmt.Errorf("error generating random id: %v", err))
55+ }
56+ attrs["control-bucket"] = fmt.Sprintf("juju-%x", uuid.Raw())
57+ }
58+
59+ // Apply changes.
60+ cfg, err := cfg.Apply(attrs)
61+ if err != nil {
62+ return nil, err
63+ }
64 return p.Open(cfg)
65 }
66

Subscribers

People subscribed via source and target branches

to status/vote changes: