mkit 0.4.1 → 0.4.2

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.
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