Merge lp:~thumper/juju-core/container-userdata 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: 2049
Proposed branch: lp:~thumper/juju-core/container-userdata
Merge into: lp:~go-bot/juju-core/trunk
Prerequisite: lp:~thumper/juju-core/container-interface
Diff against target: 187 lines (+82/-63)
2 files modified
container/lxc/lxc.go (+1/-63)
container/userdata.go (+81/-0)
To merge this branch: bzr merge lp:~thumper/juju-core/container-userdata
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+194759@code.launchpad.net

Commit message

Move the writing of the user-data to container.

Writing out the user-data is container agnostic.

https://codereview.appspot.com/24790043/

Description of the change

Move the writing of the userdata to container.

Writing out the userdata is container agnostic.

https://codereview.appspot.com/24790043/

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

Reviewers: mp+194759_code.launchpad.net,

Message:
Please take a look.

Description:
Move the writing of the userdata to container.

Writing out the userdata is container agnostic.

https://code.launchpad.net/~thumper/juju-core/container-userdata/+merge/194759

Requires:
https://code.launchpad.net/~thumper/juju-core/container-interface/+merge/194757

(do not edit description out of merge proposal)

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

Affected files (+84, -63 lines):
   A [revision details]
   M container/lxc/lxc.go
   A container/userdata.go

Revision history for this message
Ian Booth (wallyworld) wrote :
Revision history for this message
Go Bot (go-bot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'container/lxc/lxc.go'
--- container/lxc/lxc.go 2013-11-12 00:35:51 +0000
+++ container/lxc/lxc.go 2013-11-12 00:35:51 +0000
@@ -8,7 +8,6 @@
8 "io/ioutil"8 "io/ioutil"
9 "os"9 "os"
10 "path/filepath"10 "path/filepath"
11 "regexp"
12 "strings"11 "strings"
1312
14 "launchpad.net/golxc"13 "launchpad.net/golxc"
@@ -18,14 +17,12 @@
18 "launchpad.net/juju-core/environs/cloudinit"17 "launchpad.net/juju-core/environs/cloudinit"
19 "launchpad.net/juju-core/instance"18 "launchpad.net/juju-core/instance"
20 "launchpad.net/juju-core/names"19 "launchpad.net/juju-core/names"
21 "launchpad.net/juju-core/utils"
22)20)
2321
24var logger = loggo.GetLogger("juju.container.lxc")22var logger = loggo.GetLogger("juju.container.lxc")
2523
26var (24var (
27 defaultTemplate = "ubuntu-cloud"25 defaultTemplate = "ubuntu-cloud"
28 aptHTTPProxyRE = regexp.MustCompile(`(?i)^Acquire::HTTP::Proxy\s+"([^"]+)";$`)
29 ContainerDir = "/var/lib/juju/containers"26 ContainerDir = "/var/lib/juju/containers"
30 RemovedContainerDir = "/var/lib/juju/removed-containers"27 RemovedContainerDir = "/var/lib/juju/removed-containers"
31 LxcContainerDir = "/var/lib/lxc"28 LxcContainerDir = "/var/lib/lxc"
@@ -85,7 +82,7 @@
85 return nil, err82 return nil, err
86 }83 }
87 logger.Tracef("write cloud-init")84 logger.Tracef("write cloud-init")
88 userDataFilename, err := writeUserData(machineConfig, directory)85 userDataFilename, err := container.WriteUserData(machineConfig, directory)
89 if err != nil {86 if err != nil {
90 logger.Errorf("failed to write user data: %v", err)87 logger.Errorf("failed to write user data: %v", err)
91 return nil, err88 return nil, err
@@ -248,65 +245,6 @@
248 return configFilename, nil245 return configFilename, nil
249}246}
250247
251func writeUserData(machineConfig *cloudinit.MachineConfig, directory string) (string, error) {
252 userData, err := cloudInitUserData(machineConfig)
253 if err != nil {
254 logger.Errorf("failed to create user data: %v", err)
255 return "", err
256 }
257 userDataFilename := filepath.Join(directory, "cloud-init")
258 if err := ioutil.WriteFile(userDataFilename, userData, 0644); err != nil {
259 logger.Errorf("failed to write user data: %v", err)
260 return "", err
261 }
262 return userDataFilename, nil
263}
264
265func cloudInitUserData(machineConfig *cloudinit.MachineConfig) ([]byte, error) {
266 machineConfig.DataDir = "/var/lib/juju"
267 cloudConfig, err := cloudinit.New(machineConfig)
268 if err != nil {
269 return nil, err
270 }
271
272 // Run apt-config to fetch proxy settings from host. If no proxy
273 // settings are configured, then we don't set up any proxy information
274 // on the container.
275 proxyConfig, err := utils.AptConfigProxy()
276 if err != nil {
277 return nil, err
278 }
279 if proxyConfig != "" {
280 var proxyLines []string
281 for _, line := range strings.Split(proxyConfig, "\n") {
282 line = strings.TrimSpace(line)
283 if len(line) > 0 {
284 if m := aptHTTPProxyRE.FindStringSubmatch(line); m != nil {
285 cloudConfig.SetAptProxy(m[1])
286 } else {
287 proxyLines = append(proxyLines, line)
288 }
289 }
290 }
291 if len(proxyLines) > 0 {
292 cloudConfig.AddFile(
293 "/etc/apt/apt.conf.d/99proxy-extra",
294 strings.Join(proxyLines, "\n"),
295 0644)
296 }
297 }
298
299 // Run ifconfig to get the addresses of the internal container at least
300 // logged in the host.
301 cloudConfig.AddRunCmd("ifconfig")
302
303 data, err := cloudConfig.Render()
304 if err != nil {
305 return nil, err
306 }
307 return data, nil
308}
309
310// uniqueDirectory returns "path/name" if that directory doesn't exist. If it248// uniqueDirectory returns "path/name" if that directory doesn't exist. If it
311// does, the method starts appending .1, .2, etc until a unique name is found.249// does, the method starts appending .1, .2, etc until a unique name is found.
312func uniqueDirectory(path, name string) (string, error) {250func uniqueDirectory(path, name string) (string, error) {
313251
=== added file 'container/userdata.go'
--- container/userdata.go 1970-01-01 00:00:00 +0000
+++ container/userdata.go 2013-11-12 00:35:51 +0000
@@ -0,0 +1,81 @@
1// Copyright 2013 Canonical Ltd.
2// Licensed under the AGPLv3, see LICENCE file for details.
3
4package container
5
6import (
7 "io/ioutil"
8 "path/filepath"
9 "regexp"
10 "strings"
11
12 "launchpad.net/loggo"
13
14 "launchpad.net/juju-core/environs/cloudinit"
15 "launchpad.net/juju-core/utils"
16)
17
18var (
19 logger = loggo.GetLogger("juju.container.lxc")
20 aptHTTPProxyRE = regexp.MustCompile(`(?i)^Acquire::HTTP::Proxy\s+"([^"]+)";$`)
21)
22
23func WriteUserData(machineConfig *cloudinit.MachineConfig, directory string) (string, error) {
24 userData, err := cloudInitUserData(machineConfig)
25 if err != nil {
26 logger.Errorf("failed to create user data: %v", err)
27 return "", err
28 }
29 userDataFilename := filepath.Join(directory, "cloud-init")
30 if err := ioutil.WriteFile(userDataFilename, userData, 0644); err != nil {
31 logger.Errorf("failed to write user data: %v", err)
32 return "", err
33 }
34 return userDataFilename, nil
35}
36
37func cloudInitUserData(machineConfig *cloudinit.MachineConfig) ([]byte, error) {
38 // consider not having this line hardcoded...
39 machineConfig.DataDir = "/var/lib/juju"
40 cloudConfig, err := cloudinit.New(machineConfig)
41 if err != nil {
42 return nil, err
43 }
44
45 // Run apt-config to fetch proxy settings from host. If no proxy
46 // settings are configured, then we don't set up any proxy information
47 // on the container.
48 proxyConfig, err := utils.AptConfigProxy()
49 if err != nil {
50 return nil, err
51 }
52 if proxyConfig != "" {
53 var proxyLines []string
54 for _, line := range strings.Split(proxyConfig, "\n") {
55 line = strings.TrimSpace(line)
56 if len(line) > 0 {
57 if m := aptHTTPProxyRE.FindStringSubmatch(line); m != nil {
58 cloudConfig.SetAptProxy(m[1])
59 } else {
60 proxyLines = append(proxyLines, line)
61 }
62 }
63 }
64 if len(proxyLines) > 0 {
65 cloudConfig.AddFile(
66 "/etc/apt/apt.conf.d/99proxy-extra",
67 strings.Join(proxyLines, "\n"),
68 0644)
69 }
70 }
71
72 // Run ifconfig to get the addresses of the internal container at least
73 // logged in the host.
74 cloudConfig.AddRunCmd("ifconfig")
75
76 data, err := cloudConfig.Render()
77 if err != nil {
78 return nil, err
79 }
80 return data, nil
81}

Subscribers

People subscribed via source and target branches

to status/vote changes: