mkit 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mkit.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'bundler'
3
5
  require 'json'
@@ -10,13 +12,14 @@ require 'sinatra/base'
10
12
  require 'mkit/config/environment'
11
13
  require 'mkit/app/mkit_server'
12
14
  require 'mkit/config/load_default_configs'
13
- require_relative "mkit/version"
15
+ require_relative 'mkit/version'
14
16
  require_relative 'mkit/mkit_interface'
15
17
  require_relative 'mkit/mkit_dns'
16
18
  require_relative 'mkit/docker_listener'
17
19
  require 'mkit/app/helpers/haproxy'
18
20
  require 'mkit/app/controllers/services_controller'
19
21
  require 'mkit/app/controllers/mkitjobs_controller'
22
+ require 'mkit/app/controllers/mkit_controller'
20
23
  require 'mkit/mkit_interface'
21
24
  require 'mkit/mkit_dns'
22
25
  require 'mkit/job_manager'
@@ -40,23 +43,23 @@ module MKIt
40
43
  MKItLogger.debug!
41
44
  #
42
45
  # config dir
43
- if ENV["RACK_ENV"] != "development"
44
- @config_dir = options[:config_dir].nil? ? '/etc/mkit' : options[:config_dir]
45
- else
46
- @config_dir = options[:config_dir].nil? ? "#{@root}/config" : options[:config_dir]
47
- end
46
+ @config_dir = if ENV['RACK_ENV'] != 'development'
47
+ options[:config_dir].nil? ? '/etc/mkit' : options[:config_dir]
48
+ else
49
+ options[:config_dir].nil? ? "#{@root}/config" : options[:config_dir]
50
+ end
48
51
  MKIt::Utils.set_config_dir(@config_dir)
49
52
  # create dirs
50
- if ENV["RACK_ENV"] != "development" || !options[:config_dir].nil?
53
+ if ENV['RACK_ENV'] != 'development' || !options[:config_dir].nil?
51
54
  check_config_files = false
52
- if ! File.exists?(@config_dir)
55
+ unless File.exist?(@config_dir)
53
56
  FileUtils.mkdir_p(@config_dir)
54
57
  check_config_files = true
55
58
  end
56
- FileUtils.mkdir_p('/var/lib/mkitd') unless File.exists?('/var/lib/mkitd')
57
- FileUtils.cp( "#{@root}/config/mkit_config.yml", @config_dir) unless File.exists?("#{@config_dir}/mkit_config.yml")
58
- FileUtils.cp( "#{@root}/config/database.yml", @config_dir) unless File.exists?("#{@config_dir}/database.yml")
59
- FileUtils.cp( "#{@root}/config/mkitd_config.sh", @config_dir) unless File.exists?("#{@config_dir}/mkitd_config.sh")
59
+ FileUtils.mkdir_p('/var/lib/mkitd') unless File.exist?('/var/lib/mkitd')
60
+ FileUtils.cp("#{@root}/config/mkit_config.yml", @config_dir) unless File.exist?("#{@config_dir}/mkit_config.yml")
61
+ FileUtils.cp("#{@root}/config/database.yml", @config_dir) unless File.exist?("#{@config_dir}/database.yml")
62
+ FileUtils.cp("#{@root}/config/mkitd_config.sh", @config_dir) unless File.exist?("#{@config_dir}/mkitd_config.sh")
60
63
  if check_config_files
61
64
  MKItLogger.info "Configuration files copied to #{@config_dir}. Please check it and restart."
62
65
  exit
@@ -69,10 +72,12 @@ module MKIt
69
72
  # run config based tasks
70
73
  FileUtils.mkdir_p(MKIt::Config.mkit.haproxy.config_dir)
71
74
  # ...haproxy defaults file
72
- FileUtils.cp(
73
- "#{MKIt::Utils.root}/lib/mkit/app/templates/haproxy/0000_defaults.cfg",
74
- MKIt::Config.mkit.haproxy.config_dir
75
- ) unless File.exists?("#{MKIt::Config.mkit.haproxy.config_dir}/0000_defaults.cfg")
75
+ unless File.exist?("#{MKIt::Config.mkit.haproxy.config_dir}/0000_defaults.cfg")
76
+ FileUtils.cp(
77
+ "#{MKIt::Utils.root}/lib/mkit/app/templates/haproxy/0000_defaults.cfg",
78
+ MKIt::Config.mkit.haproxy.config_dir
79
+ )
80
+ end
76
81
  #
77
82
  # conn = { adapter: "sqlite3", database: ":memory:" }
78
83
  # ActiveRecord::Base.establish_connection(conn)
@@ -81,18 +86,16 @@ module MKIt
81
86
  # DatabaseTasks.db_dir = 'db'
82
87
  #
83
88
  DatabaseTasks.database_configuration = MKIt::Utils.load_db_config
84
- DatabaseTasks.env=MKIt::Config.mkit.database.env
85
- DatabaseTasks.migrations_paths=[ "#{@root}/db/migrate" ]
86
- DatabaseTasks.db_dir="db"
87
- DatabaseTasks.root=@root
89
+ DatabaseTasks.env = MKIt::Config.mkit.database.env
90
+ DatabaseTasks.migrations_paths = ["#{@root}/db/migrate"]
91
+ DatabaseTasks.db_dir = 'db'
92
+ DatabaseTasks.root = @root
88
93
  end
89
94
 
90
95
  def self.establish_db_connection
91
- #
92
96
  ActiveRecord::Base.establish_connection(DatabaseTasks.database_configuration[DatabaseTasks.env])
93
97
  ActiveRecord::Base.connection.migration_context.migrations_paths.clear
94
98
  ActiveRecord::Base.connection.migration_context.migrations_paths << "#{@root}/db/migrate"
95
- #
96
99
  MKItLogger.debug "database_tasks migration paths #{DatabaseTasks.migrations_paths}"
97
100
  MKItLogger.debug "active_record_base migration_paths #{ActiveRecord::Base.connection.migration_context.migrations_paths.inspect}"
98
101
  MKItLogger.debug "active_record_base configurations #{ActiveRecord::Base.configurations.inspect}"
@@ -100,62 +103,58 @@ module MKIt
100
103
  end
101
104
 
102
105
  def self.migrate
103
- ActiveRecord::Base.connection.migration_context.migrate if ActiveRecord::Base.connection.migration_context.needs_migration?
106
+ if ActiveRecord::Base.connection.migration_context.needs_migration?
107
+ ActiveRecord::Base.connection.migration_context.migrate
108
+ end
104
109
  end
105
110
 
106
111
  def self.restore_operation
107
- MKItLogger.info "restoring operations..."
112
+ MKItLogger.info 'restoring operations...'
108
113
  # create interfaces of deployed apps otherwise haproxy won't start
109
- Service.all.each { | srv |
114
+ Service.all.each do |srv|
110
115
  srv.deploy_network
111
116
  srv.update_status!
112
- }
117
+ end
113
118
  # daemontools would eventually start haproxy; systemd does not.
114
119
  # so, restart here.
120
+ MKItLogger.debug 'restarting proxy...'
115
121
  MKIt::HAProxy.restart
116
122
  end
117
123
 
118
124
  def self.startup(options: {})
119
- self.configure(options: options)
120
- self.establish_db_connection
121
- self.migrate
125
+ configure(options: options)
126
+ establish_db_connection
127
+ migrate
122
128
 
123
129
  MKIt::Initializers.load_default_configs
124
130
  MKIt::Interface.up
125
131
 
126
- System.register(:job_manager, memoize: true) {
132
+ System.register(:job_manager, memoize: true) do
127
133
  MKIt::JobManager.new
128
- }
129
- System.register(:mkit_dns, memoize: true) {
130
- Thread.new {
134
+ end
135
+ System.register(:mkit_dns, memoize: true) do
136
+ Thread.new do
131
137
  dns = MKIt::DNS.new
132
138
  dns.run
133
- }
134
- }
135
- System.register(:docker_listener, memoize: true) {
139
+ end
140
+ end
141
+ System.register(:docker_listener, memoize: true) do
136
142
  MKIt::DockerListener.new
137
- }
143
+ end
138
144
  # watchdog feature is to be re-evaluated
139
145
  # System.register(:watchdog, memoize: true) {
140
146
  # MKIt::WatchdogManager.new
141
147
  # }
142
148
 
143
149
  # register workers
144
- WorkerManager.register_workers
150
+ WorkerManager.register_workers
145
151
  SagaManager.register_workers
146
- #
147
152
  System[:job_manager].start
148
153
  System[:docker_listener].start
149
154
  # watchdog feature is to be re-evaluated
150
155
  # System[:watchdog].start
151
156
  System[:mkit_dns].run
152
- #
153
- self.restore_operation
154
- #
155
- MKItLogger.debug "restarting proxy..."
156
- MKIt::HAProxy.restart
157
- MKItLogger.info "MKIt is up and running!"
157
+ restore_operation
158
+ MKItLogger.info 'MKIt is up and running!'
158
159
  end
159
-
160
160
  end
161
-
data/mkit.gemspec CHANGED
@@ -1,40 +1,38 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require "mkit/version"
5
+ require 'mkit/version'
6
6
 
7
7
  Gem::Specification.new do |s|
8
- s.name = 'mkit'
9
- s.summary = 'Micro Kubernets on Ruby'
10
- s.bindir = 'bin'
11
- s.homepage = 'https://github.com/valexsantos/mkit'
12
- s.license = 'Apache-2.0'
13
- s.rubyforge_project = ''
14
- s.description = 'Micro k8s on Ruby - a simple tool to deploy containers to mimic a (very) minimalistic k8 cluster with a nice REST API'
15
- # s.require_paths = ["."]
16
- s.author = 'Vasco Santos'
17
- s.email = ['valexsantos@gmail.com']
18
- s.version = MKIt::VERSION
19
- s.platform = Gem::Platform::RUBY
20
- s.files = Dir.chdir(File.expand_path('..', __FILE__)) do
21
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|TODO|db/development.sqlite)}) }
22
- end
23
- s.executables << 'mkitd'
24
- s.executables << 'mkitc'
25
- s.add_runtime_dependency 'net-ping', '~> 2.0', '>= 2.0.8'
26
- s.add_runtime_dependency 'dry-container', '~> 0.9', '>= 0.9.0'
27
- s.add_runtime_dependency 'sqlite3', '~> 1.5', '>= 1.5.4'
28
- s.add_runtime_dependency 'standalone_migrations', '~> 7.1', '>= 7.1.0'
29
- s.add_runtime_dependency 'sinatra-activerecord', '~> 2.0', '>= 2.0.26'
30
- s.add_runtime_dependency 'rack', '~> 2.2', '>= 2.2.5'
31
- s.add_runtime_dependency 'rack-protection', '~> 3.0', '>= 3.0.5'
32
- s.add_runtime_dependency 'rack-test', '~> 2.0', '>= 2.0.2'
33
- s.add_runtime_dependency 'pry', '~> 0.14', '>= 0.14.2'
34
- s.add_runtime_dependency 'rubydns', '~> 2.0', '>= 2.0.2'
35
- s.add_runtime_dependency 'async-dns', '~> 1.3', '>= 1.3.0'
36
- s.add_runtime_dependency 'sinatra', '~> 3.0', '>= 3.0.5'
37
- s.add_runtime_dependency 'thin', '~> 1.8', '>= 1.8.1'
38
- s.add_runtime_dependency 'net_http_unix', '~> 0.2', '>= 0.2.2'
8
+ s.name = 'mkit'
9
+ s.summary = 'Micro Kubernets on Ruby'
10
+ s.bindir = 'bin'
11
+ s.homepage = 'https://github.com/valexsantos/mkit'
12
+ s.license = 'Apache-2.0'
13
+ s.description = 'Micro k8s on Ruby - a simple tool to deploy containers to mimic a (very) minimalistic k8 cluster with a nice REST API'
14
+ # s.require_paths = ["."]
15
+ s.author = 'Vasco Santos'
16
+ s.email = ['valexsantos@gmail.com']
17
+ s.version = MKIt::VERSION
18
+ s.platform = Gem::Platform::RUBY
19
+ s.files = Dir.chdir(File.expand_path(__dir__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|TODO|db/development.sqlite)}) }
21
+ end
22
+ s.executables << 'mkitd'
23
+ s.executables << 'mkitc'
24
+ s.add_runtime_dependency 'async-dns', '~> 1.3', '>= 1.3.0'
25
+ s.add_runtime_dependency 'dry-container', '~> 0.9', '>= 0.9.0'
26
+ s.add_runtime_dependency 'net_http_unix', '~> 0.2', '>= 0.2.2'
27
+ s.add_runtime_dependency 'net-ping', '~> 2.0', '>= 2.0.8'
28
+ s.add_runtime_dependency 'pry', '~> 0.14', '>= 0.14.2'
29
+ s.add_runtime_dependency 'rack', '~> 2.2', '>= 2.2.5'
30
+ s.add_runtime_dependency 'rack-protection', '~> 3.0', '>= 3.0.5'
31
+ s.add_runtime_dependency 'rack-test', '~> 2.0', '>= 2.0.2'
32
+ s.add_runtime_dependency 'rubydns', '~> 2.0', '>= 2.0.2'
33
+ s.add_runtime_dependency 'sinatra', '~> 3.0', '>= 3.0.5'
34
+ s.add_runtime_dependency 'sinatra-activerecord', '~> 2.0', '>= 2.0.26'
35
+ s.add_runtime_dependency 'sqlite3', '~> 1.5', '>= 1.5.4'
36
+ s.add_runtime_dependency 'standalone_migrations', '~> 7.1', '>= 7.1.0'
37
+ s.add_runtime_dependency 'thin', '~> 1.8', '>= 1.8.1'
39
38
  end
40
-
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasco Santos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-21 00:00:00.000000000 Z
11
+ date: 2024-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: net-ping
14
+ name: async-dns
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '1.3'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 2.0.8
22
+ version: 1.3.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '2.0'
29
+ version: '1.3'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 2.0.8
32
+ version: 1.3.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: dry-container
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -51,65 +51,65 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: 0.9.0
53
53
  - !ruby/object:Gem::Dependency
54
- name: sqlite3
54
+ name: net_http_unix
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '1.5'
59
+ version: '0.2'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 1.5.4
62
+ version: 0.2.2
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '1.5'
69
+ version: '0.2'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 1.5.4
72
+ version: 0.2.2
73
73
  - !ruby/object:Gem::Dependency
74
- name: standalone_migrations
74
+ name: net-ping
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '7.1'
79
+ version: '2.0'
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 7.1.0
82
+ version: 2.0.8
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '7.1'
89
+ version: '2.0'
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 7.1.0
92
+ version: 2.0.8
93
93
  - !ruby/object:Gem::Dependency
94
- name: sinatra-activerecord
94
+ name: pry
95
95
  requirement: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: '2.0'
99
+ version: '0.14'
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 2.0.26
102
+ version: 0.14.2
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '2.0'
109
+ version: '0.14'
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 2.0.26
112
+ version: 0.14.2
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rack
115
115
  requirement: !ruby/object:Gem::Requirement
@@ -171,125 +171,125 @@ dependencies:
171
171
  - !ruby/object:Gem::Version
172
172
  version: 2.0.2
173
173
  - !ruby/object:Gem::Dependency
174
- name: pry
174
+ name: rubydns
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '0.14'
179
+ version: '2.0'
180
180
  - - ">="
181
181
  - !ruby/object:Gem::Version
182
- version: 0.14.2
182
+ version: 2.0.2
183
183
  type: :runtime
184
184
  prerelease: false
185
185
  version_requirements: !ruby/object:Gem::Requirement
186
186
  requirements:
187
187
  - - "~>"
188
188
  - !ruby/object:Gem::Version
189
- version: '0.14'
189
+ version: '2.0'
190
190
  - - ">="
191
191
  - !ruby/object:Gem::Version
192
- version: 0.14.2
192
+ version: 2.0.2
193
193
  - !ruby/object:Gem::Dependency
194
- name: rubydns
194
+ name: sinatra
195
195
  requirement: !ruby/object:Gem::Requirement
196
196
  requirements:
197
197
  - - "~>"
198
198
  - !ruby/object:Gem::Version
199
- version: '2.0'
199
+ version: '3.0'
200
200
  - - ">="
201
201
  - !ruby/object:Gem::Version
202
- version: 2.0.2
202
+ version: 3.0.5
203
203
  type: :runtime
204
204
  prerelease: false
205
205
  version_requirements: !ruby/object:Gem::Requirement
206
206
  requirements:
207
207
  - - "~>"
208
208
  - !ruby/object:Gem::Version
209
- version: '2.0'
209
+ version: '3.0'
210
210
  - - ">="
211
211
  - !ruby/object:Gem::Version
212
- version: 2.0.2
212
+ version: 3.0.5
213
213
  - !ruby/object:Gem::Dependency
214
- name: async-dns
214
+ name: sinatra-activerecord
215
215
  requirement: !ruby/object:Gem::Requirement
216
216
  requirements:
217
217
  - - "~>"
218
218
  - !ruby/object:Gem::Version
219
- version: '1.3'
219
+ version: '2.0'
220
220
  - - ">="
221
221
  - !ruby/object:Gem::Version
222
- version: 1.3.0
222
+ version: 2.0.26
223
223
  type: :runtime
224
224
  prerelease: false
225
225
  version_requirements: !ruby/object:Gem::Requirement
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: '1.3'
229
+ version: '2.0'
230
230
  - - ">="
231
231
  - !ruby/object:Gem::Version
232
- version: 1.3.0
232
+ version: 2.0.26
233
233
  - !ruby/object:Gem::Dependency
234
- name: sinatra
234
+ name: sqlite3
235
235
  requirement: !ruby/object:Gem::Requirement
236
236
  requirements:
237
237
  - - "~>"
238
238
  - !ruby/object:Gem::Version
239
- version: '3.0'
239
+ version: '1.5'
240
240
  - - ">="
241
241
  - !ruby/object:Gem::Version
242
- version: 3.0.5
242
+ version: 1.5.4
243
243
  type: :runtime
244
244
  prerelease: false
245
245
  version_requirements: !ruby/object:Gem::Requirement
246
246
  requirements:
247
247
  - - "~>"
248
248
  - !ruby/object:Gem::Version
249
- version: '3.0'
249
+ version: '1.5'
250
250
  - - ">="
251
251
  - !ruby/object:Gem::Version
252
- version: 3.0.5
252
+ version: 1.5.4
253
253
  - !ruby/object:Gem::Dependency
254
- name: thin
254
+ name: standalone_migrations
255
255
  requirement: !ruby/object:Gem::Requirement
256
256
  requirements:
257
257
  - - "~>"
258
258
  - !ruby/object:Gem::Version
259
- version: '1.8'
259
+ version: '7.1'
260
260
  - - ">="
261
261
  - !ruby/object:Gem::Version
262
- version: 1.8.1
262
+ version: 7.1.0
263
263
  type: :runtime
264
264
  prerelease: false
265
265
  version_requirements: !ruby/object:Gem::Requirement
266
266
  requirements:
267
267
  - - "~>"
268
268
  - !ruby/object:Gem::Version
269
- version: '1.8'
269
+ version: '7.1'
270
270
  - - ">="
271
271
  - !ruby/object:Gem::Version
272
- version: 1.8.1
272
+ version: 7.1.0
273
273
  - !ruby/object:Gem::Dependency
274
- name: net_http_unix
274
+ name: thin
275
275
  requirement: !ruby/object:Gem::Requirement
276
276
  requirements:
277
277
  - - "~>"
278
278
  - !ruby/object:Gem::Version
279
- version: '0.2'
279
+ version: '1.8'
280
280
  - - ">="
281
281
  - !ruby/object:Gem::Version
282
- version: 0.2.2
282
+ version: 1.8.1
283
283
  type: :runtime
284
284
  prerelease: false
285
285
  version_requirements: !ruby/object:Gem::Requirement
286
286
  requirements:
287
287
  - - "~>"
288
288
  - !ruby/object:Gem::Version
289
- version: '0.2'
289
+ version: '1.8'
290
290
  - - ">="
291
291
  - !ruby/object:Gem::Version
292
- version: 0.2.2
292
+ version: 1.8.1
293
293
  description: Micro k8s on Ruby - a simple tool to deploy containers to mimic a (very)
294
294
  minimalistic k8 cluster with a nice REST API
295
295
  email:
@@ -300,6 +300,7 @@ executables:
300
300
  extensions: []
301
301
  extra_rdoc_files: []
302
302
  files:
303
+ - ".rubocop.yml"
303
304
  - Gemfile
304
305
  - Gemfile.lock
305
306
  - LICENSE
@@ -314,6 +315,7 @@ files:
314
315
  - db/migrate/002_mkit_jobs.rb
315
316
  - db/schema.rb
316
317
  - lib/mkit.rb
318
+ - lib/mkit/app/controllers/mkit_controller.rb
317
319
  - lib/mkit/app/controllers/mkitjobs_controller.rb
318
320
  - lib/mkit/app/controllers/pods_controller.rb
319
321
  - lib/mkit/app/controllers/services_controller.rb