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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/kuby-core.gemspec +5 -3
- data/lib/kuby.rb +5 -3
- data/lib/kuby/definition.rb +0 -8
- data/lib/kuby/docker/layer.rb +4 -4
- data/lib/kuby/docker/metadata.rb +6 -6
- data/lib/kuby/docker/package_phase.rb +2 -2
- data/lib/kuby/docker/spec.rb +11 -11
- data/lib/kuby/environment.rb +6 -2
- data/lib/kuby/kubernetes.rb +0 -2
- data/lib/kuby/kubernetes/deploy_task.rb +0 -1
- data/lib/kuby/kubernetes/deployer.rb +7 -7
- data/lib/kuby/kubernetes/minikube_provider.rb +4 -0
- data/lib/kuby/kubernetes/provider.rb +5 -5
- data/lib/kuby/kubernetes/spec.rb +8 -8
- data/lib/kuby/plugin.rb +59 -0
- data/lib/kuby/plugins.rb +6 -0
- data/lib/kuby/plugins/nginx_ingress.rb +71 -0
- data/lib/kuby/plugins/rails_app.rb +18 -0
- data/lib/kuby/plugins/rails_app/asset_copy_task.rb +117 -0
- data/lib/kuby/plugins/rails_app/assets.rb +347 -0
- data/lib/kuby/plugins/rails_app/database.rb +75 -0
- data/lib/kuby/{kubernetes/plugins → plugins}/rails_app/generators/kuby.rb +0 -0
- data/lib/kuby/plugins/rails_app/mysql.rb +155 -0
- data/lib/kuby/plugins/rails_app/plugin.rb +398 -0
- data/lib/kuby/plugins/rails_app/postgres.rb +143 -0
- data/lib/kuby/plugins/rails_app/rewrite_db_config.rb +11 -0
- data/lib/kuby/plugins/rails_app/sqlite.rb +32 -0
- data/lib/kuby/{kubernetes/plugins → plugins}/rails_app/tasks.rake +10 -2
- data/lib/kuby/tasks.rb +9 -9
- data/lib/kuby/tasks/kuby.rake +1 -1
- data/lib/kuby/version.rb +1 -1
- metadata +34 -27
- data/lib/ext/krane/kubernetes_resource.rb +0 -16
- data/lib/kuby/kubernetes/plugin.rb +0 -55
- data/lib/kuby/kubernetes/plugins.rb +0 -8
- data/lib/kuby/kubernetes/plugins/nginx_ingress.rb +0 -73
- data/lib/kuby/kubernetes/plugins/rails_app.rb +0 -16
- data/lib/kuby/kubernetes/plugins/rails_app/database.rb +0 -79
- data/lib/kuby/kubernetes/plugins/rails_app/mysql.rb +0 -154
- data/lib/kuby/kubernetes/plugins/rails_app/plugin.rb +0 -379
- data/lib/kuby/kubernetes/plugins/rails_app/postgres.rb +0 -142
- data/lib/kuby/kubernetes/plugins/rails_app/rewrite_db_config.rb +0 -13
- 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,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.
|
10
|
-
database = Kuby.
|
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
|
data/lib/kuby/tasks.rb
CHANGED
@@ -2,22 +2,22 @@ require 'rouge'
|
|
2
2
|
|
3
3
|
module Kuby
|
4
4
|
class Tasks
|
5
|
-
attr_reader :
|
5
|
+
attr_reader :environment
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
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.
|
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
|
-
|
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
|
-
|
76
|
+
environment.kubernetes.deploy
|
77
77
|
end
|
78
78
|
|
79
79
|
def rollback
|
80
|
-
|
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.
|
165
|
+
Kuby.environment.kubernetes
|
166
166
|
end
|
167
167
|
|
168
168
|
def docker
|
169
|
-
Kuby.
|
169
|
+
Kuby.environment.docker
|
170
170
|
end
|
171
171
|
end
|
172
172
|
end
|
data/lib/kuby/tasks/kuby.rake
CHANGED
data/lib/kuby/version.rb
CHANGED
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.
|
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-
|
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: '
|
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:
|
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.
|
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.
|
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.
|
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.
|
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
|