docker_core 0.0.17 → 0.0.21
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/lib/docker_core.rb +128 -85
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 275fb150858e7ab66ce56d30261f078e4298b38ef3c4e341c460c8e9fa13ec9b
|
4
|
+
data.tar.gz: dd21636922cc634f306a4573fb829ba329b51b8ac42a89c03bb94e651e8c1619
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd9098dc3a100fffa7ba45cd9ea6b3fb78310769205c1d600fa8476307f6568a07e0894276975727be8ac05ca66c3f132db4d7d621139ef2db43f24d35b2f555
|
7
|
+
data.tar.gz: f2fb926a87426831461558903c764f256b553609d713e8bf9dfb2951f92d4c25b3bf4bc7945dade12eb3470bcee85475fd4585796784b9e3075a92a39b554ea0
|
data/lib/docker_core.rb
CHANGED
@@ -7,6 +7,32 @@ require('thor')
|
|
7
7
|
require('zlib')
|
8
8
|
|
9
9
|
module DockerCore
|
10
|
+
USER = 'core'
|
11
|
+
GROUP = 'core'
|
12
|
+
|
13
|
+
class Color < Thor::Shell::Color
|
14
|
+
# @param [String] text
|
15
|
+
# @param [Array<String>] colors
|
16
|
+
def self.echo(text, *colors)
|
17
|
+
if 0 == colors.size
|
18
|
+
return puts(text)
|
19
|
+
end
|
20
|
+
|
21
|
+
color = colors.map do |color|
|
22
|
+
if color.is_a?(Symbol)
|
23
|
+
next self.const_get(color.to_s.upcase)
|
24
|
+
end
|
25
|
+
|
26
|
+
next "#{color}"
|
27
|
+
end.join
|
28
|
+
|
29
|
+
return puts("#{color}#{text}#{self::CLEAR}")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Runner < Thor
|
34
|
+
end
|
35
|
+
|
10
36
|
module Image
|
11
37
|
end
|
12
38
|
|
@@ -14,9 +40,9 @@ module DockerCore
|
|
14
40
|
end
|
15
41
|
|
16
42
|
module Paser
|
17
|
-
# @param [String]
|
18
|
-
def self.boolean(
|
19
|
-
return %w[true yes on].include?("#{
|
43
|
+
# @param [String] text
|
44
|
+
def self.boolean(text)
|
45
|
+
return %w[true yes on].include?("#{text}".strip.downcase)
|
20
46
|
end
|
21
47
|
|
22
48
|
# @param [String] text
|
@@ -25,91 +51,96 @@ module DockerCore
|
|
25
51
|
end
|
26
52
|
|
27
53
|
# @param [Hash] hash
|
28
|
-
def self.options(hash
|
54
|
+
def self.options(hash)
|
29
55
|
items = []
|
30
56
|
|
31
|
-
hash.
|
32
|
-
|
33
|
-
|
34
|
-
|
57
|
+
if hash.is_a?(Hash)
|
58
|
+
hash.each do |key, value|
|
59
|
+
name = '--' + self.kebab(key)
|
60
|
+
|
61
|
+
if true == value
|
62
|
+
items << name
|
63
|
+
next
|
64
|
+
end
|
65
|
+
|
66
|
+
value = "#{value}".gsub(/\\/, '\&\&').gsub('"', '\"')
|
67
|
+
items << %(#{name}="#{value}")
|
68
|
+
next
|
69
|
+
end
|
35
70
|
end
|
36
71
|
|
37
72
|
return items
|
38
73
|
end
|
39
74
|
|
40
|
-
|
41
|
-
|
75
|
+
# @param [Array] items
|
76
|
+
def self.arguments(*items)
|
77
|
+
list = []
|
42
78
|
|
43
|
-
|
79
|
+
items.each do |item|
|
44
80
|
if item.is_a?(Array)
|
45
|
-
|
81
|
+
list.concat(item.map { |value| "#{value}" })
|
46
82
|
next
|
47
83
|
end
|
48
84
|
|
49
85
|
if item.is_a?(Hash)
|
50
|
-
|
86
|
+
list.concat(self.options(item))
|
51
87
|
next
|
52
88
|
end
|
53
89
|
|
54
|
-
|
90
|
+
list << "#{item}"
|
55
91
|
next
|
56
92
|
end
|
57
93
|
|
58
|
-
return
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.command(*arguments)
|
62
|
-
return self.make(*arguments).join(' ')
|
94
|
+
return list
|
63
95
|
end
|
64
96
|
end
|
65
97
|
|
66
|
-
module
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
# @param [String] text
|
73
|
-
# @param [Array<String>] colors
|
74
|
-
def self.echo(text, *colors)
|
75
|
-
if 0 == colors.size
|
76
|
-
return puts(text)
|
98
|
+
module Process
|
99
|
+
# @param [Array] arguments
|
100
|
+
# @param [Boolean] substitute
|
101
|
+
def self.command(*arguments, substitute: false)
|
102
|
+
if substitute
|
103
|
+
arguments.unshift('su-exec', USER)
|
77
104
|
end
|
78
105
|
|
79
|
-
|
80
|
-
if color.is_a?(Symbol)
|
81
|
-
next Color.const_get(color.to_s.upcase)
|
82
|
-
end
|
83
|
-
|
84
|
-
next "#{color}"
|
85
|
-
end.join
|
86
|
-
|
87
|
-
return puts("#{color}#{text}#{Color::CLEAR}")
|
88
|
-
end
|
89
|
-
|
90
|
-
# @param [Boolean] strip
|
91
|
-
def self.capture(*arguments, strip: true)
|
92
|
-
command = Paser.command(*arguments)
|
93
|
-
data = `#{command}`
|
94
|
-
return strip ? "#{data}".strip : data
|
106
|
+
return Paser.arguments(*arguments).join(' ')
|
95
107
|
end
|
96
108
|
|
109
|
+
# @param [Array] arguments
|
110
|
+
# @param [Boolean] substitute
|
97
111
|
# @param [Boolean] force
|
98
|
-
|
112
|
+
# @param [Boolean] strip
|
113
|
+
# @param [Boolean] verbose
|
114
|
+
def self.capture(*arguments, substitute: false, force: false, strip: true, verbose: false)
|
99
115
|
begin
|
100
|
-
command =
|
101
|
-
|
102
|
-
|
116
|
+
command = self.command(*arguments, substitute: substitute)
|
117
|
+
|
118
|
+
if verbose
|
119
|
+
Color.echo("+ #{command}", Color::GREEN)
|
120
|
+
end
|
121
|
+
|
122
|
+
data = `#{command}`
|
123
|
+
return strip ? "#{data}".strip : data
|
103
124
|
rescue
|
104
125
|
raise unless force
|
126
|
+
return ''
|
105
127
|
end
|
106
128
|
end
|
107
129
|
|
130
|
+
# @param [Array] arguments
|
131
|
+
# @param [Boolean] substitute
|
108
132
|
# @param [Boolean] force
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
133
|
+
def self.run(*arguments, substitute: false, force: false)
|
134
|
+
data = self.capture(*arguments, substitute: substitute, force: force, strip: false, verbose: true)
|
135
|
+
print(data)
|
136
|
+
end
|
137
|
+
|
138
|
+
# @param [Array] arguments
|
139
|
+
# @param [Boolean] substitute
|
140
|
+
def self.execute(*arguments, substitute: false)
|
141
|
+
command = self.command(*arguments, substitute: substitute)
|
142
|
+
Color.echo("= #{command}", Color::CYAN)
|
143
|
+
exec(command)
|
113
144
|
end
|
114
145
|
|
115
146
|
# @param [String] title
|
@@ -117,14 +148,23 @@ module DockerCore
|
|
117
148
|
# @param [Array] arguments
|
118
149
|
def self.invoke(title, delegate, *arguments)
|
119
150
|
color = Color::YELLOW
|
120
|
-
|
151
|
+
Color.echo("> #{title}", color)
|
121
152
|
delegate.call(*arguments)
|
122
|
-
|
153
|
+
Color.echo("< #{title}", color)
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
|
158
|
+
module Shell
|
159
|
+
def self.architecture
|
160
|
+
hash = { x86: '386', x86_64: 'amd64', armhf: 'armv6', armv7l: 'armv7', aarch64: 'arm64' }
|
161
|
+
machine = "#{Etc.uname[:machine]}"
|
162
|
+
return hash.fetch(machine.to_sym, machine)
|
123
163
|
end
|
124
164
|
|
125
165
|
# @param [Array<String>] arguments
|
126
166
|
# @return [Array<String>]
|
127
|
-
def self.
|
167
|
+
def self.find_paths(*arguments)
|
128
168
|
return Dir.glob(arguments.flatten, File::FNM_DOTMATCH).map do |item|
|
129
169
|
next File.path(item)
|
130
170
|
end.filter do |item|
|
@@ -136,19 +176,21 @@ module DockerCore
|
|
136
176
|
# @param [String] user
|
137
177
|
# @param [String] group
|
138
178
|
def self.change_owner(*arguments, user: USER, group: GROUP)
|
139
|
-
self.
|
179
|
+
self.find_paths(*arguments).each do |path|
|
140
180
|
FileUtils.chown_R(user, group, path, force: true)
|
141
181
|
end
|
142
182
|
end
|
143
183
|
|
144
184
|
# @param [Array<String>] arguments
|
185
|
+
# @param [String, Integer] mode
|
145
186
|
def self.change_mode(mode, *arguments)
|
146
|
-
self.
|
187
|
+
self.find_paths(*arguments).each do |path|
|
147
188
|
FileUtils.chmod_R(mode, path, force: true)
|
148
189
|
end
|
149
190
|
end
|
150
191
|
|
151
192
|
# @param [Array<String>] arguments
|
193
|
+
# @param [Integer, nil] mode
|
152
194
|
def self.make_folders(*arguments, mode: nil)
|
153
195
|
stack = []
|
154
196
|
paths = arguments.map do |path|
|
@@ -172,17 +214,17 @@ module DockerCore
|
|
172
214
|
end
|
173
215
|
|
174
216
|
# @param [Array<String>] arguments
|
175
|
-
def self.
|
176
|
-
self.
|
217
|
+
def self.remove_paths(*arguments)
|
218
|
+
self.find_paths(*arguments).each do |path|
|
177
219
|
FileUtils.rm_rf(path)
|
178
220
|
end
|
179
221
|
end
|
180
222
|
|
181
223
|
# @param [String, Array<String>] source
|
182
224
|
# @param [String] target
|
183
|
-
def self.
|
184
|
-
|
185
|
-
FileUtils.mv(self.
|
225
|
+
def self.move_paths(source, target)
|
226
|
+
paths = [source].flatten
|
227
|
+
FileUtils.mv(self.find_paths(*paths), target)
|
186
228
|
end
|
187
229
|
|
188
230
|
# @param [String] uri
|
@@ -211,9 +253,10 @@ module DockerCore
|
|
211
253
|
return File.binwrite(file, content)
|
212
254
|
end
|
213
255
|
|
256
|
+
# @param [Object] io
|
214
257
|
# @param [String] path
|
215
258
|
# @param [Boolean] verbose
|
216
|
-
def self.
|
259
|
+
def self.unpack_archive(io, path, verbose: false)
|
217
260
|
Gem::Package::TarReader.new(io) do
|
218
261
|
|
219
262
|
# @type [Gem::Package::TarReader] reader
|
@@ -226,7 +269,7 @@ module DockerCore
|
|
226
269
|
file = File.join(path, entry.full_name)
|
227
270
|
|
228
271
|
if verbose
|
229
|
-
|
272
|
+
Color.echo(": #{file}", Color::GREEN)
|
230
273
|
end
|
231
274
|
|
232
275
|
if entry.directory?
|
@@ -247,18 +290,18 @@ module DockerCore
|
|
247
290
|
# @param [String] file
|
248
291
|
# @param [String] path
|
249
292
|
# @param [Boolean] verbose
|
250
|
-
def self.
|
293
|
+
def self.inflate_file(file, path, verbose: false)
|
251
294
|
Zlib::GzipReader.open(file) do
|
252
295
|
|
253
296
|
# @type [Zlib::GzipReader] reader
|
254
297
|
|reader|
|
255
|
-
self.
|
298
|
+
self.unpack_archive(reader, path, verbose: verbose)
|
256
299
|
end
|
257
300
|
end
|
258
301
|
|
259
302
|
# @param [String] path
|
260
303
|
# @param [Boolean] verbose
|
261
|
-
def self.
|
304
|
+
def self.tape_archive(path, verbose: false)
|
262
305
|
io = StringIO.new('')
|
263
306
|
offset = path.size + 1
|
264
307
|
|
@@ -266,12 +309,12 @@ module DockerCore
|
|
266
309
|
|
267
310
|
# @type [Gem::Package::TarWriter] writer
|
268
311
|
|writer|
|
269
|
-
self.
|
312
|
+
self.find_paths(File.join(path, '**/*')).each do |name|
|
270
313
|
mode = File.stat(name).mode
|
271
314
|
file = name.slice(offset ..)
|
272
315
|
|
273
316
|
if verbose
|
274
|
-
|
317
|
+
Color.echo(": #{file}", Color::GREEN)
|
275
318
|
end
|
276
319
|
|
277
320
|
if File.directory?(name)
|
@@ -295,22 +338,24 @@ module DockerCore
|
|
295
338
|
# @param [String] file
|
296
339
|
# @param [String] path
|
297
340
|
# @param [Boolean] verbose
|
298
|
-
def self.
|
341
|
+
def self.deflate_file(file, path, verbose: false)
|
299
342
|
Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do
|
300
343
|
|
301
344
|
# @type [Zlib::GzipWriter] writer
|
302
345
|
|writer|
|
303
|
-
writer.write(self.
|
346
|
+
writer.write(self.tape_archive(path, verbose: verbose))
|
304
347
|
end
|
305
348
|
end
|
306
349
|
|
307
350
|
# @param [Integer] uid
|
308
351
|
# @param [Integer] gid
|
309
352
|
def self.update_user(uid: 500, gid: 500)
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
353
|
+
uid = ENV.fetch('DOCKER_CORE_UID', uid)
|
354
|
+
gid = ENV.fetch('DOCKER_CORE_GID', gid)
|
355
|
+
Process.run('deluser', USER, force: true)
|
356
|
+
Process.run('delgroup', GROUP, force: true)
|
357
|
+
Process.run('addgroup', { system: true, gid: gid }, GROUP)
|
358
|
+
Process.run('adduser', { system: true, 'disabled-password': true, 'no-create-home': true, ingroup: GROUP, gecos: USER, shell: '/bin/bash', uid: uid }, USER)
|
314
359
|
end
|
315
360
|
|
316
361
|
# @param [String] stdout
|
@@ -323,24 +368,22 @@ module DockerCore
|
|
323
368
|
if '' != stderr
|
324
369
|
File.symlink('/dev/stderr', File.path(stderr))
|
325
370
|
end
|
371
|
+
|
372
|
+
return
|
326
373
|
end
|
327
374
|
|
328
375
|
# @param [Array<String>] arguments
|
376
|
+
# @param [Integer ,nil] mode
|
329
377
|
def self.clear_folders(*arguments, mode: nil)
|
330
|
-
self.
|
378
|
+
self.remove_paths(*arguments)
|
331
379
|
self.make_folders(*arguments, mode: mode)
|
332
380
|
end
|
333
381
|
|
334
|
-
def self.architecture
|
335
|
-
hash = { x86: '386', x86_64: 'amd64', armhf: 'armv6', aarch64: 'arm64' }
|
336
|
-
machine = "#{Etc.uname[:machine]}"
|
337
|
-
return hash.fetch(machine.to_sym, machine)
|
338
|
-
end
|
339
|
-
|
340
382
|
# @param [String] repository
|
341
383
|
def self.github_latest_version(repository)
|
342
384
|
uri = URI("https://api.github.com/repos/#{repository}/releases/latest")
|
343
|
-
|
385
|
+
data = JSON.parse(Net::HTTP.get(uri))['tag_name']
|
386
|
+
return "#{data}"
|
344
387
|
end
|
345
388
|
end
|
346
389
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- agrozyme
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fileutils
|