Merge lp:~thumper/juju-core/container-hardware-characteristics into lp:~go-bot/juju-core/trunk

Proposed by Tim Penhey
Status: Merged
Approved by: Tim Penhey
Approved revision: no longer in the source branch.
Merged at revision: 2122
Proposed branch: lp:~thumper/juju-core/container-hardware-characteristics
Merge into: lp:~go-bot/juju-core/trunk
Prerequisite: lp:~thumper/juju-core/kvm-provisioner
Diff against target: 236 lines (+42/-28)
8 files modified
container/interface.go (+1/-1)
container/kvm/kvm.go (+10/-6)
container/kvm/live_test.go (+6/-2)
container/lxc/lxc.go (+14/-9)
container/testing/common.go (+3/-1)
provider/local/environ.go (+2/-3)
worker/provisioner/kvm-broker.go (+3/-3)
worker/provisioner/lxc-broker.go (+3/-3)
To merge this branch: bzr merge lp:~thumper/juju-core/container-hardware-characteristics
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+197644@code.launchpad.net

Commit message

StartContainer returns hardware characteristics.

Initial change to have the hardware characteristics
of containers returned. At this stage just the arch
is filled out.

https://codereview.appspot.com/36980043/

Description of the change

StartContainer returns hardware characteristics.

Initial change to have the hardware characteristics
of containers returned. At this stage just the arch
is filled out.

https://codereview.appspot.com/36980043/

To post a comment you must log in.
Revision history for this message
Tim Penhey (thumper) wrote :
Download full text (10.2 KiB)

Reviewers: mp+197644_code.launchpad.net,

Message:
Please take a look.

Description:
StartContainer returns hardware characteristics.

Initial change to have the hardware characteristics
of containers returned. At this stage just the arch
is filled out.

https://code.launchpad.net/~thumper/juju-core/container-hardware-characteristics/+merge/197644

Requires:
https://code.launchpad.net/~thumper/juju-core/kvm-provisioner/+merge/197629

(do not edit description out of merge proposal)

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

Affected files (+42, -28 lines):
   A [revision details]
   M container/interface.go
   M container/kvm/kvm.go
   M container/kvm/live_test.go
   M container/lxc/lxc.go
   M container/testing/common.go
   M provider/local/environ.go
   M worker/provisioner/kvm-broker.go
   M worker/provisioner/lxc-broker.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: container/interface.go
=== modified file 'container/interface.go'
--- container/interface.go 2013-11-20 01:07:26 +0000
+++ container/interface.go 2013-12-04 02:37:05 +0000
@@ -22,7 +22,7 @@
   StartContainer(
    machineConfig *cloudinit.MachineConfig,
    series string,
- network *NetworkConfig) (instance.Instance, error)
+ network *NetworkConfig) (instance.Instance,
*instance.HardwareCharacteristics, error)
   // StopContainer stops and destroyes the container identified by Instance.
   StopContainer(instance.Instance) error
   // ListContainers return a list of containers that have been started by

Index: container/kvm/kvm.go
=== modified file 'container/kvm/kvm.go'
--- container/kvm/kvm.go 2013-12-04 00:52:35 +0000
+++ container/kvm/kvm.go 2013-12-04 02:37:05 +0000
@@ -63,7 +63,7 @@
  func (manager *containerManager) StartContainer(
   machineConfig *cloudinit.MachineConfig,
   series string,
- network *container.NetworkConfig) (instance.Instance, error) {
+ network *container.NetworkConfig) (instance.Instance,
*instance.HardwareCharacteristics, error) {

   name := names.MachineTag(machineConfig.MachineId)
   if manager.name != "" {
@@ -77,20 +77,24 @@
   // Create the cloud-init.
   directory, err := container.NewDirectory(name)
   if err != nil {
- return nil, fmt.Errorf("failed to create container directory: %v", err)
+ return nil, nil, fmt.Errorf("failed to create container directory: %v",
err)
   }
   logger.Tracef("write cloud-init")
   userDataFilename, err := container.WriteUserData(machineConfig, directory)
   if err != nil {
- return nil, log.LoggedErrorf(logger, "failed to write user data: %v",
err)
+ return nil, nil, log.LoggedErrorf(logger, "failed to write user
data: %v", err)
   }
   // Create the container.
+ arch := version.Current.Arch
+ hardware := &instance.HardwareCharacteristics{
+ Arch: &arch,
+ }
   logger.Tracef("create the container")
- if err := kvmContainer.Start(series, version.Current.Arch,
userDataFilename, network); er...

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

LGTM but I'd like to see the tests more proscriptive. eg we know what
arch has to be so test that rather than no nil.

https://codereview.appspot.com/36980043/diff/1/container/kvm/live_test.go
File container/kvm/live_test.go (right):

https://codereview.appspot.com/36980043/diff/1/container/kvm/live_test.go#newcode101
container/kvm/live_test.go:101: c.Assert(hardware, gc.Not(gc.Equals),
&instance.HardwareCharacteristics{})
I do think we should be asserting an actual expected value, not just
"not nil"

https://codereview.appspot.com/36980043/

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'container/interface.go'
2--- container/interface.go 2013-11-20 01:07:26 +0000
3+++ container/interface.go 2013-12-04 22:36:30 +0000
4@@ -22,7 +22,7 @@
5 StartContainer(
6 machineConfig *cloudinit.MachineConfig,
7 series string,
8- network *NetworkConfig) (instance.Instance, error)
9+ network *NetworkConfig) (instance.Instance, *instance.HardwareCharacteristics, error)
10 // StopContainer stops and destroyes the container identified by Instance.
11 StopContainer(instance.Instance) error
12 // ListContainers return a list of containers that have been started by
13
14=== modified file 'container/kvm/kvm.go'
15--- container/kvm/kvm.go 2013-12-04 00:52:35 +0000
16+++ container/kvm/kvm.go 2013-12-04 22:36:30 +0000
17@@ -63,7 +63,7 @@
18 func (manager *containerManager) StartContainer(
19 machineConfig *cloudinit.MachineConfig,
20 series string,
21- network *container.NetworkConfig) (instance.Instance, error) {
22+ network *container.NetworkConfig) (instance.Instance, *instance.HardwareCharacteristics, error) {
23
24 name := names.MachineTag(machineConfig.MachineId)
25 if manager.name != "" {
26@@ -77,20 +77,24 @@
27 // Create the cloud-init.
28 directory, err := container.NewDirectory(name)
29 if err != nil {
30- return nil, fmt.Errorf("failed to create container directory: %v", err)
31+ return nil, nil, fmt.Errorf("failed to create container directory: %v", err)
32 }
33 logger.Tracef("write cloud-init")
34 userDataFilename, err := container.WriteUserData(machineConfig, directory)
35 if err != nil {
36- return nil, log.LoggedErrorf(logger, "failed to write user data: %v", err)
37+ return nil, nil, log.LoggedErrorf(logger, "failed to write user data: %v", err)
38 }
39 // Create the container.
40+ arch := version.Current.Arch
41+ hardware := &instance.HardwareCharacteristics{
42+ Arch: &arch,
43+ }
44 logger.Tracef("create the container")
45- if err := kvmContainer.Start(series, version.Current.Arch, userDataFilename, network); err != nil {
46- return nil, log.LoggedErrorf(logger, "kvm container creation failed: %v", err)
47+ if err := kvmContainer.Start(series, arch, userDataFilename, network); err != nil {
48+ return nil, nil, log.LoggedErrorf(logger, "kvm container creation failed: %v", err)
49 }
50 logger.Tracef("kvm container created")
51- return &kvmInstance{kvmContainer, name}, nil
52+ return &kvmInstance{kvmContainer, name}, hardware, nil
53 }
54
55 func (manager *containerManager) StopContainer(instance instance.Instance) error {
56
57=== modified file 'container/kvm/live_test.go'
58--- container/kvm/live_test.go 2013-11-21 09:47:12 +0000
59+++ container/kvm/live_test.go 2013-12-04 22:36:30 +0000
60@@ -95,9 +95,13 @@
61 err := environs.FinishMachineConfig(machineConfig, environConfig, constraints.Value{})
62 c.Assert(err, gc.IsNil)
63
64- instance, err := manager.StartContainer(machineConfig, "precise", network)
65+ inst, hardware, err := manager.StartContainer(machineConfig, "precise", network)
66 c.Assert(err, gc.IsNil)
67- return instance
68+ c.Assert(hardware, gc.NotNil)
69+ arch := version.Current.Arch
70+ expected := instance.HardwareCharacteristics{Arch: &arch}.String()
71+ c.Assert(hardware.String(), gc.Equals, expected)
72+ return inst
73 }
74
75 func (s *LiveSuite) TestShutdownMachines(c *gc.C) {
76
77=== modified file 'container/lxc/lxc.go'
78--- container/lxc/lxc.go 2013-12-01 23:54:35 +0000
79+++ container/lxc/lxc.go 2013-12-04 22:36:30 +0000
80@@ -17,6 +17,7 @@
81 "launchpad.net/juju-core/environs/cloudinit"
82 "launchpad.net/juju-core/instance"
83 "launchpad.net/juju-core/names"
84+ "launchpad.net/juju-core/version"
85 )
86
87 var logger = loggo.GetLogger("juju.container.lxc")
88@@ -61,7 +62,7 @@
89 func (manager *containerManager) StartContainer(
90 machineConfig *cloudinit.MachineConfig,
91 series string,
92- network *container.NetworkConfig) (instance.Instance, error) {
93+ network *container.NetworkConfig) (instance.Instance, *instance.HardwareCharacteristics, error) {
94
95 name := names.MachineTag(machineConfig.MachineId)
96 if manager.name != "" {
97@@ -75,19 +76,19 @@
98 // Create the cloud-init.
99 directory, err := container.NewDirectory(name)
100 if err != nil {
101- return nil, err
102+ return nil, nil, err
103 }
104 logger.Tracef("write cloud-init")
105 userDataFilename, err := container.WriteUserData(machineConfig, directory)
106 if err != nil {
107 logger.Errorf("failed to write user data: %v", err)
108- return nil, err
109+ return nil, nil, err
110 }
111 logger.Tracef("write the lxc.conf file")
112 configFile, err := writeLxcConfig(network, directory, manager.logdir)
113 if err != nil {
114 logger.Errorf("failed to write config file: %v", err)
115- return nil, err
116+ return nil, nil, err
117 }
118 templateParams := []string{
119 "--debug", // Debug errors in the cloud image
120@@ -99,19 +100,19 @@
121 logger.Tracef("create the container")
122 if err := lxcContainer.Create(configFile, defaultTemplate, templateParams...); err != nil {
123 logger.Errorf("lxc container creation failed: %v", err)
124- return nil, err
125+ return nil, nil, err
126 }
127 // Make sure that the mount dir has been created.
128 logger.Tracef("make the mount dir for the shard logs")
129 if err := os.MkdirAll(internalLogDir(name), 0755); err != nil {
130 logger.Errorf("failed to create internal /var/log/juju mount dir: %v", err)
131- return nil, err
132+ return nil, nil, err
133 }
134 logger.Tracef("lxc container created")
135 // Now symlink the config file into the restart directory.
136 containerConfigFile := filepath.Join(LxcContainerDir, name, "config")
137 if err := os.Symlink(containerConfigFile, restartSymlink(name)); err != nil {
138- return nil, err
139+ return nil, nil, err
140 }
141 logger.Tracef("auto-restart link created")
142
143@@ -126,10 +127,14 @@
144 // setting it ourselves.
145 if err = lxcContainer.Start("", consoleFile); err != nil {
146 logger.Errorf("container failed to start: %v", err)
147- return nil, err
148+ return nil, nil, err
149+ }
150+ arch := version.Current.Arch
151+ hardware := &instance.HardwareCharacteristics{
152+ Arch: &arch,
153 }
154 logger.Tracef("container started")
155- return &lxcInstance{lxcContainer, name}, nil
156+ return &lxcInstance{lxcContainer, name}, hardware, nil
157 }
158
159 func (manager *containerManager) StopContainer(instance instance.Instance) error {
160
161=== modified file 'container/testing/common.go'
162--- container/testing/common.go 2013-12-04 04:14:44 +0000
163+++ container/testing/common.go 2013-12-04 22:36:30 +0000
164@@ -29,8 +29,10 @@
165
166 series := "series"
167 network := container.BridgeNetworkConfig("nic42")
168- inst, err := manager.StartContainer(machineConfig, series, network)
169+ inst, hardware, err := manager.StartContainer(machineConfig, series, network)
170 c.Assert(err, gc.IsNil)
171+ c.Assert(hardware, gc.NotNil)
172+ c.Assert(hardware.String(), gc.Not(gc.Equals), "")
173 return inst
174 }
175
176
177=== modified file 'provider/local/environ.go'
178--- provider/local/environ.go 2013-12-04 00:41:41 +0000
179+++ provider/local/environ.go 2013-12-04 22:36:30 +0000
180@@ -295,12 +295,11 @@
181 return nil, nil, err
182 }
183 machineConfig.AgentEnvironment[agent.Namespace] = env.config.namespace()
184- inst, err := env.containerManager.StartContainer(machineConfig, series, network)
185+ inst, hardware, err := env.containerManager.StartContainer(machineConfig, series, network)
186 if err != nil {
187 return nil, nil, err
188 }
189- // TODO(thumper): return some hardware characteristics.
190- return inst, nil, nil
191+ return inst, hardware, nil
192 }
193
194 // StartInstance is specified in the InstanceBroker interface.
195
196=== modified file 'worker/provisioner/kvm-broker.go'
197--- worker/provisioner/kvm-broker.go 2013-12-04 04:01:16 +0000
198+++ worker/provisioner/kvm-broker.go 2013-12-04 22:36:30 +0000
199@@ -90,13 +90,13 @@
200 return nil, nil, err
201 }
202
203- inst, err := broker.manager.StartContainer(machineConfig, series, network)
204+ inst, hardware, err := broker.manager.StartContainer(machineConfig, series, network)
205 if err != nil {
206 kvmLogger.Errorf("failed to start container: %v", err)
207 return nil, nil, err
208 }
209- kvmLogger.Infof("started kvm container for machineId: %s, %s", machineId, inst.Id())
210- return inst, nil, nil
211+ kvmLogger.Infof("started kvm container for machineId: %s, %s, %s", machineId, inst.Id(), hardware.String())
212+ return inst, hardware, nil
213 }
214
215 // StopInstances shuts down the given instances.
216
217=== modified file 'worker/provisioner/lxc-broker.go'
218--- worker/provisioner/lxc-broker.go 2013-12-04 04:01:16 +0000
219+++ worker/provisioner/lxc-broker.go 2013-12-04 22:36:30 +0000
220@@ -80,13 +80,13 @@
221 return nil, nil, err
222 }
223
224- inst, err := broker.manager.StartContainer(machineConfig, series, network)
225+ inst, hardware, err := broker.manager.StartContainer(machineConfig, series, network)
226 if err != nil {
227 lxcLogger.Errorf("failed to start container: %v", err)
228 return nil, nil, err
229 }
230- lxcLogger.Infof("started lxc container for machineId: %s, %s", machineId, inst.Id())
231- return inst, nil, nil
232+ lxcLogger.Infof("started lxc container for machineId: %s, %s, %s", machineId, inst.Id(), hardware.String())
233+ return inst, hardware, nil
234 }
235
236 // StopInstances shuts down the given instances.

Subscribers

People subscribed via source and target branches

to status/vote changes: