dockerun 0.1.18 → 0.2.0

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: 9cbcf4c70d28a02673f788a731f9a7317a5ffc0c538afb361a8390174b015efe
4
- data.tar.gz: d0771b907dda8d1e2a1158829684b15c5bcdb5a4c08332ec24a7111dbabc0c14
3
+ metadata.gz: e007b2c72170afd4848fa13b1e64b0f8dd461db0c16dce7f941e5ffc00415b3e
4
+ data.tar.gz: dd15116319f869ca653721f02daf9de7c9fe56a0be6a421ad5683eefab15573f
5
5
  SHA512:
6
- metadata.gz: 4f506a0572240746fbfcc3d2946454f534b54c6ab922f21f6cc2c004421a16a60b0adf0b11e38efef22b1f58adf69ea5509de8c0fe7ecb037ccbf6ec48ae5aab
7
- data.tar.gz: 93cac69a37122f6aff3baa234a617036d29b590fe0bc81b8dcf18767c71f35a55eebbf09f8ce0ef6a2e09eadd469d1132dc11bc2b0b8224aca1f45f18ec13ae5
6
+ metadata.gz: 2108b71bfc5ab9e1f5512856878b655e6e0f9c3beb3a557db69f09c2359d35af67782361f66d0a30530beb8fee1ac17824a0bd7b6d5da0ab11bf9935da41f873
7
+ data.tar.gz: 618050b341f79857a3df0c75601a394330866ce772e78ce07589d0dabfeb665e6c426804fb8f51b36d15bb07f080ef650d62ab5b557dccbe6bde5899a7a3db25
data/.release_history.yml CHANGED
@@ -36,3 +36,5 @@ dockerun:
36
36
  :timestamp: 1680096788.8148112
37
37
  - :version: 0.1.17
38
38
  :timestamp: 1680413747.3876462
39
+ - :version: 0.1.18
40
+ :timestamp: 1680413850.243007
data/Dockerfile.dockerun CHANGED
@@ -6,7 +6,7 @@ LABEL description="Dockerfile generated by dockerun"
6
6
  LABEL dockerun-info="https://github.com/chrisliaw/dockerun"
7
7
 
8
8
 
9
- RUN apt-get update && apt-get install -y sudo git curl build-essential
9
+ RUN apt-get update && apt-get install -y sudo git curl build-essential vim
10
10
 
11
11
 
12
12
 
@@ -22,6 +22,16 @@ USER chris
22
22
  #RUN sudo apt-get install -y curl build-essential
23
23
 
24
24
 
25
+ COPY on_docker_config /home/chris/docker_init.rb
26
+ #RUN chown chris:chris /home/chris/docker_init.rb
27
+ RUN ruby /home/chris/docker_init.rb
28
+
29
+
30
+
31
+
32
+
33
+ WORKDIR /opt
34
+
25
35
 
26
36
  # other Dockerfile entries starts here
27
37
 
data/Gemfile CHANGED
@@ -9,5 +9,6 @@ gem "rake", "~> 13.0"
9
9
 
10
10
  gem "rspec", "~> 3.0"
11
11
 
12
- #gem 'docker-cli', git: "docker-cli", branch: "master"
12
+ gem 'docker-cli', git: "docker-cli", branch: "master"
13
+
13
14
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,20 @@
1
+ GIT
2
+ remote: docker-cli
3
+ revision: d363083dcabbb86b668c7df3c87882c2fa575a68
4
+ branch: master
5
+ specs:
6
+ docker-cli (0.1.1)
7
+ ptools
8
+ teLogger
9
+ toolrack
10
+ tty-command
11
+ tty-prompt
12
+
1
13
  PATH
2
14
  remote: .
3
15
  specs:
4
- dockerun (0.1.18)
16
+ dockerun (0.2.0)
17
+ colorize
5
18
  docker-cli
6
19
  teLogger (> 0.2.0)
7
20
  toolrack (> 0.19.1)
@@ -11,6 +24,7 @@ PATH
11
24
  GEM
12
25
  remote: https://rubygems.org/
13
26
  specs:
27
+ colorize (0.8.1)
14
28
  devops_assist (0.3.11)
15
29
  git_cli
16
30
  git_cli_prompt (~> 0.3.3)
@@ -19,11 +33,6 @@ GEM
19
33
  toolrack
20
34
  tty-prompt
21
35
  diff-lcs (1.5.0)
22
- docker-cli (0.2.0)
23
- ptools
24
- teLogger
25
- tty-command
26
- tty-prompt
27
36
  git_cli (0.11.2)
28
37
  gvcs
29
38
  ptools (~> 1.4.0)
@@ -69,10 +78,12 @@ GEM
69
78
  wisper (2.0.1)
70
79
 
71
80
  PLATFORMS
81
+ ruby
72
82
  x86_64-linux
73
83
 
74
84
  DEPENDENCIES
75
85
  devops_assist
86
+ docker-cli!
76
87
  dockerun!
77
88
  rake (~> 13.0)
78
89
  rspec (~> 3.0)
data/dockerun.gemspec CHANGED
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
35
35
 
36
36
  spec.add_dependency 'tty-command' #, "> 0.10.1"
37
37
  spec.add_dependency 'tty-option' #, "> 0.2.0"
38
+ spec.add_dependency 'colorize'
38
39
 
39
40
  spec.add_dependency 'docker-cli'
40
41
 
data/exe/dockerun CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'bundler/setup'
3
4
  require 'toolrack'
4
5
  include TR::CondUtils
5
6
 
@@ -0,0 +1,25 @@
1
+
2
+ require 'bundler'
3
+
4
+ module Dockerun
5
+ module CommandHelper
6
+ module BundlerHelper
7
+
8
+ def find_local_dev_gems
9
+
10
+ res = {}
11
+ Bundler.load.dependencies.each do |d|
12
+ if not d.source.nil?
13
+ src = d.source
14
+ if src.path.to_s != "."
15
+ res[d.name] = src.path.to_s
16
+ end
17
+ end
18
+ end
19
+ res
20
+
21
+ end # find_local_dev_gem
22
+
23
+ end
24
+ end
25
+ end
@@ -42,7 +42,7 @@ module Dockerun
42
42
  m.choice n,n
43
43
  end
44
44
  end
45
- end
45
+ end # find imageName
46
46
 
47
47
  if is_empty?(config.container_names(imageName))
48
48
  STDOUT.puts "There is no container registered under image '#{imageName}'"
@@ -62,14 +62,88 @@ module Dockerun
62
62
  end
63
63
 
64
64
 
65
- imageName = build_image_if_not_exist(imageName) do |ops, val|
65
+ imageName, mount_points = build_image_if_not_exist(imageName) do |ops, *val|
66
66
  case ops
67
67
  when :new_image_name
68
- cli.ask("Please provide a new image name : ", required: true)
68
+ cli.ask("Please provide a new image name : ".yellow, required: true)
69
+
69
70
  when :image_exist
70
- reuse = cli.yes? "Image '#{val}' already exist. Using existing image?"
71
+ reuse = cli.yes? "Image '#{val.first}' already exist. Using existing image?"
71
72
  # proceed or not , new name
72
- [reuse, val]
73
+ [reuse, val.first]
74
+
75
+ when :prompt_mount_points_starting
76
+ cli.say "\n Mount Directory into Docker : \n", color: :yellow
77
+
78
+ when :transfer_dev_gem_mapping?
79
+ found = val.first
80
+ cli.say(" It seems that the project has development gem attached to it : \n Found development gems (#{found.length}) : \n", color: :yellow)
81
+ if not found.nil?
82
+ found.each do |name, path|
83
+ cli.say(" * #{name} [#{path}]\n", color: :yellow)
84
+ end
85
+ end
86
+ cli.yes?(" Do you want to map the above development gems inside the docker? : ".yellow)
87
+
88
+ when :workspace_root_inside_docker
89
+ 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]))
90
+
91
+ when :map_project_dir
92
+ 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)) )
93
+ if is_empty?(res)
94
+ cli.puts "\n Current directory '#{Dir.getwd}' shall not be available inside the docker".red
95
+ end
96
+ res
97
+
98
+ when :volume_mapping_required?
99
+ cli.yes?("\n Is there any other volume mapping required? ".yellow)
100
+
101
+ when :source_prompt
102
+ param = val.first
103
+ msg = []
104
+ if not param.nil?
105
+ msg = param[:control]
106
+ end
107
+ cli.ask("\n Directory to share with docker [#{msg.join(", ")}] : ".yellow, required: true)
108
+
109
+ when :destination_prompt
110
+ src = val.first
111
+ srcDir = File.basename(src)
112
+ cli.ask("\n Directory inside docker : ".yellow, required: true, value: "/opt/#{srcDir}")
113
+
114
+ when :add_to_bundle?
115
+ cli.yes?("\n Add directory '#{val.first}' to bundler config local? ".yellow)
116
+
117
+ when :add_mount_to_container
118
+ config.add_mount_to_container(imageName, *val)
119
+
120
+ when :add_more_volume_mapping?
121
+ cli.yes?("\n Add more volume mapping? ".yellow)
122
+
123
+ when :prompt_user_configurables
124
+ vv = val.first
125
+ cli.say "\n The following are the configurable items for the template '#{vv[:template]}' : \n".yellow
126
+ res = { }
127
+ vv[:userFields].each do |k,v|
128
+ case v[:type]
129
+ when :ask
130
+ res[k] = cli.ask(v[:desc].yellow) do |s|
131
+ s.required v[:required] if not_empty?(v[:required]) and is_bool?(v[:required])
132
+ s.value v[:default].to_s if not_empty?(v[:default])
133
+ end
134
+
135
+ when :select
136
+ res[k] = cli.select(v[:desc].yellow) do |m|
137
+ v[:options].each do |opt, key|
138
+ m.choice opt, key
139
+ end
140
+ #m.default v[:default] if not_empty?(v[:default])
141
+ end
142
+ end
143
+ end
144
+
145
+ res
146
+
73
147
  else
74
148
 
75
149
  end
@@ -101,24 +175,38 @@ module Dockerun
101
175
  end
102
176
  end
103
177
 
104
- selContName = run_docker_container(imageName, selContName) do |ops, *args|
178
+ selContName = run_docker_container(imageName, selContName, mount_points) do |ops, *args|
105
179
  case ops
106
180
  when :new_container_name
107
- cli.ask("Please provide a new container name : ", required: true)
181
+ cli.ask("\n Please provide a new container name : ".yellow, required: true)
108
182
  when :container_name_exist
109
- cli.yes?("Container name '#{args.first}' already exist. Proceed with existing?")
110
- when :volume_mapping_required?
111
- cli.yes?("Is there any volume mapping required? ")
112
- when :source_prompt
113
- cli.ask("Directory to share with docker : ", required: true)
114
- when :destination_prompt
115
- src = args.first
116
- srcDir = File.basename(src)
117
- cli.ask("Directory to show inside docker : ", required: true, value: "/opt/#{srcDir}")
118
- when :add_mount_to_container
119
- config.add_mount_to_container(imageName, *args)
120
- when :add_more_volume_mapping?
121
- cli.yes?("Add more volume mapping?")
183
+ cli.yes?(" ** Container name '#{args.first}' already exist. Proceed with existing?".red)
184
+
185
+ #when :transfer_dev_gem_mapping?
186
+ # 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? ")
187
+
188
+ #when :workspace_root_inside_docker
189
+ # cli.ask(" Workspace '#{args[2]}' shall be mapped to which directory inside the docker? ", required: true, value: File.join(args.first, args[1]))
190
+
191
+ #when :map_project_dir
192
+ # 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)
193
+
194
+ #when :volume_mapping_required?
195
+ # cli.yes?("Is there any volume mapping required? ")
196
+ #when :source_prompt
197
+ # cli.ask("Directory to share with docker : ", required: true)
198
+ #when :destination_prompt
199
+ # src = args.first
200
+ # srcDir = File.basename(src)
201
+ # cli.ask("Directory to show inside docker : ", required: true, value: "/opt/#{srcDir}")
202
+
203
+ #when :add_to_bundle?
204
+ # cli.yes?(" Add directory '#{args.first}' to bundler config local? ")
205
+
206
+ #when :add_mount_to_container
207
+ # config.add_mount_to_container(imageName, *args)
208
+ #when :add_more_volume_mapping?
209
+ # cli.yes?("Add more volume mapping?")
122
210
  end
123
211
  end
124
212
 
@@ -38,7 +38,7 @@ module Dockerun
38
38
  # find history file
39
39
  config = ::Dockerun::Config.from_storage
40
40
 
41
- imageName = build_image_if_not_exist(imageName) do |ops, val|
41
+ imageName, mount_points = build_image_if_not_exist(imageName) do |ops, val|
42
42
  case ops
43
43
  when :new_image_name
44
44
  cli.ask("Please provide a new image name : ", required: true)
@@ -1,15 +1,17 @@
1
1
 
2
2
  require_relative 'docker_command_factory_helper'
3
+ require_relative 'bundler_helper'
3
4
 
4
5
  module Dockerun
5
6
  module CommandHelper
6
7
  module DockerContainerHelper
7
8
  include DockerCommandFactoryHelper
9
+ include BundlerHelper
8
10
 
9
11
  class DockerContainerBuildFailed < StandardError; end
10
12
  class DockerContainerStartFailed < StandardError; end
11
13
 
12
- def run_docker_container(image_name, container_name, &block)
14
+ def run_docker_container(image_name, container_name, mount_points = [], &block)
13
15
 
14
16
  raise DockerContainerBuildFailed, "block is required" if not block
15
17
  raise DockerContainerBuildFailed, "Image name is required" if is_empty?(image_name)
@@ -39,7 +41,10 @@ module Dockerun
39
41
  end
40
42
 
41
43
  if reuse == true
42
-
44
+
45
+ #
46
+ # container already exist so no configuration is required
47
+ #
43
48
  res = dcFact.find_running_container(container_name).run
44
49
  if not res.failed? and res.is_out_stream_empty?
45
50
  # not running
@@ -56,24 +61,81 @@ module Dockerun
56
61
 
57
62
  else
58
63
 
59
- reqVolMap = block.call(:volume_mapping_required?)
60
- mount = []
61
- if reqVolMap
64
+ #@workspace_root = "/opt"
65
+ #@shared_dirs = {}
62
66
 
63
- loop do
67
+ #mount = []
68
+ #sharedInsideDocker = []
69
+ #res = find_local_dev_gems
70
+ #puts "Found #{res.length} local gems #{res}"
71
+ #if not res.empty?
72
+ #
73
+ # transferMapping = block.call(:transfer_dev_gem_mapping?)
74
+ # if transferMapping
75
+ # res.each do |name, path|
76
+ # tsrc = block.call(:workspace_root_inside_docker, @workspace_root, name, path)
77
+ # inPath = File.join(tsrc, name)
78
+ # mount << { path => inPath }
79
+ # @shared_dirs[name] = inPath
80
+ # end
81
+ # end
64
82
 
65
- src = block.call(:source_prompt)
66
- dest = block.call(:destination_prompt, src)
67
- mount << { src => dest }
68
- block.call(:add_mount_to_container, container_name, mount.last)
69
- repeat = block.call(:add_more_volume_mapping?)
70
- break if not repeat
83
+ #end
84
+
85
+ #mapProjectDir = block.call(:map_project_dir, @workspace_root)
86
+ #if not_empty?(mapProjectDir)
87
+ # mount << { Dir.getwd => mapProjectDir }
88
+ #end
89
+
90
+ #reqVolMap = block.call(:volume_mapping_required?)
91
+ #if reqVolMap
92
+
93
+ # loop do
94
+ #
95
+ # block.call(:already_mapped, mount)
96
+
97
+ # src = block.call(:source_prompt)
98
+ # dest = block.call(:destination_prompt, src)
99
+ # mount << { src => dest }
100
+ #
101
+ # add_to_bundle = block.call(:add_to_bundle?, dest)
102
+ # if add_to_bundle
103
+ # @shared_dirs[File.basename(dest)] = dest
104
+ # end
105
+
106
+ # block.call(:add_mount_to_container, container_name, mount.last)
107
+ # repeat = block.call(:add_more_volume_mapping?)
108
+ # break if not repeat
109
+
110
+ # end
111
+
112
+ #end
113
+
114
+
115
+ #insideDockerConfig = File.join(File.dirname(__FILE__),"..","..","template","setup_ruby_devenv.rb.erb")
116
+ #if File.exist?(insideDockerConfig)
117
+ #
118
+ # @docker_init_file_path = File.join(Dir.getwd,"on_docker_config")
119
+
120
+ # cont = File.read(insideDockerConfig)
121
+ #
122
+ # b = binding
123
+
124
+ # res = ERB.new(cont)
125
+ # out = res.result(b)
126
+
127
+ # # fixed this name to be used inside Dockerfile
128
+ # File.open(@docker_init_file_path, "w") do |f|
129
+ # f.write out
130
+ # end
131
+
132
+ # block.call(:on_docker_init_file_path,@docker_init_file_path)
133
+
134
+ #end
71
135
 
72
- end
73
136
 
74
- end
75
137
 
76
- dcFact.create_container_from_image(image_name, interactive: true, tty: true, container_name: container_name, mount: mount).run
138
+ dcFact.create_container_from_image(image_name, interactive: true, tty: true, container_name: container_name, mount: mount_points).run
77
139
 
78
140
  end
79
141
 
@@ -84,9 +146,10 @@ module Dockerun
84
146
  private
85
147
  def is_container_exist?(name)
86
148
  if not_empty?(name)
87
- res = dcFact.find_from_all_container(name).run
149
+ res = dcFact.find_from_all_container("^#{name}\\z").run
88
150
  raise DockerContainerBuildFailed, "Failed to find container. Error was : #{res.err_stream}" if res.failed?
89
151
 
152
+ p res.out_stream
90
153
  if res.is_out_stream_empty?
91
154
  # nothing found
92
155
  [false, ""]
@@ -1,20 +1,27 @@
1
1
 
2
2
  require_relative 'cli_prompt'
3
3
  require_relative 'docker_command_factory_helper'
4
+ require_relative 'bundler_helper'
5
+ require_relative 'template/template_writer'
4
6
 
5
7
  module Dockerun
6
8
  module CommandHelper
7
9
  module DockerImageHelper
8
10
  include CliHelper::CliPrompt
9
11
  include DockerCommandFactoryHelper
12
+ include BundlerHelper
10
13
 
11
14
  class DockerfileNotExist < StandardError; end
12
15
  class DockerImageBuildFailed < StandardError; end
13
16
  class DockerImageDeleteFailed < StandardError; end
17
+ class DockerImagePrebuiltConfigFailed < StandardError; end
14
18
 
15
- def load_dockerfile(root = Dir.getwd)
19
+ def load_dockerfile(root = Dir.getwd, dockerInitPath = nil, &block)
16
20
 
17
- df = Dir.glob(File.join(root,"Dockerfile*"))
21
+ #avail = ::Dockerun::Template::TemplateEngine.available_templates
22
+ df = ::Dockerun::Template::TemplateEngine.available_templates
23
+
24
+ #df = Dir.glob(File.join(root,"Dockerfile*"))
18
25
  if df.length == 0
19
26
  raise DockerfileNotExist, "Dockerfile not yet available. Please create one or run init first."
20
27
  end
@@ -30,7 +37,32 @@ module Dockerun
30
37
  selectedDf = df.first
31
38
  end
32
39
 
33
- selectedDf
40
+ tw = ::Dockerun::Template::TemplateWriter.new(selectedDf)
41
+ tw.docker_init_file_path = dockerInitPath
42
+ userFields = tw.user_configurables
43
+ if block
44
+ tw.user_configurables = block.call(:prompt_user_configurables, { template: selectedDf, userFields: userFields })
45
+ end
46
+ res = tw.compile
47
+
48
+ loc = "."
49
+ #loc = params[:location] if not_empty?(params[:location])
50
+
51
+ loc = File.expand_path(loc)
52
+ out = nil
53
+ if File.directory?(loc)
54
+ out = File.join(loc, "Dockerfile.dockerun")
55
+ else
56
+ out = File.join(File.dirname(loc), "Dockerfile.dockerun")
57
+ end
58
+
59
+ File.open(out, "w") do |f|
60
+ f.write res
61
+ end
62
+
63
+
64
+ #selectedDf
65
+ File.basename(out)
34
66
 
35
67
  end
36
68
 
@@ -38,6 +70,7 @@ module Dockerun
38
70
 
39
71
  raise DockerImageBuildFailed, "block is required" if not block
40
72
 
73
+ mountPoints = []
41
74
  if is_empty?(name)
42
75
  reuse = false
43
76
  loop do
@@ -50,20 +83,184 @@ module Dockerun
50
83
  if reuse
51
84
 
52
85
  else
53
- dockerfile = load_dockerfile(Dir.getwd)
86
+
87
+ #@workspace_root = "/opt"
88
+ #@shared_dirs = {}
89
+
90
+ #mount = []
91
+ #sharedInsideDocker = []
92
+ #res = find_local_dev_gems
93
+ #puts "Found #{res.length} local gems #{res}"
94
+ #if not res.empty?
95
+
96
+ # transferMapping = block.call(:transfer_dev_gem_mapping?)
97
+ # if transferMapping
98
+ # res.each do |name, path|
99
+ # tsrc = block.call(:workspace_root_inside_docker, @workspace_root, name, path)
100
+ # inPath = File.join(tsrc, name)
101
+ # mount << { path => inPath }
102
+ # @shared_dirs[name] = inPath
103
+ # end
104
+ # end
105
+
106
+ #end
107
+
108
+ #mapProjectDir = block.call(:map_project_dir, @workspace_root)
109
+ #if not_empty?(mapProjectDir)
110
+ # mount << { Dir.getwd => mapProjectDir }
111
+ #end
112
+
113
+ #reqVolMap = block.call(:volume_mapping_required?)
114
+ #if reqVolMap
115
+
116
+ # loop do
117
+
118
+ # block.call(:already_mapped, mount)
119
+
120
+ # src = block.call(:source_prompt)
121
+ # dest = block.call(:destination_prompt, src)
122
+ # mount << { src => dest }
123
+
124
+ # add_to_bundle = block.call(:add_to_bundle?, dest)
125
+ # if add_to_bundle
126
+ # @shared_dirs[File.basename(dest)] = dest
127
+ # end
128
+
129
+ # block.call(:add_mount_to_container, container_name, mount.last)
130
+ # repeat = block.call(:add_more_volume_mapping?)
131
+ # break if not repeat
132
+
133
+ # end
134
+
135
+ #end
136
+
137
+
138
+ #insideDockerConfig = File.join(File.dirname(__FILE__),"..","..","template","setup_ruby_devenv.rb.erb")
139
+ #if File.exist?(insideDockerConfig)
140
+
141
+ # @docker_init_file_path = File.join(Dir.getwd,"on_docker_config")
142
+
143
+ # cont = File.read(insideDockerConfig)
144
+
145
+ # b = binding
146
+
147
+ # res = ERB.new(cont)
148
+ # out = res.result(b)
149
+
150
+ # # fixed this name to be used inside Dockerfile
151
+ # File.open(@docker_init_file_path, "w") do |f|
152
+ # f.write out
153
+ # end
154
+
155
+ # block.call(:on_docker_init_file_path,@docker_init_file_path)
156
+
157
+ #end
158
+
159
+ mountPoints, dockerinit = prompt_mount_points(&block)
160
+
161
+
162
+ dockerfile = load_dockerfile(Dir.getwd, dockerinit, &block)
54
163
  build_docker_image(name, dockerfile: dockerfile)
55
164
  end
56
165
 
57
166
  else
58
167
 
59
168
  if not is_image_existed?(name)
60
- dockerfile = load_dockerfile(Dir.getwd)
169
+
170
+ mountPoints, dockerinit = prompt_mount_points(&block)
171
+
172
+ dockerfile = load_dockerfile(Dir.getwd, dockerinit, &block)
61
173
  build_docker_image(name, dockerfile: dockerfile)
62
174
  end
63
175
 
64
176
  end
65
177
 
66
- name
178
+ [name, mountPoints]
179
+
180
+ end
181
+
182
+ def prompt_mount_points(&block)
183
+
184
+ raise DockerImagePrebuiltConfigFailed, "block is mandatory" if not block
185
+
186
+ @workspace_root = "/opt"
187
+ @shared_dirs = {}
188
+
189
+ block.call(:prompt_mount_points_starting)
190
+
191
+ mount = []
192
+ res = find_local_dev_gems
193
+ #puts "Found #{res.length} local gems #{res}"
194
+ if not res.empty?
195
+
196
+ transferMapping = block.call(:transfer_dev_gem_mapping?, res)
197
+ if transferMapping
198
+ res.each do |name, path|
199
+ tsrc = block.call(:workspace_root_inside_docker, @workspace_root, name, path)
200
+ mount << { path => tsrc }
201
+ @shared_dirs[name] = tsrc
202
+ end
203
+ end
204
+
205
+ end
206
+
207
+ mapProjectDir = block.call(:map_project_dir, @workspace_root)
208
+ if not_empty?(mapProjectDir)
209
+ mount << { Dir.getwd => mapProjectDir }
210
+ end
211
+
212
+ reqVolMap = block.call(:volume_mapping_required?)
213
+ if reqVolMap
214
+
215
+ loop do
216
+
217
+ block.call(:already_mapped, mount)
218
+
219
+ src = block.call(:source_prompt, { control: [ "Type 's' to skip" ] })
220
+ if src == "s"
221
+ block.call(:volume_mapping_skipped)
222
+ break
223
+ end
224
+
225
+ dest = block.call(:destination_prompt, src)
226
+ mount << { src => dest }
227
+
228
+ add_to_bundle = block.call(:add_to_bundle?, dest)
229
+ if add_to_bundle
230
+ @shared_dirs[File.basename(dest)] = dest
231
+ end
232
+
233
+ block.call(:add_mount_to_container, container_name, mount.last)
234
+ repeat = block.call(:add_more_volume_mapping?)
235
+ break if not repeat
236
+
237
+ end
238
+
239
+ end
240
+
241
+
242
+ insideDockerConfig = File.join(File.dirname(__FILE__),"..","..","template","setup_ruby_devenv.rb.erb")
243
+ if File.exist?(insideDockerConfig)
244
+
245
+ @docker_init_file_path = File.join(Dir.getwd,"on_docker_config")
246
+
247
+ cont = File.read(insideDockerConfig)
248
+
249
+ b = binding
250
+
251
+ res = ERB.new(cont)
252
+ out = res.result(b)
253
+
254
+ # fixed this name to be used inside Dockerfile
255
+ File.open(@docker_init_file_path, "w") do |f|
256
+ f.write out
257
+ end
258
+
259
+ block.call(:on_docker_init_file_path,@docker_init_file_path)
260
+
261
+ end
262
+
263
+ [mount, @docker_init_file_path]
67
264
 
68
265
  end
69
266
 
@@ -13,6 +13,8 @@ module Dockerun
13
13
 
14
14
  attr_accessor :image, :user_group_id, :user_group_name, :user_id, :user_login, :maintainer, :image_base
15
15
  attr_writer :user_configurables
16
+ attr_accessor :docker_init_file_path
17
+ attr_accessor :match_user, :working_dir
16
18
 
17
19
  def self.instance(template)
18
20
  tmp = template.to_s.downcase
@@ -34,21 +36,26 @@ module Dockerun
34
36
  @user_id = user[:user_id]
35
37
  @user_login = user[:login]
36
38
  @image_base = :ubuntu
39
+ @match_user = TR::RTUtils.on_linux?
40
+ @working_dir = "/opt"
37
41
  end
38
42
 
39
43
  def user_configurables
40
44
  fields = {
41
- image: { desc: "Image name of the docker based on", required: true },
42
- image_base: { desc: "Image is based on which OS? Assumption with be on Debian based. ", default: :ubuntu },
43
- maintainer: { desc: "Maintainer of the Dockerfile", default: @maintainer }
45
+ image: { desc: " Docker image name : ", required: true, type: :ask },
46
+ image_base: { desc: " Docker image OS : ", default: :debian, type: :select, options: { debian: "Ubuntu/Debian based", not_sure: "Not sure which distro" }.invert },
47
+ working_dir: { desc: " Default directory after login : ", type: :ask, default: @working_dir }
44
48
  }
45
49
 
46
50
  if TR::RTUtils.on_linux?
47
51
  f2 = {
48
- user_group_id: { desc: "User group ID that shall be created in docker. Default to current running user's ID", default: @user_group_id.to_s },
49
- user_group_name: { desc: "User group name that shall be created in docker. Default to current running user's group", default: @user_group_name },
50
- user_id: { desc: "User ID that shall be created in docker. Default to current running user ID", default: @user_id.to_s },
51
- user_login: { desc: "User login name that shall be created in docker. Default to current running user's login", default: @user_login }
52
+ match_user: { desc: " Match host user with docker user? ", type: :yes? },
53
+ #maintainer: { desc: "Maintainer of the Dockerfile", default: @maintainer }
54
+
55
+ #user_group_id: { desc: "User group ID that shall be created in docker. Default to current running user's ID", default: @user_group_id.to_s },
56
+ #user_group_name: { desc: "User group name that shall be created in docker. Default to current running user's group", default: @user_group_name },
57
+ #user_id: { desc: "User ID that shall be created in docker. Default to current running user ID", default: @user_id.to_s },
58
+ #user_login: { desc: "User login name that shall be created in docker. Default to current running user's login", default: @user_login }
52
59
  }
53
60
  fields.merge!(f2)
54
61
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dockerun
4
- VERSION = "0.1.18"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/dockerun.rb CHANGED
@@ -3,6 +3,9 @@
3
3
  require 'toolrack'
4
4
  require 'teLogger'
5
5
 
6
+ require 'tty/prompt'
7
+ require 'colorize'
8
+
6
9
  require_relative "dockerun/version"
7
10
 
8
11
  require_relative 'dockerun/command/dockerun'
@@ -8,11 +8,11 @@ LABEL dockerun-info="https://github.com/chrisliaw/dockerun"
8
8
  <% case @image_base.to_sym
9
9
  when :fedora %>
10
10
  RUN dnf update && dnf install sudo git curl
11
- <% else %>
12
- RUN apt-get update && apt-get install -y sudo git curl build-essential
11
+ <% when :debian %>
12
+ RUN apt-get update && apt-get install -y sudo git curl build-essential vim
13
13
  <% end %>
14
14
 
15
- <% if TR::RTUtils.on_linux? %>
15
+ <% if TR::RTUtils.on_linux? and @match_user == true %>
16
16
 
17
17
  RUN groupadd -f -g <%= @user_group_id %> <%= @user_group_name %> && \
18
18
  useradd -u <%= @user_id %> -g <%= @user_group_id %> -m <%= @user_login %> && \
@@ -24,6 +24,16 @@ USER <%= @user_login %>
24
24
  # from this point onwards, sudo is required for privileaged operation
25
25
  #RUN sudo apt-get install -y curl build-essential
26
26
 
27
+ <% if not (@docker_init_file_path.nil? or @docker_init_file_path.empty?) %>
28
+ COPY <%= File.basename(@docker_init_file_path) %> /home/<%= @user_login %>/docker_init.rb
29
+ #RUN chown <%= @user_login %>:<%= @user_group_name %> /home/<%= @user_login %>/docker_init.rb
30
+ RUN ruby /home/<%= @user_login %>/docker_init.rb
31
+ <% end %>
32
+
33
+ <% end %>
34
+
35
+ <% if not_empty?(@working_dir) %>
36
+ WORKDIR <%= @working_dir %>
27
37
  <% end %>
28
38
 
29
39
  # other Dockerfile entries starts here
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ## This file is auto-generated. Changes on this file will be overwritten by newly generate file on next run
4
+
5
+ # setup env
6
+ WS_ROOT = "<%= @ws_root.nil? ? "/opt" : @ws_root %>"
7
+
8
+ <% if not (@shared_dirs.nil? or @shared_dirs.empty?) %>
9
+ <% @shared_dirs.each do |name, pa| %>
10
+ `bundle config --global local.<%= name %> <%= pa %>`
11
+ <% end %>
12
+ <% end %>
13
+
14
+ bashrc = File.join(Dir.home,".bashrc")
15
+ if File.exist?(bashrc)
16
+ cont = File.read(bashrc)
17
+ if not cont =~ /^alias be/
18
+ `echo "alias be=\\"bundle exec\\"" >> #{bashrc}`
19
+ end
20
+ end
21
+
22
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockerun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.18
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-02 00:00:00.000000000 Z
11
+ date: 2023-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: toolrack
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: colorize
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: docker-cli
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +128,7 @@ files:
114
128
  - dockerun.gemspec
115
129
  - exe/dockerun
116
130
  - lib/dockerun.rb
131
+ - lib/dockerun/bundler_helper.rb
117
132
  - lib/dockerun/cli_prompt.rb
118
133
  - lib/dockerun/command/dockerun.rb
119
134
  - lib/dockerun/command/init.rb
@@ -133,6 +148,7 @@ files:
133
148
  - lib/dockerun/user_info.rb
134
149
  - lib/dockerun/version.rb
135
150
  - template/Dockerfile_general.erb
151
+ - template/setup_ruby_devenv.rb.erb
136
152
  homepage: ''
137
153
  licenses: []
138
154
  metadata: {}