dockdev 0.3.6 → 0.3.7

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: 05b8b561d7174bc96e3ef99252ac1874799d1726a1d5ab86d6bc0c342069563e
4
- data.tar.gz: 80e1d4dd047b75b0e6319137c654cbe03b640b6c94d6c2e497f26b5a8639eb4b
3
+ metadata.gz: f10f5e3e749c0edc610864688598f8f02f658bdf46eb9206ef3df56401afda6b
4
+ data.tar.gz: 962af3ef6fab3e4d0f804ce7fb20a99da4729288d8649e93fe6eba24ffe21b8f
5
5
  SHA512:
6
- metadata.gz: 9fd9d859400523d33ebae4faf46c06d54728f19ca6f76a3d530612259be283f564b285d2d305bd3f70c854df778e15947136d52ff654b82a206131fa15d0ed94
7
- data.tar.gz: 20187c0c9ec2c2dc06d9bad36ca42016f79b86516624fe918597850fb2f11f4eceb0407418e20cf32d12bb81826e275163ad77b32fce914d5caaadee07f99a29
6
+ metadata.gz: a181e0af91cbb7323ba47e7615fd0c521d89330d440baa0e0a0ecb36b995177e31ab1bf91137e049bea367012f0b6377043f05f860dba210daee7eeeabbae24e
7
+ data.tar.gz: 1d5c2dc52c6e91735e076c3f2221838b0bc0e9060e0f292548ec20d3e4ff15f4db77eb40ea747cc71bfcf195b811fb756cac163db39c6b9066e6e646e659f89a
data/lib/dockdev/image.rb CHANGED
@@ -1,6 +1,10 @@
1
1
 
2
2
  require 'docker/cli'
3
3
 
4
+ require 'securerandom'
5
+
6
+ require_relative 'user_info'
7
+
4
8
  module Dockdev
5
9
  class Image
6
10
  include TR::CondUtils
@@ -20,22 +24,39 @@ module Dockdev
20
24
  end
21
25
 
22
26
  def new_container(cont_name, opts = {})
27
+
23
28
  optss = {
24
29
  interactive: true,
25
30
  tty: true,
26
- container_name: cont_name
31
+ container_name: cont_name,
32
+ match_user: TR::RTUtils.on_linux?
27
33
  }
28
34
  optss.merge!(opts)
35
+
29
36
  @cmd_fact.create_container_from_image(@image_name, optss).run
37
+
30
38
  end
31
39
 
32
40
  def build(dockerfile, opts = {})
41
+
42
+ dockerfilePath = dockerfile
43
+ if is_transfer_user?(opts)
44
+ cont = append_transfer_user_in_dockerfile(dockerfile)
45
+ dockerfilePath = generated_dockerfile
46
+ File.open(dockerfilePath, "w") do |f|
47
+ f.write cont
48
+ end
49
+ end
50
+
33
51
  optss = {
34
52
  context_root: opts[:root],
35
- dockerfile: dockerfile
53
+ dockerfile: dockerfilePath
36
54
  }
37
55
  optss.merge!(opts)
38
56
  @cmd_fact.build_image(@image_name, optss).run
57
+
58
+ FileUtils.rm(generated_dockerfile) if File.exist?(generated_dockerfile) and not is_keep_generated_dockerfile?
59
+
39
60
  end
40
61
 
41
62
  def destroy
@@ -47,5 +68,67 @@ module Dockdev
47
68
  end
48
69
  end
49
70
 
71
+
72
+ private
73
+ def logger
74
+ Dockdev.logger(:dockdev_image)
75
+ end
76
+
77
+ def is_keep_generated_dockerfile?
78
+ v = ENV["DOCKDEV_KEEP_GENERATED_DOCKERFILE"]
79
+ is_empty?(v) ? false : (v.downcase == "true") ? true : false
80
+ end
81
+
82
+ def generated_dockerfile
83
+ "Dockerfile-dockdev"
84
+ end
85
+
86
+ def is_transfer_user?(opts = {})
87
+ if TR::RTUtils.on_linux?
88
+ true
89
+ else
90
+ (opts[:match_user].nil? || not_bool?(opts[:match_user])) ? false : opts[:match_user]
91
+ end
92
+ end
93
+
94
+ def append_transfer_user_in_dockerfile(file)
95
+ if File.exist?(file)
96
+ logger.debug "Append transfer user in dockerfile '#{file}'"
97
+ res = []
98
+ cont = File.read(file)
99
+ indx = cont =~ /CMD/
100
+ if indx != nil
101
+
102
+ res << cont[0...indx]
103
+ res << transfer_user_command
104
+ res << cont[indx..-1]
105
+
106
+ else
107
+
108
+ res << cont
109
+ res << transfer_user_command
110
+
111
+ end
112
+
113
+ res.join
114
+
115
+ else
116
+ ""
117
+ end
118
+ end
119
+
120
+ def transfer_user_command
121
+
122
+ ui = UserInfo.user_info
123
+ gi = UserInfo.group_info
124
+
125
+ res = []
126
+ res << "RUN apt-get update && apt-get install -y sudo"
127
+ res << "RUN groupadd -f -g #{gi[:gid]} #{gi[:group_name]} && useradd -u #{ui[:uid]} -g #{gi[:gid]} -m #{ui[:login]} && usermod -aG sudo #{ui[:login]} && echo '#{ui[:login]} ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers"
128
+ res << "USER #{ui[:login]}"
129
+ res.join("\n")
130
+
131
+ end
132
+
50
133
  end
51
134
  end
@@ -0,0 +1,36 @@
1
+
2
+ require 'etc'
3
+
4
+ module Dockdev
5
+ module UserInfo
6
+ include TR::CondUtils
7
+
8
+ def self.user_info(login = nil)
9
+ login = Etc.getlogin if is_empty?(login)
10
+ res = { login: login }
11
+ begin
12
+ res[:uid] = Etc.getpwnam(login).uid
13
+ rescue Exception => ex
14
+ res[:uid] = nil
15
+ end
16
+ res
17
+ end
18
+
19
+ def self.group_info(login = nil)
20
+ login = Etc.getlogin if is_empty?(login)
21
+ res = { }
22
+ begin
23
+ gnm = Etc.getgrnam(login)
24
+ res[:group_name] = gnm.name
25
+ res[:gid] = gnm.gid
26
+ rescue Exception => ex
27
+ p ex
28
+ res[:group_name] = ""
29
+ res[:gid] = nil
30
+ end
31
+ res
32
+ end
33
+
34
+ end
35
+ end
36
+
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dockdev
4
- VERSION = "0.3.6"
4
+ VERSION = "0.3.7"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockdev
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-31 00:00:00.000000000 Z
11
+ date: 2024-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: teLogger
@@ -129,13 +129,14 @@ files:
129
129
  - lib/dockdev/context/docker-compose.rb
130
130
  - lib/dockdev/context/rubygems.rb
131
131
  - lib/dockdev/image.rb
132
+ - lib/dockdev/user_info.rb
132
133
  - lib/dockdev/version.rb
133
134
  - lib/dockdev/workspace.rb
134
135
  - sig/dockdev.rbs
135
136
  homepage: ''
136
137
  licenses: []
137
138
  metadata: {}
138
- post_install_message:
139
+ post_install_message:
139
140
  rdoc_options: []
140
141
  require_paths:
141
142
  - lib
@@ -150,8 +151,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
151
  - !ruby/object:Gem::Version
151
152
  version: '0'
152
153
  requirements: []
153
- rubygems_version: 3.5.1
154
- signing_key:
154
+ rubygems_version: 3.5.3
155
+ signing_key:
155
156
  specification_version: 4
156
157
  summary: ''
157
158
  test_files: []