dockerun 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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