mkit 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +21 -0
  3. data/Gemfile.lock +137 -0
  4. data/LICENSE +21 -0
  5. data/README.md +126 -0
  6. data/Rakefile +54 -0
  7. data/bin/mkitc +31 -0
  8. data/bin/mkitd +55 -0
  9. data/config/database.yml +5 -0
  10. data/config/mkit_config.yml +15 -0
  11. data/config/mkitd_config.sh +5 -0
  12. data/db/migrate/001_setup.rb +105 -0
  13. data/db/migrate/002_mkit_jobs.rb +17 -0
  14. data/db/schema.rb +108 -0
  15. data/lib/mkit/app/controllers/mkitjobs_controller.rb +37 -0
  16. data/lib/mkit/app/controllers/pods_controller.rb +30 -0
  17. data/lib/mkit/app/controllers/services_controller.rb +87 -0
  18. data/lib/mkit/app/helpers/docker_helper.rb +75 -0
  19. data/lib/mkit/app/helpers/erb_helper.rb +18 -0
  20. data/lib/mkit/app/helpers/haproxy.rb +41 -0
  21. data/lib/mkit/app/helpers/interface_helper.rb +17 -0
  22. data/lib/mkit/app/helpers/services_helper.rb +54 -0
  23. data/lib/mkit/app/mkit_server.rb +8 -0
  24. data/lib/mkit/app/model/dns_host.rb +11 -0
  25. data/lib/mkit/app/model/lease.rb +26 -0
  26. data/lib/mkit/app/model/mkit_job.rb +48 -0
  27. data/lib/mkit/app/model/pod.rb +95 -0
  28. data/lib/mkit/app/model/pool.rb +60 -0
  29. data/lib/mkit/app/model/service.rb +266 -0
  30. data/lib/mkit/app/model/service_config.rb +16 -0
  31. data/lib/mkit/app/model/service_port.rb +30 -0
  32. data/lib/mkit/app/model/setting.rb +1 -0
  33. data/lib/mkit/app/model/volume.rb +53 -0
  34. data/lib/mkit/app/templates/docker/docker_run.sh.erb +1 -0
  35. data/lib/mkit/app/templates/haproxy/0000_defaults.cfg +23 -0
  36. data/lib/mkit/app/templates/haproxy/xapp_haproxy.cfg.erb +30 -0
  37. data/lib/mkit/cmd_runner.rb +27 -0
  38. data/lib/mkit/config/config.rb +18 -0
  39. data/lib/mkit/config/environment.rb +26 -0
  40. data/lib/mkit/config/initializers/001_hash.rb +11 -0
  41. data/lib/mkit/config/initializers/002_openstruct.rb +7 -0
  42. data/lib/mkit/config/load_default_configs.rb +29 -0
  43. data/lib/mkit/config/the_config.yml +3 -0
  44. data/lib/mkit/ctypes.rb +31 -0
  45. data/lib/mkit/docker_listener.rb +97 -0
  46. data/lib/mkit/exceptions.rb +30 -0
  47. data/lib/mkit/haproxy.rb +48 -0
  48. data/lib/mkit/job_manager.rb +53 -0
  49. data/lib/mkit/mkit_dns.rb +54 -0
  50. data/lib/mkit/mkit_interface.rb +31 -0
  51. data/lib/mkit/sagas/asaga.rb +11 -0
  52. data/lib/mkit/sagas/create_pod_saga.rb +28 -0
  53. data/lib/mkit/sagas/saga_manager.rb +10 -0
  54. data/lib/mkit/status.rb +47 -0
  55. data/lib/mkit/utils.rb +51 -0
  56. data/lib/mkit/version.rb +4 -0
  57. data/lib/mkit/workers/aworker.rb +11 -0
  58. data/lib/mkit/workers/haproxy_worker.rb +35 -0
  59. data/lib/mkit/workers/pod_worker.rb +39 -0
  60. data/lib/mkit/workers/service_worker.rb +27 -0
  61. data/lib/mkit/workers/worker_manager.rb +14 -0
  62. data/lib/mkit.rb +158 -0
  63. data/mkit.gemspec +40 -0
  64. data/mkitd +10 -0
  65. data/samples/apps/postgres.yml +22 -0
  66. data/samples/apps/rabbitmq.yml +19 -0
  67. data/samples/daemontools/log/run +44 -0
  68. data/samples/daemontools/run +42 -0
  69. data/samples/systemd/mkitd.service +12 -0
  70. metadata +393 -0
@@ -0,0 +1,60 @@
1
+ require 'mkit/app/model/lease'
2
+ require 'mkit/status'
3
+ require 'mkit/exceptions'
4
+
5
+ class Pool < ActiveRecord::Base
6
+ has_many :lease, dependent: :destroy
7
+
8
+ def check_status
9
+ if status == MKIt::PoolStatus::EXAUSTED
10
+ raise PoolExaustedException.new
11
+ end
12
+ end
13
+
14
+ def next_lease_ip
15
+ self.check_status
16
+ ips = range.split('-')
17
+ next_ip = ips[0]
18
+ next_ip = next_ip.to_i
19
+ lease.select(:status == MKIt::PoolStatus::IN_USE || :status == MKIt::PoolStatus::RESERVED).each { |l|
20
+ leased_ip = l.ip.split('.')[3]
21
+ leased_ip = leased_ip.to_i
22
+ if leased_ip >= next_ip
23
+ next_ip = leased_ip+1
24
+ end
25
+ }
26
+ if next_ip > ips[1].to_i
27
+ self.status = MKIt::PoolStatus::EXAUSTED
28
+ self.save
29
+ raise PoolExaustedException.new
30
+ end
31
+
32
+ ip_add = self.ip.split('.')
33
+
34
+ "#{ip_add[0]}.#{ip_add[1]}.#{ip_add[2]}.#{next_ip}"
35
+ end
36
+
37
+ def request(service:, status:)
38
+ lease_ip = next_lease_ip
39
+ idx = lease_ip.split('.')[3]
40
+ new_lease = Lease.new(
41
+ pool: self,
42
+ service: service,
43
+ interface_name: "vmkit#{idx}",
44
+ interface_type: 'tun',
45
+ status: status,
46
+ ip: lease_ip
47
+ )
48
+ new_lease.save
49
+ new_lease
50
+ end
51
+
52
+ def request_for(service)
53
+ request(service: service, status: MKIt::PoolStatus::IN_USE)
54
+ end
55
+
56
+ def reserve_for(service)
57
+ request(service: service, status: MKIt::PoolStatus::RESERVED)
58
+ end
59
+ end
60
+
@@ -0,0 +1,266 @@
1
+ require 'mkit/app/model/volume'
2
+ require 'mkit/app/model/service_port'
3
+ require 'mkit/app/model/service_config'
4
+ require 'mkit/app/model/pod'
5
+ require 'mkit/app/helpers/erb_helper'
6
+ require 'mkit/app/helpers/docker_helper'
7
+ require 'mkit/mkit_interface'
8
+ require 'mkit/status'
9
+ require 'mkit/utils'
10
+ require 'mkit/ctypes'
11
+ require 'mkit/app/model/pool'
12
+ require 'mkit/app/model/service'
13
+ require 'mkit/app/model/pod'
14
+ require 'mkit/app/model/dns_host'
15
+ require 'mkit/app/helpers/erb_helper'
16
+ require 'mkit/app/helpers/docker_helper'
17
+ require 'mkit/app/helpers/haproxy'
18
+
19
+ #
20
+ class Service < ActiveRecord::Base
21
+ has_many :pod, dependent: :destroy
22
+ has_many :volume, dependent: :destroy
23
+ has_many :service_config, dependent: :destroy
24
+ has_many :service_port, dependent: :destroy
25
+
26
+ has_one :lease, dependent: :destroy
27
+ has_one :dns_host, dependent: :destroy
28
+
29
+ before_destroy :clean_up
30
+
31
+ validates :name, uniqueness: true
32
+ validates :name, presence: true
33
+
34
+ include MKIt::ERBHelper
35
+ include MKIt::DockerHelper
36
+
37
+ def self.create(yaml)
38
+ config = yaml["service"]
39
+ raise MKIt::ServiceAlreadyExists.new unless Service.find_by_name(config.name).nil?
40
+
41
+ srv = Service.new(
42
+ name: config.name,
43
+ version: 1,
44
+ image: config.image,
45
+ command: config.command,
46
+ status: MKIt::Status::CREATING
47
+ )
48
+
49
+ # docker network
50
+ if config.network.nil? || config.network.empty?
51
+ srv.pods_network="mkit"
52
+ else
53
+ srv.pods_network=config.network
54
+ end
55
+
56
+ # reserve pool ip
57
+ srv.lease = Pool.find_by_name(MKIt::Utils.me).reserve_for(srv)
58
+
59
+ srv.dns_host = DnsHost.new(
60
+ service: srv,
61
+ name: srv.name,
62
+ ip: srv.lease.ip
63
+ )
64
+
65
+ # create service network
66
+ srv.deploy_network
67
+
68
+ # configure
69
+ srv.configure(config)
70
+ #
71
+ srv.status = MKIt::Status::CREATED
72
+ srv.save
73
+ data = { service_id: srv.id, version: srv.version }
74
+ # create pod
75
+ (1..srv.min_replicas).each { |i|
76
+ MkitJob.publish(topic: :create_pod_saga, service_id: srv.id, data: data)
77
+ }
78
+ srv
79
+ end
80
+
81
+ def configure(config)
82
+ self.image = config.image if config.image != self.image
83
+ self.command = config.command if config.command != self.command
84
+
85
+ unless config.resources.nil?
86
+ self.max_replicas = config.resources.max_replicas unless config.resources.max_replicas.nil? || config.resources.max_replicas < 1
87
+ self.min_replicas = config.resources.min_replicas unless config.resources.min_replicas.nil? || config.resources.min_replicas < 1
88
+ else
89
+ self.min_replicas = 1
90
+ self.max_replicas = 1
91
+ end
92
+ self.max_replicas = self.min_replicas if self.min_replicas > self.max_replicas
93
+
94
+ # haproxy ports
95
+ self.service_port = []
96
+ config.ports&.each do |p|
97
+ port = ServicePort.create(service: self, config: p)
98
+ self.service_port << port
99
+ end
100
+
101
+ # volumes
102
+ self.volume = []
103
+ config.volumes&.each { |volume|
104
+ self.add_volume(volume)
105
+ }
106
+ # environment
107
+ self.service_config=[]
108
+ config.environment&.each_pair { |key,value|
109
+ self.add_service_config(key, value)
110
+ }
111
+ self.volume.each { | volume |
112
+ volume.deploy
113
+ }
114
+ end
115
+
116
+ def update!(yaml)
117
+ config = yaml["service"]
118
+ raise MKIt::ServiceNameMismatch.new unless config.name == self.name
119
+ self.version+=1
120
+ self.configure(config)
121
+
122
+ # start new pod, destroy old pod...
123
+ self.pod.each { |pod| MkitJob.publish(topic: :destroy_pod, pod_id: pod.id, data: {}) }
124
+ # create pod
125
+ data = { service_id: self.id, version: self.version }
126
+ (1..self.min_replicas).each { |i|
127
+ MkitJob.publish(topic: :create_pod_saga, service_id: self.id, data: data)
128
+ }
129
+ self.save
130
+ end
131
+
132
+ def create_pods_network
133
+ netw = inspect_network(self.pods_network)
134
+ create_network(self.pods_network) if netw.nil?
135
+ end
136
+
137
+ def deploy_network
138
+ # create service interface...
139
+ self.lease.confirm
140
+ self.lease.up
141
+ # ...and pods network
142
+ self.create_pods_network
143
+ end
144
+
145
+ def add_volume(volume_config)
146
+ v = Volume.create(self, volume_config)
147
+ self.volume << v
148
+ v
149
+ end
150
+
151
+ def add_service_config(key, value)
152
+ v = ServiceConfig.create(service: self, key: key, value: value)
153
+ self.service_config << v
154
+ v
155
+ end
156
+
157
+ def current_configs
158
+ self.service_config&.select{ |x| x.ctype == MKIt::CType::ENVIRONMENT.to_s && x.version == self.version}
159
+ end
160
+
161
+ def current_ports
162
+ self.service_port&.select{ |x| x.version == self.version}
163
+ end
164
+
165
+ def my_dns
166
+ MKIt::Interface.ip
167
+ end
168
+
169
+ def update_status!
170
+ combined_status = nil
171
+ self.pod.each { |pod|
172
+ child_status = pod.set_status_from_docker
173
+ if combined_status
174
+ case combined_status
175
+ when MKIt::Status::RUNNING
176
+ case child_status
177
+ when MKIt::Status::STOPPED || MKIt::Status::PENDING
178
+ combined_status = MKIt::Status::DEGRATED
179
+ end
180
+ when MKIt::Status::STOPPED
181
+ case child_status
182
+ when MKIt::Status::RUNNING || MKIt::Status::PENDING
183
+ combined_status = MKIt::Status::DEGRATED
184
+ end
185
+ when MKIt::Status::PENDING
186
+ case child_status
187
+ when MKIt::Status::RUNNING || MKIt::Status::STOPPED
188
+ combined_status = MKIt::Status::DEGRATED
189
+ end
190
+ end
191
+ else
192
+ combined_status = child_status
193
+ end
194
+ }
195
+ combined_status = MKIt::Status::CREATING unless combined_status
196
+ self.status = combined_status
197
+ self.save
198
+ self.status
199
+ end
200
+
201
+ #
202
+ # ha proxy configs & template
203
+ #
204
+ def public_ports
205
+ self.service_port.each.map{|p| p.external_port}.uniq
206
+ end
207
+
208
+ def ports_by_external(external_port)
209
+ self.service_port.where('external_port = ?', external_port)
210
+ end
211
+
212
+ def ports_mode_by_external(external_port)
213
+ ports = self.service_port.where('external_port = ?', external_port).first
214
+ ports.mode if ports
215
+ end
216
+
217
+ def update_proxy
218
+ MkitJob.publish(topic: :update_proxy_config, application_id: self.id, data: proxy_config)
219
+ end
220
+
221
+ def proxy_config
222
+ # config
223
+ haproxy = parse
224
+ my_addr = self.lease.ip.split('.')[3]
225
+ filename = "#{'%04i' % my_addr.to_i}_#{self.name}.cfg"
226
+ MKItLogger.debug("haproxy config file: #{filename}")
227
+ {filename: filename, data: haproxy}
228
+ end
229
+
230
+ def parse
231
+ parse_model(MKIt::Templates::HAPROXY).result(binding)
232
+ end
233
+
234
+ def clean_up
235
+ my_addr = self.lease.ip.split('.')[3]
236
+ filename = "#{'%04i' % my_addr.to_i}_#{self.name}.cfg"
237
+ MkitJob.publish(topic: :destroy_proxy_config, data: {filename: filename})
238
+ end
239
+
240
+ #
241
+ # ctrl
242
+ #
243
+ def start
244
+ self.pod.each { |p|
245
+ MkitJob.publish(topic: :start_pod, service_id: self.id, pod_id: p.id)
246
+ }
247
+ end
248
+
249
+ def stop
250
+ self.pod.each { |p|
251
+ MkitJob.publish(topic: :stop_pod, service_id: self.id, pod_id: p.id)
252
+ }
253
+ end
254
+
255
+ def as_json(options = {})
256
+ srv = super
257
+ a=[:pod, :volume, :service_config, :service_port]
258
+ a.each { | k |
259
+ srv[k] ||= []
260
+ self.send(k).each { |v|
261
+ srv[k] << v.as_json
262
+ }
263
+ }
264
+ srv
265
+ end
266
+ end
@@ -0,0 +1,16 @@
1
+ require 'mkit/ctypes'
2
+
3
+ class ServiceConfig < ActiveRecord::Base
4
+ belongs_to :service
5
+
6
+ def self.create(service:, key:, value:, ctype: MKIt::CType::ENVIRONMENT)
7
+ ServiceConfig.new(
8
+ service: service,
9
+ key: key,
10
+ value: value,
11
+ version: service.version,
12
+ ctype: ctype
13
+ )
14
+ end
15
+ end
16
+
@@ -0,0 +1,30 @@
1
+ require 'mkit/app/model/service'
2
+
3
+ class ServicePort < ActiveRecord::Base
4
+ belongs_to :service
5
+
6
+ def self.create(service:, config:)
7
+ sp = ServicePort.new(service: service, version: service.version)
8
+ sp.parse_config(config)
9
+ sp
10
+ end
11
+
12
+ # haproxy support for port range - leave src blank
13
+ # service:
14
+ # ports:
15
+ # # src:dest:tcp|http:load-balancing
16
+ # - 5532:5432:tcp:round_robin
17
+ # model:
18
+ # service_ports:
19
+ # - external: 5432
20
+ # internal: 5432
21
+ # mode: tcp|http
22
+ # load_bal:
23
+ def parse_config(config)
24
+ ports = config.split(':')
25
+ self.external_port = ports[0]
26
+ self.internal_port = ports[1]
27
+ self.mode = ports[2]
28
+ self.load_bal = ports[3]
29
+ end
30
+ end
@@ -0,0 +1 @@
1
+ class Setting < ActiveRecord::Base; end
@@ -0,0 +1,53 @@
1
+ require 'mkit/ctypes'
2
+ require 'mkit/app/helpers/docker_helper'
3
+ require 'fileutils'
4
+
5
+ class Volume < ActiveRecord::Base
6
+ belongs_to :service
7
+ before_destroy :clean_up
8
+
9
+ def self.create(service, volume)
10
+ case volume
11
+ when /^docker:\/\//
12
+ ctype = MKIt::CType::DOCKER_STORAGE
13
+ paths = volume[9..].split(':')
14
+ # vname="#{service.name}.#{service.application.name}.#{paths[0]}"
15
+ vname = paths[0]
16
+ when /^\//
17
+ ctype = MKIt::CType::LOCAL_STORAGE
18
+ paths = volume.split(':')
19
+ vname = paths[0]
20
+ end
21
+ Volume.new(
22
+ service: service,
23
+ name: vname,
24
+ path: paths[1],
25
+ ctype: ctype
26
+ )
27
+ end
28
+
29
+ def deploy
30
+ create_volume
31
+ end
32
+
33
+ def create_volume
34
+ case self.ctype
35
+ when MKIt::CType::DOCKER_STORAGE
36
+ MKIt::DockerHelper.create_volume(self.name)
37
+ when MKIt::CType::LOCAL_STORAGE
38
+ # nop
39
+ end
40
+ end
41
+
42
+ def delete_volume
43
+ case self.ctype
44
+ when MKIt::CType::DOCKER_STORAGE
45
+ MKIt::DockerHelper.delete_volume(self.name)
46
+ end
47
+ end
48
+
49
+ def clean_up
50
+ # nop
51
+ end
52
+ end
53
+
@@ -0,0 +1 @@
1
+ docker run -d --name <%=name%> <%service.service_config&.select{ |x| x.ctype == MKIt::CType::ENVIRONMENT.to_s }.each { |env|%><%=" -e #{env.key}=\"#{env.value}\""%><%}%> <%service.volume&.each { |vol|%><%=" -v \"#{vol.name}:#{vol.path}\""%><%}%> --network <%=service.pods_network%> --dns <%=service.my_dns%> <%=service.image%> <%=service.command unless service.command.nil?%>
@@ -0,0 +1,23 @@
1
+ global
2
+ log 127.0.0.1 local2
3
+ maxconn 4096
4
+ user nobody
5
+ group nobody
6
+
7
+ defaults
8
+ log global
9
+ mode http
10
+ option tcplog
11
+ retries 3
12
+ timeout http-request 10s
13
+ timeout queue 1m
14
+ timeout connect 10s
15
+ timeout client 1m
16
+ timeout server 1m
17
+ timeout http-keep-alive 10s
18
+ timeout check 10s
19
+ maxconn 3000
20
+ stats enable
21
+ stats auth someuser:somepassword
22
+ stats uri /haproxy_stats
23
+
@@ -0,0 +1,30 @@
1
+ #
2
+ # MKIt generated file
3
+ #
4
+ <% public_ports.each { |external_port|%>
5
+ #
6
+ # start <%=name%>-<%=external_port%>
7
+ #
8
+ frontend <%=name%>-<%=external_port%>-front
9
+ bind <%=lease.ip%>:<%=external_port%>
10
+ mode <%=ports_mode_by_external(external_port)%>
11
+ #
12
+ use_backend <%=name%>-<%=external_port%>-back
13
+
14
+ backend <%=name%>-<%=external_port%>-back
15
+ mode <%=ports_mode_by_external(external_port)%>
16
+ #balance leastconn
17
+ balance roundrobin
18
+ <%if ports_mode_by_external(external_port) == 'http'%>
19
+ option httpclose
20
+ option forwardfor
21
+ cookie JSESSIONID prefix
22
+ <%end%>
23
+ <%ports_by_external(external_port).each { |port| %>
24
+ <%port.service.pod.each { | pod | %>
25
+ server <%=pod.name%> <%=pod.ip%>:<%=port.internal_port%> <%if port.mode == 'http'%>cookie A<%end%> check<%}%><%}%>
26
+ #
27
+ # end of <%=name%>-<%=external_port%>
28
+ #
29
+ <%}%>
30
+
@@ -0,0 +1,27 @@
1
+ require 'pty'
2
+ require 'mkit/exceptions'
3
+
4
+ module MKIt
5
+ class CmdRunner
6
+ def self.run(cmd)
7
+ result=''
8
+ begin
9
+ shell = PTY.spawn( cmd )
10
+ begin
11
+ shell[0].each { |line| result << line.strip! }
12
+ rescue Errno::EIO
13
+ # nothing
14
+ ensure
15
+ shell[0].close
16
+ end
17
+ shell[1].close
18
+ Process.wait(shell[2])
19
+ rescue PTY::ChildExited
20
+ # nothing
21
+ end
22
+ raise CmdRunnerException.new("command '#{cmd[0..30]}...' returned an error response") if !$?.nil? && $?.exitstatus != 0
23
+ result
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,18 @@
1
+ require 'yaml'
2
+ #
3
+ # MKIt::Config.load_yml!('samples/mkit.yml')
4
+ # MKIt::Config.application.services
5
+ # requires Hash.to_o
6
+ module MKIt
7
+ module Config
8
+ extend self
9
+ def load_yml!(path)
10
+ @config = YAML.load(File.new(path).read).to_o
11
+ end
12
+ #
13
+ def method_missing(name,*args)
14
+ return @config.send(name,*args)
15
+ super.method_missing name
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,26 @@
1
+ require 'bundler/setup'
2
+ require 'dry-container'
3
+ require 'sinatra/activerecord'
4
+ require 'rubydns'
5
+ require 'sinatra'
6
+
7
+ require_relative 'initializers/001_hash'
8
+ require_relative 'initializers/002_openstruct'
9
+
10
+ SOCKET_PATH = File.expand_path('/tmp/app.sock')
11
+
12
+ # sinatra conf
13
+ configure do
14
+ # set :public_folder, 'public'
15
+ # set :views, 'app/views'
16
+ set :server, :thin
17
+ # enable/disable the built-in web server
18
+ # set :run, :false
19
+ # server hostname or IP address
20
+ # set :bind, SOCKET_PATH, "localhost:4567"
21
+ # set :port, 4567
22
+ #enable :sessions
23
+ #set :session_secret, 'password_security'
24
+ set :default_content_type, :json
25
+ end
26
+
@@ -0,0 +1,11 @@
1
+ class Hash
2
+ def to_o
3
+ JSON.parse to_json, object_class: OpenStruct
4
+ end
5
+
6
+ def to_os
7
+ self.each_with_object(OpenStruct.new) do |(key, val), memo|
8
+ memo[key] = val.is_a?(Hash) ? val.to_os : val
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ class OpenStruct
2
+ def to_hash
3
+ self.each_pair.with_object({}) do |(key, value), hash|
4
+ hash[key] = value.is_a?(OpenStruct) ? value.to_hash : value
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,29 @@
1
+ require 'mkit/app/model/setting'
2
+ require 'mkit/app/model/pool'
3
+ require 'mkit/config/config'
4
+ require 'fileutils'
5
+ require 'mkit/utils'
6
+
7
+ module MKIt
8
+ module Initializers
9
+
10
+ def self.load_my_configuration(config_dir: MKIt::Utils.config_dir)
11
+ MKIt::Utils.log.info "loading configurations from '#{config_dir}'..."
12
+ MKIt::Config.load_yml!("#{config_dir}/mkit_config.yml")
13
+ end
14
+
15
+ def self.load_default_configs
16
+ if Pool.find_by_name(MKIt::Utils.me).nil?
17
+ st = Pool.new(
18
+ name: MKIt::Utils.me,
19
+ ip: MKIt::Config.mkit.my_network.ip,
20
+ range: '10-200',
21
+ netmask: '24',
22
+ preferred: true
23
+ )
24
+ st.save
25
+ end
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,3 @@
1
+ mkit:
2
+ public_pool: 10.20.30.1/24
3
+
@@ -0,0 +1,31 @@
1
+ #
2
+ #
3
+ module MKIt
4
+ class MKItCType
5
+ def initialize(status)
6
+ @status = status.to_s
7
+ end
8
+
9
+ def to_s
10
+ @status.downcase
11
+ end
12
+ end
13
+
14
+ module CType
15
+ ENVIRONMENT = MKIt::MKItCType.new(:environment)
16
+ DOCKER_STORAGE = MKIt::MKItCType.new(:docker)
17
+ LOCAL_STORAGE = MKIt::MKItCType.new(:local)
18
+
19
+ NETWORK_SPECIFIC = MKIt::MKItCType.new(:specific)
20
+ NETWORK_BRIDGE = MKIt::MKItCType.new(:bridge)
21
+ TUN_INTERFACE = MKIt::MKItCType.new(:tun)
22
+ TAP_INTERFACE = MKIt::MKItCType.new(:tap)
23
+ end
24
+
25
+ module Templates
26
+ DOCKER_RUN = 'docker/docker_run.sh'
27
+ DOCKER_BUILD = 'docker/docker_build.sh'
28
+ HAPROXY = 'haproxy/xapp_haproxy.cfg'
29
+ HAPROXY_DEFAULTS = 'haproxy/0000_defaults.cfg'
30
+ end
31
+ end