lxc 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/lxc/container.rb +34 -3
- data/lib/lxc/version.rb +6 -1
- data/lib/lxc.rb +8 -3
- metadata +86 -121
data/lib/lxc/container.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
class LXC
|
2
|
+
|
3
|
+
# Container Error Class
|
2
4
|
class ContainerError < Error; end
|
3
5
|
|
6
|
+
# Main Container Class
|
7
|
+
#
|
8
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
4
9
|
class Container
|
5
10
|
|
6
11
|
# An array containing the valid container states extracted from the LXC
|
7
12
|
# c-source code.
|
8
|
-
STATES = %w(stopped starting running stopping aborting freezing frozen thawed)
|
13
|
+
STATES = %w(stopped starting running stopping aborting freezing frozen thawed).map(&:to_sym)
|
9
14
|
|
10
15
|
# @!method stopped?
|
11
16
|
# Returns true if the container is stopped, false otherwise.
|
@@ -39,8 +44,8 @@ class LXC
|
|
39
44
|
# Returns true if the container is thawed, false otherwise.
|
40
45
|
# @return [Boolean]
|
41
46
|
STATES.each do |state|
|
42
|
-
define_method "#{state
|
43
|
-
(self.state == state
|
47
|
+
define_method "#{state}?" do
|
48
|
+
(self.state == state)
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
@@ -159,6 +164,32 @@ class LXC
|
|
159
164
|
@lxc.exists?(self.name)
|
160
165
|
end
|
161
166
|
|
167
|
+
# Wait for a specific container state
|
168
|
+
#
|
169
|
+
# Runs the "lxc-wait" command.
|
170
|
+
#
|
171
|
+
# @param [Array] states An array of container states for which we will wait
|
172
|
+
# for the container to change state to.
|
173
|
+
# @param [Integer] timeout How long in seconds we will wait before the
|
174
|
+
# operation times out.
|
175
|
+
# @return [Boolean] Returns true of the state change happened, false
|
176
|
+
# otherwise.
|
177
|
+
def wait(states, timeout=60)
|
178
|
+
state_arg = states.map do |state|
|
179
|
+
state.to_s.upcase.strip
|
180
|
+
end.join('|')
|
181
|
+
|
182
|
+
begin
|
183
|
+
Timeout::timeout(timeout) do
|
184
|
+
self.exec("wait", "-s", %('#{state_arg}'))
|
185
|
+
end
|
186
|
+
rescue Timeout::Error => e
|
187
|
+
return false
|
188
|
+
end
|
189
|
+
|
190
|
+
return true
|
191
|
+
end
|
192
|
+
|
162
193
|
# Linux container command execution wrapper
|
163
194
|
#
|
164
195
|
# Executes the supplied command by injecting the container name into the
|
data/lib/lxc/version.rb
CHANGED
data/lib/lxc.rb
CHANGED
@@ -2,7 +2,7 @@ require 'ztk'
|
|
2
2
|
|
3
3
|
require 'lxc/version'
|
4
4
|
|
5
|
-
#
|
5
|
+
# Top-Level LXC Class
|
6
6
|
#
|
7
7
|
# @author Zachary Patten <zachary@jovelabs.net>
|
8
8
|
class LXC
|
@@ -45,6 +45,11 @@ class LXC
|
|
45
45
|
# output.
|
46
46
|
REGEX_VERSION = /^lxc version:\s+([\w\W]+)$/
|
47
47
|
|
48
|
+
# SED command for removing ANSI colors
|
49
|
+
#
|
50
|
+
# @see http://www.commandlinefu.com/commands/view/3584/remove-color-codes-special-characters-with-sed CommandLineFu - Remove Color Codes (Special Characters) with SED
|
51
|
+
SED_REMOVE_ANSI = %q(sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")
|
52
|
+
|
48
53
|
def initialize
|
49
54
|
@use_sudo = false
|
50
55
|
@use_ssh = nil
|
@@ -122,9 +127,9 @@ class LXC
|
|
122
127
|
# Runs the "lxc-checkconfig" command.
|
123
128
|
#
|
124
129
|
# @param [Array] args Additional command-line arguments.
|
125
|
-
# @return [Array<String>] Output text of the "lxc-
|
130
|
+
# @return [Array<String>] Output text of the "lxc-checkconfig" command.
|
126
131
|
def checkconfig(*args)
|
127
|
-
self.exec("checkconfig", *args).split("\n")
|
132
|
+
self.exec("checkconfig", *args, " | #{SED_REMOVE_ANSI}").split("\n")
|
128
133
|
end
|
129
134
|
|
130
135
|
# Linux container command execution wrapper
|
metadata
CHANGED
@@ -1,152 +1,115 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: lxc
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Zachary Patten
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2013-04-13 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: ztk
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
31
27
|
name: bundler
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
28
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
33
29
|
none: false
|
34
|
-
requirements:
|
30
|
+
requirements:
|
35
31
|
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version:
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "1.3"
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '1.3'
|
46
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
47
38
|
name: pry
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
49
40
|
none: false
|
50
|
-
requirements:
|
51
|
-
- -
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version:
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
54
45
|
type: :development
|
55
46
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
63
49
|
name: rake
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
65
51
|
none: false
|
66
|
-
requirements:
|
67
|
-
- -
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version:
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
70
56
|
type: :development
|
71
57
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
79
60
|
name: redcarpet
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
61
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
81
62
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version:
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
86
67
|
type: :development
|
87
68
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
94
|
-
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
95
71
|
name: rspec
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
97
73
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version:
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
102
78
|
type: :development
|
103
79
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
- !ruby/object:Gem::Dependency
|
80
|
+
version_requirements: *id006
|
81
|
+
- !ruby/object:Gem::Dependency
|
111
82
|
name: simplecov
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
83
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
113
84
|
none: false
|
114
|
-
requirements:
|
115
|
-
- -
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version:
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: "0"
|
118
89
|
type: :development
|
119
90
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
91
|
+
version_requirements: *id007
|
92
|
+
- !ruby/object:Gem::Dependency
|
127
93
|
name: yard
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
94
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
129
95
|
none: false
|
130
|
-
requirements:
|
131
|
-
- -
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version:
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: "0"
|
134
100
|
type: :development
|
135
101
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
102
|
+
version_requirements: *id008
|
142
103
|
description: An interface for controlling local or remote Linux Containers (LXC)
|
143
|
-
email:
|
104
|
+
email:
|
144
105
|
- zachary@jovelabs.com
|
145
|
-
executables:
|
106
|
+
executables:
|
146
107
|
- lxc-console
|
147
108
|
extensions: []
|
109
|
+
|
148
110
|
extra_rdoc_files: []
|
149
|
-
|
111
|
+
|
112
|
+
files:
|
150
113
|
- .gitignore
|
151
114
|
- .rspec
|
152
115
|
- .rvmrc.template
|
@@ -173,37 +136,39 @@ files:
|
|
173
136
|
- spec/lxc_spec.rb
|
174
137
|
- spec/spec_helper.rb
|
175
138
|
homepage: https://github.com/zpatten/lxc
|
176
|
-
licenses:
|
139
|
+
licenses:
|
177
140
|
- Apache 2.0
|
178
141
|
post_install_message:
|
179
142
|
rdoc_options: []
|
180
|
-
|
143
|
+
|
144
|
+
require_paths:
|
181
145
|
- lib
|
182
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
147
|
none: false
|
184
|
-
requirements:
|
185
|
-
- -
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
|
188
|
-
segments:
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
hash: 3183710469568139405
|
152
|
+
segments:
|
189
153
|
- 0
|
190
|
-
|
191
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
version: "0"
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
156
|
none: false
|
193
|
-
requirements:
|
194
|
-
- -
|
195
|
-
- !ruby/object:Gem::Version
|
196
|
-
|
197
|
-
segments:
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
hash: 3183710469568139405
|
161
|
+
segments:
|
198
162
|
- 0
|
199
|
-
|
163
|
+
version: "0"
|
200
164
|
requirements: []
|
165
|
+
|
201
166
|
rubyforge_project:
|
202
167
|
rubygems_version: 1.8.25
|
203
168
|
signing_key:
|
204
169
|
specification_version: 3
|
205
170
|
summary: An interface for controlling local or remote Linux Containers (LXC)
|
206
|
-
test_files:
|
171
|
+
test_files:
|
207
172
|
- spec/fixtures/0.7.5/lxc-checkconfig.out
|
208
173
|
- spec/fixtures/0.7.5/lxc-ls-w-containers.out
|
209
174
|
- spec/fixtures/0.7.5/lxc-ls-wo-containers.out
|