Merge lp:~axwalk/juju-core/lp1315216-lxc-use-clone into lp:~go-bot/juju-core/trunk

Proposed by Andrew Wilkins
Status: Merged
Approved by: Andrew Wilkins
Approved revision: no longer in the source branch.
Merged at revision: 2712
Proposed branch: lp:~axwalk/juju-core/lp1315216-lxc-use-clone
Merge into: lp:~go-bot/juju-core/trunk
Diff against target: 406 lines (+156/-15)
12 files modified
environs/config/config.go (+13/-3)
environs/config/config_test.go (+6/-0)
state/api/params/params.go (+12/-0)
state/api/provisioner/provisioner.go (+8/-1)
state/api/provisioner/provisioner_test.go (+54/-0)
state/apiserver/provisioner/provisioner.go (+20/-1)
state/apiserver/provisioner/provisioner_test.go (+10/-0)
worker/provisioner/container_initialisation.go (+19/-3)
worker/provisioner/kvm-broker.go (+2/-1)
worker/provisioner/kvm-broker_test.go (+5/-2)
worker/provisioner/lxc-broker.go (+2/-2)
worker/provisioner/lxc-broker_test.go (+5/-2)
To merge this branch: bzr merge lp:~axwalk/juju-core/lp1315216-lxc-use-clone
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+218773@code.launchpad.net

Commit message

Introduce lxc-use-clone, ContainerManagerConfig

A new lxc-use-clone config attribute and a new
ContainerManagerConfig provisioner API are introduced.
If lxc-use-clone is set to true, then the LXC
provisioner will be configured to use cloning
regardless of provider type. This setting is currently
immutable; additional work will be required to support
reacting to changes and reconfiguring the provisioner.

Fixes lp:1315216

https://codereview.appspot.com/96140044/

Description of the change

Introduce lxc-use-clone, ContainerManagerConfig

A new lxc-use-clone config attribute and a new
ContainerManagerConfig provisioner API are introduced.
If lxc-use-clone is set to true, then the LXC
provisioner will be configured to use cloning
regardless of provider type. This setting is currently
immutable; additional work will be required to support
reacting to changes and reconfiguring the provisioner.

Fixes lp:1315216

https://codereview.appspot.com/96140044/

To post a comment you must log in.
Revision history for this message
Andrew Wilkins (axwalk) wrote :
Download full text (12.6 KiB)

Reviewers: mp+218773_code.launchpad.net,

Message:
Please take a look.

Description:
Introduce lxc-use-clone, ContainerManagerConfig

A new lxc-use-clone config attribute and a new
ContainerManagerConfig provisioner API are introduced.
If lxc-use-clone is set to true, then the LXC
provisioner will be configured to use cloning
regardless of provider type. This setting is currently
immutable; additional work will be required to support
reacting to changes and reconfiguring the provisioner.

Fixes lp:1315216

https://code.launchpad.net/~axwalk/juju-core/lp1315216-lxc-use-clone/+merge/218773

(do not edit description out of merge proposal)

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

Affected files (+85, -13 lines):
   A [revision details]
   M environs/config/config.go
   M environs/config/config_test.go
   M state/api/params/params.go
   M state/api/provisioner/provisioner.go
   M state/apiserver/provisioner/provisioner.go
   M worker/provisioner/container_initialisation.go
   M worker/provisioner/kvm-broker.go
   M worker/provisioner/kvm-broker_test.go
   M worker/provisioner/lxc-broker.go
   M worker/provisioner/lxc-broker_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: tarmac-20140508054219-e6ylw5luw58d6zhx
+New revision: <email address hidden>

Index: environs/config/config.go
=== modified file 'environs/config/config.go'
--- environs/config/config.go 2014-04-11 17:51:58 +0000
+++ environs/config/config.go 2014-05-08 09:56:27 +0000
@@ -698,6 +698,13 @@
   return c.defined["test-mode"].(bool)
  }

+// LXCUseClone reports whether the LXC provisioner should create a
+// template and use cloning to speed up container provisioning.
+func (c *Config) LXCUseClone() bool {
+ v, _ := c.defined["lxc-use-clone"].(bool)
+ return v
+}
+
  // UnknownAttrs returns a copy of the raw configuration attributes
  // that are supposedly specific to the environment type. They could
  // also be wrong attributes, though. Only the specific environment
@@ -774,6 +781,7 @@
   "bootstrap-addresses-delay": schema.ForceInt(),
   "test-mode": schema.Bool(),
   "proxy-ssh": schema.Bool(),
+ "lxc-use-clone": schema.Bool(),

   // Deprecated fields, retain for backwards compatibility.
   "tools-url": schema.String(),
@@ -831,9 +839,10 @@
   // Authentication string sent with requests to the charm store
   "charm-store-auth": "",
   // Previously image-stream could be set to an empty value
- "image-stream": "",
- "test-mode": false,
- "proxy-ssh": false,
+ "image-stream": "",
+ "test-mode": false,
+ "proxy-ssh": false,
+ "lxc-use-clone": false,
  }

  func allowEmpty(attr string) bool {
@@ -894,6 +903,7 @@
   "bootstrap-timeout",
   "bootstrap-retry-delay",
   "bootstrap-addresses-delay",
+ "lxc-use-clone",
  }

  var (

Index: environs/config/config_test.go
=== modified file 'environs/config/config_test.go'
--- environs/config/config_test.go 2014-04-11 18:13:56 +0000
+++ environs/config/config_test.go 2014...

Revision history for this message
Ian Booth (wallyworld) wrote :

Thanks very much for picking this up. We need tests for the new api
calls and also possibly the new code in container_initialisation. So
long as it's been tested with lxc-use-clone set to true and false, LGTM

https://codereview.appspot.com/96140044/diff/1/state/api/provisioner/provisioner.go
File state/api/provisioner/provisioner.go (right):

https://codereview.appspot.com/96140044/diff/1/state/api/provisioner/provisioner.go#newcode118
state/api/provisioner/provisioner.go:118: func (st *State)
ContainerManagerConfig(args params.ContainerManagerConfigParams) (result
params.ContainerManagerConfig, err error) {
Need a doc comment

https://codereview.appspot.com/96140044/diff/1/state/apiserver/provisioner/provisioner.go
File state/apiserver/provisioner/provisioner.go (right):

https://codereview.appspot.com/96140044/diff/1/state/apiserver/provisioner/provisioner.go#newcode194
state/apiserver/provisioner/provisioner.go:194: //
ContainerManagerConfig returns information from the environment config
that are
that is needed

https://codereview.appspot.com/96140044/

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

ISTM that there's no code to handle immutability of use-lxc-clone. If
we're not properly handling changes yet, let's disallow them until we
have the infrastructure for it.

https://codereview.appspot.com/96140044/

Revision history for this message
Andrew Wilkins (axwalk) wrote :
Revision history for this message
Andrew Wilkins (axwalk) wrote :

On 2014/05/08 11:52:43, fwereade wrote:
> ISTM that there's no code to handle immutability of use-lxc-clone. If
we're not
> properly handling changes yet, let's disallow them until we have the
> infrastructure for it.

It was already immutable; I've added a test to make it clear.

https://codereview.appspot.com/96140044/

Revision history for this message
Andrew Wilkins (axwalk) wrote :

On 2014/05/08 10:43:00, wallyworld wrote:
> Thanks very much for picking this up. We need tests for the new api
calls and
> also possibly the new code in container_initialisation. So long as
it's been
> tested with lxc-use-clone set to true and false, LGTM

Added unit tests. I have run it live, doing it once more before landing.

https://codereview.appspot.com/96140044/diff/1/state/api/provisioner/provisioner.go
> File state/api/provisioner/provisioner.go (right):

https://codereview.appspot.com/96140044/diff/1/state/api/provisioner/provisioner.go#newcode118
> state/api/provisioner/provisioner.go:118: func (st *State)
> ContainerManagerConfig(args params.ContainerManagerConfigParams)
(result
> params.ContainerManagerConfig, err error) {
> Need a doc comment

https://codereview.appspot.com/96140044/diff/1/state/apiserver/provisioner/provisioner.go
> File state/apiserver/provisioner/provisioner.go (right):

https://codereview.appspot.com/96140044/diff/1/state/apiserver/provisioner/provisioner.go#newcode194
> state/apiserver/provisioner/provisioner.go:194: //
ContainerManagerConfig
> returns information from the environment config that are
> that is needed

https://codereview.appspot.com/96140044/

Revision history for this message
Andrew Wilkins (axwalk) wrote :

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 2014-04-11 17:51:58 +0000
3+++ environs/config/config.go 2014-05-09 01:54:38 +0000
4@@ -698,6 +698,13 @@
5 return c.defined["test-mode"].(bool)
6 }
7
8+// LXCUseClone reports whether the LXC provisioner should create a
9+// template and use cloning to speed up container provisioning.
10+func (c *Config) LXCUseClone() bool {
11+ v, _ := c.defined["lxc-use-clone"].(bool)
12+ return v
13+}
14+
15 // UnknownAttrs returns a copy of the raw configuration attributes
16 // that are supposedly specific to the environment type. They could
17 // also be wrong attributes, though. Only the specific environment
18@@ -774,6 +781,7 @@
19 "bootstrap-addresses-delay": schema.ForceInt(),
20 "test-mode": schema.Bool(),
21 "proxy-ssh": schema.Bool(),
22+ "lxc-use-clone": schema.Bool(),
23
24 // Deprecated fields, retain for backwards compatibility.
25 "tools-url": schema.String(),
26@@ -831,9 +839,10 @@
27 // Authentication string sent with requests to the charm store
28 "charm-store-auth": "",
29 // Previously image-stream could be set to an empty value
30- "image-stream": "",
31- "test-mode": false,
32- "proxy-ssh": false,
33+ "image-stream": "",
34+ "test-mode": false,
35+ "proxy-ssh": false,
36+ "lxc-use-clone": false,
37 }
38
39 func allowEmpty(attr string) bool {
40@@ -894,6 +903,7 @@
41 "bootstrap-timeout",
42 "bootstrap-retry-delay",
43 "bootstrap-addresses-delay",
44+ "lxc-use-clone",
45 }
46
47 var (
48
49=== modified file 'environs/config/config_test.go'
50--- environs/config/config_test.go 2014-04-11 18:13:56 +0000
51+++ environs/config/config_test.go 2014-05-09 01:54:38 +0000
52@@ -1028,6 +1028,7 @@
53 attrs["tools-url"] = ""
54 attrs["image-stream"] = ""
55 attrs["proxy-ssh"] = false
56+ attrs["lxc-use-clone"] = false
57
58 // Default firewall mode is instance
59 attrs["firewall-mode"] = string(config.FwInstance)
60@@ -1110,6 +1111,11 @@
61 about: "Cannot change the bootstrap-timeout from implicit-default to different value",
62 new: testing.Attrs{"bootstrap-timeout": 5},
63 err: `cannot change bootstrap-timeout from 600 to 5`,
64+}, {
65+ about: "Cannot change lxc-use-clone",
66+ old: testing.Attrs{"lxc-use-clone": false},
67+ new: testing.Attrs{"lxc-use-clone": true},
68+ err: `cannot change lxc-use-clone from false to true`,
69 }}
70
71 func (*ConfigSuite) TestValidateChange(c *gc.C) {
72
73=== modified file 'state/api/params/params.go'
74--- state/api/params/params.go 2014-04-23 16:28:17 +0000
75+++ state/api/params/params.go 2014-05-09 01:54:38 +0000
76@@ -597,6 +597,18 @@
77 }
78 }
79
80+// ContainerManagerConfigParams contains the parameters for the
81+// ContainerManagerConfig provisioner API call.
82+type ContainerManagerConfigParams struct {
83+ Type instance.ContainerType
84+}
85+
86+// ContainerManagerConfig contains information from the environment config
87+// that is needed for configuring the container manager.
88+type ContainerManagerConfig struct {
89+ ManagerConfig map[string]string
90+}
91+
92 // ContainerConfig contains information from the environment config that is
93 // needed for container cloud-init.
94 type ContainerConfig struct {
95
96=== modified file 'state/api/provisioner/provisioner.go'
97--- state/api/provisioner/provisioner.go 2014-04-12 05:53:58 +0000
98+++ state/api/provisioner/provisioner.go 2014-05-09 01:54:38 +0000
99@@ -115,7 +115,14 @@
100 return result.Tools, nil
101 }
102
103-// ContainerConfig returns information from the environment config that are
104+// ContainerManagerConfig returns information from the environment config that is
105+// needed for configuring the container manager.
106+func (st *State) ContainerManagerConfig(args params.ContainerManagerConfigParams) (result params.ContainerManagerConfig, err error) {
107+ err = st.call("ContainerManagerConfig", args, &result)
108+ return result, err
109+}
110+
111+// ContainerConfig returns information from the environment config that is
112 // needed for container cloud-init.
113 func (st *State) ContainerConfig() (result params.ContainerConfig, err error) {
114 err = st.call("ContainerConfig", nil, &result)
115
116=== modified file 'state/api/provisioner/provisioner_test.go'
117--- state/api/provisioner/provisioner_test.go 2014-04-22 09:23:39 +0000
118+++ state/api/provisioner/provisioner_test.go 2014-05-09 01:54:38 +0000
119@@ -10,6 +10,7 @@
120 gc "launchpad.net/gocheck"
121
122 "launchpad.net/juju-core/constraints"
123+ "launchpad.net/juju-core/container"
124 "launchpad.net/juju-core/errors"
125 "launchpad.net/juju-core/instance"
126 "launchpad.net/juju-core/juju/testing"
127@@ -533,6 +534,59 @@
128 c.Assert(addresses, gc.DeepEquals, stateAddresses)
129 }
130
131+func (s *provisionerSuite) TestContainerManagerConfigKVM(c *gc.C) {
132+ args := params.ContainerManagerConfigParams{Type: instance.KVM}
133+ result, err := s.provisioner.ContainerManagerConfig(args)
134+ c.Assert(err, gc.IsNil)
135+ c.Assert(result.ManagerConfig, gc.DeepEquals, map[string]string{
136+ container.ConfigName: "juju",
137+ })
138+}
139+
140+func (s *provisionerSuite) TestContainerManagerConfigLXC(c *gc.C) {
141+ args := params.ContainerManagerConfigParams{Type: instance.LXC}
142+ st, err := state.Open(s.StateInfo(c), state.DialOpts{}, state.Policy(nil))
143+ c.Assert(err, gc.IsNil)
144+ defer st.Close()
145+
146+ tests := []struct {
147+ lxcUseClone bool
148+ expectedUseClone string
149+ }{{
150+ lxcUseClone: false,
151+ expectedUseClone: "false",
152+ }, {
153+ lxcUseClone: true,
154+ expectedUseClone: "true",
155+ }}
156+
157+ // Change lxc-use-clone, and ensure it gets picked up.
158+ for i, t := range tests {
159+ c.Logf("test %d: %+v", i, t)
160+ err = st.UpdateEnvironConfig(map[string]interface{}{
161+ "lxc-use-clone": t.lxcUseClone,
162+ }, nil, nil)
163+ c.Assert(err, gc.IsNil)
164+ result, err := s.provisioner.ContainerManagerConfig(args)
165+ c.Assert(err, gc.IsNil)
166+ c.Assert(result.ManagerConfig, gc.DeepEquals, map[string]string{
167+ container.ConfigName: "juju",
168+ "use-clone": t.expectedUseClone,
169+ })
170+ }
171+}
172+
173+func (s *provisionerSuite) TestContainerManagerConfigPermissive(c *gc.C) {
174+ // ContainerManagerConfig is permissive of container types, and
175+ // will just return the basic type-independent configuration.
176+ args := params.ContainerManagerConfigParams{Type: "invalid"}
177+ result, err := s.provisioner.ContainerManagerConfig(args)
178+ c.Assert(err, gc.IsNil)
179+ c.Assert(result.ManagerConfig, gc.DeepEquals, map[string]string{
180+ container.ConfigName: "juju",
181+ })
182+}
183+
184 func (s *provisionerSuite) TestContainerConfig(c *gc.C) {
185 result, err := s.provisioner.ContainerConfig()
186 c.Assert(err, gc.IsNil)
187
188=== modified file 'state/apiserver/provisioner/provisioner.go'
189--- state/apiserver/provisioner/provisioner.go 2014-04-22 09:23:39 +0000
190+++ state/apiserver/provisioner/provisioner.go 2014-05-09 01:54:38 +0000
191@@ -7,6 +7,7 @@
192 "fmt"
193
194 "launchpad.net/juju-core/constraints"
195+ "launchpad.net/juju-core/container"
196 "launchpad.net/juju-core/instance"
197 "launchpad.net/juju-core/names"
198 "launchpad.net/juju-core/state"
199@@ -190,7 +191,25 @@
200 return result, nil
201 }
202
203-// ContainerConfig returns information from the environment config that are
204+// ContainerManagerConfig returns information from the environment config that is
205+// needed for configuring the container manager.
206+func (p *ProvisionerAPI) ContainerManagerConfig(args params.ContainerManagerConfigParams) (params.ContainerManagerConfig, error) {
207+ var result params.ContainerManagerConfig
208+ config, err := p.st.EnvironConfig()
209+ if err != nil {
210+ return result, err
211+ }
212+ cfg := make(map[string]string)
213+ cfg[container.ConfigName] = "juju"
214+ switch args.Type {
215+ case instance.LXC:
216+ cfg["use-clone"] = fmt.Sprint(config.LXCUseClone())
217+ }
218+ result.ManagerConfig = cfg
219+ return result, nil
220+}
221+
222+// ContainerConfig returns information from the environment config that is
223 // needed for container cloud-init.
224 func (p *ProvisionerAPI) ContainerConfig() (params.ContainerConfig, error) {
225 result := params.ContainerConfig{}
226
227=== modified file 'state/apiserver/provisioner/provisioner_test.go'
228--- state/apiserver/provisioner/provisioner_test.go 2014-04-22 09:23:39 +0000
229+++ state/apiserver/provisioner/provisioner_test.go 2014-05-09 01:54:38 +0000
230@@ -11,6 +11,7 @@
231 gc "launchpad.net/gocheck"
232
233 "launchpad.net/juju-core/constraints"
234+ "launchpad.net/juju-core/container"
235 "launchpad.net/juju-core/errors"
236 "launchpad.net/juju-core/instance"
237 "launchpad.net/juju-core/juju/osenv"
238@@ -1145,6 +1146,15 @@
239 c.Check(results.Results, gc.HasLen, 0)
240 }
241
242+func (s *withoutStateServerSuite) TestContainerManagerConfig(c *gc.C) {
243+ args := params.ContainerManagerConfigParams{Type: instance.KVM}
244+ results, err := s.provisioner.ContainerManagerConfig(args)
245+ c.Check(err, gc.IsNil)
246+ c.Assert(results.ManagerConfig, gc.DeepEquals, map[string]string{
247+ container.ConfigName: "juju",
248+ })
249+}
250+
251 func (s *withoutStateServerSuite) TestContainerConfig(c *gc.C) {
252 attrs := map[string]interface{}{
253 "http-proxy": "http://proxy.example.com:9000",
254
255=== modified file 'worker/provisioner/container_initialisation.go'
256--- worker/provisioner/container_initialisation.go 2014-03-13 17:21:05 +0000
257+++ worker/provisioner/container_initialisation.go 2014-05-09 01:54:38 +0000
258@@ -14,6 +14,7 @@
259 "launchpad.net/juju-core/environs"
260 "launchpad.net/juju-core/instance"
261 "launchpad.net/juju-core/state"
262+ "launchpad.net/juju-core/state/api/params"
263 apiprovisioner "launchpad.net/juju-core/state/api/provisioner"
264 "launchpad.net/juju-core/state/api/watcher"
265 "launchpad.net/juju-core/worker"
266@@ -71,7 +72,7 @@
267 }
268
269 // Handle is called whenever containers change on the machine being watched.
270-// All machines start out with so containers so the first time Handle is called,
271+// Machines start out with no containers so the first time Handle is called,
272 // it will be because a container has been added.
273 func (cs *ContainerSetup) Handle(containerIds []string) (resultError error) {
274 // Consume the initial watcher event.
275@@ -142,6 +143,21 @@
276 }
277 var initialiser container.Initialiser
278 var broker environs.InstanceBroker
279+
280+ // Ask the provisioner for the container manager configuration.
281+ managerConfigResult, err := cs.provisioner.ContainerManagerConfig(
282+ params.ContainerManagerConfigParams{Type: containerType},
283+ )
284+ if params.IsCodeNotImplemented(err) {
285+ // We currently don't support upgrading;
286+ // revert to the old configuration.
287+ managerConfigResult.ManagerConfig = container.ManagerConfig{container.ConfigName: "juju"}
288+ }
289+ if err != nil {
290+ return nil, nil, err
291+ }
292+ managerConfig := container.ManagerConfig(managerConfigResult.ManagerConfig)
293+
294 switch containerType {
295 case instance.LXC:
296 series, err := cs.machine.Series()
297@@ -150,13 +166,13 @@
298 }
299
300 initialiser = lxc.NewContainerInitialiser(series)
301- broker, err = NewLxcBroker(cs.provisioner, tools, cs.config)
302+ broker, err = NewLxcBroker(cs.provisioner, tools, cs.config, managerConfig)
303 if err != nil {
304 return nil, nil, err
305 }
306 case instance.KVM:
307 initialiser = kvm.NewContainerInitialiser()
308- broker, err = NewKvmBroker(cs.provisioner, tools, cs.config)
309+ broker, err = NewKvmBroker(cs.provisioner, tools, cs.config, managerConfig)
310 if err != nil {
311 logger.Errorf("failed to create new kvm broker")
312 return nil, nil, err
313
314=== modified file 'worker/provisioner/kvm-broker.go'
315--- worker/provisioner/kvm-broker.go 2014-05-08 06:58:42 +0000
316+++ worker/provisioner/kvm-broker.go 2014-05-09 01:54:38 +0000
317@@ -26,8 +26,9 @@
318 api APICalls,
319 tools *tools.Tools,
320 agentConfig agent.Config,
321+ managerConfig container.ManagerConfig,
322 ) (environs.InstanceBroker, error) {
323- manager, err := kvm.NewContainerManager(container.ManagerConfig{container.ConfigName: "juju"})
324+ manager, err := kvm.NewContainerManager(managerConfig)
325 if err != nil {
326 return nil, err
327 }
328
329=== modified file 'worker/provisioner/kvm-broker_test.go'
330--- worker/provisioner/kvm-broker_test.go 2014-05-08 06:58:42 +0000
331+++ worker/provisioner/kvm-broker_test.go 2014-05-09 01:54:38 +0000
332@@ -13,6 +13,7 @@
333
334 "launchpad.net/juju-core/agent"
335 "launchpad.net/juju-core/constraints"
336+ "launchpad.net/juju-core/container"
337 "launchpad.net/juju-core/container/kvm/mock"
338 kvmtesting "launchpad.net/juju-core/container/kvm/testing"
339 "launchpad.net/juju-core/environs"
340@@ -75,7 +76,8 @@
341 CACert: coretesting.CACert,
342 })
343 c.Assert(err, gc.IsNil)
344- s.broker, err = provisioner.NewKvmBroker(&fakeAPI{}, tools, s.agentConfig)
345+ managerConfig := container.ManagerConfig{container.ConfigName: "juju"}
346+ s.broker, err = provisioner.NewKvmBroker(&fakeAPI{}, tools, s.agentConfig, managerConfig)
347 c.Assert(err, gc.IsNil)
348 }
349
350@@ -219,7 +221,8 @@
351 agentConfig := s.AgentConfigForTag(c, machineTag)
352 tools, err := s.provisioner.Tools(agentConfig.Tag())
353 c.Assert(err, gc.IsNil)
354- broker, err := provisioner.NewKvmBroker(s.provisioner, tools, agentConfig)
355+ managerConfig := container.ManagerConfig{container.ConfigName: "juju"}
356+ broker, err := provisioner.NewKvmBroker(s.provisioner, tools, agentConfig, managerConfig)
357 c.Assert(err, gc.IsNil)
358 return provisioner.NewContainerProvisioner(instance.KVM, s.provisioner, agentConfig, broker)
359 }
360
361=== modified file 'worker/provisioner/lxc-broker.go'
362--- worker/provisioner/lxc-broker.go 2014-05-08 06:58:42 +0000
363+++ worker/provisioner/lxc-broker.go 2014-05-09 01:54:38 +0000
364@@ -27,8 +27,8 @@
365 ContainerConfig() (params.ContainerConfig, error)
366 }
367
368-func NewLxcBroker(api APICalls, tools *tools.Tools, agentConfig agent.Config) (environs.InstanceBroker, error) {
369- manager, err := lxc.NewContainerManager(container.ManagerConfig{container.ConfigName: "juju"})
370+func NewLxcBroker(api APICalls, tools *tools.Tools, agentConfig agent.Config, managerConfig container.ManagerConfig) (environs.InstanceBroker, error) {
371+ manager, err := lxc.NewContainerManager(managerConfig)
372 if err != nil {
373 return nil, err
374 }
375
376=== modified file 'worker/provisioner/lxc-broker_test.go'
377--- worker/provisioner/lxc-broker_test.go 2014-05-08 06:58:42 +0000
378+++ worker/provisioner/lxc-broker_test.go 2014-05-09 01:54:38 +0000
379@@ -14,6 +14,7 @@
380
381 "launchpad.net/juju-core/agent"
382 "launchpad.net/juju-core/constraints"
383+ "launchpad.net/juju-core/container"
384 "launchpad.net/juju-core/container/lxc/mock"
385 lxctesting "launchpad.net/juju-core/container/lxc/testing"
386 "launchpad.net/juju-core/environs"
387@@ -77,7 +78,8 @@
388 CACert: coretesting.CACert,
389 })
390 c.Assert(err, gc.IsNil)
391- s.broker, err = provisioner.NewLxcBroker(&fakeAPI{}, tools, s.agentConfig)
392+ managerConfig := container.ManagerConfig{container.ConfigName: "juju"}
393+ s.broker, err = provisioner.NewLxcBroker(&fakeAPI{}, tools, s.agentConfig, managerConfig)
394 c.Assert(err, gc.IsNil)
395 }
396
397@@ -253,7 +255,8 @@
398 agentConfig := s.AgentConfigForTag(c, parentMachineTag)
399 tools, err := s.provisioner.Tools(agentConfig.Tag())
400 c.Assert(err, gc.IsNil)
401- broker, err := provisioner.NewLxcBroker(s.provisioner, tools, agentConfig)
402+ managerConfig := container.ManagerConfig{container.ConfigName: "juju"}
403+ broker, err := provisioner.NewLxcBroker(s.provisioner, tools, agentConfig, managerConfig)
404 c.Assert(err, gc.IsNil)
405 return provisioner.NewContainerProvisioner(instance.LXC, s.provisioner, agentConfig, broker)
406 }

Subscribers

People subscribed via source and target branches

to status/vote changes: