dockerun 0.3.6 → 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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -11
  3. data/Rakefile +0 -2
  4. data/Rakefile.bak +8 -0
  5. data/dockerspec.sample +107 -0
  6. data/{dockerun.gemspec → dockerun.gemspec.bak} +20 -22
  7. data/exe/dockerun +15 -115
  8. data/lib/dockerun/cli/command.rb +140 -0
  9. data/lib/dockerun/cli/command_factory.rb +316 -0
  10. data/lib/dockerun/cli/command_result.rb +67 -0
  11. data/lib/dockerun/cli/delete_container.rb +59 -0
  12. data/lib/dockerun/cli/delete_image.rb +103 -0
  13. data/lib/dockerun/cli/run.rb +40 -0
  14. data/lib/dockerun/cli/user_info.rb +39 -0
  15. data/lib/dockerun/cli_engine.rb +122 -0
  16. data/lib/dockerun/config.rb +50 -85
  17. data/lib/dockerun/context/rubygems.rb +142 -0
  18. data/lib/dockerun/dfile.rb +204 -0
  19. data/lib/dockerun/docker_cli.rb +124 -0
  20. data/lib/dockerun/dsl.rb +342 -0
  21. data/lib/dockerun/version.rb +1 -1
  22. data/lib/dockerun.rb +32 -24
  23. data/sig/dockerun.rbs +4 -0
  24. metadata +62 -73
  25. data/.release_history.yml +0 -56
  26. data/Dockerfile.dockerun +0 -38
  27. data/Gemfile +0 -15
  28. data/Gemfile.lock +0 -94
  29. data/bin/console +0 -15
  30. data/bin/setup +0 -8
  31. data/lib/dockerun/bundler_helper.rb +0 -25
  32. data/lib/dockerun/cli_prompt.rb +0 -18
  33. data/lib/dockerun/command/dockerun.rb +0 -30
  34. data/lib/dockerun/command/init.rb +0 -79
  35. data/lib/dockerun/command/remove_container.rb +0 -99
  36. data/lib/dockerun/command/reset_image.rb +0 -107
  37. data/lib/dockerun/command/run.rb +0 -226
  38. data/lib/dockerun/command/run_new_container.rb +0 -94
  39. data/lib/dockerun/command/run_new_image.rb +0 -89
  40. data/lib/dockerun/command/stop_container.rb +0 -90
  41. data/lib/dockerun/docker_command_factory_helper.rb +0 -19
  42. data/lib/dockerun/docker_container_helper.rb +0 -213
  43. data/lib/dockerun/docker_image_helper.rb +0 -381
  44. data/lib/dockerun/template/general_template_writer.rb +0 -14
  45. data/lib/dockerun/template/jruby_template_writer.rb +0 -24
  46. data/lib/dockerun/template/template_engine.rb +0 -27
  47. data/lib/dockerun/template/template_writer.rb +0 -102
  48. data/lib/dockerun/user_info.rb +0 -37
  49. data/template/Dockerfile_general.erb +0 -41
  50. data/template/setup_ruby_devenv.rb.erb +0 -22
@@ -1,99 +0,0 @@
1
-
2
- require 'tty/prompt'
3
- require 'docker/cli'
4
-
5
- require_relative '../config'
6
- require_relative '../docker_command_factory_helper'
7
- require_relative '../cli_prompt'
8
-
9
-
10
- module Dockerun
11
- module Command
12
- class RemoveContainer
13
- include TTY::Option
14
- include TR::CondUtils
15
-
16
- include DockerCommandFactoryHelper
17
- include CliHelper::CliPrompt
18
-
19
- usage do
20
- program "dockerun"
21
- command "rmc"
22
- desc "Remove container"
23
- end
24
-
25
- def run
26
- if params[:help]
27
- print help
28
- exit(0)
29
-
30
- else
31
-
32
- config = ::Dockerun::Config.from_storage
33
-
34
- imageName = nil
35
- if is_empty?(config.image_names)
36
- raise Error, "No image found"
37
- elsif config.image_names.length == 1
38
- imageName = config.image_names.first
39
- else
40
- imageName = cli.select("Please select one of the image below to start : ") do |m|
41
- config.image_names.each do |n|
42
- m.choice n,n
43
- end
44
- end
45
- end # find imageName
46
-
47
- if is_empty?(config.container_names(imageName))
48
- STDOUT.puts "There is no container registered under image '#{imageName}'"
49
- else
50
-
51
- loop do
52
-
53
- sel = cli.select("Please select the container that would like to be removed : ") do |m|
54
- config.container_names(imageName).each do |n|
55
- m.choice n,n
56
- end
57
-
58
- m.choice "Quit", :quit
59
- end
60
-
61
- case sel
62
- when :quit
63
- break
64
- else
65
- dcFact.stop_container(sel).run
66
- res = dcFact.delete_container(sel).run
67
- if res.failed?
68
- if res.err_stream =~ /No such container/
69
- remove = cli.yes?("It seems the container already deleted. Do you want to remove it from the list?")
70
- if remove
71
- config.remove_container(imageName, sel)
72
- config.to_storage
73
- break if is_empty?(config.container_names(imageName))
74
- end
75
- else
76
- STDERR.puts "Failed to delete container '#{sel}'. Error was : #{res.err_stream}"
77
- end
78
- else
79
-
80
- config.remove_container(imageName, sel)
81
- config.to_storage
82
-
83
- break if is_empty?(config.container_names(imageName))
84
- end
85
-
86
- end
87
-
88
- end
89
- end
90
-
91
-
92
-
93
- end
94
-
95
- end
96
-
97
- end
98
- end
99
- end
@@ -1,107 +0,0 @@
1
-
2
-
3
- require 'tty/prompt'
4
-
5
- require 'docker/cli'
6
-
7
- require_relative '../config'
8
-
9
- require_relative '../docker_command_factory_helper'
10
- require_relative '../cli_prompt'
11
-
12
- module Dockerun
13
- module Command
14
- class ResetImage
15
- include TTY::Option
16
- include TR::CondUtils
17
-
18
- include DockerCommandFactoryHelper
19
- include CliHelper::CliPrompt
20
-
21
- usage do
22
- program "dockerun"
23
- command "reset-image"
24
- desc "Delete images (and its containers) and start again"
25
- end
26
-
27
- def run(&block)
28
-
29
- if params[:help]
30
- print help
31
- exit(0)
32
-
33
- else
34
-
35
- config = ::Dockerun::Config.from_storage
36
-
37
- if config.isConfigFileAvail?
38
-
39
- skip = cli.no?("Reset docker image (together with the relative container) ? ")
40
- if not skip
41
-
42
- selImg = nil
43
- if is_empty?(config.image_names)
44
- STDOUT.puts "No image found"
45
-
46
- elsif config.image_names.length == 1
47
- selImg = config.image_names.first
48
- else
49
-
50
- selImg = cli.select("Please select which image you want to reset : ") do |m|
51
- config.image_names.each do |n|
52
- m.choice n,n
53
- end
54
- end
55
-
56
- end
57
-
58
- if not selImg.nil?
59
-
60
- # start from container first
61
- config.container_names(selImg).each do |cn|
62
- dcFact.stop_container(cn).run
63
- dcFact.delete_container(cn).run
64
- end
65
-
66
- STDOUT.puts "#{config.container_names(selImg).length} container(s) from image '#{selImg}' deleted"
67
-
68
- res = dcFact.delete_image(selImg).run
69
- if not res.failed?
70
- STDOUT.puts "Image '#{selImg}' successfully deleted."
71
- config.remove_image(selImg)
72
- config.to_storage
73
- STDOUT.puts "Image '#{selImg}' removed from history file"
74
- else
75
- STDERR.puts "Image '#{selImg}' deletion failed. Error was : #{res.err_stream}"
76
- removeFromHist = cli.yes?("Image '#{selImg}' failed. Do you want to remove from the history file?")
77
- if removeFromHist
78
- config.remove_image(selImg)
79
- config.to_storage
80
- STDOUT.puts "Image '#{selImg}' removed from history file"
81
- else
82
- STDOUT.puts "Image '#{selImg}' shall remain in the history file"
83
- end
84
- end
85
-
86
-
87
- end
88
-
89
- if is_empty?(config.image_names)
90
- ::Dockerun::Config.remove
91
- STDOUT.puts "Dockerun workspace config removed"
92
- end
93
-
94
- else
95
- STDOUT.puts "Reset docker image operation aborted"
96
- end
97
-
98
- else
99
- STDOUT.puts "Not a dockerun workspace"
100
- end
101
- end
102
-
103
- end
104
-
105
- end
106
- end
107
- end
@@ -1,226 +0,0 @@
1
-
2
- require_relative '../config'
3
- require_relative '../docker_container_helper'
4
-
5
- require_relative '../cli_prompt'
6
- require_relative '../docker_command_factory_helper'
7
-
8
- require_relative '../docker_image_helper'
9
-
10
- module Dockerun
11
- module Command
12
-
13
- class Run
14
- include TTY::Option
15
- include TR::CondUtils
16
- include CommandHelper::DockerContainerHelper
17
- include DockerCommandFactoryHelper
18
- include CommandHelper::DockerImageHelper
19
- include CliHelper::CliPrompt
20
-
21
- usage do
22
- program "dockerun"
23
- command "run"
24
- desc "Run docker instance from here"
25
- end
26
-
27
- argument :command_for_docker do
28
- optional
29
- desc "Command to be passed to docker"
30
- end
31
-
32
- def run(&block)
33
- if params[:help]
34
- print help
35
- exit(0)
36
-
37
- else
38
-
39
- # find history file
40
- config = ::Dockerun::Config.from_storage
41
-
42
- imageName = nil
43
-
44
- if config.image_names.length == 0
45
- imageName = nil
46
- elsif config.image_names.length == 1
47
- imageName = config.image_names.first
48
- else
49
- selImg = cli.select("Please select one of the Docker image options below : ") do |m|
50
- config.image_names.each do |n|
51
- m.choice n, n
52
- end
53
-
54
- m.choice "New image", :new
55
- end
56
-
57
- case selImg
58
- when :new
59
- imageName = cli.ask("Please provide a new image name : ", required: true)
60
- else
61
- imageName = selImg
62
- end
63
- end
64
-
65
-
66
- imageName, mount_points = build_image_if_not_exist(imageName) do |ops, *val|
67
- case ops
68
- when :new_image_name
69
- cli.ask("Please provide a new image name : ".yellow, required: true)
70
-
71
- when :image_exist
72
- reuse = cli.yes? "Image '#{val.first}' already exist. Using existing image?"
73
- # proceed or not , new name
74
- [reuse, val.first]
75
-
76
- when :prompt_mount_points_starting
77
- cli.say "\n Mount Directory into Docker : \n", color: :yellow
78
-
79
- when :transfer_dev_gem_mapping?
80
- found = val.first
81
- cli.say(" It seems that the project has development gem attached to it : \n Found development gems (#{found.length}) : \n", color: :yellow)
82
- if not found.nil?
83
- found.each do |name, path|
84
- cli.say(" * #{name} [#{path}]\n", color: :yellow)
85
- end
86
- end
87
- cli.yes?(" Do you want to map the above development gems inside the docker? : ".yellow)
88
-
89
- when :workspace_root_inside_docker
90
- cli.ask("\n Workspace '#{val[2]}' shall be mapped to which directory inside the docker? : ".yellow, required: true, value: File.join(val.first, val[1]))
91
-
92
- when :map_project_dir
93
- res = cli.ask("\n Please provide path inside docker for current directory [Empty to skip mounting current directory] : ".yellow, value: File.join(val.first, File.basename(Dir.getwd)) )
94
- if is_empty?(res)
95
- cli.puts "\n Current directory '#{Dir.getwd}' shall not be available inside the docker".red
96
- end
97
- res
98
-
99
- when :volume_mapping_required?
100
- cli.yes?("\n Is there any other volume mapping required? ".yellow)
101
-
102
- when :source_prompt
103
- param = val.first
104
- msg = []
105
- if not param.nil?
106
- msg = param[:control]
107
- end
108
- cli.ask("\n Directory to share with docker [#{msg.join(", ")}] : ".yellow, required: true)
109
-
110
- when :destination_prompt
111
- src = val.first
112
- srcDir = File.basename(src)
113
- cli.ask("\n Directory inside docker : ".yellow, required: true, value: "/opt/#{srcDir}")
114
-
115
- when :add_to_bundle?
116
- cli.yes?("\n Add directory '#{val.first}' to bundler config local? ".yellow)
117
-
118
- when :add_more_volume_mapping?
119
- cli.yes?("\n Add more volume mapping? ".yellow)
120
-
121
- when :prompt_user_configurables
122
- vv = val.first
123
- cli.say "\n The following are the configurable items for the template '#{vv[:template]}' : \n".yellow
124
- res = { }
125
- vv[:userFields].each do |k,v|
126
- case v[:type]
127
- when :ask
128
- res[k] = cli.ask(v[:desc].yellow) do |s|
129
- s.required v[:required] if not_empty?(v[:required]) and is_bool?(v[:required])
130
- s.value v[:default].to_s if not_empty?(v[:default])
131
- end
132
-
133
- when :select
134
- res[k] = cli.select(v[:desc].yellow) do |m|
135
- v[:options].each do |opt, key|
136
- m.choice opt, key
137
- end
138
- #m.default v[:default] if not_empty?(v[:default])
139
- end
140
- end
141
- end
142
-
143
- res
144
-
145
- else
146
-
147
- end
148
- end
149
-
150
- config.add_image(imageName)
151
-
152
- contNames = config.container_names(imageName)
153
-
154
- selContName = nil
155
- port_mapping = {}
156
- if contNames.length == 0
157
- selContName = nil
158
- elsif contNames.length == 1
159
- selContName = contNames.first
160
- else
161
- sel = cli.select("Please select one of the container operations below : ") do |m|
162
- contNames.each do |n|
163
- m.choice n,n
164
- end
165
-
166
- m.choice "New Container", :new
167
- end
168
-
169
- case sel
170
- when :new
171
-
172
- else
173
- selContName = sel
174
- end
175
- end
176
-
177
- selContName, otherConfigs = run_docker_container(imageName, selContName, mount_points) do |ops, *args|
178
- case ops
179
- when :new_container_name
180
- cli.ask("\n Please provide a new container name : ".yellow, required: true)
181
- when :container_name_exist
182
- cli.yes?(" ** Container name '#{args.first}' already exist. Proceed with existing?".red)
183
-
184
- #when :transfer_dev_gem_mapping?
185
- # cli.yes?("It seems that the project has development gem attached to it. Do you want to map those development gems too inside the docker? ")
186
-
187
- #when :workspace_root_inside_docker
188
- # cli.ask(" Workspace '#{args[2]}' shall be mapped to which directory inside the docker? ", required: true, value: File.join(args.first, args[1]))
189
-
190
- #when :map_project_dir
191
- # cli.ask(" Please provide path inside docker for current directory [Empty to skip mounting current directory] : ", value: File.join(args.first, File.basename(Dir.getwd)), required: true)
192
-
193
- #when :volume_mapping_required?
194
- # cli.yes?("Is there any volume mapping required? ")
195
- #when :source_prompt
196
- # cli.ask("Directory to share with docker : ", required: true)
197
- #when :destination_prompt
198
- # src = args.first
199
- # srcDir = File.basename(src)
200
- # cli.ask("Directory to show inside docker : ", required: true, value: "/opt/#{srcDir}")
201
-
202
- #when :add_to_bundle?
203
- # cli.yes?(" Add directory '#{args.first}' to bundler config local? ")
204
-
205
- #when :add_mount_to_container
206
- # config.add_mount_to_container(imageName, *args)
207
- #when :add_more_volume_mapping?
208
- # cli.yes?("Add more volume mapping?")
209
- end
210
- end
211
-
212
- config.add_container(imageName, selContName)
213
-
214
- config.add_mount_to_container(imagename, selContName, mount_points)
215
-
216
- config.add_port_mapping_to_container(imagename, selContName, @otherConfigs[:port_mapping]) if not_empty?(@otherConfigs[:port_mapping])
217
-
218
- config.to_storage
219
-
220
- end
221
- end
222
-
223
- end
224
-
225
- end
226
- end
@@ -1,94 +0,0 @@
1
-
2
- require 'tty/prompt'
3
- require 'docker/cli'
4
-
5
- require_relative '../config'
6
- require_relative '../docker_container_helper'
7
-
8
- require_relative '../docker_command_factory_helper'
9
- require_relative '../cli_prompt'
10
-
11
- module Dockerun
12
- module Command
13
- class RunNewContainer
14
- include TTY::Option
15
- include TR::CondUtils
16
- include CommandHelper::DockerContainerHelper
17
-
18
- include DockerCommandFactoryHelper
19
- include CliHelper::CliPrompt
20
-
21
-
22
- usage do
23
- program "dockerun"
24
- command "run-new-container"
25
- desc "Run new container from same image"
26
- end
27
-
28
- def run
29
-
30
- if params[:help]
31
- print help
32
- exit(0)
33
-
34
- else
35
-
36
- config = ::Dockerun::Config.from_storage
37
-
38
- imageName = nil
39
- if is_empty?(config.image_names)
40
- STDERR.puts "Image name not availab eyet"
41
- exit(1)
42
- elsif config.image_names == 1
43
- imageName = config.image_names.first
44
- else
45
- imageName = cli.select("Please select the new container shall be based on which image : ") do |m|
46
- config.image_names.each do |n|
47
- m.choice n,n
48
- end
49
- end
50
- end
51
-
52
- contName, otherConfigs = run_docker_container(imageName, nil) do |ops, *args|
53
- case ops
54
- when :new_container_name
55
- cli.ask("Please provide a new container name : ", required: true)
56
- when :container_name_exist
57
- cli.yes?("Container name '#{args.first}' already exist. Proceed with existing?")
58
- when :volume_mapping_required?
59
- cli.yes?("Is there any volume mapping required? ")
60
- when :source_prompt
61
- cli.ask("Directory to share with docker : ", required: true)
62
- when :destination_prompt
63
- src = args.first
64
- srcDir = File.basename(src)
65
- cli.ask("Directory to show inside docker : ", required: true, value: "/opt/#{srcDir}")
66
- when :add_mount_to_container
67
- config.add_mount_to_container(imageName, *args)
68
- when :add_more_volume_mapping?
69
- cli.yes?("Add more volume mapping?")
70
- end
71
- end
72
-
73
- #contName = nil
74
- #loop do
75
- # contName = cli.ask("Please provide a new container name : ", required: true)
76
- # res = dcFact.find_from_all_container(contName).run
77
- # if not res[:result].failed? and not_empty?(res[:outStream])
78
- # STDERR.puts "Given container name '#{contName}' already taken. Please try again"
79
- # else
80
- # break
81
- # end
82
- #end
83
-
84
- #create_new_docker_container(config, contName, dcFact. cli)
85
- config.add_container(imageName, contName)
86
- config.to_storage
87
-
88
- end
89
-
90
- end
91
-
92
- end
93
- end
94
- end
@@ -1,89 +0,0 @@
1
-
2
- require_relative '../config'
3
- require_relative '../docker_container_helper'
4
-
5
- require_relative '../cli_prompt'
6
- require_relative '../docker_command_factory_helper'
7
-
8
- require_relative '../docker_image_helper'
9
-
10
- module Dockerun
11
- module Command
12
-
13
- class RunNewImage
14
- include TTY::Option
15
- include TR::CondUtils
16
- include CommandHelper::DockerContainerHelper
17
- include DockerCommandFactoryHelper
18
- include CommandHelper::DockerImageHelper
19
-
20
- usage do
21
- program "dockerun"
22
- command "run-new-image"
23
- desc "Run with new image"
24
- end
25
-
26
- argument :command_for_docker do
27
- optional
28
- desc "Command to be passed to docker"
29
- end
30
-
31
- def run(&block)
32
- if params[:help]
33
- print help
34
- exit(0)
35
-
36
- else
37
-
38
- # find history file
39
- config = ::Dockerun::Config.from_storage
40
-
41
- imageName, mount_points = build_image_if_not_exist(imageName) do |ops, val|
42
- case ops
43
- when :new_image_name
44
- cli.ask("Please provide a new image name : ", required: true)
45
- when :image_exist
46
- reuse = cli.yes? "Image '#{val}' already exist. Using existing image?"
47
- # proceed or not , new name
48
- [reuse, val]
49
- else
50
-
51
- end
52
- end
53
-
54
- config.add_image(imageName)
55
-
56
- contNames = config.container_names(imageName)
57
-
58
- selContName, otherConfigs = run_docker_container(imageName, selContName) do |ops, *args|
59
- case ops
60
- when :new_container_name
61
- cli.ask("Please provide a new container name : ", required: true)
62
- when :container_name_exist
63
- cli.yes?("Container name '#{args.first}' already exist. Proceed with existing?")
64
- when :volume_mapping_required?
65
- cli.yes?("Is there any volume mapping required? ")
66
- when :source_prompt
67
- cli.ask("Directory to share with docker : ", required: true)
68
- when :destination_prompt
69
- src = args.first
70
- srcDir = File.basename(src)
71
- cli.ask("Directory to show inside docker : ", required: true, value: "/opt/#{srcDir}")
72
- when :add_mount_to_container
73
- config.add_mount_to_container(imageName, *args)
74
- when :add_more_volume_mapping?
75
- cli.yes?("Add more volume mapping?")
76
- end
77
- end
78
-
79
- config.add_container(imageName, selContName)
80
-
81
- config.to_storage
82
-
83
- end
84
- end
85
-
86
- end
87
-
88
- end
89
- end
@@ -1,90 +0,0 @@
1
-
2
- require_relative '../cli_prompt'
3
- require_relative '../config'
4
- require_relative '../docker_container_helper'
5
-
6
- module Dockerun
7
- module Command
8
-
9
- class StopContainer
10
-
11
- include TTY::Option
12
- include TR::CondUtils
13
- include CommandHelper::DockerContainerHelper
14
- include DockerCommandFactoryHelper
15
- include CliHelper::CliPrompt
16
-
17
- usage do
18
- program "dockerun"
19
- command "stop"
20
- desc "Stop a running container"
21
- end
22
-
23
- def run(&block)
24
- if params[:help]
25
- print help
26
- exit(0)
27
-
28
- else
29
-
30
- # find history file
31
- config = ::Dockerun::Config.from_storage
32
-
33
- res = []
34
- opts = []
35
- config.image_names.each do |im|
36
- config.container_names(im).each do |cn|
37
- if is_container_exist?(cn)
38
- if is_container_running?(cn)
39
- res << "#{im} : #{cn} (Running)"
40
- opts << cn
41
- else
42
- res << "#{im} : #{cn} (Not Running)"
43
- end
44
- else
45
- res << "#{im} : #{cn} (Not Exist)"
46
- end
47
- end
48
- end
49
-
50
- if not opts.empty?
51
- cli.puts "\n Running status of container(s) : ".yellow
52
- res.sort.each do |r|
53
- cli.puts " * #{r}".yellow
54
- end
55
-
56
- cli.puts
57
- selConts = cli.multi_select("Please select which container to stop : ") do |m|
58
- opts.each do |o|
59
- m.choice o,o
60
- end
61
-
62
- m.choice "Abort", :quit
63
- end
64
-
65
- if selConts.include?(:quit)
66
- cli.puts " * Abort was one of the selected option. Command aborted.".red
67
- else
68
- selConts.each do |sc|
69
- begin
70
- stop_container(sc)
71
- cli.puts " Container '#{sc}' stopped successfully.".green
72
- rescue DockerContainerStopFailed => ex
73
- cli.puts " Container '#{sc}' failed to be stopped".red
74
- end
75
- end
76
- end
77
-
78
- else
79
- cli.say " * There is no container found to be running * ".yellow
80
- end
81
-
82
- cli.puts "\n Stop container command completed successfully \n\n".yellow
83
-
84
- end
85
- end
86
-
87
- end
88
-
89
- end
90
- end