dockerun 0.4.0 → 0.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d0a6fc97935e5777962a76188ad3a39923ce84b9363c494c7a59c37d6888baff
4
- data.tar.gz: db4d15767b81528d7d0c208bb8d7924e5e11d84aed610e0ccf037cfb39f2c6b5
3
+ metadata.gz: 1f23fcd1952170862f9d4f21a19f96c3ee7f7c8ff0eab469262c5f5590ada14f
4
+ data.tar.gz: 2604672593f83ce0aa96d31e7998de3f4a0504ae42b87c09df4d977dee611689
5
5
  SHA512:
6
- metadata.gz: 6166715ddc5e72fa1f319563ef03a3472ce561e2e72000c73336196a06a59a08b2e6c7fb37fb9567bb58a374dc72ea8f16c49816b4040dfb148c2b924c47393e
7
- data.tar.gz: 01df6c0dfa95436c1439f6870bdba7cc942f600c44e75ff16b63682a10cd7cd081ff399b603f0cb163fc31ff95c90e4fd95139bc47babb6498eb08b6ffdb58a2
6
+ metadata.gz: cccad096ed827b5193427966a2ca6268063679e757441ec3c19a71248509841912b885e0c4c725bfdb8c6c22c5f13da54b93d8cf6e42d222f63a954a77d95429
7
+ data.tar.gz: ba055de454e07969dc9f31f3f30807c839b663ca5a77a72b69b992d111b339db1c7be81007cd4be7531fb0e45f827ab71d972646e96dbf4f9b39f42737d6aa29
data/dockerspec.sample CHANGED
@@ -35,6 +35,9 @@ config do
35
35
  # Docker image is not built and container is not created
36
36
  #dry_run
37
37
 
38
+ # generate the docker runscript so it can be run manually
39
+ # if required
40
+ gen_docker_runscript
38
41
 
39
42
  end
40
43
 
data/exe/dockerun CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  require_relative '../lib/dockerun'
4
4
 
5
+ require 'colorize'
6
+
5
7
  # Operations
6
8
  # 1. [i]nit - Copy sample spec into project dir
7
9
  # 2. [r]un - Run the spec (default without params)
@@ -10,5 +12,10 @@ require_relative '../lib/dockerun'
10
12
  # 5. reset - Delete container and image
11
13
 
12
14
  cli = Dockerun::CliEngine.new
13
- cli.parse_argv(ARGV)
15
+ begin
16
+ cli.parse_argv(ARGV)
17
+ rescue TR::ArgUtils::RequiredFieldEmpty => ex
18
+ STDERR.puts "\n Operation requires parameter. Error was : #{ex.message}".red
19
+ puts cli.parse_argv(["help"])
20
+ end
14
21
 
@@ -17,12 +17,12 @@ module Dockerun
17
17
  attr_accessor :command_buffer
18
18
  def initialize(cmd, required_interaction = false)
19
19
 
20
- cmdOut = ENV["DOCKERUN_COMMAND_OUT"]
21
- if not_empty?(cmdOut)
22
- @runner = TTY::Command.new(printer: cmdOut.to_sym)
23
- else
24
- @runner = TTY::Command.new(printer: :null)
25
- end
20
+ #cmdOut = ENV["DOCKERUN_COMMAND_OUT"]
21
+ #if not_empty?(cmdOut)
22
+ # @runner = TTY::Command.new(printer: cmdOut.to_sym)
23
+ #else
24
+ # @runner = TTY::Command.new(printer: :null)
25
+ #end
26
26
 
27
27
  #@runner = TTY::Command.new
28
28
  @command_buffer = cmd
@@ -34,7 +34,7 @@ module Dockerun
34
34
  @required_interaction
35
35
  end
36
36
 
37
- def run(&block)
37
+ def run(log_console = false, &block)
38
38
 
39
39
  if interactive_session?
40
40
 
@@ -88,7 +88,14 @@ module Dockerun
88
88
  else
89
89
  @outStream = []
90
90
  @errStream = []
91
- result = @runner.run!(@command_buffer.join(" ")) do |out, err|
91
+
92
+ if(log_console)
93
+ runner = TTY::Command.new(printer: :pretty)
94
+ else
95
+ runner = TTY::Command.new(printer: :null)
96
+ end
97
+
98
+ result = runner.run!(@command_buffer.join(" ")) do |out, err|
92
99
  if block
93
100
  block.call(:outstream, out)
94
101
  block.call(:errstream, err)
@@ -13,6 +13,7 @@ module Dockerun
13
13
 
14
14
  opts = { } if opts.nil?
15
15
  cmd = []
16
+ cmd << "cd #{opts[:working_dir]} && " if not_empty?(opts[:working_dir])
16
17
  cmd << DockerCli.docker_exe
17
18
  cmd << "build"
18
19
  if not_empty?(name)
@@ -168,6 +169,7 @@ module Dockerun
168
169
  Command.new(cmd, (interactive ? true : false))
169
170
  end # run_container_from_image
170
171
 
172
+
171
173
  def start_container(container, opts = { })
172
174
 
173
175
  opts = {} if opts.nil?
@@ -181,6 +183,7 @@ module Dockerun
181
183
  Command.new(cmd)
182
184
  end
183
185
 
186
+
184
187
  def attach_container(container, opts = { })
185
188
 
186
189
  opts = {} if opts.nil?
@@ -9,7 +9,12 @@ module Dockerun
9
9
 
10
10
  class DeleteContainer
11
11
 
12
- def start
12
+ def initialize
13
+ @proxy = DSLProxy.new
14
+ end
15
+
16
+ def start(root)
17
+ @proxy.set_exec_root(root)
13
18
  begin
14
19
  pmt.puts " Dockerun version #{Dockerun::VERSION}".yellow
15
20
  pmt.puts " Operational : Delete Container"
@@ -19,23 +24,22 @@ module Dockerun
19
24
  end
20
25
 
21
26
  def delete_container
22
- selSpec = CliEngine.select_spec
27
+ selSpec = CliEngine.select_spec(@proxy.exec_root)
23
28
  cont = File.read(selSpec)
24
- proxy = DSLProxy.new
25
- proxy.set_dry_run_mode
26
- proxy.instance_eval(cont)
29
+ @proxy.set_dry_run_mode
30
+ @proxy.instance_eval(cont)
27
31
 
28
- skip = pmt.no?(" Delete container named '#{proxy.container_name}'?")
32
+ skip = pmt.no?(" Delete container named '#{@proxy.container_name}'?")
29
33
  if not skip
30
- cf.stop_container(proxy.container_name).run
31
- res = cf.delete_container(proxy.container_name).run
34
+ cf.stop_container(@proxy.container_name).run
35
+ res = cf.delete_container(@proxy.container_name).run
32
36
  if res.success?
33
- pmt.puts " Container '#{proxy.container_name}' deleted".green
37
+ pmt.puts " Container '#{@proxy.container_name}' deleted".green
34
38
  else
35
- pmt.puts " Container '#{proxy.container_name}' deletion failed. Error was : #{res.err_lines.join("\n")}".red
39
+ pmt.puts " Container '#{@proxy.container_name}' deletion failed. Error was : #{res.err_lines.join("\n")}".red
36
40
  end
37
41
  else
38
- pmt.puts " Container deletion of name '#{proxy.container_name}' aborted.".yellow
42
+ pmt.puts " Container deletion of name '#{@proxy.container_name}' aborted.".yellow
39
43
  end
40
44
  end
41
45
 
@@ -10,7 +10,12 @@ module Dockerun
10
10
  class DeleteImage
11
11
  include TR::CondUtils
12
12
 
13
- def start
13
+ def initialize
14
+ @proxy = DSLProxy.new
15
+ end
16
+
17
+ def start(root)
18
+ @proxy.set_exec_root(root)
14
19
  begin
15
20
  pmt.puts " Dockerun version #{Dockerun::VERSION}".yellow
16
21
  pmt.puts " Operational : Delete Image"
@@ -20,20 +25,19 @@ module Dockerun
20
25
  end
21
26
 
22
27
  def delete_image
23
- selSpec = CliEngine.select_spec
28
+ selSpec = CliEngine.select_spec(@proxy.exec_root)
24
29
  cont = File.read(selSpec)
25
- proxy = DSLProxy.new
26
- proxy.set_dry_run_mode
27
- proxy.instance_eval(cont)
30
+ @proxy.set_dry_run_mode
31
+ @proxy.instance_eval(cont)
28
32
 
29
- res = cf.find_image(proxy.image_name).run
33
+ res = cf.find_image(@proxy.image_name).run
30
34
  if res.success?
31
35
  if not_empty?(res.output_lines)
32
36
 
33
- skip = pmt.no?(" Delete image named '#{proxy.image_name}'?")
37
+ skip = pmt.no?(" Delete image named '#{@proxy.image_name}'?")
34
38
  if not skip
35
- res = cf.find_container_names_by_image_name(proxy.image_name, all_containers: true).run
36
- raise Error, "Failed to extract container name by image name '#{proxy.image_name}'" if not res.success?
39
+ res = cf.find_container_names_by_image_name(@proxy.image_name, all_containers: true).run
40
+ raise Error, "Failed to extract container name by image name '#{@proxy.image_name}'" if not res.success?
37
41
 
38
42
  if not_empty?(res.output_lines)
39
43
  cont = []
@@ -41,45 +45,45 @@ module Dockerun
41
45
  res.output_lines.each do |l|
42
46
  cont << " #{cnt += 1}. #{l}"
43
47
  end
44
- skip = pmt.no?(" All the containers shall be deleted prior to image '#{proxy.image_name}' deletion. Proceed?\n#{cont.join("\n")}")
48
+ skip = pmt.no?(" All the containers shall be deleted prior to image '#{@proxy.image_name}' deletion. Proceed?\n#{cont.join("\n")}")
45
49
  if not skip
46
50
  res.output_lines.each do |ci|
47
51
  cf.stop_container(ci).run
48
52
  cf.delete_container(ci).run
49
53
  end
50
54
 
51
- res = cf.delete_image(proxy.image_name).run
55
+ res = cf.delete_image(@proxy.image_name).run
52
56
  if res.success?
53
- pmt.puts " Image '#{proxy.image_name}' deleted".green
57
+ pmt.puts " Image '#{@proxy.image_name}' deleted".green
54
58
  else
55
- raise Error, " Image '#{proxy.image_name}' deletion failed. Error was : #{res.err_lines.join("\n")}"
59
+ raise Error, " Image '#{@proxy.image_name}' deletion failed. Error was : #{res.err_lines.join("\n")}"
56
60
  end
57
61
 
58
62
  else
59
- pmt.puts " Delete of image '#{proxy.image_name}' aborted".yellow
63
+ pmt.puts " Delete of image '#{@proxy.image_name}' aborted".yellow
60
64
  end
61
65
 
62
66
  else
63
- res = cf.delete_image(proxy.image_name).run
67
+ res = cf.delete_image(@proxy.image_name).run
64
68
  if res.success?
65
- pmt.puts " Image '#{proxy.image_name}' deleted".green
69
+ pmt.puts " Image '#{@proxy.image_name}' deleted".green
66
70
  else
67
- raise Error, " Image '#{proxy.image_name}' deletion failed. Error was : #{res.err_lines.join("\n")}"
71
+ raise Error, " Image '#{@proxy.image_name}' deletion failed. Error was : #{res.err_lines.join("\n")}"
68
72
  end
69
73
 
70
74
  end
71
75
 
72
76
  else
73
- pmt.puts " Delete of image '#{proxy.image_name}' aborted".yellow
77
+ pmt.puts " Delete of image '#{@proxy.image_name}' aborted".yellow
74
78
 
75
79
  end
76
80
 
77
81
  else
78
- pmt.puts " Image '#{proxy.image_name}' does not exist".green
82
+ pmt.puts " Image '#{@proxy.image_name}' does not exist".green
79
83
  end
80
84
 
81
85
  else
82
- pmt.puts " Failed to find image '#{proxy.image_name}'. Error was : #{res.err_lines.join("\n")}"
86
+ pmt.puts " Failed to find image '#{@proxy.image_name}'. Error was : #{res.err_lines.join("\n")}"
83
87
  end
84
88
  end
85
89
 
@@ -8,7 +8,8 @@ module Dockerun
8
8
  #include TR::ArgUtils
9
9
  include DSL
10
10
 
11
- def start
11
+ def start(root)
12
+ set_exec_root(root)
12
13
  begin
13
14
  pmt.puts " Dockerun version #{Dockerun::VERSION}".yellow
14
15
  pmt.puts " Operational : Run Spec"
@@ -20,7 +21,7 @@ module Dockerun
20
21
 
21
22
  private
22
23
  def load_spec
23
- selSpec = CliEngine.select_spec
24
+ selSpec = CliEngine.select_spec(exec_root)
24
25
  pmt.puts " Loading spec '#{selSpec}"
25
26
  cont = File.read(selSpec)
26
27
  self.instance_eval(cont)
@@ -9,26 +9,26 @@ module Dockerun
9
9
  include TR::ArgUtils
10
10
 
11
11
  arg_spec do
12
- opt "i", "Initialize sample dockerspec at current directory" do
13
- init
12
+ opt "i", "Initialize sample dockerspec at given directory as next argument" do |v|
13
+ init(v)
14
14
  end
15
15
  opt_alias "i", "init"
16
16
 
17
- opt "r", "Run the dockerspec" do
18
- run
17
+ opt "r", "Run the dockerspec at given directory as next argument" do |v|
18
+ run(v)
19
19
  end
20
20
  opt_alias "r","run"
21
21
 
22
- opt "dc", "Delete container" do
23
- delete_container
22
+ opt "dc", "Delete container at given directory as next argument" do |v|
23
+ delete_container(v)
24
24
  end
25
25
 
26
- opt "di", "Delete image and its associated container(s)" do
27
- delete_image
26
+ opt "di", "Delete image and its associated container(s) at given directory as next argument" do |v|
27
+ delete_image(v)
28
28
  end
29
29
 
30
- opt 'clean', "Clean generated Dockerfile and temporary files" do
31
- clean_env
30
+ opt 'clean', "Clean generated Dockerfile and temporary files at given directory as next argument" do |v|
31
+ clean_env(v)
32
32
  end
33
33
 
34
34
  opt 'help', "Command help" do
@@ -49,8 +49,11 @@ module Dockerun
49
49
  pmt.puts ""
50
50
  end
51
51
 
52
- def self.select_spec
53
- sel = Dir.entries(Dir.getwd).sort
52
+ def self.select_spec(root)
53
+ raise InsufficientParameter, "Given path cannot be empty or nil" if is_empty?(root)
54
+
55
+ #sel = Dir.entries(Dir.getwd).sort
56
+ sel = Dir.entries(root).sort
54
57
  default = sel.select { |e| (e =~ /^dockerspec/) != nil }
55
58
  selSpec = pmt.select(" Please select the dockerspec to proceed : ", filter: true, default: default.first) do |m|
56
59
  sel.each do |s|
@@ -63,34 +66,49 @@ module Dockerun
63
66
  end
64
67
 
65
68
 
66
- def init
69
+ def init(root)
70
+ raise InsufficientParameter, "Given path cannot be empty or nil" if is_empty?(root)
71
+
72
+ root = File.expand_path(root)
67
73
  template = File.join(File.dirname(__FILE__),"..","..","dockerspec.sample")
68
74
  if File.exist?(template)
69
- FileUtils.cp template, File.join(Dir.getwd, "dockerspec.sample")
75
+ #FileUtils.cp template, File.join(Dir.getwd, "dockerspec.sample")
76
+ FileUtils.cp template, File.join(root, "dockerspec.sample")
70
77
  end
71
78
  end
72
79
 
73
- def run
80
+ def run(root)
81
+ raise InsufficientParameter, "Given path cannot be empty or nil" if is_empty?(root)
82
+
83
+ root = File.expand_path(root)
74
84
  r = Dockerun::Cli::Run.new
75
- r.start
85
+ r.start(root)
76
86
  end
77
87
 
78
- def delete_container
88
+ def delete_container(root)
89
+ raise InsufficientParameter, "Given path cannot be empty or nil" if is_empty?(root)
90
+ root = File.expand_path(root)
79
91
  d = Dockerun::Cli::DeleteContainer.new
80
- d.start
92
+ d.start(root)
81
93
  end
82
94
 
83
- def delete_image
95
+ def delete_image(root)
96
+ raise InsufficientParameter, "Given path cannot be empty or nil" if is_empty?(root)
97
+ root = File.expand_path(root)
84
98
  d = Dockerun::Cli::DeleteImage.new
85
- d.start
99
+ d.start(root)
86
100
  end
87
101
 
88
- def clean_env
89
- Dir.glob("Dockerfile-*").each do |f|
102
+ def clean_env(root)
103
+ raise InsufficientParameter, "Given path cannot be empty or nil" if is_empty?(root)
104
+ root = File.expand_path(root)
105
+
106
+ Dir.glob(File.join(root,"Dockerfile-*")).each do |f|
90
107
  FileUtils.rm(f)
91
108
  end
92
- FileUtils.rm("script_for_gem.sh") if File.exist?("script_for_gem.sh")
93
- self.class.pmt.puts " Generated Dockerfile-* and script_for_gem.sh is deleted".green
109
+ pa = File.join(root,"script_for_gem.sh")
110
+ FileUtils.rm(pa) if File.exist?(pa)
111
+ self.class.pmt.puts " Generated Dockerfile-* and script_for_gem.sh is deleted at '#{root}'".green
94
112
  end
95
113
 
96
114
  def self.pmt
@@ -52,6 +52,18 @@ module Dockerun
52
52
  @active_context
53
53
  end
54
54
 
55
+
56
+ def gen_docker_runscript(bool = true, overwrite = false)
57
+ @_gen_docker_runscript = bool
58
+ @_overwrite_docker_runscript = overwrite
59
+ end
60
+ def is_gen_docker_runscript?
61
+ @_gen_docker_runscript.nil? ? false : @_gen_docker_runscript
62
+ end
63
+ def is_overwrite_docker_runscript?
64
+ @_overwrite_docker_runscript.nil? ? false : @_overwrite_docker_runscript
65
+ end
66
+
55
67
 
56
68
  def dry_run(bool = true, prompt = true)
57
69
  @dry_run = bool
data/lib/dockerun/dsl.rb CHANGED
@@ -9,6 +9,13 @@ module Dockerun
9
9
  module DSL
10
10
  include TR::CondUtils
11
11
 
12
+ def set_exec_root(root)
13
+ @_exec_root = root
14
+ end
15
+ def exec_root
16
+ @_exec_root
17
+ end
18
+
12
19
  def config(&block)
13
20
  _config.instance_eval(&block)
14
21
  end
@@ -176,19 +183,30 @@ module Dockerun
176
183
 
177
184
  def build_image
178
185
  dfile = _dfile.generate
179
- dfileName = "Dockerfile-#{SecureRandom.hex(4)}"
186
+ dfileName = File.join(exec_root,"Dockerfile-#{SecureRandom.hex(4)}")
180
187
  File.open(dfileName,"w") do |f|
181
188
  f.write dfile
182
189
  end
183
190
 
184
- fact = docker_cf.build_image(image_name, dockerfile: dfileName)
191
+ fact = docker_cf.build_image(image_name, dockerfile: dfileName, working_dir: exec_root)
192
+
193
+ if _config.is_gen_docker_runscript?
194
+ out = File.join(exec_root,"1.build-image.sh")
195
+ if (not File.exist?(out)) or _config.is_overwrite_docker_runscript?
196
+ File.open(out, "w") do |f|
197
+ f.puts "#!/bin/sh"
198
+ f.puts fact.to_s
199
+ end
200
+ end
201
+ end
202
+
185
203
  if _config.is_dry_run?
186
204
  dry_run_puts "Build Image : #{fact.to_s}"
187
205
  dry_run_puts "Build Image : Returning true to proceed to next phase."
188
206
  dry_run_puts "Generated dockerfile '#{dfileName}' shall be remained in project directory."
189
207
  [true, nil]
190
208
  else
191
- res = fact.run
209
+ res = fact.run(true)
192
210
  if res.success?
193
211
  FileUtils.rm(dFileName) if not _dfile.keep_dockerfile?
194
212
  [true, res]
@@ -234,6 +252,16 @@ module Dockerun
234
252
  fact = docker_cf.find_running_container(container_name)
235
253
  fact2 = docker_cf.start_container(container_name)
236
254
 
255
+ if _config.is_gen_docker_runscript?
256
+ out = File.join(exec_root,"3.start-container.sh")
257
+ if (not File.exist?(out)) or _config.is_overwrite_docker_runscript?
258
+ File.open(out, "w") do |f|
259
+ f.puts "#!/bin/sh"
260
+ f.puts fact.to_s
261
+ end
262
+ end
263
+ end
264
+
237
265
  if _config.is_dry_run?
238
266
  dry_run_puts "Find running container : #{fact.to_s}"
239
267
  dry_run_puts "Start container : #{fact2.to_s}"
@@ -252,12 +280,23 @@ module Dockerun
252
280
 
253
281
  def attach_container
254
282
  fact = docker_cf.attach_container(container_name)
283
+
284
+ if _config.is_gen_docker_runscript?
285
+ out = File.join(exec_root,"4.attach-container.sh")
286
+ if (not File.exist?(out)) or _config.is_overwrite_docker_runscript?
287
+ File.open(out, "w") do |f|
288
+ f.puts "#!/bin/sh"
289
+ f.puts fact.to_s
290
+ end
291
+ end
292
+ end
293
+
255
294
  if _config.is_dry_run?
256
295
  dry_run_puts "Attach container : #{fact.to_s}"
257
296
  else
258
297
  fact.run
259
298
  end
260
- #docker_cf.attach_container(container_name).run
299
+
261
300
  end
262
301
 
263
302
  def run_container
@@ -267,9 +306,21 @@ module Dockerun
267
306
  params[:ports] = {} if params[:ports].nil?
268
307
  params[:ports].merge!(_docker_cli.expose_ports) if _docker_cli.has_exposed_ports?
269
308
 
270
- params = _docker_cli.trigger_listener(:docker_cli_construct_command, params)
309
+ rparams = _docker_cli.trigger_listener(:docker_cli_construct_command, params)
310
+ rparams = params if is_empty?(rparams)
311
+
312
+ fact = docker_cf.create_container_from_image(image_name, rparams)
313
+
314
+ if _config.is_gen_docker_runscript?
315
+ out = File.join(exec_root,"2.create-container.sh")
316
+ if (not File.exist?(out)) or _config.is_overwrite_docker_runscript?
317
+ File.open(out, "w") do |f|
318
+ f.puts "#!/bin/sh"
319
+ f.puts fact.to_s
320
+ end
321
+ end
322
+ end
271
323
 
272
- fact = docker_cf.create_container_from_image(image_name, params)
273
324
  if _config.is_dry_run?
274
325
  dry_run_puts "Run container : #{fact.to_s}"
275
326
  else
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dockerun
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.1"
5
5
  end
data/lib/dockerun.rb CHANGED
@@ -15,6 +15,7 @@ module Dockerun
15
15
  include TR::CondUtils
16
16
 
17
17
  class Error < StandardError; end
18
+ class InsufficientParameter < StandardError; end
18
19
  # Your code goes here...
19
20
 
20
21
  def self.logger(tag = nil, &block)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockerun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris