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.
- checksums.yaml +7 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +137 -0
- data/LICENSE +21 -0
- data/README.md +126 -0
- data/Rakefile +54 -0
- data/bin/mkitc +31 -0
- data/bin/mkitd +55 -0
- data/config/database.yml +5 -0
- data/config/mkit_config.yml +15 -0
- data/config/mkitd_config.sh +5 -0
- data/db/migrate/001_setup.rb +105 -0
- data/db/migrate/002_mkit_jobs.rb +17 -0
- data/db/schema.rb +108 -0
- data/lib/mkit/app/controllers/mkitjobs_controller.rb +37 -0
- data/lib/mkit/app/controllers/pods_controller.rb +30 -0
- data/lib/mkit/app/controllers/services_controller.rb +87 -0
- data/lib/mkit/app/helpers/docker_helper.rb +75 -0
- data/lib/mkit/app/helpers/erb_helper.rb +18 -0
- data/lib/mkit/app/helpers/haproxy.rb +41 -0
- data/lib/mkit/app/helpers/interface_helper.rb +17 -0
- data/lib/mkit/app/helpers/services_helper.rb +54 -0
- data/lib/mkit/app/mkit_server.rb +8 -0
- data/lib/mkit/app/model/dns_host.rb +11 -0
- data/lib/mkit/app/model/lease.rb +26 -0
- data/lib/mkit/app/model/mkit_job.rb +48 -0
- data/lib/mkit/app/model/pod.rb +95 -0
- data/lib/mkit/app/model/pool.rb +60 -0
- data/lib/mkit/app/model/service.rb +266 -0
- data/lib/mkit/app/model/service_config.rb +16 -0
- data/lib/mkit/app/model/service_port.rb +30 -0
- data/lib/mkit/app/model/setting.rb +1 -0
- data/lib/mkit/app/model/volume.rb +53 -0
- data/lib/mkit/app/templates/docker/docker_run.sh.erb +1 -0
- data/lib/mkit/app/templates/haproxy/0000_defaults.cfg +23 -0
- data/lib/mkit/app/templates/haproxy/xapp_haproxy.cfg.erb +30 -0
- data/lib/mkit/cmd_runner.rb +27 -0
- data/lib/mkit/config/config.rb +18 -0
- data/lib/mkit/config/environment.rb +26 -0
- data/lib/mkit/config/initializers/001_hash.rb +11 -0
- data/lib/mkit/config/initializers/002_openstruct.rb +7 -0
- data/lib/mkit/config/load_default_configs.rb +29 -0
- data/lib/mkit/config/the_config.yml +3 -0
- data/lib/mkit/ctypes.rb +31 -0
- data/lib/mkit/docker_listener.rb +97 -0
- data/lib/mkit/exceptions.rb +30 -0
- data/lib/mkit/haproxy.rb +48 -0
- data/lib/mkit/job_manager.rb +53 -0
- data/lib/mkit/mkit_dns.rb +54 -0
- data/lib/mkit/mkit_interface.rb +31 -0
- data/lib/mkit/sagas/asaga.rb +11 -0
- data/lib/mkit/sagas/create_pod_saga.rb +28 -0
- data/lib/mkit/sagas/saga_manager.rb +10 -0
- data/lib/mkit/status.rb +47 -0
- data/lib/mkit/utils.rb +51 -0
- data/lib/mkit/version.rb +4 -0
- data/lib/mkit/workers/aworker.rb +11 -0
- data/lib/mkit/workers/haproxy_worker.rb +35 -0
- data/lib/mkit/workers/pod_worker.rb +39 -0
- data/lib/mkit/workers/service_worker.rb +27 -0
- data/lib/mkit/workers/worker_manager.rb +14 -0
- data/lib/mkit.rb +158 -0
- data/mkit.gemspec +40 -0
- data/mkitd +10 -0
- data/samples/apps/postgres.yml +22 -0
- data/samples/apps/rabbitmq.yml +19 -0
- data/samples/daemontools/log/run +44 -0
- data/samples/daemontools/run +42 -0
- data/samples/systemd/mkitd.service +12 -0
- 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
|
+
|
data/config/database.yml
ADDED
@@ -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,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
|
+
|