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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 03e23a426169a1815c4f92ef46461db9275e60aabe3ac62e9eb57d5a36e34ded
4
+ data.tar.gz: f05140fed7e69015dcfe19e2f9d52498a7cf260da0ffb31fbcbaddf505f204f0
5
+ SHA512:
6
+ metadata.gz: dcfb2eca9b54bd5871c9899640abba32e6da653f3db94ba9701ccc7271225d0634c77361444c1683f1f71bb138afc4e3d86e416fb930a3f6bf74a6bd93449974
7
+ data.tar.gz: 9d3efacb12c9dc6959501101d3f2ad31b8367909beb36eb139d7a702e57ad05046363330d253dc6f39c163541c24d62f42ce780aca900ca82754054b93ed4404
data/Gemfile ADDED
@@ -0,0 +1,21 @@
1
+ source "https://rubygems.org"
2
+
3
+ #ruby '2.6.10'
4
+
5
+ gem 'net-ping'
6
+ gem 'dry-container'
7
+ gem 'sqlite3'
8
+ gem 'standalone_migrations'
9
+
10
+ gem 'sinatra-activerecord', :require => 'sinatra/activerecord'
11
+ gem 'rack', '>= 2.0.6'
12
+ gem 'pry'
13
+ gem 'rubydns'
14
+ gem 'async-dns'
15
+ # rest http server
16
+ gem 'sinatra'
17
+ gem 'thin' # socket server
18
+ gem 'net_http_unix' # socket client
19
+ #gem 'puma'
20
+
21
+
data/Gemfile.lock ADDED
@@ -0,0 +1,137 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ actionpack (7.0.8)
5
+ actionview (= 7.0.8)
6
+ activesupport (= 7.0.8)
7
+ rack (~> 2.0, >= 2.2.4)
8
+ rack-test (>= 0.6.3)
9
+ rails-dom-testing (~> 2.0)
10
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
11
+ actionview (7.0.8)
12
+ activesupport (= 7.0.8)
13
+ builder (~> 3.1)
14
+ erubi (~> 1.4)
15
+ rails-dom-testing (~> 2.0)
16
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
17
+ activemodel (7.0.8)
18
+ activesupport (= 7.0.8)
19
+ activerecord (7.0.8)
20
+ activemodel (= 7.0.8)
21
+ activesupport (= 7.0.8)
22
+ activesupport (7.0.8)
23
+ concurrent-ruby (~> 1.0, >= 1.0.2)
24
+ i18n (>= 1.6, < 2)
25
+ minitest (>= 5.1)
26
+ tzinfo (~> 2.0)
27
+ async (1.31.0)
28
+ console (~> 1.10)
29
+ nio4r (~> 2.3)
30
+ timers (~> 4.1)
31
+ async-dns (1.3.0)
32
+ async-io (~> 1.15)
33
+ async-io (1.38.0)
34
+ async
35
+ builder (3.2.4)
36
+ coderay (1.1.3)
37
+ concurrent-ruby (1.2.2)
38
+ console (1.23.2)
39
+ fiber-annotation
40
+ fiber-local
41
+ crass (1.0.6)
42
+ daemons (1.4.1)
43
+ dry-container (0.11.0)
44
+ concurrent-ruby (~> 1.0)
45
+ erubi (1.12.0)
46
+ eventmachine (1.2.7)
47
+ fiber-annotation (0.2.0)
48
+ fiber-local (1.0.0)
49
+ i18n (1.14.1)
50
+ concurrent-ruby (~> 1.0)
51
+ loofah (2.21.4)
52
+ crass (~> 1.0.2)
53
+ nokogiri (>= 1.12.0)
54
+ method_source (1.0.0)
55
+ minitest (5.20.0)
56
+ mustermann (3.0.0)
57
+ ruby2_keywords (~> 0.0.1)
58
+ net-ping (2.0.8)
59
+ net_http_unix (0.2.2)
60
+ nio4r (2.7.0)
61
+ nokogiri (1.15.4-x86_64-darwin)
62
+ racc (~> 1.4)
63
+ nokogiri (1.15.4-x86_64-linux)
64
+ racc (~> 1.4)
65
+ pry (0.14.2)
66
+ coderay (~> 1.1)
67
+ method_source (~> 1.0)
68
+ racc (1.7.3)
69
+ rack (2.2.8)
70
+ rack-protection (3.1.0)
71
+ rack (~> 2.2, >= 2.2.4)
72
+ rack-test (2.1.0)
73
+ rack (>= 1.3)
74
+ rails-dom-testing (2.2.0)
75
+ activesupport (>= 5.0.0)
76
+ minitest
77
+ nokogiri (>= 1.6)
78
+ rails-html-sanitizer (1.6.0)
79
+ loofah (~> 2.21)
80
+ nokogiri (~> 1.14)
81
+ railties (7.0.8)
82
+ actionpack (= 7.0.8)
83
+ activesupport (= 7.0.8)
84
+ method_source
85
+ rake (>= 12.2)
86
+ thor (~> 1.0)
87
+ zeitwerk (~> 2.5)
88
+ rake (13.1.0)
89
+ ruby2_keywords (0.0.5)
90
+ rubydns (2.0.2)
91
+ async-dns (~> 1.0)
92
+ sinatra (3.1.0)
93
+ mustermann (~> 3.0)
94
+ rack (~> 2.2, >= 2.2.4)
95
+ rack-protection (= 3.1.0)
96
+ tilt (~> 2.0)
97
+ sinatra-activerecord (2.0.27)
98
+ activerecord (>= 4.1)
99
+ sinatra (>= 1.0)
100
+ sqlite3 (1.6.8-x86_64-darwin)
101
+ sqlite3 (1.6.8-x86_64-linux)
102
+ standalone_migrations (7.1.2)
103
+ activerecord (>= 6.0.0, < 7.1.0)
104
+ nokogiri (~> 1.14)
105
+ railties (>= 6.0.0, < 7.1.0)
106
+ rake (>= 10.0)
107
+ thin (1.8.2)
108
+ daemons (~> 1.0, >= 1.0.9)
109
+ eventmachine (~> 1.0, >= 1.0.4)
110
+ rack (>= 1, < 3)
111
+ thor (1.3.0)
112
+ tilt (2.3.0)
113
+ timers (4.3.5)
114
+ tzinfo (2.0.6)
115
+ concurrent-ruby (~> 1.0)
116
+ zeitwerk (2.6.12)
117
+
118
+ PLATFORMS
119
+ x86_64-darwin-22
120
+ x86_64-linux
121
+
122
+ DEPENDENCIES
123
+ async-dns
124
+ dry-container
125
+ net-ping
126
+ net_http_unix
127
+ pry
128
+ rack (>= 2.0.6)
129
+ rubydns
130
+ sinatra
131
+ sinatra-activerecord
132
+ sqlite3
133
+ standalone_migrations
134
+ thin
135
+
136
+ BUNDLED WITH
137
+ 2.4.10
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Vasco Santos
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # MKIt - Micro Kubernetes on Ruby
2
+
3
+ This is micro kubernetes(tm) on Ruby(tm), a simple tool to deploy containers to mimic a (very) minimalistic k8 cluster with a nice REST API.
4
+
5
+ It contains a internal DNS and uses HAProxy for routing/balancing/fail-over for Pods access.
6
+ The database is a simple sqlite3 db and the server is a Sinatra based application.
7
+
8
+ The client is not done yet, only includes a simple wrapper to `curl`
9
+
10
+ The daemon is responsible for HAProxy pods routing configuration. It also provides the cluster DNS and manages the internal host interface.
11
+
12
+ ## Requirements
13
+
14
+ * Ruby
15
+ * HAProxy
16
+ * Docker
17
+ * Linux (iproute2 package)
18
+
19
+ ## Running
20
+
21
+ The `daemon` requires `root` user, you can run it directly on the repository root...
22
+
23
+ ```
24
+ # ./mkitd --help
25
+ Usage: mkitd [options]
26
+ -c config-dir set the config dir (default is /etc/mkit)
27
+ -p port set the port (default is 4567)
28
+ -b bind specify bind address (e.g. /tmp/app.sock)
29
+ -s server specify rack server/handler
30
+ -q turn on quiet mode (default is off)
31
+ -x turn on the mutex lock (default is off)
32
+ -e env set the environment (default is development)
33
+ -o addr set the host (default is (env == 'development' ? 'localhost' : '0.0.0.0'))
34
+
35
+ ```
36
+
37
+ or after the `gem install mkit-<version>.gem`. The server and client will be installed on host.
38
+
39
+ ```
40
+ # mkitd
41
+ ...
42
+ 0.65s info: MKIt is up and running! [ec=0xbe0] [pid=45804] [2023-12-29 15:46:04 +0000]
43
+ ```
44
+
45
+ There's also samples on the samples dir, for daemontools and systemd.
46
+
47
+ ### Accessing the API
48
+
49
+ * Create new service
50
+ * `mkitc POST services -F "file=@samples/apps/rabbitmq.yml"`
51
+ * Update service
52
+ * `mkitc PUT services/{id|service_name} -F "file=@samples/apps/rabbitmq.yml"`
53
+ * Get services
54
+ * `mkitc GET services/{id|service_name}[?verbose=true]`
55
+ * Delete service
56
+ * `mkitc DELETE services/{id|service_name}`
57
+ * List services
58
+ * `mkitc GET services?verbose=true`
59
+ * Control service
60
+ * `mkitc PUT services/{id|service_name}/start`
61
+ * `mkitc PUT services/{id|service_name}/stop`
62
+
63
+ Example:
64
+
65
+ ```
66
+ id name addr ports status
67
+ 4 postgres 10.210.198.10 tcp/5432 RUNNING
68
+ pods
69
+ id pod_id pod_name pod_ip status
70
+ 19 4ce31a007211 5d148a16f3aa 172.17.0.2 RUNNING
71
+ ```
72
+ The service `postgres` is available on IP `10.210.198.10:5432`
73
+
74
+ ## Configuration
75
+
76
+ On startup, configuration files on `config` directory will be copied to `/etc/mkit`. HAProxy config dir and control commands are defined on `mkit_config.yml`
77
+
78
+ You must configure `haproxy` to use config directory. e.g. on Ubuntu
79
+
80
+ ```
81
+ # /etc/default/haproxy
82
+
83
+ # Defaults file for HAProxy
84
+ #
85
+ # This is sourced by both, the initscript and the systemd unit file, so do not
86
+ # treat it as a shell script fragment.
87
+
88
+ # Change the config file location if needed
89
+ CONFIG="/etc/haproxy/haproxy.d"
90
+
91
+ # Add extra flags here, see haproxy(1) for a few options
92
+ #EXTRAOPTS="-de -m 16"
93
+ ```
94
+
95
+ ### Service
96
+
97
+ ```
98
+ service:
99
+ name: rabbitmq # unique
100
+ image: rabbitmq:3-management-alpine # image
101
+ network: bridge # docker network
102
+ ports: # haproxy port mapping: <external_port>|<internal_port>|<tcp|http>|round_robin
103
+ - 5672:5672:tcp:round_robin
104
+ - 80:15672:http:round_robin
105
+ resources:
106
+ max_replicas: 1
107
+ min_replicas: 1
108
+ volumes:
109
+ - docker://mkit_rabbitmq_data:/var/lib/rabbitmq # a docker volume
110
+ - /var/log/rabbitmq/logs:/var/log/rabbitmq # a local volume
111
+ environment:
112
+ RABBITMQ_DEFAULT_USER: admin
113
+ RABBITMQ_DEFAULT_PASS: admin
114
+ RABBITMQ_DEFAULT_VHOST: mkit
115
+ ```
116
+
117
+ ## Development
118
+
119
+ * build the gem
120
+ * `rake package`
121
+ * console
122
+ * `rake console`
123
+
124
+ # Thanks
125
+
126
+ For my kids. :)
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ ENV["SINATRA_ENV"] ||= "development"
2
+
3
+ require 'rubygems'
4
+ require 'sinatra/activerecord/rake'
5
+ require 'standalone_migrations'
6
+ require 'rubygems/package_task'
7
+ require 'rubygems/specification'
8
+ require 'rake/testtask'
9
+ require 'pry'
10
+ require 'fileutils'
11
+ require 'bundler/setup'
12
+ require 'dry-container'
13
+ require 'sinatra/activerecord'
14
+ require 'rubydns'
15
+ require_relative 'lib/mkit/version.rb'
16
+ require_relative 'lib/mkit/utils'
17
+ require_relative 'lib/mkit'
18
+
19
+ $LOAD_PATH.unshift File.expand_path('lib')
20
+ rails_env=ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
21
+ # db migrations, use database config
22
+ ENV["DATABASE_URL"]=MKIt::Utils.db_config_to_uri(rails_env)
23
+
24
+ desc 'Builds the gem'
25
+ task :package do
26
+ sh %{gem build "mkit.gemspec"}
27
+ end
28
+
29
+ task :install => [:package] do
30
+ sh %{gem install mkit-#{MKIt::VERSION}.gem}
31
+ end
32
+
33
+ desc 'Copy rb to packaging dir'
34
+ task :build => [:init] do
35
+ FileUtils.cp_r('app', 'target/build', {:remove_destination=>true})
36
+ FileUtils.cp_r('config', 'target/build', {:remove_destination=>true})
37
+ FileUtils.cp_r('bin', 'target/build', {:remove_destination=>true})
38
+ FileUtils.cp_r('lib', 'target/build', {:remove_destination=>true})
39
+ FileUtils.cp_r('config.ru', 'target/build', {:remove_destination=>true})
40
+ end
41
+
42
+ desc 'Create build dirs'
43
+ task :init do
44
+ FileUtils.mkdir_p('target/build')
45
+ FileUtils.mkdir_p('target/package')
46
+ end
47
+
48
+ desc "Rake Console"
49
+ task :console do
50
+ Pry.start
51
+ end
52
+
53
+ StandaloneMigrations::Tasks.load_tasks
54
+
data/bin/mkitc ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'rubygems'
5
+
6
+ class MKItClient
7
+
8
+ VERBS = %w{GET POST PUT DELETE}
9
+ def usage
10
+ puts
11
+ puts "usage: mkitc <verb> <path>"
12
+ puts " where <verb> is one of GET | POST | PUT | DELETE"
13
+ puts "e.g."
14
+ puts " mkitc GET applications"
15
+ puts
16
+ end
17
+
18
+ def run
19
+ if ARGV.size < 2 || VERBS.index(ARGV[0]).nil?
20
+ usage
21
+ exit 1
22
+ end
23
+
24
+ response = %x{curl -sL -X #{ARGV[0]} http://localhost:4567/#{ARGV[1]} #{ARGV[2]} #{ARGV[3]} #{ARGV[4]} #{ARGV[5]} #{ARGV[6]} #{ARGV[7]}}
25
+ puts response
26
+ end
27
+ end
28
+
29
+ client = MKItClient.new
30
+ client.run
31
+
data/bin/mkitd ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'rubygems'
5
+
6
+ PARAMS_CONFIG = {}
7
+
8
+ def up
9
+ require 'sinatra'
10
+ require 'sinatra/base'
11
+ require 'mkit'
12
+ # defaults
13
+ PARAMS_CONFIG[:bind] ||= "localhost"
14
+ PARAMS_CONFIG[:port] ||= 4567
15
+ #
16
+ MKIt.startup(options: PARAMS_CONFIG)
17
+
18
+ use Rack::MethodOverride
19
+ use ServicesController
20
+ use MkitJobsController
21
+
22
+ # sinatra::base ignores in parameters
23
+ # set it here or via configure...
24
+ Sinatra::Application.run!({port: PARAMS_CONFIG[:port], bind: PARAMS_CONFIG[:bind] })
25
+ # MKIt::Server.run
26
+ end
27
+
28
+
29
+ #
30
+ if ARGV.any?
31
+ require 'optparse'
32
+ parser = OptionParser.new do |op|
33
+ op.on('-c config-dir', 'set the config dir (default is /etc/mkit)') { |val| PARAMS_CONFIG[:config_dir] = val }
34
+ op.on('-p port', 'set the port (default is 4567)') { |val| PARAMS_CONFIG[:port] = Integer(val) }
35
+ op.on('-b bind ', 'specify bind address (e.g. /tmp/app.sock)') { |val| PARAMS_CONFIG[:bind] = val }
36
+ op.on('-s server', 'specify rack server/handler') { |val| PARAMS_CONFIG[:server] = val }
37
+ op.on('-q', 'turn on quiet mode (default is off)') { PARAMS_CONFIG[:quiet] = true }
38
+ op.on('-x', 'turn on the mutex lock (default is off)') { PARAMS_CONFIG[:lock] = true }
39
+ op.on('-e env', 'set the environment (default is development)') do |val|
40
+ ENV['RACK_ENV'] = val
41
+ PARAMS_CONFIG[:environment] = val.to_sym
42
+ end
43
+ op.on('-o addr', "set the host (default is (env == 'development' ? 'localhost' : '0.0.0.0'))") do |val|
44
+ PARAMS_CONFIG[:bind] = val
45
+ end
46
+ end
47
+ begin
48
+ parser.parse!(ARGV.dup)
49
+ rescue StandardError => e
50
+ PARAMS_CONFIG[:optparse_error] = e
51
+ end
52
+ end
53
+
54
+ up
55
+
@@ -0,0 +1,5 @@
1
+
2
+ development:
3
+ adapter: "sqlite3"
4
+ database: "/tmp/development.sqlite"
5
+ pool: 1024
@@ -0,0 +1,15 @@
1
+ mkit:
2
+ my_network:
3
+ ip: 10.210.198.1
4
+ haproxy:
5
+ config_dir: /etc/haproxy/haproxy.d
6
+ ctrl:
7
+ start: /etc/init.d/haproxy start
8
+ stop: /etc/init.d/haproxy stop
9
+ reload: /etc/init.d/haproxy restart
10
+ restart: /etc/init.d/haproxy restart
11
+ status: /etc/init.d/haproxy status
12
+ bin: /usr/sbin/haproxy
13
+ database:
14
+ env: development
15
+
@@ -0,0 +1,5 @@
1
+ #
2
+ # kidsd server options (for systemd unit | daemontools)
3
+ #
4
+ OPTIONS=""
5
+
@@ -0,0 +1,105 @@
1
+ class Setup < ActiveRecord::Migration[5.1]
2
+
3
+ def up
4
+ create_table :services do |t|
5
+ t.string :name
6
+ t.string :image
7
+ t.string :qdm
8
+ t.string :command
9
+ t.integer :max_replicas, default: 1
10
+ t.integer :min_replicas, default: 1
11
+ t.string :lease_id # ip config
12
+ t.string :pods_network, default: 'mkit' # docker network bridge|specific
13
+ t.integer :version # active version - later
14
+ t.string :status
15
+ t.timestamp :created_at, default: DateTime.now
16
+ t.timestamp :updated_at
17
+ end
18
+
19
+ add_index "services", ["name"], :name => "services_name_id"
20
+
21
+ create_table :service_configs do |t|
22
+ t.string :service_id
23
+ t.string :key
24
+ t.string :value
25
+ t.string :ctype # docker_param|env|volume?|....
26
+ t.integer :version
27
+ end
28
+
29
+ create_table :pods do |t|
30
+ t.string :service_id
31
+ t.string :pod_id
32
+ t.string :name
33
+ t.string :ip
34
+ t.string :image
35
+ t.string :status
36
+ t.integer :version
37
+ end
38
+
39
+ create_table :volumes do |t|
40
+ t.string :service_id
41
+ t.string :name
42
+ t.string :path
43
+ t.string :ctype # docker|local....
44
+ t.string :status
45
+ t.integer :version
46
+ end
47
+
48
+ create_table :service_ports do |t|
49
+ t.string :service_id
50
+ t.string :internal_port
51
+ t.string :external_port
52
+ t.string :mode # tcp | http
53
+ t.string :load_bal
54
+ t.integer :version
55
+ end
56
+
57
+ create_table :pools do |t|
58
+ t.string :name
59
+ t.string :ip
60
+ t.string :range
61
+ t.string :netmask
62
+ t.string :status # in_use|exausted
63
+ t.boolean :preferred, default: false
64
+ end
65
+
66
+ create_table :leases do |t|
67
+ t.string :pool_id
68
+ t.string :service_id
69
+ t.string :interface_name
70
+ t.string :interface_type # tun|tap
71
+ t.string :status # reserved|in_use|expired|deleted|....
72
+ t.string :ip
73
+ t.timestamp :expires_at
74
+ end
75
+
76
+ create_table :dns_hosts do |t|
77
+ t.string :service_id
78
+ t.string :pod_id
79
+ t.string :name # fqdn
80
+ t.string :ip
81
+ t.string :ipv6
82
+ end
83
+
84
+ # mkit configs
85
+ # e.g.
86
+ # default network pool
87
+ # rabbitmq address
88
+ # haproxy
89
+ # config.d path
90
+ # reload command - pq quero usar o daemontools
91
+ # stop
92
+ # start
93
+ # status
94
+ #
95
+ create_table :settings do |t|
96
+ t.string :key
97
+ t.string :value
98
+ end
99
+ end
100
+
101
+ def down
102
+ drop_table :services
103
+ end
104
+ end
105
+
@@ -0,0 +1,17 @@
1
+ class MkitJobs < ActiveRecord::Migration[5.1]
2
+
3
+ def up
4
+ create_table :mkit_jobs do |t|
5
+ t.string :topic
6
+ t.string :service_id
7
+ t.string :pod_id
8
+ t.string :status
9
+ t.string :retries
10
+ t.string :payload
11
+ t.timestamp :created_at
12
+ t.timestamp :updated_at
13
+ end
14
+ end
15
+
16
+ end
17
+