Merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:~go-bot/juju-core/trunk
- container-dir-filesystem-type
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | John A Meinel |
Approved revision: | no longer in the source branch. |
Merged at revision: | 2408 |
Proposed branch: | lp:~thumper/juju-core/container-dir-filesystem-type |
Merge into: | lp:~go-bot/juju-core/trunk |
Prerequisite: | lp:~thumper/juju-core/autostart-containers-after-creation |
Diff against target: |
145 lines (+74/-7) 3 files modified
container/lxc/export_test.go (+3/-2) container/lxc/lxc.go (+39/-4) container/lxc/lxc_test.go (+32/-1) |
To merge this branch: | bzr merge lp:~thumper/juju-core/container-dir-filesystem-type |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Juju Engineering | Pending | ||
Review via email: mp+210101@code.launchpad.net |
Commit message
Detect backing filesystem for lxc container dir.
Have the LXC container manager know the underlying
filesystem of the container directory.
This is necessary for the container manager to become
btrfs aware, for snapshotting containers on clone.
Description of the change
Detect backing filesystem for lxc container dir.
Have the LXC container manager know the underlying
filesystem of the container directory.
This is necessary for the container manager to become
btrfs aware, for snapshotting containers on clone.
Tim Penhey (thumper) wrote : | # |
Andrew Wilkins (axwalk) wrote : | # |
https:/
File container/
https:/
container/
(*exec.
Do you really want CombinedOutput? Just Output, I think.
https:/
container/
LxcContainerDir)
If you use Output instead, you can store Stderr in a bytes.Buffer and
add it to the error for context.
Andrew Wilkins (axwalk) wrote : | # |
On 2014/03/10 01:20:01, axw wrote:
> https:/
> File container/
https:/
> container/
(*exec.
> Do you really want CombinedOutput? Just Output, I think.
https:/
> container/
> LxcContainerDir)
> If you use Output instead, you can store Stderr in a bytes.Buffer and
add it to
> the error for context.
After discussion, LGTM, since you won't get mixed stdout/stderr.
Go Bot (go-bot) wrote : | # |
Attempt to merge into lp:juju-core failed due to conflicts:
text conflict in container/
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
-------
FAIL: factory_test.go:21: factorySuite.
factory_test.go:41:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
OOPS: 0 passed, 1 FAILED
--- FAIL: Test (0.00 seconds)
FAIL
FAIL launchpad.
ok launchpad.
ok launchpad.
? launchpad.
-------
FAIL: lxc_test.go:133: LxcSuite.
lxc_test.go:134:
manager := s.makeManager(c, "test")
lxc_test.go:79:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
-------
FAIL: lxc_test.go:186: LxcSuite.
lxc_test.go:187:
foo := s.makeManager(c, "foo")
lxc_test.go:79:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
-------
FAIL: lxc_test.go:83: LxcSuite.
lxc_test.go:88:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
-------
FAIL: lxc_test.go:180: LxcSuite.
lxc_test.go:181:
manager := s.makeManager(c, "eric")
lxc_test.go:79:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
-----------...
Go Bot (go-bot) wrote : | # |
No proposals found for merge of https:/
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
-------
FAIL: factory_test.go:21: factorySuite.
factory_test.go:41:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
OOPS: 0 passed, 1 FAILED
--- FAIL: Test (0.00 seconds)
FAIL
FAIL launchpad.
ok launchpad.
ok launchpad.
? launchpad.
-------
FAIL: lxc_test.go:133: LxcSuite.
lxc_test.go:134:
manager := s.makeManager(c, "test")
lxc_test.go:79:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
-------
FAIL: lxc_test.go:186: LxcSuite.
lxc_test.go:187:
foo := s.makeManager(c, "foo")
lxc_test.go:79:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
-------
FAIL: lxc_test.go:83: LxcSuite.
lxc_test.go:88:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
-------
FAIL: lxc_test.go:180: LxcSuite.
lxc_test.go:181:
manager := s.makeManager(c, "eric")
lxc_test.go:79:
c.Assert(err, gc.IsNil)
... value *exec.ExitError = &exec.ExitError
-----------...
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
*** Test killed: ran too long (10m0s).
FAIL launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
Go Bot (go-bot) wrote : | # |
The attempt to merge lp:~thumper/juju-core/container-dir-filesystem-type into lp:juju-core failed. Below is the output from the failed tests.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
? launchpad.
? launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
? launchpad.
ok launchpad.
ok launchpad.
Preview Diff
1 | === modified file 'container/lxc/export_test.go' |
2 | --- container/lxc/export_test.go 2014-03-07 02:44:39 +0000 |
3 | +++ container/lxc/export_test.go 2014-03-12 01:28:37 +0000 |
4 | @@ -4,8 +4,9 @@ |
5 | package lxc |
6 | |
7 | var ( |
8 | + ContainerConfigFilename = containerConfigFilename |
9 | + ContainerDirFilesystem = containerDirFilesystem |
10 | + GenerateNetworkConfig = generateNetworkConfig |
11 | NetworkConfigTemplate = networkConfigTemplate |
12 | - GenerateNetworkConfig = generateNetworkConfig |
13 | RestartSymlink = restartSymlink |
14 | - ContainerConfigFilename = containerConfigFilename |
15 | ) |
16 | |
17 | === modified file 'container/lxc/lxc.go' |
18 | --- container/lxc/lxc.go 2014-03-11 03:08:17 +0000 |
19 | +++ container/lxc/lxc.go 2014-03-12 01:28:37 +0000 |
20 | @@ -7,6 +7,7 @@ |
21 | "fmt" |
22 | "io/ioutil" |
23 | "os" |
24 | + "os/exec" |
25 | "path/filepath" |
26 | "strings" |
27 | |
28 | @@ -33,6 +34,8 @@ |
29 | const ( |
30 | // DefaultLxcBridge is the package created container bridge |
31 | DefaultLxcBridge = "lxcbr0" |
32 | + // Btrfs is special as we treat it differently for create and clone. |
33 | + Btrfs = "btrfs" |
34 | ) |
35 | |
36 | // DefaultNetworkConfig returns a valid NetworkConfig to use the |
37 | @@ -41,9 +44,29 @@ |
38 | return container.BridgeNetworkConfig(DefaultLxcBridge) |
39 | } |
40 | |
41 | +// FsCommandOutput calls cmd.Output, this is used as an overloading point so |
42 | +// we can test what *would* be run without actually executing another program |
43 | +var FsCommandOutput = (*exec.Cmd).CombinedOutput |
44 | + |
45 | +func containerDirFilesystem() (string, error) { |
46 | + cmd := exec.Command("df", "--output=fstype", LxcContainerDir) |
47 | + out, err := FsCommandOutput(cmd) |
48 | + if err != nil { |
49 | + return "", err |
50 | + } |
51 | + // The filesystem is the second line. |
52 | + lines := strings.Split(string(out), "\n") |
53 | + if len(lines) < 2 { |
54 | + logger.Errorf("unexpected output: ", out) |
55 | + return "", fmt.Errorf("could not determine filesystem type") |
56 | + } |
57 | + return lines[1], nil |
58 | +} |
59 | + |
60 | type containerManager struct { |
61 | - name string |
62 | - logdir string |
63 | + name string |
64 | + logdir string |
65 | + backingFilesystem string |
66 | } |
67 | |
68 | // containerManager implements container.Manager. |
69 | @@ -63,11 +86,23 @@ |
70 | if logDir == "" { |
71 | logDir = agent.DefaultLogDir |
72 | } |
73 | + backingFS, err := containerDirFilesystem() |
74 | + if err != nil { |
75 | + // Especially in tests, or a bot, the lxc dir may not exist |
76 | + // causing the test to fail. Since we only really care if the |
77 | + // backingFS is 'btrfs' and we treat the rest the same, just |
78 | + // call it 'unknown'. |
79 | + backingFS = "unknown" |
80 | + } |
81 | + logger.Tracef("backing filesystem: %q", backingFS) |
82 | for k, v := range conf { |
83 | logger.Warningf(`Found unused config option with key: "%v" and value: "%v"`, k, v) |
84 | } |
85 | - |
86 | - return &containerManager{name: name, logdir: logDir}, nil |
87 | + return &containerManager{ |
88 | + name: name, |
89 | + logdir: logDir, |
90 | + backingFilesystem: backingFS, |
91 | + }, nil |
92 | } |
93 | |
94 | func (manager *containerManager) StartContainer( |
95 | |
96 | === modified file 'container/lxc/lxc_test.go' |
97 | --- container/lxc/lxc_test.go 2014-03-11 03:08:17 +0000 |
98 | +++ container/lxc/lxc_test.go 2014-03-12 01:28:37 +0000 |
99 | @@ -41,6 +41,37 @@ |
100 | loggo.GetLogger("juju.container.lxc").SetLogLevel(loggo.TRACE) |
101 | } |
102 | |
103 | +func (s *LxcSuite) TestContainerDirFilesystem(c *gc.C) { |
104 | + for i, test := range []struct { |
105 | + message string |
106 | + output string |
107 | + expected string |
108 | + errorMatch string |
109 | + }{{ |
110 | + message: "btrfs", |
111 | + output: "Type\nbtrfs\n", |
112 | + expected: lxc.Btrfs, |
113 | + }, { |
114 | + message: "ext4", |
115 | + output: "Type\next4\n", |
116 | + expected: "ext4", |
117 | + }, { |
118 | + message: "not enough output", |
119 | + output: "foo", |
120 | + errorMatch: "could not determine filesystem type", |
121 | + }} { |
122 | + c.Logf("%v: %s", i, test.message) |
123 | + s.HookCommandOutput(&lxc.FsCommandOutput, []byte(test.output), nil) |
124 | + value, err := lxc.ContainerDirFilesystem() |
125 | + if test.errorMatch == "" { |
126 | + c.Check(err, gc.IsNil) |
127 | + c.Check(value, gc.Equals, test.expected) |
128 | + } else { |
129 | + c.Check(err, gc.ErrorMatches, test.errorMatch) |
130 | + } |
131 | + } |
132 | +} |
133 | + |
134 | func (s *LxcSuite) makeManager(c *gc.C, name string) container.Manager { |
135 | manager, err := lxc.NewContainerManager(container.ManagerConfig{ |
136 | container.ConfigName: name, |
137 | @@ -55,7 +86,7 @@ |
138 | "shazam": "Captain Marvel", |
139 | }) |
140 | c.Assert(err, gc.IsNil) |
141 | - c.Assert(c.GetTestLog(), gc.Matches, `^.*WARNING juju.container.lxc Found unused config option with key: "shazam" and value: "Captain Marvel"\n*`) |
142 | + c.Assert(c.GetTestLog(), jc.Contains, `WARNING juju.container.lxc Found unused config option with key: "shazam" and value: "Captain Marvel"`) |
143 | } |
144 | |
145 | func (s *LxcSuite) TestStartContainer(c *gc.C) { |
Reviewers: mp+210101_ code.launchpad. net,
Message:
Please take a look.
Description:
Detect backing filesystem for lxc container dir.
Have the LXC container manager know the underlying
filesystem of the container directory.
This is necessary for the container manager to become
btrfs aware, for snapshotting containers on clone.
https:/ /code.launchpad .net/~thumper/ juju-core/ container- dir-filesystem- type/+merge/ 210101
Requires: /code.launchpad .net/~thumper/ juju-core/ autostart- containers- after-creation/ +merge/ 210099
https:/
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/73310043/
Affected files (+71, -5 lines): lxc/export_ test.go lxc/lxc. go lxc/lxc_ test.go
A [revision details]
M container/
M container/
M container/
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/ lxc/export_ test.go lxc/export_ test.go' lxc/export_ test.go 2014-03-07 02:44:39 +0000 lxc/export_ test.go 2014-03-07 02:53:53 +0000
=== modified file 'container/
--- container/
+++ container/
@@ -4,8 +4,9 @@
package lxc
var ( Filename = containerConfig Filename esystem = containerDirFil esystem Config = generateNetwork Config gTemplate = networkConfigTe mplate Config = generateNetwork Config Filename = containerConfig Filename
+ ContainerConfig
+ ContainerDirFil
+ GenerateNetwork
NetworkConfi
- GenerateNetwork
RestartSymlink = restartSymlink
- ContainerConfig
)
Index: container/ lxc/lxc. go lxc/lxc. go' lxc/lxc. go 2014-03-09 20:53:16 +0000 lxc/lxc. go 2014-03-09 21:33:22 +0000
=== modified file 'container/
--- container/
+++ container/
@@ -7,6 +7,7 @@
"fmt"
"io/ioutil"
"os"
+ "os/exec"
"path/filepath"
"strings"
@@ -33,6 +34,8 @@
const (
// DefaultLxcBridge is the package created container bridge
DefaultLxcBridge = "lxcbr0"
+ // Btrfs is special as we treat it differently for create and clone.
+ Btrfs = "btrfs"
)
// DefaultNetworkC onfig returns a valid NetworkConfig to use the BridgeNetworkCo nfig(DefaultLxc Bridge)
@@ -41,9 +44,29 @@
return container.
}
+// FsCommandOutput calls cmd.Output, this is used as an overloading point Cmd).CombinedOu tput esystem( ) (string, error) { (cmd) Split(string( out), "\n") Errorf( "unexpected output: ", out)
so
+// we can test what *would* be run without actually executing another
program
+var FsCommandOutput = (*exec.
+
+func containerDirFil
+ cmd := exec.Command("df", "--output=fstype", LxcContainerDir)
+ out, err := FsCommandOutput
+ if err != nil {
+ return "", err
+ }
+ // The filesystem is the second line.
+ lines := strings.
+ if len(lines) < 2 {
+ logger.
+ return "", fmt.Errorf("could not determine filesystem type")
+ }
+ return lines[1], nil
+}
+
type containerManager struct {
- name string
- logdir string
+ name string
+ logdir string
+ backingFilesystem string
}
// containerManager implements container.Manager.
@@ -61,7...