dockerun 0.1.14

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.
@@ -0,0 +1,173 @@
1
+
2
+ require_relative 'cli_prompt'
3
+ require_relative 'docker_command_factory_helper'
4
+
5
+ module Dockerun
6
+ module CommandHelper
7
+ module DockerImageHelper
8
+ include CliHelper::CliPrompt
9
+ include DockerCommandFactoryHelper
10
+
11
+ class DockerfileNotExist < StandardError; end
12
+ class DockerImageBuildFailed < StandardError; end
13
+ class DockerImageDeleteFailed < StandardError; end
14
+
15
+ def load_dockerfile(root = Dir.getwd)
16
+
17
+ df = Dir.glob(File.join(root,"Dockerfile*"))
18
+ if df.length == 0
19
+ raise DockerfileNotExist, "Dockerfile not yet available. Please create one or run init first."
20
+ end
21
+
22
+ selectedDf = nil
23
+ if df.length > 1
24
+ selectedDf = cli.select("Please select one of the Dockerfile to proceed: ") do |m|
25
+ df.each do |d|
26
+ m.choice File.basename(d), d
27
+ end
28
+ end
29
+ else
30
+ selectedDf = df.first
31
+ end
32
+
33
+ selectedDf
34
+
35
+ end
36
+
37
+ def build_image_if_not_exist(name, &block)
38
+
39
+ raise DockerImageBuildFailed, "block is required" if not block
40
+
41
+ if is_empty?(name)
42
+ reuse = false
43
+ loop do
44
+ name = block.call(:new_image_name)
45
+ break if not is_image_existed?(name)
46
+ reuse, name = block.call(:image_exist, name)
47
+ break if reuse
48
+ end
49
+
50
+ if reuse
51
+
52
+ else
53
+ dockerfile = load_dockerfile(Dir.getwd)
54
+ build_docker_image(name, dockerfile: dockerfile)
55
+ end
56
+
57
+ else
58
+
59
+ if not is_image_existed?(name)
60
+ dockerfile = load_dockerfile(Dir.getwd)
61
+ build_docker_image(name, dockerfile: dockerfile)
62
+ end
63
+
64
+ end
65
+
66
+ name
67
+
68
+ end
69
+
70
+ #def new_image(config, selectedDf)
71
+
72
+ # if not_empty?(selectedDf)
73
+ # imageName = cli.ask("Please provide an image name : ", required: true)
74
+ # res = dcFact.find_image(imageName).run
75
+ # if not res[:result].failed? and not_empty?(res[:outStream])
76
+ # reuse = cli.yes?("Image named '#{imageName}' already exist. Use the existing image? ")
77
+ # if reuse
78
+ # config.image_name = imageName
79
+ # else
80
+ # keep = cli.no?("Remove existing image and create a new image? ")
81
+ # if not keep
82
+ # res = dcFact.delete_image(imageName).run
83
+ # if not res[:result].failed?
84
+ # puts "Existing image with name '#{imageName}' removed."
85
+ # res = dcFact.build_image(imageName, dockerfile: selectedDf).run
86
+ # if not res[:result].failed?
87
+ # config.image_name = imageName
88
+ # else
89
+ # raise DockerImageBuildFailed, "Error while building image '#{imageName}'. Error stream : #{res[:errStream].join(" ")}"
90
+ # end
91
+
92
+ # else
93
+ # raise DockerImageDeleteFailed, "Error while deleting image '#{imageName}'. Error stream : #{res[:errStream].join(" ")}"
94
+ # end
95
+
96
+ # else
97
+ # # user select not to use existing and keep the existing image...
98
+ # # nothing can be done then right?
99
+ # raise Dockerun::Error, "Alreay has existing image with name '#{imageName}' but not reusing the image. System cannot proceed. Please either delete or reuse the image"
100
+ # end
101
+ # end # if reuse or not
102
+
103
+ # else
104
+
105
+ # # no existing image
106
+ # res = dcFact.build_image(imageName, dockerfile: selectedDf).run
107
+ # if res[:result].failed?
108
+ # raise DockerImageBuildFailed, "Error building image '#{imageName}' from dockerfile '#{selectedDf}'. Error was : #{res[:errStream].join(" ")}"
109
+ # end
110
+
111
+ # config.image_name = imageName
112
+
113
+ # end # if image found or not
114
+
115
+ # else
116
+ # # no Dockerfile found
117
+ # raise DockerfileNotExist, "No Dockerfile given. Please make sure there is one or run init first"
118
+ # end # not_empy? selectedDf
119
+
120
+
121
+ #end
122
+
123
+ #def build_image(imageName, selectedDf)
124
+
125
+ # raise DockerImageBuildFailed, "Image name cannot be empty" if is_empty?(imageName)
126
+
127
+ # res = dcFact.find_image(imageName).run
128
+ # if not res[:result].failed? and is_empty?(res[:outStream])
129
+ # # image does not exist
130
+ # res = dcFact.build_image(imageName, dockerfile: selectedDf).run
131
+ # if res[:result].failed?
132
+ # raise DockerImageBuildFailed, "Building image '#{config.image_name}' failed. Error stream : #{res[:errStream].join(" ")}"
133
+ # end
134
+ # end
135
+
136
+ #end
137
+
138
+ private
139
+ def is_image_existed?(name)
140
+ if is_empty?(name)
141
+ false
142
+ else
143
+ res = dcFact.find_image(name).run
144
+ if not res.failed? and res.is_out_stream_empty?
145
+ false
146
+ else
147
+ true
148
+ end
149
+ end
150
+ end
151
+
152
+ def delete_docker_image(name)
153
+ if not_empty?(name)
154
+ res = dcFact.delete_image(name).run
155
+ not res.failed?
156
+ else
157
+ true
158
+ end
159
+ end
160
+
161
+ def build_docker_image(name, opts = { })
162
+ raise DockerImageBuildFailed, "Given name to build docker image is empty" if is_empty?(name)
163
+
164
+ res = dcFact.build_image(name, opts).run
165
+ if res.failed?
166
+ raise DockerImageBuildFailed, "Building image '#{name}' failed. Error stream : #{res.err_stream}"
167
+ end
168
+
169
+ end
170
+
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,14 @@
1
+
2
+ require_relative 'template_writer'
3
+
4
+ module Dockerun
5
+ module Template
6
+ class GeneratlTemplateWriter < TemplateWriter
7
+
8
+ def initialize
9
+ super
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+
2
+ require_relative 'template_writer'
3
+
4
+ module Dockerun
5
+ module Template
6
+ class JrubyTemplateWriter < TemplateWriter
7
+
8
+ def initialize
9
+ super
10
+ end
11
+
12
+ alias_method :find_template, :find_template_super
13
+ def find_template
14
+ case @template
15
+ when "jruby-9.4.0-jdk11"
16
+ @image = "jruby:9.4.0-jdk11"
17
+ end
18
+
19
+ find_template_super
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+
2
+
3
+ module Dockerun
4
+ module Template
5
+ class TemplateEngine
6
+
7
+ def self.template_root
8
+ File.join(File.dirname(__FILE__),"..","..","..","template")
9
+ end
10
+
11
+ def self.available_templates
12
+ avail = Dir.glob(File.join(template_root,"Dockerfile_*.erb"))
13
+ avail.map! { |f|
14
+ name = File.basename(f,".erb")
15
+ name.gsub("Dockerfile_","")
16
+ }
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,63 @@
1
+
2
+ require 'erb'
3
+
4
+ require_relative '../user_info'
5
+
6
+ module Dockerun
7
+ module Template
8
+
9
+ class TemplateWriter
10
+ include UserInfo
11
+
12
+ class TemplateNotFound < StandardError; end
13
+
14
+ attr_accessor :image, :user_group_id, :user_group_name, :user_id, :user_login
15
+
16
+ def self.instance(template)
17
+ tmp = template.to_s.downcase
18
+ if tmp =~ /jruby/
19
+ JrubyTemplateWriter.new
20
+ else
21
+ TemplateWriter.new
22
+ end
23
+ end
24
+
25
+ def initialize(template = :general)
26
+ @template = template
27
+ @image = "<Replace me>"
28
+ user = user_info
29
+ group = group_info
30
+ @maintainer = user[:login]
31
+ @user_group_id = group[:group_id]
32
+ @user_group_name = group[:group_name]
33
+ @user_id = user[:user_id]
34
+ @user_login = user[:login]
35
+ end
36
+
37
+ def compile(&block)
38
+ tmp = find_template
39
+ cont = nil
40
+ File.open(tmp,"r") do |f|
41
+ cont = f.read
42
+ end
43
+
44
+ b = binding
45
+
46
+ res = ERB.new(cont)
47
+ res.result(b)
48
+ end
49
+
50
+ protected
51
+ def find_template
52
+ @template = :general if is_empty?(@template)
53
+
54
+ root = TemplateEngine.template_root
55
+ templateFile = File.join(root,"Dockerfile_#{@template}.erb")
56
+ raise TemplateNotFound, "Given template '#{@template}' could not be found" if not File.exist?(templateFile)
57
+
58
+ templateFile
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,58 @@
1
+
2
+ require 'erb'
3
+
4
+ require_relative '../user_info'
5
+
6
+ module Dockerun
7
+ module Template
8
+
9
+ class TemplateWritter
10
+ include UserInfo
11
+
12
+ class TemplateNotFound < StandardError; end
13
+
14
+ attr_accessor :image, :user_group_id, :user_group_name, :user_id, :user_login
15
+
16
+ def self.instance(template)
17
+
18
+ end
19
+
20
+ def initialize(template = :general)
21
+ @template = template
22
+ @image = "<Replace me>"
23
+ user = user_info
24
+ group = group_info
25
+ @maintainer = user[:login]
26
+ @user_group_id = group[:group_id]
27
+ @user_group_name = group[:group_name]
28
+ @user_id = user[:user_id]
29
+ @user_login = user[:login]
30
+ end
31
+
32
+ def compile(&block)
33
+ tmp = find_template
34
+ cont = nil
35
+ File.open(tmp,"r") do |f|
36
+ cont = f.read
37
+ end
38
+
39
+ b = binding
40
+
41
+ res = ERB.new(cont)
42
+ res.result(b)
43
+ end
44
+
45
+ private
46
+ def find_template
47
+ @template = :general if is_empty?(@template)
48
+
49
+ root = TemplateEngine.template_root
50
+ templateFile = File.join(root,"Dockerfile_#{@template}.erb")
51
+ raise TemplateNotFound, "Given template '#{@template}' could not be found" if not File.exist?(templateFile)
52
+
53
+ templateFile
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,14 @@
1
+
2
+
3
+ module Dockerun
4
+ module Template
5
+ class TemplateEngine
6
+
7
+ def self.available_templates
8
+ path = File.join(File.dirname(__FILE__),"..","..","..","template")
9
+
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,37 @@
1
+
2
+ require 'etc'
3
+
4
+ module Dockerun
5
+
6
+ module UserInfo
7
+ include TR::CondUtils
8
+
9
+ def user_info(login = nil)
10
+ login = Etc.getlogin if is_empty?(login)
11
+ res = { login: login }
12
+ begin
13
+ res[:user_id] = Etc.getpwnam(login).uid
14
+ rescue Exception => ex
15
+ res[:user_id] = nil
16
+ end
17
+ res
18
+ end
19
+
20
+ def group_info(login = nil)
21
+ login = Etc.getlogin if is_empty?(login)
22
+ res = { }
23
+ begin
24
+ gnm = Etc.getgrnam(login)
25
+ res[:group_name] = gnm.name
26
+ res[:group_id] = gnm.gid
27
+ rescue Exception => ex
28
+ p ex
29
+ res[:group_name] = ""
30
+ res[:group_id] = nil
31
+ end
32
+ res
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dockerun
4
+ VERSION = "0.1.14"
5
+ end
data/lib/dockerun.rb ADDED
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'toolrack'
4
+ require 'teLogger'
5
+
6
+ require_relative "dockerun/version"
7
+
8
+ require_relative 'dockerun/command/dockerun'
9
+ require_relative 'dockerun/command/init'
10
+ require_relative 'dockerun/command/run'
11
+ require_relative 'dockerun/command/reset_image'
12
+ require_relative 'dockerun/command/run_new_container'
13
+ require_relative 'dockerun/command/remove_container'
14
+ require_relative 'dockerun/command/run_new_image'
15
+
16
+ require_relative 'dockerun/template/template_writer'
17
+ require_relative 'dockerun/template/template_engine'
18
+
19
+ module Dockerun
20
+ class Error < StandardError; end
21
+ # Your code goes here...
22
+ end
@@ -0,0 +1,12 @@
1
+
2
+ FROM <%= image %>
3
+ LABEL version="0.1" description="Dockerfile generated by dockerun" maintainer="<%= @maintainer %>"
4
+
5
+ # Dockerfile entries here
6
+
7
+ RUN groupadd -f -g <%= @user_group_id %> <%= @user_group_name %> && useradd -u <%= @user_id %> -g <%= @user_group_id %> -m <%= @user_login %>
8
+ USER <%= @user_login %>:<%= @user_group_name %>
9
+
10
+ # ENTRYPOINT [ "/bin/bash" ]
11
+ # CMD [ "/bin/bash", "--login" ]
12
+ CMD [ "/bin/bash", "--login" ]
@@ -0,0 +1,21 @@
1
+
2
+ FROM jruby:9.4.0-jdk11
3
+ LABEL version="0.1" description="Dockerfile generated by dockerun" maintainer="<%= @maintainer %>"
4
+
5
+ RUN apt-get update && apt-get install -y sudo
6
+
7
+ RUN groupadd -f -g <%= @user_group_id %> <%= @user_group_name %> && \
8
+ useradd -u <%= @user_id %> -g <%= @user_group_id %> -m <%= @user_login %> && \
9
+ usermod -aG sudo <%= @user_login %> && \
10
+ echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
11
+
12
+ USER <%= @user_login %>
13
+
14
+ # from this point onwards, sudo is required for privileaged operation
15
+ RUN sudo apt-get install -y curl
16
+
17
+ # other Dockerfile entries starts here
18
+
19
+ # ENTRYPOINT [ "/bin/bash" ]
20
+ # CMD [ "/bin/bash", "--login" ]
21
+ CMD [ "/bin/bash", "--login" ]
metadata ADDED
@@ -0,0 +1,161 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dockerun
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.14
5
+ platform: ruby
6
+ authors:
7
+ - Ian
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-12-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: toolrack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.19.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.19.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: teLogger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: tty-command
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.10.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.10.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: tty-option
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: docker-cli
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'
83
+ - !ruby/object:Gem::Dependency
84
+ name: devops_assist
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: ''
98
+ email:
99
+ - cameronian0@protonmail.com
100
+ executables:
101
+ - dockerun
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".release_history.yml"
106
+ - ".rspec"
107
+ - Dockerfile.dockerun
108
+ - Gemfile
109
+ - Gemfile.lock
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - dockerun.gemspec
115
+ - exe/dockerun
116
+ - lib/dockerun.rb
117
+ - lib/dockerun/cli_prompt.rb
118
+ - lib/dockerun/command/dockerun.rb
119
+ - lib/dockerun/command/init.rb
120
+ - lib/dockerun/command/remove_container.rb
121
+ - lib/dockerun/command/reset_image.rb
122
+ - lib/dockerun/command/run.rb
123
+ - lib/dockerun/command/run_new_container.rb
124
+ - lib/dockerun/command/run_new_image.rb
125
+ - lib/dockerun/config.rb
126
+ - lib/dockerun/docker_command_factory_helper.rb
127
+ - lib/dockerun/docker_container_helper.rb
128
+ - lib/dockerun/docker_image_helper.rb
129
+ - lib/dockerun/template/general_template_writer.rb
130
+ - lib/dockerun/template/jruby_template_writer.rb
131
+ - lib/dockerun/template/template_engine.rb
132
+ - lib/dockerun/template/template_writer.rb
133
+ - lib/dockerun/template/template_writter.rb
134
+ - lib/dockerun/template_engine.rb
135
+ - lib/dockerun/user_info.rb
136
+ - lib/dockerun/version.rb
137
+ - template/Dockerfile_general.erb
138
+ - template/Dockerfile_jruby-9.4.0-jdk11.erb
139
+ homepage: ''
140
+ licenses: []
141
+ metadata: {}
142
+ post_install_message:
143
+ rdoc_options: []
144
+ require_paths:
145
+ - lib
146
+ required_ruby_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: 2.4.0
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ requirements: []
157
+ rubygems_version: 3.2.22
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: ''
161
+ test_files: []