lux 0.4 → 0.5
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.
- checksums.yaml +4 -4
- data/README.md +4 -2
- data/lib/lux.rb +42 -19
- data/lib/lux/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1eb1c7d352c7326e296feace6572c226beb98ea
|
4
|
+
data.tar.gz: 3c42a89dbc463141bbaf9da031d63fe79ef4eed7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a90943a58a1faca71b089b1f63ef8f593ea9fd419989d1dcba5acb61371f54e3ca15f90030653ac4c31e0a2401ca28a579ac8137bad043ec4ee5cdff1374fb5c
|
7
|
+
data.tar.gz: 2bf8bb996fce1c3fbd89569f197560789787be1f109ab2f53a8998eb78cdde766dd98a75a9c7df9d762f674c3046efea95f793607260d6f4b34090486f46e85d
|
data/README.md
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
# Lux
|
2
2
|
|
3
|
+
[][gem]
|
4
|
+
|
5
|
+
[gem]: https://rubygems.org/gems/lux
|
6
|
+
|
3
7
|
Shining some light on setting up and running various Docker things.
|
4
8
|
|
5
9
|
Lux is both a command line tool (based on Thor) and a library of useful routines
|
6
10
|
that can be included in Rake tasks.
|
7
11
|
|
8
|
-
[][gem]
|
9
|
-
|
10
12
|
## Installation
|
11
13
|
|
12
14
|
Add this line to your application's Gemfile:
|
data/lib/lux.rb
CHANGED
@@ -61,7 +61,7 @@ class Lux::App < Thor
|
|
61
61
|
image = findimage options.image
|
62
62
|
puts "Starting #{image} container..."
|
63
63
|
me, setup_cmd = user_setup_cmd()
|
64
|
-
args = ["-v
|
64
|
+
args = ["-v #{ENV['HOME']}:#{ENV['HOME']}"]
|
65
65
|
args << "--env-file=#{options.env}" if options.env
|
66
66
|
args << "--name=#{options.name}" unless options.name == '<autogenerated>'
|
67
67
|
cid = `docker run -dit #{args.join(' ')} #{image} /bin/bash`.strip
|
@@ -87,7 +87,7 @@ class Lux::App < Thor
|
|
87
87
|
env = ENV.reject{|k,v| EXCLUDE_VARS.include? k or v =~/\s+/}.map{|k,v| "#{k}=#{v.shellescape}"}
|
88
88
|
env += IO.readlines(options.env).grep(/^(?!#)/).map(&:rstrip) if options.env
|
89
89
|
cmd = setup_cmd + "su - #{me} -c 'cd #{relwd}; env -i #{env.join(' ')} #{command.join(' ')}'"
|
90
|
-
args = ["-v
|
90
|
+
args = ["-v #{ENV['HOME']}:#{ENV['HOME']}"]
|
91
91
|
system "docker run --rm #{args.join(' ')} #{image} /bin/bash -c #{cmd.shellescape}"
|
92
92
|
end
|
93
93
|
|
@@ -111,16 +111,40 @@ class Lux::App < Thor
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
desc "
|
115
|
-
method_option :
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
rx = Regexp.new(options.pattern)
|
114
|
+
desc "lsimages [PATTERN]", "List Docker images (with optional pattern)"
|
115
|
+
method_option :regex, type: :boolean, aliases: '-r', default: false, desc: 'Pattern is a regular expression'
|
116
|
+
def lsimages(pattern=nil)
|
117
|
+
if options.regex
|
118
|
+
pattern = '.*' unless pattern
|
119
|
+
rx = Regexp.new(pattern)
|
121
120
|
matcher = lambda {|s| rx.match(s)}
|
122
121
|
else
|
123
|
-
|
122
|
+
pattern = '*' unless pattern
|
123
|
+
matcher = lambda {|s| File.fnmatch?(pattern, s)}
|
124
|
+
end
|
125
|
+
imagelines = `docker images`.split("\n")[1..-1].sort
|
126
|
+
imagelines.each do |imageline|
|
127
|
+
imageinfo = imageline.split(/\s+/)
|
128
|
+
next if imageinfo[0] == '<none>'
|
129
|
+
imagename = imageinfo[0]+':'+imageinfo[1]
|
130
|
+
imagesize = imageinfo[-2]+' '+imageinfo[-1]
|
131
|
+
imageage = imageinfo[3..-3].join(' ')
|
132
|
+
next unless matcher.call(imagename)
|
133
|
+
printf "%-54s%-16s%10s\n", imagename, imageage, imagesize
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
desc "rmimages [PATTERN]", "Remove Docker images (with optional pattern)"
|
138
|
+
method_option :regex, type: :boolean, aliases: '-r', default: false, desc: 'Pattern is a regular expression'
|
139
|
+
method_option :force, type: :boolean, aliases: '-f', default: false, desc: 'Do not prompt for confirmation'
|
140
|
+
def rmimages(pattern=nil)
|
141
|
+
if options.regex
|
142
|
+
pattern = '.*' unless pattern
|
143
|
+
rx = Regexp.new(pattern)
|
144
|
+
matcher = lambda {|s| rx.match(s)}
|
145
|
+
else
|
146
|
+
pattern = '*' unless pattern
|
147
|
+
matcher = lambda {|s| File.fnmatch?(pattern, s)}
|
124
148
|
end
|
125
149
|
imagelines = `docker images`.split("\n")[1..-1]
|
126
150
|
imagelines.each do |imageline|
|
@@ -130,7 +154,7 @@ class Lux::App < Thor
|
|
130
154
|
imagesize = imageinfo[-2]+' '+imageinfo[-1]
|
131
155
|
imageage = imageinfo[3..-3].join(' ')
|
132
156
|
next unless matcher.call(imagename)
|
133
|
-
if
|
157
|
+
if options.force or (agree("Delete #{imagename} (#{imageage}, #{imagesize})? "){|q|q.echo=true})
|
134
158
|
`docker rmi #{imageinfo[2]}`
|
135
159
|
HighLine.say "Image <%= color('#{imagename}', RED)%> deleted"
|
136
160
|
end
|
@@ -169,21 +193,20 @@ class Lux::App < Thor
|
|
169
193
|
#
|
170
194
|
def findimage image
|
171
195
|
if image.count('/') == 0
|
172
|
-
local_images = `docker images`.strip.split(
|
173
|
-
matching_images = local_images.select{|l| l
|
196
|
+
local_images = `docker images`.strip.split("\n")[1..-1].map{|l| l.gsub!(/^(\S+)\s+(\S+).*/,'\1:\2')}.sort
|
197
|
+
matching_images = local_images.select{|l| l.include? image }
|
174
198
|
if matching_images.size > 0
|
175
199
|
if image.count(':') == 0
|
176
|
-
matching_image = matching_images.select{|l| l
|
200
|
+
matching_image = matching_images.select{|l| l.end_with? ':latest' }.first
|
177
201
|
end
|
178
202
|
unless matching_image
|
179
203
|
matching_image = matching_images.first
|
180
204
|
end
|
181
205
|
else
|
182
|
-
|
206
|
+
die "No image found matching: #{image}"
|
183
207
|
end
|
184
|
-
image = matching_image ? matching_image : "lightside/"+image
|
185
208
|
end
|
186
|
-
return
|
209
|
+
return matching_image
|
187
210
|
end
|
188
211
|
|
189
212
|
# Return two elements:
|
@@ -192,8 +215,8 @@ class Lux::App < Thor
|
|
192
215
|
#
|
193
216
|
def user_setup_cmd user = `id -nu`.strip
|
194
217
|
[user, <<-COMMAND.gsub(/^\s*/,'').gsub(/\n/,' ; ')]
|
195
|
-
uid=$(echo $(stat -c %u:%g
|
196
|
-
useradd -M -u $uid -s #{ENV['SHELL']} #{user}
|
218
|
+
uid=$(echo $(stat -c %u:%g #{ENV['HOME']}) | cut -d: -f2)
|
219
|
+
useradd -M -d #{ENV['HOME']} -u $uid -s #{ENV['SHELL']} #{user}
|
197
220
|
echo "#{user} ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/#{user}
|
198
221
|
COMMAND
|
199
222
|
end
|
data/lib/lux/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.5'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Townsend
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|