mkit 0.2.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.
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
+