docker_core 0.0.17 → 0.0.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docker_core.rb +128 -85
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85249b5bf70ef8b313ad2ff28898889db66e92c5b96af40a024e61131453ec4c
4
- data.tar.gz: e4dafbe9bfdcc3fd40fcc3d93b76b8557b599ba07201fdfddff0bcb08ff9c65f
3
+ metadata.gz: 275fb150858e7ab66ce56d30261f078e4298b38ef3c4e341c460c8e9fa13ec9b
4
+ data.tar.gz: dd21636922cc634f306a4573fb829ba329b51b8ac42a89c03bb94e651e8c1619
5
5
  SHA512:
6
- metadata.gz: '0489e8827a51d214072b11f7bc4d32bfb8624484670da293839727de7586c408863728cf84a1e5f83df9be8b1d14df844debf129570f587a377496dbb5aadee6'
7
- data.tar.gz: e3d7a871d1ac19786b3cc06bd8525d33000e76b70208d61e44eaaa794bc7c4e9749ff507ec6ba93a09a636961d81c8cb539555714bb56b6053fd1cdb2351a518
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] value
18
- def self.boolean(value)
19
- return %w[true yes on].include?("#{value}".strip.downcase)
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.each do |key, value|
32
- name = '--' + self.kebab(key)
33
- item = (true == value) ? name : %Q(#{name}="#{value}")
34
- items << item
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
- def self.make(*arguments)
41
- items = []
75
+ # @param [Array] items
76
+ def self.arguments(*items)
77
+ list = []
42
78
 
43
- arguments.each do |item|
79
+ items.each do |item|
44
80
  if item.is_a?(Array)
45
- items.concat(item.map { |value| "#{value}" })
81
+ list.concat(item.map { |value| "#{value}" })
46
82
  next
47
83
  end
48
84
 
49
85
  if item.is_a?(Hash)
50
- items.concat(self.options(item))
86
+ list.concat(self.options(item))
51
87
  next
52
88
  end
53
89
 
54
- items << "#{item}"
90
+ list << "#{item}"
55
91
  next
56
92
  end
57
93
 
58
- return items
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 Shell
67
- include(Thor::Shell)
68
-
69
- USER = 'core'
70
- GROUP = 'core'
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
- color = colors.map do |color|
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
- def self.execute(*arguments, force: false)
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 = Paser.command(*arguments)
101
- self.echo("+ #{command}", Color::GREEN)
102
- print(`#{command}`)
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
- # @param [String] user
110
- def self.sudo(*arguments, force: false, user: USER)
111
- arguments.unshift('su-exec', user)
112
- self.execute(*arguments, force: force)
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
- self.echo("> #{title}", color)
151
+ Color.echo("> #{title}", color)
121
152
  delegate.call(*arguments)
122
- self.echo("< #{title}", color)
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.find_files(*arguments)
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.find_files(*arguments).each do |path|
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.find_files(*arguments).each do |path|
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.remove_folders(*arguments)
176
- self.find_files(*arguments).each do |path|
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.move_files(source, target)
184
- files = [source].flatten
185
- FileUtils.mv(self.find_files(*files), target)
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.untar(io, path, verbose: false)
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
- self.echo(": #{file}", Color::GREEN)
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.ungzip(file, path, verbose: false)
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.untar(reader, path, verbose: verbose)
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.tar(path, verbose: false)
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.find_files(File.join(path, '**/*')).each do |name|
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
- self.echo(": #{file}", Color::GREEN)
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.gzip(file, path, verbose: false)
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.tar(path, verbose: verbose))
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
- self.execute('deluser', USER, force: true)
311
- self.execute('delgroup', GROUP, force: true)
312
- self.execute('addgroup', { system: true, gid: ENV.fetch('DOCKER_CORE_GID', gid) }, GROUP)
313
- self.execute('adduser', { system: true, 'disabled-password': true, 'no-create-home': true, ingroup: GROUP, gecos: USER, shell: '/bin/bash', uid: ENV.fetch('DOCKER_CORE_UID', uid) }, USER)
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.remove_folders(*arguments)
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
- return JSON.parse(Net::HTTP.get(uri))['tag_name']
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.17
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-24 00:00:00.000000000 Z
11
+ date: 2021-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fileutils