kuby-core 0.7.2 → 0.8.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/kuby-core.gemspec +5 -3
  4. data/lib/kuby.rb +5 -3
  5. data/lib/kuby/definition.rb +0 -8
  6. data/lib/kuby/docker/layer.rb +4 -4
  7. data/lib/kuby/docker/metadata.rb +6 -6
  8. data/lib/kuby/docker/package_phase.rb +2 -2
  9. data/lib/kuby/docker/spec.rb +11 -11
  10. data/lib/kuby/environment.rb +6 -2
  11. data/lib/kuby/kubernetes.rb +0 -2
  12. data/lib/kuby/kubernetes/deploy_task.rb +0 -1
  13. data/lib/kuby/kubernetes/deployer.rb +7 -7
  14. data/lib/kuby/kubernetes/minikube_provider.rb +4 -0
  15. data/lib/kuby/kubernetes/provider.rb +5 -5
  16. data/lib/kuby/kubernetes/spec.rb +8 -8
  17. data/lib/kuby/plugin.rb +59 -0
  18. data/lib/kuby/plugins.rb +6 -0
  19. data/lib/kuby/plugins/nginx_ingress.rb +71 -0
  20. data/lib/kuby/plugins/rails_app.rb +18 -0
  21. data/lib/kuby/plugins/rails_app/asset_copy_task.rb +117 -0
  22. data/lib/kuby/plugins/rails_app/assets.rb +347 -0
  23. data/lib/kuby/plugins/rails_app/database.rb +75 -0
  24. data/lib/kuby/{kubernetes/plugins → plugins}/rails_app/generators/kuby.rb +0 -0
  25. data/lib/kuby/plugins/rails_app/mysql.rb +155 -0
  26. data/lib/kuby/plugins/rails_app/plugin.rb +398 -0
  27. data/lib/kuby/plugins/rails_app/postgres.rb +143 -0
  28. data/lib/kuby/plugins/rails_app/rewrite_db_config.rb +11 -0
  29. data/lib/kuby/plugins/rails_app/sqlite.rb +32 -0
  30. data/lib/kuby/{kubernetes/plugins → plugins}/rails_app/tasks.rake +10 -2
  31. data/lib/kuby/tasks.rb +9 -9
  32. data/lib/kuby/tasks/kuby.rake +1 -1
  33. data/lib/kuby/version.rb +1 -1
  34. metadata +34 -27
  35. data/lib/ext/krane/kubernetes_resource.rb +0 -16
  36. data/lib/kuby/kubernetes/plugin.rb +0 -55
  37. data/lib/kuby/kubernetes/plugins.rb +0 -8
  38. data/lib/kuby/kubernetes/plugins/nginx_ingress.rb +0 -73
  39. data/lib/kuby/kubernetes/plugins/rails_app.rb +0 -16
  40. data/lib/kuby/kubernetes/plugins/rails_app/database.rb +0 -79
  41. data/lib/kuby/kubernetes/plugins/rails_app/mysql.rb +0 -154
  42. data/lib/kuby/kubernetes/plugins/rails_app/plugin.rb +0 -379
  43. data/lib/kuby/kubernetes/plugins/rails_app/postgres.rb +0 -142
  44. data/lib/kuby/kubernetes/plugins/rails_app/rewrite_db_config.rb +0 -13
  45. data/lib/kuby/kubernetes/plugins/rails_app/sqlite.rb +0 -30
@@ -0,0 +1,143 @@
1
+ require 'kube-dsl'
2
+ require 'kuby/kube-db'
3
+
4
+ module Kuby
5
+ module Plugins
6
+ module RailsApp
7
+ class Postgres < ::Kuby::Plugin
8
+ ROLE = 'web'.freeze
9
+
10
+ attr_reader :environment, :configs
11
+
12
+ def initialize(environment, configs)
13
+ @environment = environment
14
+ @configs = configs
15
+
16
+ user(config['username'])
17
+ password(config['password'])
18
+ end
19
+
20
+ def name
21
+ :postgres
22
+ end
23
+
24
+ def resources
25
+ @resources ||= [secret, database]
26
+ end
27
+
28
+ def after_configuration
29
+ environment.docker.package_phase.add(:postgres_dev)
30
+ environment.docker.package_phase.add(:postgres_client)
31
+ end
32
+
33
+ def host
34
+ # host is the same as the name thanks to k8s DNS
35
+ @host ||= database.metadata.name
36
+ end
37
+
38
+ def rewritten_configs
39
+ # deep dup
40
+ @rewritten_configs ||= Marshal.load(Marshal.dump(configs)).tap do |new_configs|
41
+ new_configs[environment.name]['host'] = host
42
+ end
43
+ end
44
+
45
+ def user(user)
46
+ secret do
47
+ data do
48
+ set :POSTGRES_USER, user
49
+ end
50
+ end
51
+ end
52
+
53
+ def password(password)
54
+ secret do
55
+ data do
56
+ set :POSTGRES_PASSWORD, password
57
+ end
58
+ end
59
+ end
60
+
61
+ def secret(&block)
62
+ context = self
63
+
64
+ @secret ||= KubeDSL.secret do
65
+ metadata do
66
+ name "#{context.base_name}-postgres-secret"
67
+ namespace context.kubernetes.namespace.metadata.name
68
+ end
69
+
70
+ type 'Opaque'
71
+ end
72
+
73
+ @secret.instance_eval(&block) if block
74
+ @secret
75
+ end
76
+
77
+ def database(&block)
78
+ context = self
79
+
80
+ @database ||= Kuby::KubeDB.postgres do
81
+ api_version 'kubedb.com/v1alpha1'
82
+
83
+ metadata do
84
+ name "#{context.base_name}-postgres"
85
+ namespace context.kubernetes.namespace.metadata.name
86
+ end
87
+
88
+ spec do
89
+ database_secret do
90
+ secret_name context.secret.metadata.name
91
+ end
92
+
93
+ version '11.2'
94
+ standby_mode 'Hot'
95
+ streaming_mode 'asynchronous'
96
+ storage_type 'Durable'
97
+
98
+ storage do
99
+ storage_class_name context.kubernetes.provider.storage_class_name
100
+ access_modes ['ReadWriteOnce']
101
+
102
+ resources do
103
+ requests do
104
+ add :storage, '10Gi'
105
+ end
106
+ end
107
+ end
108
+
109
+ termination_policy 'DoNotTerminate'
110
+ end
111
+ end
112
+
113
+ @database.instance_eval(&block) if block
114
+ @database
115
+ end
116
+
117
+ def base_name
118
+ @base_name ||= "#{kubernetes.selector_app}-#{ROLE}"
119
+ end
120
+
121
+ def kubernetes
122
+ environment.kubernetes
123
+ end
124
+
125
+ private
126
+
127
+ def config
128
+ configs[environment.name]
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+ Kuby.register_package(:postgres_dev,
136
+ debian: 'postgresql-client',
137
+ alpine: 'postgresql-dev'
138
+ )
139
+
140
+ Kuby.register_package(:postgres_client,
141
+ debian: 'postgresql-client',
142
+ alpine: 'postgresql-client'
143
+ )
@@ -0,0 +1,11 @@
1
+ module Kuby
2
+ module Plugins
3
+ module RailsApp
4
+ class RewriteDbConfig
5
+ def apply_to(dockerfile)
6
+ dockerfile.run('bundle exec rake kuby:rails_app:db:rewrite_config')
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ module Kuby
2
+ module Plugins
3
+ module RailsApp
4
+ class Sqlite < ::Kuby::Plugin
5
+ attr_reader :environment
6
+
7
+ def initialize(environment, *)
8
+ @environment = environment
9
+ end
10
+
11
+ def after_configuration
12
+ environment.docker.package_phase.add(:sqlite_dev)
13
+ environment.docker.package_phase.add(:sqlite_client)
14
+ end
15
+
16
+ def name
17
+ :sqlite
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ Kuby.register_package(:sqlite_dev,
25
+ debian: 'libsqlite3-dev',
26
+ alpine: 'sqlite-dev'
27
+ )
28
+
29
+ Kuby.register_package(:sqlite_client,
30
+ debian: 'sqlite3',
31
+ alpine: 'sqlite'
32
+ )
@@ -6,8 +6,8 @@ namespace :kuby do
6
6
  task :rewrite_config do
7
7
  Kuby.load!
8
8
 
9
- config_file = File.join(Kuby.definition.kubernetes.plugin(:rails_app).root, 'config', 'database.yml')
10
- database = Kuby.definition.kubernetes.plugin(:rails_app).database
9
+ config_file = File.join(Kuby.environment.kubernetes.plugin(:rails_app).root, 'config', 'database.yml')
10
+ database = Kuby.environment.kubernetes.plugin(:rails_app).database
11
11
 
12
12
  if database.respond_to?(:rewritten_configs)
13
13
  File.write(config_file, YAML.dump(database.rewritten_configs))
@@ -24,5 +24,13 @@ namespace :kuby do
24
24
  end
25
25
  end
26
26
  end
27
+
28
+ namespace :assets do
29
+ task :copy do
30
+ Kuby.load!
31
+ assets = Kuby.environment.kubernetes.plugin(:rails_assets)
32
+ assets.copy_task.run
33
+ end
34
+ end
27
35
  end
28
36
  end
@@ -2,22 +2,22 @@ require 'rouge'
2
2
 
3
3
  module Kuby
4
4
  class Tasks
5
- attr_reader :definition
5
+ attr_reader :environment
6
6
 
7
- def initialize(definition)
8
- @definition = definition
7
+ def initialize(environment)
8
+ @environment = environment
9
9
  end
10
10
 
11
11
  def print_dockerfile
12
12
  theme = Rouge::Themes::Base16::Solarized.new
13
13
  formatter = Rouge::Formatters::Terminal256.new(theme)
14
14
  lexer = Rouge::Lexers::Docker.new
15
- tokens = lexer.lex(Kuby.definition.docker.to_dockerfile.to_s)
15
+ tokens = lexer.lex(Kuby.environment.docker.to_dockerfile.to_s)
16
16
  puts formatter.format(tokens)
17
17
  end
18
18
 
19
19
  def setup
20
- definition.kubernetes.setup
20
+ environment.kubernetes.setup
21
21
  end
22
22
 
23
23
  def build
@@ -73,11 +73,11 @@ module Kuby
73
73
  end
74
74
 
75
75
  def deploy
76
- definition.kubernetes.deploy
76
+ environment.kubernetes.deploy
77
77
  end
78
78
 
79
79
  def rollback
80
- definition.kubernetes.rollback
80
+ environment.kubernetes.rollback
81
81
  end
82
82
 
83
83
  def print_resources
@@ -162,11 +162,11 @@ module Kuby
162
162
  end
163
163
 
164
164
  def kubernetes
165
- Kuby.definition.kubernetes
165
+ Kuby.environment.kubernetes
166
166
  end
167
167
 
168
168
  def docker
169
- Kuby.definition.docker
169
+ Kuby.environment.docker
170
170
  end
171
171
  end
172
172
  end
@@ -3,7 +3,7 @@ require 'shellwords'
3
3
  namespace :kuby do
4
4
  def tasks
5
5
  Kuby.load!
6
- @tasks ||= Kuby::Tasks.new(Kuby.definition)
6
+ @tasks ||= Kuby::Tasks.new(Kuby.environment)
7
7
  end
8
8
 
9
9
  task :dockerfile do
@@ -1,3 +1,3 @@
1
1
  module Kuby
2
- VERSION = '0.7.2'
2
+ VERSION = '0.8.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kuby-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-20 00:00:00.000000000 Z
11
+ date: 2020-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -42,30 +42,36 @@ dependencies:
42
42
  name: krane
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.4
48
+ - - "<"
46
49
  - !ruby/object:Gem::Version
47
- version: '1.0'
50
+ version: '2.0'
48
51
  type: :runtime
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
- - - "~>"
55
+ - - ">="
53
56
  - !ruby/object:Gem::Version
54
- version: '1.0'
57
+ version: 1.1.4
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: kuby-cert-manager
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - "~>"
65
+ - - ">="
60
66
  - !ruby/object:Gem::Version
61
- version: '0.2'
67
+ version: '0.3'
62
68
  type: :runtime
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - "~>"
72
+ - - ">="
67
73
  - !ruby/object:Gem::Version
68
- version: '0.2'
74
+ version: '0.3'
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: kube-dsl
71
77
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +90,16 @@ dependencies:
84
90
  name: kuby-kube-db
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
- - - "~>"
93
+ - - ">="
88
94
  - !ruby/object:Gem::Version
89
- version: '0.4'
95
+ version: '0.5'
90
96
  type: :runtime
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
- - - "~>"
100
+ - - ">="
95
101
  - !ruby/object:Gem::Version
96
- version: '0.4'
102
+ version: '0.5'
97
103
  - !ruby/object:Gem::Dependency
98
104
  name: kubernetes-cli
99
105
  requirement: !ruby/object:Gem::Requirement
@@ -163,7 +169,6 @@ files:
163
169
  - README.md
164
170
  - Rakefile
165
171
  - kuby-core.gemspec
166
- - lib/ext/krane/kubernetes_resource.rb
167
172
  - lib/kuby.rb
168
173
  - lib/kuby/basic_logger.rb
169
174
  - lib/kuby/cli_base.rb
@@ -206,23 +211,25 @@ files:
206
211
  - lib/kuby/kubernetes/errors.rb
207
212
  - lib/kuby/kubernetes/manifest.rb
208
213
  - lib/kuby/kubernetes/minikube_provider.rb
209
- - lib/kuby/kubernetes/plugin.rb
210
- - lib/kuby/kubernetes/plugins.rb
211
- - lib/kuby/kubernetes/plugins/nginx_ingress.rb
212
- - lib/kuby/kubernetes/plugins/rails_app.rb
213
- - lib/kuby/kubernetes/plugins/rails_app/database.rb
214
- - lib/kuby/kubernetes/plugins/rails_app/generators/kuby.rb
215
- - lib/kuby/kubernetes/plugins/rails_app/mysql.rb
216
- - lib/kuby/kubernetes/plugins/rails_app/plugin.rb
217
- - lib/kuby/kubernetes/plugins/rails_app/postgres.rb
218
- - lib/kuby/kubernetes/plugins/rails_app/rewrite_db_config.rb
219
- - lib/kuby/kubernetes/plugins/rails_app/sqlite.rb
220
- - lib/kuby/kubernetes/plugins/rails_app/tasks.rake
221
214
  - lib/kuby/kubernetes/provider.rb
222
215
  - lib/kuby/kubernetes/registry_secret.rb
223
216
  - lib/kuby/kubernetes/spec.rb
224
217
  - lib/kuby/middleware.rb
225
218
  - lib/kuby/middleware/health_check.rb
219
+ - lib/kuby/plugin.rb
220
+ - lib/kuby/plugins.rb
221
+ - lib/kuby/plugins/nginx_ingress.rb
222
+ - lib/kuby/plugins/rails_app.rb
223
+ - lib/kuby/plugins/rails_app/asset_copy_task.rb
224
+ - lib/kuby/plugins/rails_app/assets.rb
225
+ - lib/kuby/plugins/rails_app/database.rb
226
+ - lib/kuby/plugins/rails_app/generators/kuby.rb
227
+ - lib/kuby/plugins/rails_app/mysql.rb
228
+ - lib/kuby/plugins/rails_app/plugin.rb
229
+ - lib/kuby/plugins/rails_app/postgres.rb
230
+ - lib/kuby/plugins/rails_app/rewrite_db_config.rb
231
+ - lib/kuby/plugins/rails_app/sqlite.rb
232
+ - lib/kuby/plugins/rails_app/tasks.rake
226
233
  - lib/kuby/railtie.rb
227
234
  - lib/kuby/tasks.rb
228
235
  - lib/kuby/tasks/kuby.rake
@@ -1,16 +0,0 @@
1
- require 'krane/kubernetes_resource'
2
-
3
- # See: https://github.com/Shopify/krane/pull/720
4
- module Krane
5
- class KubernetesResource
6
- class << self
7
- def class_for_kind(kind)
8
- if Krane.const_defined?(kind, false)
9
- Krane.const_get(kind, false)
10
- end
11
- rescue NameError
12
- nil
13
- end
14
- end
15
- end
16
- end
@@ -1,55 +0,0 @@
1
- module Kuby
2
- module Kubernetes
3
- class Plugin
4
- attr_reader :definition
5
-
6
- def initialize(definition)
7
- @definition = definition
8
- after_initialize
9
- end
10
-
11
- def configure(&block)
12
- # do nothing by default
13
- end
14
-
15
- def setup
16
- # do nothing by default
17
- end
18
-
19
- def resources
20
- []
21
- end
22
-
23
- # called after all plugins have been configured
24
- def after_configuration
25
- # do nothing by default
26
- end
27
-
28
- # called before any plugins have been setup
29
- def before_setup
30
- # do nothing by default
31
- end
32
-
33
- # called after all plugins have been setup
34
- def after_setup
35
- # do nothing by default
36
- end
37
-
38
- # called before deploying any resources
39
- def before_deploy(manifest)
40
- # do nothing by default
41
- end
42
-
43
- # called after deploying all resources
44
- def after_deploy(manifest)
45
- # do nothing by default
46
- end
47
-
48
- private
49
-
50
- def after_initialize
51
- # override this in derived classes
52
- end
53
- end
54
- end
55
- end