kuby-core 0.11.16 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +35 -0
  3. data/Gemfile +1 -2
  4. data/README.md +2 -1
  5. data/kuby-core.gemspec +1 -1
  6. data/lib/kuby/commands.rb +25 -73
  7. data/lib/kuby/docker/alpine.rb +2 -1
  8. data/lib/kuby/docker/app_image.rb +34 -0
  9. data/lib/kuby/docker/bundler_phase.rb +10 -0
  10. data/lib/kuby/docker/cli.rb +7 -13
  11. data/lib/kuby/docker/docker_uri.rb +50 -9
  12. data/lib/kuby/docker/errors.rb +1 -19
  13. data/lib/kuby/docker/image.rb +142 -0
  14. data/lib/kuby/docker/layer.rb +0 -7
  15. data/lib/kuby/docker/local_tags.rb +9 -10
  16. data/lib/kuby/docker/package_phase.rb +0 -5
  17. data/lib/kuby/docker/packages.rb +1 -0
  18. data/lib/kuby/docker/remote_tags.rb +10 -5
  19. data/lib/kuby/docker/setup_phase.rb +17 -9
  20. data/lib/kuby/docker/spec.rb +38 -62
  21. data/lib/kuby/docker/timestamp_tag.rb +8 -1
  22. data/lib/kuby/docker/timestamped_image.rb +114 -0
  23. data/lib/kuby/docker.rb +27 -25
  24. data/lib/kuby/environment.rb +1 -10
  25. data/lib/kuby/kubernetes/bare_metal_provider.rb +16 -4
  26. data/lib/kuby/kubernetes/deployer.rb +1 -1
  27. data/lib/kuby/kubernetes/docker_desktop_provider.rb +0 -15
  28. data/lib/kuby/kubernetes/spec.rb +21 -17
  29. data/lib/kuby/plugin.rb +2 -2
  30. data/lib/kuby/plugins/rails_app/assets.rb +62 -70
  31. data/lib/kuby/plugins/rails_app/assets_image.rb +57 -0
  32. data/lib/kuby/plugins/rails_app/generators/kuby.rb +31 -9
  33. data/lib/kuby/plugins/rails_app/plugin.rb +53 -236
  34. data/lib/kuby/plugins/rails_app.rb +1 -0
  35. data/lib/kuby/tasks.rb +98 -69
  36. data/lib/kuby/version.rb +1 -1
  37. data/lib/kuby.rb +2 -20
  38. data/spec/docker/spec_spec.rb +21 -118
  39. data/spec/docker/timestamped_image_spec.rb +123 -0
  40. data/spec/spec_helper.rb +10 -11
  41. metadata +10 -14
  42. data/lib/kuby/dev_setup.rb +0 -346
  43. data/lib/kuby/docker/dev_spec.rb +0 -202
  44. data/lib/kuby/docker/metadata.rb +0 -90
  45. data/lib/kuby/docker/tags.rb +0 -92
  46. data/lib/kuby/rails_commands.rb +0 -84
  47. data/spec/docker/metadata_spec.rb +0 -73
  48. data/spec/dummy/Gemfile.lock +0 -223
  49. data/spec/dummy/config/master.key +0 -1
  50. data/spec/dummy/tmp/cache/bootsnap-load-path-cache +0 -0
@@ -8,37 +8,36 @@ module Kuby
8
8
  sig { returns CLI }
9
9
  attr_reader :cli
10
10
 
11
- sig { returns(Metadata) }
12
- attr_reader :metadata
11
+ sig { returns(String) }
12
+ attr_reader :image_url
13
13
 
14
14
  sig {
15
15
  params(
16
16
  cli: CLI,
17
- metadata: Metadata
17
+ image_url: String
18
18
  )
19
19
  .void
20
20
  }
21
- def initialize(cli, metadata)
21
+ def initialize(cli, image_url)
22
22
  @cli = cli
23
- @metadata = metadata
24
-
23
+ @image_url = image_url
25
24
  @latest_timestamp_tag = T.let(@latest_timestamp_tag, T.nilable(TimestampTag))
26
25
  end
27
26
 
28
27
  sig { returns(T::Array[String]) }
29
28
  def tags
30
- images = cli.images(metadata.image_url)
29
+ images = cli.images(image_url)
31
30
  images.map { |image| T.must(image[:tag]) }
32
31
  end
33
32
 
34
33
  sig { returns(T::Array[String]) }
35
34
  def latest_tags
36
35
  # find "latest" tag
37
- images = cli.images(metadata.image_url)
38
- latest = images.find { |image| image[:tag] == Tags::LATEST }
36
+ images = cli.images(image_url)
37
+ latest = images.find { |image| image[:tag] == Kuby::Docker::LATEST_TAG }
39
38
 
40
39
  unless latest
41
- raise MissingTagError.new(Tags::LATEST)
40
+ raise MissingTagError, "could not find tag #{Kuby::Docker::LATEST_TAG}"
42
41
  end
43
42
 
44
43
  # find all tags that point to the same image as 'latest'
@@ -69,11 +69,6 @@ module Kuby
69
69
  raise MissingPackageError, "package '#{package_name}' hasn't been registered"
70
70
  end
71
71
  end
72
-
73
- sig { returns(Metadata) }
74
- def metadata
75
- environment.docker.metadata
76
- end
77
72
  end
78
73
  end
79
74
  end
@@ -1,4 +1,5 @@
1
1
  # typed: strict
2
+
2
3
  module Kuby
3
4
  module Docker
4
5
  module Packages
@@ -1,5 +1,7 @@
1
1
  # typed: strict
2
2
 
3
+ require 'docker/remote'
4
+
3
5
  module Kuby
4
6
  module Docker
5
7
  class RemoteTags
@@ -8,24 +10,27 @@ module Kuby
8
10
  sig { returns(::Docker::Remote::Client) }
9
11
  attr_reader :remote_client
10
12
 
11
- sig { returns(Metadata) }
12
- attr_reader :metadata
13
+ sig { returns(String) }
14
+ attr_reader :image_url
13
15
 
14
16
  sig {
15
17
  params(
16
18
  remote_client: ::Docker::Remote::Client,
17
- metadata: Metadata
19
+ image_url: String
18
20
  )
19
21
  .void
20
22
  }
21
- def initialize(remote_client, metadata)
23
+ def initialize(remote_client, image_url)
22
24
  @remote_client = remote_client
23
- @metadata = metadata
25
+ @image_url = image_url
24
26
  end
25
27
 
26
28
  sig { returns(T::Array[String]) }
27
29
  def tags
28
30
  remote_client.tags
31
+ rescue ::Docker::Remote::UnknownRepoError
32
+ # this can happen if we've never pushed to the repo before
33
+ []
29
34
  end
30
35
 
31
36
  sig { returns(T::Array[String]) }
@@ -7,9 +7,6 @@ module Kuby
7
7
 
8
8
  DEFAULT_WORKING_DIR = T.let('/usr/src/app'.freeze, String)
9
9
 
10
- sig { returns(T.nilable(String)) }
11
- attr_reader :base_image
12
-
13
10
  sig { params(base_image: String).void }
14
11
  attr_writer :base_image
15
12
 
@@ -25,35 +22,46 @@ module Kuby
25
22
  sig { params(rails_env: String).void }
26
23
  attr_writer :rails_env
27
24
 
28
- sig { params(environment: Environment).void }
29
- def initialize(environment)
30
- super
25
+ sig { returns(T.nilable(Docker::Spec)) }
26
+ attr_reader :docker_spec
27
+
28
+ sig { params(environment: Environment, docker_spec: Docker::Spec).void }
29
+ def initialize(environment, docker_spec)
30
+ super(environment)
31
31
 
32
32
  @base_image = T.let(@base_image, T.nilable(String))
33
33
  @working_dir = T.let(@working_dir, T.nilable(String))
34
34
  @rails_env = T.let(@rails_env, T.nilable(String))
35
+ @docker_spec = T.let(docker_spec, T.nilable(Docker::Spec))
35
36
  end
36
37
 
37
38
  sig { override.params(dockerfile: Dockerfile).void }
38
39
  def apply_to(dockerfile)
39
- dockerfile.from(base_image || default_base_image)
40
+ dockerfile.from(base_image)
40
41
  dockerfile.workdir(working_dir || DEFAULT_WORKING_DIR)
41
42
  dockerfile.env("RAILS_ENV=#{rails_env || Kuby.env}")
42
43
  dockerfile.env("KUBY_ENV=#{Kuby.env}")
43
44
  dockerfile.arg('RAILS_MASTER_KEY')
44
45
  end
45
46
 
47
+ sig { returns(String) }
48
+ def base_image
49
+ @base_image || default_base_image
50
+ end
51
+
46
52
  private
47
53
 
48
54
  sig { returns(String) }
49
55
  def default_base_image
50
- case metadata.distro
56
+ spec = T.must(docker_spec)
57
+
58
+ case spec.distro_name
51
59
  when :debian
52
60
  "ruby:#{RUBY_VERSION}"
53
61
  when :alpine
54
62
  "ruby:#{RUBY_VERSION}-alpine"
55
63
  else
56
- raise MissingDistroError, "distro '#{metadata.distro}' hasn't been registered"
64
+ raise MissingDistroError, "distro '#{spec.distro_name}' hasn't been registered"
57
65
  end
58
66
  end
59
67
  end
@@ -1,15 +1,21 @@
1
1
  # typed: strict
2
2
 
3
- require 'docker/remote'
4
-
5
3
  module Kuby
6
4
  module Docker
7
5
  class Spec
8
6
  extend T::Sig
9
7
 
8
+ DEFAULT_DISTRO = :debian
9
+
10
10
  sig { returns(Environment) }
11
11
  attr_reader :environment
12
12
 
13
+ sig { returns(T.nilable(String)) }
14
+ attr_reader :image_url_str
15
+
16
+ sig { returns(T.nilable(String)) }
17
+ attr_reader :registry_index_url_str
18
+
13
19
  sig { params(environment: Environment).void }
14
20
  def initialize(environment)
15
21
  @environment = environment
@@ -22,13 +28,19 @@ module Kuby
22
28
  @copy_phase = T.let(@copy_phase, T.nilable(CopyPhase))
23
29
  @assets_phase = T.let(@assets_phase, T.nilable(AssetsPhase))
24
30
  @webserver_phase = T.let(@webserver_phase, T.nilable(WebserverPhase))
25
- @metadata = T.let(@metadata, T.nilable(Metadata))
26
31
 
32
+ @distro_name = T.let(@distro_name, T.nilable(Symbol))
27
33
  @distro_spec = T.let(@distro_spec, T.nilable(Distro))
28
- @cli = T.let(@cli, T.nilable(CLI))
29
- @remote_client = T.let(@remote_client, T.nilable(::Docker::Remote::Client))
30
- @tags = T.let(@tags, T.nilable(Tags))
31
34
  @layer_stack = T.let(@layer_stack, T.nilable(Kuby::Docker::LayerStack))
35
+
36
+ @image_url_str = T.let(@image_url_str, T.nilable(String))
37
+ @registry_index_url_str = T.let(@registry_index_url_str, T.nilable(String))
38
+ @image = T.let(@image, T.nilable(Docker::AppImage))
39
+ end
40
+
41
+ sig { returns(Symbol) }
42
+ def distro_name
43
+ @distro_name || DEFAULT_DISTRO
32
44
  end
33
45
 
34
46
  sig { params(image_url: String).void }
@@ -69,7 +81,7 @@ module Kuby
69
81
 
70
82
  sig { params(distro_name: Symbol).void }
71
83
  def distro(distro_name)
72
- metadata.distro = distro_name
84
+ @distro_name = distro_name
73
85
  @distro_spec = nil
74
86
  end
75
87
 
@@ -85,7 +97,12 @@ module Kuby
85
97
 
86
98
  sig { params(url: String).void }
87
99
  def image_url(url)
88
- metadata.image_url = url
100
+ @image_url_str = url
101
+ end
102
+
103
+ sig { params(url: String).void }
104
+ def registry_index_url(url)
105
+ @registry_index_url_str = url
89
106
  end
90
107
 
91
108
  sig {
@@ -132,16 +149,22 @@ module Kuby
132
149
  @credentials
133
150
  end
134
151
 
135
- sig { returns(Dockerfile) }
136
- def to_dockerfile
137
- Dockerfile.new.tap do |df|
138
- layer_stack.each { |layer| layer.apply_to(df) }
152
+ sig { returns(Docker::AppImage) }
153
+ def image
154
+ @image ||= begin
155
+ dockerfile = Dockerfile.new.tap do |df|
156
+ layer_stack.each { |layer| layer.apply_to(df) }
157
+ end
158
+
159
+ Docker::AppImage.new(
160
+ dockerfile, T.must(image_url_str), credentials, registry_index_url_str
161
+ )
139
162
  end
140
163
  end
141
164
 
142
165
  sig { returns(SetupPhase) }
143
166
  def setup_phase
144
- @setup_phase ||= SetupPhase.new(environment)
167
+ @setup_phase ||= SetupPhase.new(environment, self)
145
168
  end
146
169
 
147
170
  sig { returns(PackagePhase) }
@@ -174,62 +197,15 @@ module Kuby
174
197
  @webserver_phase ||= WebserverPhase.new(environment)
175
198
  end
176
199
 
177
- sig { returns(Metadata) }
178
- def metadata
179
- @metadata ||= Metadata.new(environment)
180
- end
181
-
182
- sig { returns(String) }
183
- def tag
184
- t = ENV.fetch('KUBY_DOCKER_TAG') do
185
- tags.latest_timestamp_tag
186
- end
187
-
188
- unless t
189
- raise MissingTagError, 'could not find latest timestamped tag'
190
- end
191
-
192
- t.to_s
193
- end
194
-
195
- sig { params(current_tag: String).returns(String) }
196
- def previous_tag(current_tag)
197
- t = tags.previous_timestamp_tag(current_tag)
198
-
199
- unless t
200
- raise MissingTagError, 'could not find previous timestamped tag'
201
- end
202
-
203
- t.to_s
204
- end
205
-
206
- sig { returns(CLI) }
207
- def cli
208
- @cli ||= Docker::CLI.new
209
- end
210
-
211
- sig { returns(::Docker::Remote::Client) }
212
- def remote_client
213
- @remote_client ||= ::Docker::Remote::Client.new(
214
- metadata.image_host, metadata.image_repo,
215
- credentials.username, credentials.password,
216
- )
217
- end
218
-
219
200
  sig { returns(Distro) }
220
201
  def distro_spec
221
- @distro_spec ||= if distro_klass = Kuby.distros[metadata.distro]
202
+ @distro_spec ||= if distro_klass = Kuby.distros[distro_name]
222
203
  distro_klass.new(self)
223
204
  else
224
- raise MissingDistroError, "distro '#{metadata.distro}' hasn't been registered"
205
+ raise MissingDistroError, "distro '#{distro_name}' hasn't been registered"
225
206
  end
226
207
  end
227
208
 
228
- sig { returns(Tags) }
229
- def tags
230
- @tags ||= Tags.new(cli, remote_client, metadata)
231
- end
232
-
233
209
  private
234
210
 
235
211
  sig { returns(Kuby::Docker::LayerStack) }
@@ -9,8 +9,15 @@ module Kuby
9
9
 
10
10
  FORMAT = T.let('%Y%m%d%H%M%S'.freeze, String)
11
11
 
12
- sig { params(str: String).returns(T.nilable(TimestampTag)) }
12
+ sig { params(str: T.nilable(String)).returns(T.nilable(TimestampTag)) }
13
13
  def self.try_parse(str)
14
+ return nil unless str
15
+
16
+ # The strptime function stops scanning after the pattern has been matched, so
17
+ # we check for all numbers here to prevent things like 20210424165405-assets
18
+ # from being treated as a timestamp tag.
19
+ return nil unless str =~ /\A\d+\z/
20
+
14
21
  time = begin
15
22
  Time.strptime(str, FORMAT)
16
23
  rescue ArgumentError
@@ -0,0 +1,114 @@
1
+ # typed: strict
2
+
3
+ require 'docker/remote'
4
+
5
+ module Kuby
6
+ module Docker
7
+ class TimestampedImage < Image
8
+ extend T::Sig
9
+
10
+ sig {
11
+ params(
12
+ dockerfile: T.any(Dockerfile, T.proc.returns(Dockerfile)),
13
+ image_url: String,
14
+ credentials: Credentials,
15
+ registry_index_url_str: T.nilable(String),
16
+ main_tag: T.nilable(String),
17
+ alias_tags: T::Array[String]
18
+ ).void
19
+ }
20
+ def initialize(dockerfile, image_url, credentials, registry_index_url_str = nil, main_tag = nil, alias_tags = [])
21
+ @new_version = T.let(@new_version, T.nilable(Image))
22
+ @current_version = T.let(@current_version, T.nilable(Image))
23
+ @previous_version = T.let(@previous_version, T.nilable(Image))
24
+
25
+ @remote_client = T.let(@remote_client, T.nilable(::Docker::Remote::Client))
26
+ @local = T.let(@local, T.nilable(LocalTags))
27
+ @remote = T.let(@remote, T.nilable(RemoteTags))
28
+
29
+ super
30
+ end
31
+
32
+ sig { returns(Image) }
33
+ def new_version
34
+ @new_version ||= duplicate_with_tags(
35
+ TimestampTag.new(Time.now).to_s, [Kuby::Docker::LATEST_TAG]
36
+ )
37
+ end
38
+
39
+ sig { returns(Image) }
40
+ def current_version
41
+ @current_version ||= duplicate_with_tags(
42
+ latest_timestamp_tag.to_s, [Kuby::Docker::LATEST_TAG]
43
+ )
44
+ end
45
+
46
+ sig { params(current_tag: T.nilable(String)).returns(Image) }
47
+ def previous_version(current_tag = nil)
48
+ @previous_version ||= duplicate_with_tags(
49
+ previous_timestamp_tag(current_tag).to_s, []
50
+ )
51
+ end
52
+
53
+ sig { params(current_tag: T.nilable(String)).returns(TimestampTag) }
54
+ def previous_timestamp_tag(current_tag = nil)
55
+ current_tag = TimestampTag.try_parse(current_tag || latest_timestamp_tag.to_s)
56
+ raise MissingTagError, 'could not find current timestamp tag' unless current_tag
57
+
58
+ all_tags = timestamp_tags.sort
59
+
60
+ idx = all_tags.index do |tag|
61
+ tag.time == current_tag.time
62
+ end
63
+
64
+ idx ||= 0
65
+ raise MissingTagError, 'could not find previous timestamp tag' unless idx > 0
66
+
67
+ T.must(all_tags[idx - 1])
68
+ end
69
+
70
+ sig { returns(TimestampTag) }
71
+ def latest_timestamp_tag
72
+ tag = timestamp_tags.sort.last
73
+ raise MissingTagError, 'could not find latest timestamp tag' unless tag
74
+ tag
75
+ end
76
+
77
+ sig { params(build_args: T::Hash[String, String], docker_args: T::Array[String]).void }
78
+ def build(build_args = {}, docker_args = [])
79
+ docker_cli.build(new_version, build_args: build_args, docker_args: docker_args)
80
+ @current_version = new_version
81
+ @new_version = nil
82
+ end
83
+
84
+ sig { params(tag: String).void }
85
+ def push(tag)
86
+ docker_cli.push(image_url, tag)
87
+ end
88
+
89
+ private
90
+
91
+ sig { returns(::Docker::Remote::Client) }
92
+ def remote_client
93
+ @remote_client ||= ::Docker::Remote::Client.new(
94
+ registry_index_host, image_repo, credentials.username, credentials.password,
95
+ )
96
+ end
97
+
98
+ sig { returns(T::Array[TimestampTag]) }
99
+ def timestamp_tags
100
+ (local.timestamp_tags + remote.timestamp_tags).uniq
101
+ end
102
+
103
+ sig { returns(LocalTags) }
104
+ def local
105
+ @local ||= LocalTags.new(docker_cli, image_url)
106
+ end
107
+
108
+ sig { returns(RemoteTags) }
109
+ def remote
110
+ @remote ||= RemoteTags.new(remote_client, registry_index_host)
111
+ end
112
+ end
113
+ end
114
+ end
data/lib/kuby/docker.rb CHANGED
@@ -4,30 +4,32 @@ require 'kuby/docker/errors'
4
4
 
5
5
  module Kuby
6
6
  module Docker
7
- autoload :Alpine, 'kuby/docker/alpine'
8
- autoload :AssetsPhase, 'kuby/docker/assets_phase'
9
- autoload :BundlerPhase, 'kuby/docker/bundler_phase'
10
- autoload :CLI, 'kuby/docker/cli'
11
- autoload :CopyPhase, 'kuby/docker/copy_phase'
12
- autoload :Credentials, 'kuby/docker/credentials'
13
- autoload :Debian, 'kuby/docker/debian'
14
- autoload :DevSpec, 'kuby/docker/dev_spec'
15
- autoload :Distro, 'kuby/docker/distro'
16
- autoload :Dockerfile, 'kuby/docker/dockerfile'
17
- autoload :DockerURI, 'kuby/docker/docker_uri'
18
- autoload :InlineLayer, 'kuby/docker/inline_layer'
19
- autoload :Layer, 'kuby/docker/layer'
20
- autoload :LayerStack, 'kuby/docker/layer_stack'
21
- autoload :LocalTags, 'kuby/docker/local_tags'
22
- autoload :Metadata, 'kuby/docker/metadata'
23
- autoload :Packages, 'kuby/docker/packages'
24
- autoload :PackagePhase, 'kuby/docker/package_phase'
25
- autoload :RemoteTags, 'kuby/docker/remote_tags'
26
- autoload :SetupPhase, 'kuby/docker/setup_phase'
27
- autoload :Spec, 'kuby/docker/spec'
28
- autoload :Tags, 'kuby/docker/tags'
29
- autoload :TimestampTag, 'kuby/docker/timestamp_tag'
30
- autoload :WebserverPhase, 'kuby/docker/webserver_phase'
31
- autoload :YarnPhase, 'kuby/docker/yarn_phase'
7
+ LATEST_TAG = T.let('latest'.freeze, String)
8
+
9
+ autoload :Alpine, 'kuby/docker/alpine'
10
+ autoload :AppImage, 'kuby/docker/app_image'
11
+ autoload :AssetsPhase, 'kuby/docker/assets_phase'
12
+ autoload :BundlerPhase, 'kuby/docker/bundler_phase'
13
+ autoload :CLI, 'kuby/docker/cli'
14
+ autoload :CopyPhase, 'kuby/docker/copy_phase'
15
+ autoload :Credentials, 'kuby/docker/credentials'
16
+ autoload :Debian, 'kuby/docker/debian'
17
+ autoload :Distro, 'kuby/docker/distro'
18
+ autoload :Dockerfile, 'kuby/docker/dockerfile'
19
+ autoload :DockerURI, 'kuby/docker/docker_uri'
20
+ autoload :Image, 'kuby/docker/image'
21
+ autoload :InlineLayer, 'kuby/docker/inline_layer'
22
+ autoload :Layer, 'kuby/docker/layer'
23
+ autoload :LayerStack, 'kuby/docker/layer_stack'
24
+ autoload :LocalTags, 'kuby/docker/local_tags'
25
+ autoload :Packages, 'kuby/docker/packages'
26
+ autoload :PackagePhase, 'kuby/docker/package_phase'
27
+ autoload :RemoteTags, 'kuby/docker/remote_tags'
28
+ autoload :SetupPhase, 'kuby/docker/setup_phase'
29
+ autoload :Spec, 'kuby/docker/spec'
30
+ autoload :TimestampedImage, 'kuby/docker/timestamped_image'
31
+ autoload :TimestampTag, 'kuby/docker/timestamp_tag'
32
+ autoload :WebserverPhase, 'kuby/docker/webserver_phase'
33
+ autoload :YarnPhase, 'kuby/docker/yarn_phase'
32
34
  end
33
35
  end
@@ -12,12 +12,7 @@ module Kuby
12
12
  end
13
13
 
14
14
  def docker(&block)
15
- @docker ||= if development?
16
- Docker::DevSpec.new(self)
17
- else
18
- Docker::Spec.new(self)
19
- end
20
-
15
+ @docker ||= Docker::Spec.new(self)
21
16
  @docker.instance_eval(&block) if block
22
17
  @docker
23
18
  end
@@ -31,9 +26,5 @@ module Kuby
31
26
  def app_name
32
27
  definition.app_name
33
28
  end
34
-
35
- def development?
36
- name == 'development'
37
- end
38
29
  end
39
30
  end
@@ -1,10 +1,13 @@
1
- # typed: false
1
+ # typed: strict
2
+
2
3
  require 'kube-dsl'
3
4
 
4
5
  module Kuby
5
6
  module Kubernetes
6
7
  class BareMetalProvider < Provider
7
- STORAGE_CLASS_NAME = 'hostpath'.freeze
8
+ extend T::Sig
9
+
10
+ STORAGE_CLASS_NAME = T.let('hostpath'.freeze, String)
8
11
 
9
12
  class Config
10
13
  extend ::KubeDSL::ValueFields
@@ -12,25 +15,34 @@ module Kuby
12
15
  value_fields :kubeconfig
13
16
  end
14
17
 
18
+ sig { returns(Config) }
15
19
  attr_reader :config
16
20
 
21
+ sig { params(environment: Environment).void }
22
+ def initialize(environment)
23
+ @config = T.let(Config.new, Config)
24
+ super
25
+ end
26
+
27
+ sig { params(block: T.proc.void).void }
17
28
  def configure(&block)
18
29
  config.instance_eval(&block) if block
19
30
  end
20
31
 
32
+ sig { returns(String) }
21
33
  def kubeconfig_path
22
34
  config.kubeconfig
23
35
  end
24
36
 
37
+ sig { returns(String) }
25
38
  def storage_class_name
26
39
  STORAGE_CLASS_NAME
27
40
  end
28
41
 
29
42
  private
30
43
 
44
+ sig { void }
31
45
  def after_initialize
32
- @config = Config.new
33
-
34
46
  configure do
35
47
  # default kubeconfig path
36
48
  kubeconfig File.join(ENV['HOME'], '.kube', 'config')
@@ -102,7 +102,7 @@ module Kuby
102
102
 
103
103
  def restart_rails_deployment_if_necessary
104
104
  deployed_image = nil
105
- current_image = "#{docker.metadata.image_url}:#{docker.tag}"
105
+ current_image = "#{docker.image.image_url}:#{kubernetes.tag}"
106
106
 
107
107
  if rails_app = kubernetes.plugin(:rails_app)
108
108
  deployment_name = rails_app.deployment.metadata.name
@@ -18,21 +18,6 @@ module Kuby
18
18
  config.instance_eval(&block) if block
19
19
  end
20
20
 
21
- def after_configuration
22
- if rails_app = spec.plugin(:rails_app)
23
- # Remove ingress and change service type from ClusterIP to
24
- # LoadBalancer. No need to set up ingress for Docker Desktop
25
- # since it handles all the localhost mapping, etc if you set
26
- # up a service LB.
27
- rails_app.resources.delete(rails_app.ingress)
28
- rails_app.service.spec { type 'LoadBalancer' }
29
- end
30
-
31
- if assets = spec.plugin(:rails_assets)
32
- assets.service.spec { type 'LoadBalancer' }
33
- end
34
- end
35
-
36
21
  def kubeconfig_path
37
22
  config.kubeconfig
38
23
  end