mkit 0.4.3 → 0.6.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 +4 -4
- data/README.md +143 -64
- data/bin/mkitc +230 -93
- data/bin/mkitd +13 -14
- data/config/mkit_config.yml +3 -1
- data/config/mkitc_config.yml +3 -0
- data/config/mkitd_config.sh +1 -1
- data/db/migrate/003_service_ports_ssl.rb +8 -0
- data/lib/mkit/app/helpers/services_helper.rb +20 -1
- data/lib/mkit/app/mkit_server.rb +8 -0
- data/lib/mkit/app/model/service_port.rb +13 -1
- data/lib/mkit/app/templates/haproxy/xapp_haproxy.cfg.erb +1 -1
- data/lib/mkit/config/config.rb +6 -1
- data/lib/mkit/ssl/easy_ssl.rb +28 -0
- data/lib/mkit/utils.rb +8 -0
- data/lib/mkit/version.rb +1 -1
- data/lib/mkit.rb +29 -3
- data/samples/apps/nexus.yml +1 -0
- metadata +5 -3
- data/lib/mkit/haproxy.rb +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca554f25f295a7403d5f0d654663d466430a361c8aa2629961f1710579e62506
|
4
|
+
data.tar.gz: d670fcc4523810439d73244276766a8e5ff70f2b8a052b292941014a11e7ca3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 825f5736fe72ce3bec3aab11f5edfa75b286a6e08ff4e6dc44be37c6d11a034e84a0910fca6ce78cb05ead4483ec228c368a749a301793396ddfc55043fc5bf9
|
7
|
+
data.tar.gz: 5b0c25f145e1c5ec19d8242d8e613c6746fc3ea25f4f1df0f39dc434ee43e56d480b399075230154d547abad466555f884077f1a1fff08590005645a762b3279
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
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
4
|
|
5
|
+
It's also a frontend for `docker`, providing an easier way for your services to be locally available, without the need to care about local `ports` availability.
|
6
|
+
|
5
7
|
It contains an internal DNS and uses HAProxy for routing/balancing/fail-over for Pods access.
|
6
8
|
The database is a simple sqlite3 db and the server is a Sinatra based application.
|
7
9
|
|
@@ -16,86 +18,57 @@ The daemon is responsible for HAProxy pods routing configuration. It also provid
|
|
16
18
|
* Docker
|
17
19
|
* Linux (iproute2 package)
|
18
20
|
|
21
|
+
**Note:** in order to have **ssl support**, you must install `openssl-dev` package (e.g. `libssl-dev` on Ubuntu) prior to install MKIt gem.
|
22
|
+
|
19
23
|
## Install
|
20
24
|
|
21
|
-
This is a simple ruby gem, so to install
|
25
|
+
This is a simple ruby gem, so to install execute:
|
22
26
|
```
|
23
27
|
# gem install mkit
|
24
28
|
```
|
25
29
|
|
26
|
-
##
|
27
|
-
|
28
|
-
The `daemon` requires `root` user (due to `ip` and `haproxy`), you can run it directly on the repository root...
|
29
|
-
|
30
|
-
```
|
31
|
-
# ./mkitd --help
|
32
|
-
Usage: mkitd [options]
|
33
|
-
-c config-dir set the config dir (default is /etc/mkit)
|
34
|
-
-p port set the port (default is 4567)
|
35
|
-
-b bind specify bind address (e.g. /tmp/app.sock)
|
36
|
-
-s server specify rack server/handler
|
37
|
-
-q turn on quiet mode (default is off)
|
38
|
-
-x turn on the mutex lock (default is off)
|
39
|
-
-e env set the environment (default is development)
|
40
|
-
-o addr set the host (default is (env == 'development' ? 'localhost' : '0.0.0.0'))
|
41
|
-
|
42
|
-
```
|
43
|
-
|
44
|
-
or after the `gem install mkit-<version>.gem`. The server and client will be installed on host.
|
45
|
-
|
46
|
-
```
|
47
|
-
# mkitd
|
48
|
-
...
|
49
|
-
0.65s info: MKIt is up and running! [ec=0xbe0] [pid=45804] [2023-12-29 15:46:04 +0000]
|
50
|
-
```
|
30
|
+
## Configuration
|
51
31
|
|
52
|
-
|
32
|
+
### Server configuration
|
53
33
|
|
54
|
-
|
34
|
+
On startup, [the server configuration](config) will be created on `/etc/mkit`.
|
55
35
|
|
56
|
-
|
36
|
+
The server will available by default on `https://localhost:4567` but you can configure server startup parameters on `/etc/mkit/mkitd_config.sh`
|
57
37
|
|
58
|
-
|
38
|
+
Please check [systemd](samples/systemd) or [daemontools](samples/daemontools) directories for more details.
|
59
39
|
|
60
40
|
```
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
ps show services status (alias for status)
|
68
|
-
status show services status
|
69
|
-
logs prints service logs
|
70
|
-
start start service
|
71
|
-
stop stop service
|
72
|
-
restart restart service
|
73
|
-
create create new service
|
74
|
-
update update service
|
75
|
-
rm remove service
|
76
|
-
version prints mkit server version
|
77
|
-
proxy haproxy status and control
|
78
|
-
|
79
|
-
Run 'mkitc help <command>' for specific command information.
|
41
|
+
# /etc/mkit/mkitd_config.sh
|
42
|
+
#
|
43
|
+
# mkitd server options (for systemd unit | daemontools)
|
44
|
+
#
|
45
|
+
OPTIONS=""
|
46
|
+
# e.g. OPTIONS="-b 0.0.0.0"
|
80
47
|
```
|
81
|
-
|
82
|
-
Example:
|
48
|
+
HAProxy config directory and control commands are defined on [mkit_config.yml](config/mkit_config.yml)
|
83
49
|
|
84
50
|
```
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
51
|
+
# /etc/mkit/mkit_config.yml - mkit server configuration file.
|
52
|
+
mkit:
|
53
|
+
my_network:
|
54
|
+
ip: 10.210.198.1
|
55
|
+
haproxy:
|
56
|
+
config_dir: /etc/haproxy/haproxy.d
|
57
|
+
ctrl:
|
58
|
+
start: systemctl start haproxy
|
59
|
+
stop: systemctl stop haproxy
|
60
|
+
reload: systemctl reload haproxy
|
61
|
+
restart: systemctl restart haproxy
|
62
|
+
status: systemctl status haproxy
|
63
|
+
database:
|
64
|
+
env: development
|
65
|
+
clients:
|
66
|
+
- id: client_1_id
|
67
|
+
- id: client_2_id
|
68
|
+
- ...
|
91
69
|
```
|
92
|
-
The service `postgres` is available on IP `10.210.198.10:5432`
|
93
|
-
|
94
|
-
## Configuration
|
95
|
-
|
96
|
-
On startup, configuration files on `config` directory will be copied to `/etc/mkit`. HAProxy config directory and control commands are defined on `mkit_config.yml`
|
97
70
|
|
98
|
-
You must configure `haproxy` to use config directory.
|
71
|
+
You must configure `haproxy` to use config directory. for example on Ubuntu:
|
99
72
|
|
100
73
|
```
|
101
74
|
# /etc/default/haproxy
|
@@ -112,6 +85,41 @@ CONFIG="/etc/haproxy/haproxy.d"
|
|
112
85
|
#EXTRAOPTS="-de -m 16"
|
113
86
|
```
|
114
87
|
|
88
|
+
#### Authorization
|
89
|
+
|
90
|
+
To access MKIt server API, you must add each client `id` to server configuration:
|
91
|
+
|
92
|
+
```
|
93
|
+
# /etc/mkit/mkit_config.yml - mkit server configuration file.
|
94
|
+
mkit:
|
95
|
+
my_network:
|
96
|
+
...
|
97
|
+
clients:
|
98
|
+
- id: client_1_id
|
99
|
+
- id: client_2_id
|
100
|
+
- ...
|
101
|
+
```
|
102
|
+
|
103
|
+
### Client configuration
|
104
|
+
|
105
|
+
On `mkitc` first call, default configuration will be copied to `$HOME/.mkit` with `local`default profile set.
|
106
|
+
|
107
|
+
You must call `mkitc init` to initialize client configuration.
|
108
|
+
|
109
|
+
Client identification key (`my_id`) will be generated, printed out to console and saved to the client's configuration file.
|
110
|
+
|
111
|
+
You may edit the local configuration file to add more servers and change active profile with `$mkitc profile set <profile_name>`, e.g. `$mkitc profile set server_2`
|
112
|
+
|
113
|
+
```
|
114
|
+
# ~/.mkit/mkitc_config.yml
|
115
|
+
mkit:
|
116
|
+
local:
|
117
|
+
server.uri: https://localhost:4567
|
118
|
+
server_2: # you can add more servers. change the client active profile with mkitc profile command
|
119
|
+
server.uri: https://192.168.29.232:4567
|
120
|
+
my_id: unique_id # this id is generated running mkitc init
|
121
|
+
```
|
122
|
+
|
115
123
|
### Service
|
116
124
|
|
117
125
|
```
|
@@ -123,7 +131,12 @@ service:
|
|
123
131
|
# <external_port>:[internal_port]:<tcp|http>:[round_robin (default)|leastconn]
|
124
132
|
# to define a range on `external_port`, leave `internal_port` blank
|
125
133
|
# - 5000-5100::tcp:round_robin
|
126
|
-
#
|
134
|
+
# range on `internal_port` is not supported
|
135
|
+
# ssl suport
|
136
|
+
# <external_port>:[internal_port]:<tcp|http>:round_robin|leastconn[:ssl[,<cert.pem>(mkit.pem default)>]]
|
137
|
+
# e.g.
|
138
|
+
# - 443:80:http:round_robin:ssl # uses mkitd default crt file (mkit.pem)
|
139
|
+
# - 443:80:http:round_robin:ssl,/etc/pki/foo.pem # custom crt file full path
|
127
140
|
- 5672:5672:tcp:round_robin
|
128
141
|
- 80:15672:http:round_robin
|
129
142
|
resources:
|
@@ -138,6 +151,72 @@ service:
|
|
138
151
|
RABBITMQ_DEFAULT_VHOST: mkit
|
139
152
|
```
|
140
153
|
|
154
|
+
## Running
|
155
|
+
|
156
|
+
The `mkitd server daemon` requires `root` user (due to `ip` and `haproxy`).
|
157
|
+
After installing the gem, server and client will be available on host.
|
158
|
+
```
|
159
|
+
# mkitd --help
|
160
|
+
Usage: mkitd [options]
|
161
|
+
-c config-dir set the config dir (default is /etc/mkit)
|
162
|
+
-p port set the port (default is 4567)
|
163
|
+
-b bind specify bind address (e.g. 0.0.0.0)
|
164
|
+
-e env set the environment (default is development)
|
165
|
+
-o addr alias for '-b' option
|
166
|
+
--no-ssl disable ssl - use http for local server. (default is https)
|
167
|
+
--ssl-key-file PATH Path to private key (default mkit internal)
|
168
|
+
--ssl-cert-file PATH Path to certificate (default mkit internal)
|
169
|
+
```
|
170
|
+
|
171
|
+
There's also samples for [systemd](samples/systemd) and [daemontools](samples/daemontools) as well for some miscellaneous [spps](samples/apps).
|
172
|
+
|
173
|
+
### Accessing the API
|
174
|
+
|
175
|
+
A client is provided to interact with MKIt server.
|
176
|
+
|
177
|
+
Run `mkitc help` for a list of current supported commands.
|
178
|
+
|
179
|
+
```
|
180
|
+
Usage: mkitc <command> [options]
|
181
|
+
|
182
|
+
Micro k8s on Ruby - a simple tool to mimic a (very) minimalistic k8 cluster
|
183
|
+
|
184
|
+
Commands:
|
185
|
+
|
186
|
+
init init mkit client
|
187
|
+
ps show services status (alias for status)
|
188
|
+
status show services status
|
189
|
+
logs prints service logs
|
190
|
+
start start service
|
191
|
+
stop stop service
|
192
|
+
restart restart service
|
193
|
+
create create new service
|
194
|
+
update update service
|
195
|
+
rm remove service
|
196
|
+
version prints mkit server version
|
197
|
+
proxy haproxy status and control
|
198
|
+
profile mkit client configuration profile
|
199
|
+
|
200
|
+
Run 'mkitc help <command>' for specific command information.
|
201
|
+
```
|
202
|
+
|
203
|
+
Example:
|
204
|
+
|
205
|
+
```
|
206
|
+
$ mkitc ps
|
207
|
+
+----+-------+---------------+-------------------+--------------+---------+
|
208
|
+
| id | name | addr | ports | pods | status |
|
209
|
+
+----+-------+---------------+-------------------+--------------+---------+
|
210
|
+
| 1 | mongo | 10.210.198.10 | tcp/27017 | 106e2b59cb11 | RUNNING |
|
211
|
+
| 2 | nexus | 10.210.198.11 | http/80,https/443 | 68e239e5102a | RUNNING |
|
212
|
+
+----+-------+---------------+-------------------+--------------+---------+
|
213
|
+
```
|
214
|
+
The service `mongo` is available on IP `10.210.198.10:27017`
|
215
|
+
The service `nexus` is available on IP `10.210.198.11:80` and on port `443` with ssl.
|
216
|
+
|
217
|
+
**Note:** Don't forget to call `mkitc init` to initialize client configuration and to add the `client-id`
|
218
|
+
to the server authorized clients list.
|
219
|
+
|
141
220
|
## Development
|
142
221
|
|
143
222
|
* build the gem
|
data/bin/mkitc
CHANGED
@@ -9,25 +9,29 @@ require 'json'
|
|
9
9
|
require 'net_http_unix'
|
10
10
|
require 'securerandom'
|
11
11
|
require 'erb'
|
12
|
+
require 'uri'
|
13
|
+
require 'fileutils'
|
12
14
|
|
13
|
-
class InvalidParametersException <
|
15
|
+
class InvalidParametersException < Exception
|
14
16
|
attr_reader :command
|
17
|
+
|
15
18
|
def initialize(cause, command = nil)
|
16
19
|
super(cause)
|
17
20
|
@command = command
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
21
|
-
class
|
22
|
-
def
|
23
|
-
@client = NetX::HTTPUnix.new('localhost', 4567)
|
24
|
-
end
|
25
|
-
|
26
|
-
def dict
|
24
|
+
class CommandPalette
|
25
|
+
def schema
|
27
26
|
global_args = [
|
28
27
|
{ short: '-v', long: '--verbose', help: 'verbose', mandatory: false, value: nil }
|
29
28
|
]
|
30
|
-
|
29
|
+
[
|
30
|
+
{
|
31
|
+
cmd: 'init',
|
32
|
+
help: 'init mkit client',
|
33
|
+
request: { }
|
34
|
+
},
|
31
35
|
{
|
32
36
|
cmd: 'ps',
|
33
37
|
args: [
|
@@ -140,69 +144,96 @@ class MKItClient
|
|
140
144
|
],
|
141
145
|
help: 'haproxy status and control',
|
142
146
|
usage: ['<start|stop|restart|status>']
|
147
|
+
},
|
148
|
+
{
|
149
|
+
cmd: 'profile',
|
150
|
+
options: [
|
151
|
+
{
|
152
|
+
cmd: 'set',
|
153
|
+
request: { verb: 'set' },
|
154
|
+
args: [
|
155
|
+
{ name: 'profile_name', mandatory: true }
|
156
|
+
],
|
157
|
+
help: 'set mkit client configuration profile'
|
158
|
+
},
|
159
|
+
{
|
160
|
+
cmd: 'show',
|
161
|
+
request: { verb: 'show' },
|
162
|
+
help: 'show mkit client current profile'
|
163
|
+
}
|
164
|
+
],
|
165
|
+
help: 'mkit client configuration profile',
|
166
|
+
usage: ['<[set <profile_name>]|[show]>']
|
143
167
|
}
|
144
168
|
]
|
145
|
-
command_dict
|
146
169
|
end
|
170
|
+
end
|
147
171
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
end
|
163
|
-
msg += "\n"
|
164
|
-
msg += "Run 'mkitc help <command>' for specific command information.\n\n"
|
165
|
-
else
|
166
|
-
msg += format("\nUsage: mkitc %s %s\n\n", my_cmd[:cmd], my_cmd[:usage].nil? ? '' : my_cmd[:usage].join(' '))
|
167
|
-
msg += format("%s\n", my_cmd[:help])
|
168
|
-
unless my_cmd[:options].nil?
|
169
|
-
msg += "\nOptions:\n"
|
170
|
-
my_cmd[:options].each do |c|
|
171
|
-
msg += format("%-10s %s\n", c[:cmd], c[:help])
|
172
|
-
end
|
173
|
-
end
|
174
|
-
msg += "\n"
|
172
|
+
class MKItClient
|
173
|
+
def initialize
|
174
|
+
@root = File.expand_path('..', __dir__)
|
175
|
+
@config_dir = "#{ENV['HOME']}/.mkit"
|
176
|
+
@profile_file = "#{@config_dir}/current"
|
177
|
+
@commands = CommandPalette.new
|
178
|
+
@config_file = "#{@config_dir}/mkitc_config.yml"
|
179
|
+
create_default_config
|
180
|
+
end
|
181
|
+
|
182
|
+
def create_default_config
|
183
|
+
unless File.exist?(@config_dir)
|
184
|
+
puts "Creating config directory on '#{@config_dir}'..."
|
185
|
+
FileUtils.mkdir_p(@config_dir)
|
175
186
|
end
|
176
|
-
|
177
|
-
|
187
|
+
FileUtils.cp("#{@root}/config/mkitc_config.yml", @config_dir) unless File.exist?(@config_file)
|
188
|
+
profile({ verb: 'set' }, { profile_name: 'local' }) unless File.exist?(@profile_file)
|
178
189
|
end
|
179
190
|
|
180
|
-
def
|
181
|
-
|
182
|
-
|
191
|
+
def read_configuration(init_call = false)
|
192
|
+
current_profile = File.read(@profile_file)
|
193
|
+
if current_profile.nil? || current_profile.empty?
|
194
|
+
# force set default
|
195
|
+
profile({ verb: 'set' }, { profile_name: 'local' })
|
196
|
+
current_profile = 'local'
|
183
197
|
end
|
198
|
+
cfg = YAML.load_file(@config_file)
|
184
199
|
|
185
|
-
|
186
|
-
|
187
|
-
raise InvalidParametersException.new('Invalid configuration file', c = dict.select { |k| k[:cmd] == 'create' }.first)
|
188
|
-
else
|
189
|
-
request(request, request_hash)
|
200
|
+
if cfg['mkit'].nil? || cfg['mkit'][current_profile.lstrip].nil?
|
201
|
+
raise InvalidParametersException, "invalid configuration found on '~/.mkit' or profile not found"
|
190
202
|
end
|
191
|
-
end
|
192
203
|
|
193
|
-
|
194
|
-
|
195
|
-
raise InvalidParametersException.new(
|
204
|
+
@configuration = cfg['mkit'][current_profile.lstrip]
|
205
|
+
if !init_call && cfg['my_id'].nil?
|
206
|
+
raise InvalidParametersException.new("Please run 'mkitc init' to initialize mkit client.", find_command('init'))
|
196
207
|
end
|
208
|
+
@my_id = cfg['my_id']
|
209
|
+
cfg
|
210
|
+
end
|
197
211
|
|
198
|
-
|
199
|
-
|
200
|
-
|
212
|
+
def client(req)
|
213
|
+
read_configuration
|
214
|
+
req['X-API-KEY'] = @my_id
|
215
|
+
uri = URI(@configuration['server.uri'])
|
216
|
+
case uri.scheme
|
217
|
+
when 'https'
|
218
|
+
@client = NetX::HTTPUnix.new(uri.host, uri.port)
|
219
|
+
@client.use_ssl = true
|
220
|
+
@client.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
221
|
+
when 'http'
|
222
|
+
@client = NetX::HTTPUnix.new(uri.host, uri.port)
|
223
|
+
when 'sock'
|
224
|
+
@client = NetX::HTTPUnix.new("unix://#{uri.path}")
|
201
225
|
else
|
202
|
-
|
203
|
-
request_hash[:id] = id
|
204
|
-
request(request, request_hash)
|
226
|
+
raise InvalidParametersException, 'Invalid mkit server uri. Please check configuration'
|
205
227
|
end
|
228
|
+
@client.request(req)
|
229
|
+
end
|
230
|
+
|
231
|
+
def dict
|
232
|
+
@commands.schema
|
233
|
+
end
|
234
|
+
|
235
|
+
def find_command(cmd)
|
236
|
+
dict.select { |k| k[:cmd] == cmd }.first
|
206
237
|
end
|
207
238
|
|
208
239
|
def parse_args(args)
|
@@ -211,55 +242,35 @@ class MKItClient
|
|
211
242
|
# short circuit for help
|
212
243
|
if cmd == 'help' || args.empty?
|
213
244
|
if args.size > 1
|
214
|
-
c =
|
245
|
+
c = find_command(args[1])
|
215
246
|
raise InvalidParametersException, "'#{args[1]}' is not a valid help topic." if c.nil?
|
216
247
|
end
|
217
248
|
return help(cmd: c)
|
218
249
|
else
|
219
|
-
c =
|
250
|
+
c = find_command(cmd)
|
220
251
|
end
|
221
252
|
raise InvalidParametersException, 'Command not found' if c.nil?
|
222
253
|
|
254
|
+
command = c
|
223
255
|
myargs = args.dup
|
224
256
|
myargs.delete(cmd)
|
225
257
|
|
226
|
-
max_args_size = c[:args].nil? ? 0 : c[:args].size
|
227
|
-
max_options_size = c[:options].nil? ? 0 : 1
|
228
|
-
max_args_size += max_options_size
|
229
|
-
|
230
|
-
min_args_size = c[:args].nil? ? 0 : c[:args].select { |a| a[:mandatory] == true }.size
|
231
|
-
min_options_size = c[:options].nil? ? 0 : 1
|
232
|
-
min_args_size += min_options_size
|
233
|
-
|
234
|
-
if myargs.size > max_args_size || myargs.size < min_args_size
|
235
|
-
raise InvalidParametersException.new('Invalid parameters found.', c)
|
236
|
-
end
|
237
|
-
|
238
258
|
request_hash = {}
|
239
|
-
request =
|
259
|
+
request = command[:request]
|
240
260
|
unless myargs.empty?
|
241
|
-
unless c[:args].nil?
|
242
|
-
idx = 0
|
243
|
-
c[:args].each do |a|
|
244
|
-
request_hash[a[:name].to_sym] = myargs[idx]
|
245
|
-
request[:uri] = request[:uri] + a[:uri] unless a[:uri].nil?
|
246
|
-
idx += 1
|
247
|
-
end
|
248
|
-
end
|
249
261
|
# options
|
250
262
|
unless c[:options].nil?
|
251
|
-
|
252
|
-
|
253
|
-
option = c[:options].select { |o| o[:cmd] == s }.first
|
254
|
-
raise InvalidParametersException.new('Invalid parameters found.', c) if option.nil? || option.empty?
|
255
|
-
end
|
256
|
-
raise InvalidParametersException.new('Invalid parameters found.', c) if option.nil? || option.empty?
|
263
|
+
command = c[:options].select { |o| o[:cmd] == myargs[0] }.first
|
264
|
+
raise InvalidParametersException.new('Invalid parameters found.', c) if command.nil? || command.empty?
|
257
265
|
|
258
|
-
|
266
|
+
myargs.delete_at(0)
|
267
|
+
request = command[:request]
|
259
268
|
end
|
269
|
+
fill_cmd_args(command[:args], myargs, request, request_hash)
|
260
270
|
end
|
261
|
-
raise InvalidParametersException
|
271
|
+
raise InvalidParametersException.new('Invalid command or parameters.', c) if request.nil?
|
262
272
|
|
273
|
+
validate_command(command, request_hash)
|
263
274
|
if respond_to? c[:cmd]
|
264
275
|
send(c[:cmd], request, request_hash)
|
265
276
|
else
|
@@ -267,11 +278,25 @@ class MKItClient
|
|
267
278
|
end
|
268
279
|
end
|
269
280
|
|
270
|
-
def
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
281
|
+
def fill_cmd_args(args, myargs, request, request_hash)
|
282
|
+
return if args.nil?
|
283
|
+
|
284
|
+
idx = 0
|
285
|
+
args.each do |a|
|
286
|
+
request_hash[a[:name].to_sym] = myargs[idx]
|
287
|
+
request[:uri] = request[:uri] + a[:uri] unless a[:uri].nil?
|
288
|
+
idx += 1
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
def validate_command(command, request_hash)
|
293
|
+
return if command[:args].nil?
|
294
|
+
|
295
|
+
command[:args].select { |a| a[:mandatory] == true }.each do |a|
|
296
|
+
if request_hash[a[:name].to_sym].nil?
|
297
|
+
raise InvalidParametersException.new("Missing mandatory parameter: #{a[:name]}", command)
|
298
|
+
end
|
299
|
+
end
|
275
300
|
end
|
276
301
|
|
277
302
|
def request(request, request_args = nil)
|
@@ -304,7 +329,7 @@ class MKItClient
|
|
304
329
|
when :delete
|
305
330
|
req = Net::HTTP::Delete.new(uri)
|
306
331
|
end
|
307
|
-
|
332
|
+
client(req).body
|
308
333
|
end
|
309
334
|
|
310
335
|
def attach(file)
|
@@ -318,6 +343,118 @@ class MKItClient
|
|
318
343
|
body << "\r\n--#{boundary}--\r\n"
|
319
344
|
[body.join, boundary]
|
320
345
|
end
|
346
|
+
|
347
|
+
def doIt(args)
|
348
|
+
result = parse_args(args)
|
349
|
+
puts result
|
350
|
+
rescue InvalidParametersException => e
|
351
|
+
help(cause: e)
|
352
|
+
end
|
353
|
+
|
354
|
+
def help(cause: nil, cmd: nil)
|
355
|
+
msg = ''
|
356
|
+
if cause.nil?
|
357
|
+
my_cmd = cmd
|
358
|
+
else
|
359
|
+
msg += "MKItc: #{cause.message}\n"
|
360
|
+
my_cmd = cause.command
|
361
|
+
end
|
362
|
+
if my_cmd.nil?
|
363
|
+
msg += "\nUsage: mkitc <command> [options]\n\n"
|
364
|
+
msg += "Micro k8s on Ruby - a simple tool to mimic a (very) minimalistic k8 cluster\n\n"
|
365
|
+
msg += "Commands:\n\n"
|
366
|
+
dict.each do |c|
|
367
|
+
msg += format("%-10s %s\n", c[:cmd], c[:help])
|
368
|
+
end
|
369
|
+
msg += "\n"
|
370
|
+
msg += "Run 'mkitc help <command>' for specific command information.\n\n"
|
371
|
+
else
|
372
|
+
msg += format("\nUsage: mkitc %s %s\n\n", my_cmd[:cmd], my_cmd[:usage].nil? ? '' : my_cmd[:usage].join(' '))
|
373
|
+
msg += format("%s\n", my_cmd[:help])
|
374
|
+
unless my_cmd[:options].nil?
|
375
|
+
msg += "\nOptions:\n"
|
376
|
+
my_cmd[:options].each do |c|
|
377
|
+
msg += format("%-10s %s\n", c[:cmd], c[:help])
|
378
|
+
end
|
379
|
+
end
|
380
|
+
msg += "\n"
|
381
|
+
end
|
382
|
+
puts msg
|
383
|
+
exit 1
|
384
|
+
end
|
385
|
+
|
386
|
+
def init(request, request_hash = nil)
|
387
|
+
cfg = read_configuration(true)
|
388
|
+
if cfg['my_id'].nil?
|
389
|
+
my_id = SecureRandom.uuid.gsub('-','')
|
390
|
+
cfg['my_id'] = my_id
|
391
|
+
File.write(@config_file, cfg.to_yaml)
|
392
|
+
puts "Please check if your api-key is on mkitd server allowed keys"
|
393
|
+
else
|
394
|
+
my_id = cfg['my_id']
|
395
|
+
end
|
396
|
+
puts "Your api-key is #{my_id}"
|
397
|
+
end
|
398
|
+
def create(request, request_hash = nil)
|
399
|
+
unless File.file?(request_hash[:file])
|
400
|
+
raise InvalidParametersException.new('File not found.', find_command('create'))
|
401
|
+
end
|
402
|
+
|
403
|
+
yaml = YAML.load_file(request_hash[:file])
|
404
|
+
if yaml['service'].nil?
|
405
|
+
raise InvalidParametersException.new('Invalid configuration file', find_command('create'))
|
406
|
+
else
|
407
|
+
request(request, request_hash)
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
def update(request, request_hash = nil)
|
412
|
+
unless File.file?(request_hash[:file])
|
413
|
+
raise InvalidParametersException.new('File not found.', find_command('update'))
|
414
|
+
end
|
415
|
+
|
416
|
+
yaml = YAML.load_file(request_hash[:file])
|
417
|
+
if yaml['service'].nil?
|
418
|
+
raise InvalidParametersException.new('Invalid configuration file', find_command('update'))
|
419
|
+
else
|
420
|
+
id = yaml['service']['name']
|
421
|
+
request_hash[:id] = id
|
422
|
+
request(request, request_hash)
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
def profile(request, request_hash = {})
|
427
|
+
cfg = YAML.load_file("#{@config_dir}/mkitc_config.yml")
|
428
|
+
cmd = find_command('profile')
|
429
|
+
if cfg['mkit'].nil?
|
430
|
+
raise InvalidParametersException.new(
|
431
|
+
"Invalid configuration on '~/.mkit'\nPlease fix or clean up for defaults apply", cmd
|
432
|
+
)
|
433
|
+
end
|
434
|
+
|
435
|
+
case request[:verb]
|
436
|
+
when 'set'
|
437
|
+
profile = request_hash[:profile_name]
|
438
|
+
if cfg['mkit'][profile.lstrip].nil?
|
439
|
+
raise InvalidParametersException.new("Profile not found on '~/.mkit' configuration", cmd)
|
440
|
+
end
|
441
|
+
|
442
|
+
puts "Setting current profile to #{profile}."
|
443
|
+
File.write(@profile_file, request_hash[:profile_name])
|
444
|
+
''
|
445
|
+
when 'show'
|
446
|
+
active = File.read("#{@config_dir}/current")
|
447
|
+
cfg['mkit'].map do |k, _v|
|
448
|
+
if k == active
|
449
|
+
"*#{k}"
|
450
|
+
else
|
451
|
+
k
|
452
|
+
end
|
453
|
+
end.join(' ')
|
454
|
+
else
|
455
|
+
raise InvalidParametersException.new("Invalid 'profile' operation", cmd)
|
456
|
+
end
|
457
|
+
end
|
321
458
|
end
|
322
459
|
|
323
460
|
#
|
data/bin/mkitd
CHANGED
@@ -9,9 +9,7 @@ def up
|
|
9
9
|
require 'sinatra'
|
10
10
|
require 'sinatra/base'
|
11
11
|
require 'mkit'
|
12
|
-
|
13
|
-
PARAMS_CONFIG[:bind] ||= 'localhost'
|
14
|
-
PARAMS_CONFIG[:port] ||= 4567
|
12
|
+
|
15
13
|
MKIt.startup(options: PARAMS_CONFIG)
|
16
14
|
|
17
15
|
use Rack::MethodOverride
|
@@ -21,26 +19,27 @@ def up
|
|
21
19
|
|
22
20
|
# sinatra::base ignores in parameters
|
23
21
|
# set it here or via configure...
|
24
|
-
Sinatra::Application.run!({ port: PARAMS_CONFIG[:port], bind: PARAMS_CONFIG[:bind] })
|
25
|
-
|
22
|
+
# Sinatra::Application.run!({ port: PARAMS_CONFIG[:port], bind: PARAMS_CONFIG[:bind] })
|
23
|
+
Sinatra::Application.run! do |server|
|
24
|
+
MKIt.options(server)
|
25
|
+
end
|
26
|
+
|
26
27
|
end
|
27
28
|
|
28
29
|
if ARGV.any?
|
29
30
|
require 'optparse'
|
30
31
|
parser = OptionParser.new do |op|
|
31
32
|
op.on('-c config-dir', 'set the config dir (default is /etc/mkit)') { |val| PARAMS_CONFIG[:config_dir] = val }
|
32
|
-
op.on('-p port',
|
33
|
-
op.on('-b bind
|
34
|
-
op.on('-
|
35
|
-
op.on('-
|
36
|
-
op.on('-x', 'turn on the mutex lock (default is off)') { PARAMS_CONFIG[:lock] = true }
|
37
|
-
op.on('-e env', 'set the environment (default is development)') do |val|
|
33
|
+
op.on('-p port', 'set the port (default is 4567)') { |val| PARAMS_CONFIG[:port] = Integer(val) }
|
34
|
+
op.on('-b bind', 'specify bind address (e.g. 0.0.0.0)') { |val| PARAMS_CONFIG[:bind] = val }
|
35
|
+
op.on('-o addr', 'alias for bind option') { |val| PARAMS_CONFIG[:bind] = val }
|
36
|
+
op.on('-e env', 'set the environment (default is development)') do |val|
|
38
37
|
ENV['RACK_ENV'] = val
|
39
38
|
PARAMS_CONFIG[:environment] = val.to_sym
|
40
39
|
end
|
41
|
-
op.on('-
|
42
|
-
|
43
|
-
|
40
|
+
op.on('--no-ssl', 'disable ssl - use http for local server. (default is https)') { PARAMS_CONFIG[:ssl] = false }
|
41
|
+
op.on('--ssl-key-file PATH', 'Path to private key (default mkit internal)') { |val| PARAMS_CONFIG[:private_key_file] = val }
|
42
|
+
op.on('--ssl-cert-file PATH', 'Path to certificate (default mkit internal)') { |val| PARAMS_CONFIG[:cert_chain_file] = val }
|
44
43
|
end
|
45
44
|
begin
|
46
45
|
parser.parse!(ARGV.dup)
|
data/config/mkit_config.yml
CHANGED
data/config/mkitd_config.sh
CHANGED
@@ -24,9 +24,28 @@ module MKIt
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def build_table_row(data)
|
27
|
-
ports = data.service_port&.each.map { |p|
|
27
|
+
ports = data.service_port&.each.map { |p| build_port(p) }.join(',')
|
28
28
|
pods = data.pod.each.map { |p| p.name.to_s }.join(' ')
|
29
29
|
[data.id, data.name, data.lease&.ip, ports, pods, data.status]
|
30
30
|
end
|
31
|
+
|
32
|
+
def build_port(p)
|
33
|
+
case p.mode
|
34
|
+
when 'http'
|
35
|
+
if p.ssl?
|
36
|
+
"#{p.mode}s/#{p.external_port}"
|
37
|
+
else
|
38
|
+
"#{p.mode}/#{p.external_port}"
|
39
|
+
end
|
40
|
+
when 'tcp'
|
41
|
+
if p.ssl?
|
42
|
+
"s#{p.mode}/#{p.external_port}"
|
43
|
+
else
|
44
|
+
"#{p.mode}/#{p.external_port}"
|
45
|
+
end
|
46
|
+
else
|
47
|
+
"#{p.mode}/#{p.external_port}"
|
48
|
+
end
|
49
|
+
end
|
31
50
|
end
|
32
51
|
end
|
data/lib/mkit/app/mkit_server.rb
CHANGED
@@ -9,6 +9,14 @@ module MKIt
|
|
9
9
|
set :show_exceptions, false
|
10
10
|
set :raise_errors, false
|
11
11
|
|
12
|
+
before do
|
13
|
+
api_key = request.env['HTTP_X_API_KEY']
|
14
|
+
cfg = YAML.load_file(MKIt::Config.config_file)
|
15
|
+
if cfg.nil? || cfg['mkit'].nil? || cfg['mkit']['clients'].nil? || !cfg['mkit']['clients'].map{|h| h['id']}.include?(api_key)
|
16
|
+
error 401, 'Unauthorized - please add your client-id to authorized clients list'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
12
20
|
error MKIt::BaseException do |e|
|
13
21
|
MKItLogger.debug e
|
14
22
|
error e.error_code, e.message
|
@@ -4,7 +4,7 @@ require 'mkit/exceptions'
|
|
4
4
|
class ServicePort < ActiveRecord::Base
|
5
5
|
belongs_to :service
|
6
6
|
|
7
|
-
CONFIG_EXPRESSION=/^(.*?):(.*?):(tcp|http):(.*?)$/
|
7
|
+
CONFIG_EXPRESSION=/^(.*?):(.*?):(tcp|http):(.*?)($|:ssl$|:ssl,(.+))$/
|
8
8
|
|
9
9
|
def self.create(service:, config:)
|
10
10
|
sp = ServicePort.new(service: service, version: service.version)
|
@@ -18,22 +18,34 @@ class ServicePort < ActiveRecord::Base
|
|
18
18
|
# # src:dest:tcp|http:round_robin|leastconn
|
19
19
|
# - 5532:5432:tcp:round_robin
|
20
20
|
# - 5532-6000::tcp:round_robin
|
21
|
+
# # ssl support:
|
22
|
+
# # src:dest:tcp|http:round_robin|leastconn[:ssl[,<cert.pem>(mkit.pem default)>]]
|
23
|
+
# - 443:80:tcp:round_robin:ssl # crt file is mkit.pem
|
24
|
+
# - 443:80:tcp:round_robin:ssl,/etc/pki/foo.pem # crt file full path
|
21
25
|
# model:
|
22
26
|
# service_ports:
|
23
27
|
# - external: 5432
|
24
28
|
# internal: 5432
|
25
29
|
# mode: tcp|http
|
26
30
|
# load_bal: round_robin
|
31
|
+
# ssl: true|false
|
32
|
+
# crt: full path
|
27
33
|
def parse_config(config)
|
28
34
|
ports = config.match(CONFIG_EXPRESSION)
|
29
35
|
raise MKIt::InvalidPortsConfiguration.new("no match with config expression $#{CONFIG_EXPRESSION}") if ports.nil?
|
30
36
|
|
37
|
+
puts ports
|
31
38
|
self.external_port = ports[1]
|
32
39
|
self.internal_port = ports[2]
|
33
40
|
self.mode = ports[3]
|
34
41
|
self.load_bal = ports[4]
|
42
|
+
self.ssl = !ports[5].nil? && ports[5].start_with?(':ssl') ? 'true':'false'
|
43
|
+
self.crt = ports[7].nil? ? MKIt::Utils.proxy_cert : ports[7]
|
35
44
|
end
|
36
45
|
|
46
|
+
def ssl?
|
47
|
+
self.ssl == 'true'
|
48
|
+
end
|
37
49
|
def load_balance
|
38
50
|
case self.load_bal
|
39
51
|
when /^round_robin$/
|
@@ -6,7 +6,7 @@
|
|
6
6
|
# start <%=name%>-<%=port.external_port%>
|
7
7
|
#
|
8
8
|
frontend <%=name%>-<%=port.external_port%>-front
|
9
|
-
bind <%=lease.ip%>:<%=port.external_port%>
|
9
|
+
bind <%=lease.ip%>:<%=port.external_port%> <%=if port.ssl? then "ssl crt #{port.crt}" end%>
|
10
10
|
mode <%=port.mode%>
|
11
11
|
#
|
12
12
|
use_backend <%=name%>-<%=port.external_port%>-back
|
data/lib/mkit/config/config.rb
CHANGED
@@ -6,13 +6,18 @@ require 'yaml'
|
|
6
6
|
module MKIt
|
7
7
|
module Config
|
8
8
|
extend self
|
9
|
+
|
9
10
|
def load_yml!(path)
|
11
|
+
@config_file = path
|
10
12
|
@config = YAML.load(File.new(path).read).to_o
|
11
13
|
end
|
14
|
+
|
15
|
+
def config_file
|
16
|
+
@config_file
|
17
|
+
end
|
12
18
|
#
|
13
19
|
def method_missing(name,*args)
|
14
20
|
return @config.send(name,*args)
|
15
|
-
super.method_missing name
|
16
21
|
end
|
17
22
|
end
|
18
23
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
module MKIt
|
4
|
+
class EasySSL
|
5
|
+
def self.create_self_certificate(cert_dir)
|
6
|
+
unless File.exist?("#{cert_dir}/#{MKIt::Utils::MKIT_CRT}")
|
7
|
+
key = OpenSSL::PKey::RSA.new 4096
|
8
|
+
name = OpenSSL::X509::Name.parse '/CN=MKIt/DC=server'
|
9
|
+
cert = OpenSSL::X509::Certificate.new
|
10
|
+
cert.version = 2
|
11
|
+
cert.serial = 0
|
12
|
+
cert.not_before = Time.now
|
13
|
+
cert.not_after = Time.now + 20 * 365 * 24 * 60 * 60
|
14
|
+
cert.public_key = key.public_key
|
15
|
+
cert.subject = name
|
16
|
+
cert.issuer = name
|
17
|
+
cert.sign key, OpenSSL::Digest.new('SHA256')
|
18
|
+
# my cert and key files
|
19
|
+
open "#{cert_dir}/#{MKIt::Utils::MKIT_CRT}", 'w' do |io| io.write cert.to_pem end
|
20
|
+
open "#{cert_dir}/#{MKIt::Utils::MKIT_KEY}", 'w' do |io| io.write key.to_pem end
|
21
|
+
# haproxy default ssl cert
|
22
|
+
open "#{cert_dir}/#{MKIt::Utils::MKIT_PEM}", 'w' do |io| io.write cert.to_pem end
|
23
|
+
open "#{cert_dir}/#{MKIt::Utils::MKIT_PEM}", 'a' do |io| io.write key.to_pem end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
data/lib/mkit/utils.rb
CHANGED
@@ -4,6 +4,10 @@ module MKIt
|
|
4
4
|
module Utils
|
5
5
|
module_function
|
6
6
|
|
7
|
+
MKIT_CRT = 'mkit.crt'
|
8
|
+
MKIT_KEY = 'mkit.key'
|
9
|
+
MKIT_PEM = 'mkit.pem'
|
10
|
+
|
7
11
|
def me
|
8
12
|
'mkit'
|
9
13
|
end
|
@@ -24,6 +28,10 @@ module MKIt
|
|
24
28
|
@config_dir.nil? ? "#{self.root}/config" : @config_dir
|
25
29
|
end
|
26
30
|
|
31
|
+
def proxy_cert
|
32
|
+
"#{config_dir}/#{MKIT_PEM}"
|
33
|
+
end
|
34
|
+
|
27
35
|
def load_db_config(db_config_dir = self.config_dir)
|
28
36
|
self.log.info "loading database configurations from '#{config_dir}'..."
|
29
37
|
YAML::load(ERB.new(IO.read("#{db_config_dir}/database.yml")).result)
|
data/lib/mkit/version.rb
CHANGED
data/lib/mkit.rb
CHANGED
@@ -29,6 +29,7 @@ require 'mkit/docker_listener'
|
|
29
29
|
require 'mkit/app/helpers/haproxy'
|
30
30
|
require 'active_record/tasks/database_tasks'
|
31
31
|
require 'mkit/utils'
|
32
|
+
require 'mkit/ssl/easy_ssl'
|
32
33
|
|
33
34
|
MKItLogger = Console.logger
|
34
35
|
|
@@ -40,15 +41,24 @@ module MKIt
|
|
40
41
|
|
41
42
|
def self.configure(options:)
|
42
43
|
@root = MKIt::Utils.root
|
44
|
+
@options = options
|
43
45
|
MKItLogger.debug!
|
44
46
|
#
|
45
47
|
# config dir
|
46
48
|
@config_dir = if ENV['RACK_ENV'] != 'development'
|
47
|
-
options[:config_dir].nil? ? '/etc/mkit' : options[:config_dir]
|
49
|
+
@options[:config_dir].nil? ? '/etc/mkit' : @options[:config_dir]
|
48
50
|
else
|
49
|
-
options[:config_dir].nil? ? "#{@root}/config" : options[:config_dir]
|
51
|
+
@options[:config_dir].nil? ? "#{@root}/config" : @options[:config_dir]
|
50
52
|
end
|
51
53
|
MKIt::Utils.set_config_dir(@config_dir)
|
54
|
+
# defaults
|
55
|
+
@bind = options[:bind] ||= 'localhost'
|
56
|
+
@port = options[:port] ||= 4567
|
57
|
+
@ssl = options[:ssl].nil? ? true : options[:ssl] && true
|
58
|
+
@verify_peer = options[:verify_peer].nil? ? false : options[:verify_peer] && true
|
59
|
+
@cert_chain_file = options[:cert_chain_file] ||= "#{@config_dir}/#{MKIt::Utils::MKIT_CRT}"
|
60
|
+
@private_key_file = options[:private_key_file] ||= "#{@config_dir}/#{MKIt::Utils::MKIT_KEY}"
|
61
|
+
|
52
62
|
# create dirs
|
53
63
|
if ENV['RACK_ENV'] != 'development' || !options[:config_dir].nil?
|
54
64
|
check_config_files = false
|
@@ -65,9 +75,11 @@ module MKIt
|
|
65
75
|
exit
|
66
76
|
end
|
67
77
|
end
|
68
|
-
|
78
|
+
|
69
79
|
# load configuration
|
70
80
|
MKIt::Initializers.load_my_configuration
|
81
|
+
# cert
|
82
|
+
MKIt::EasySSL.create_self_certificate(@config_dir)
|
71
83
|
#
|
72
84
|
# run config based tasks
|
73
85
|
FileUtils.mkdir_p(MKIt::Config.mkit.haproxy.config_dir)
|
@@ -92,6 +104,20 @@ module MKIt
|
|
92
104
|
DatabaseTasks.root = @root
|
93
105
|
end
|
94
106
|
|
107
|
+
def self.options(server)
|
108
|
+
if @ssl
|
109
|
+
ssl_options = {
|
110
|
+
private_key_file: @private_key_file,
|
111
|
+
cert_chain_file: @cert_chain_file,
|
112
|
+
verify_peer: @verify_peer
|
113
|
+
}
|
114
|
+
server.ssl = true
|
115
|
+
server.ssl_options = ssl_options
|
116
|
+
end
|
117
|
+
server.backend.port = @port
|
118
|
+
server.backend.host = @bind
|
119
|
+
end
|
120
|
+
|
95
121
|
def self.establish_db_connection
|
96
122
|
ActiveRecord::Base.establish_connection(DatabaseTasks.database_configuration[DatabaseTasks.env])
|
97
123
|
ActiveRecord::Base.connection.migration_context.migrations_paths.clear
|
data/samples/apps/nexus.yml
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
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-02-
|
11
|
+
date: 2024-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-dns
|
@@ -311,9 +311,11 @@ files:
|
|
311
311
|
- bin/mkitd
|
312
312
|
- config/database.yml
|
313
313
|
- config/mkit_config.yml
|
314
|
+
- config/mkitc_config.yml
|
314
315
|
- config/mkitd_config.sh
|
315
316
|
- db/migrate/001_setup.rb
|
316
317
|
- db/migrate/002_mkit_jobs.rb
|
318
|
+
- db/migrate/003_service_ports_ssl.rb
|
317
319
|
- db/schema.rb
|
318
320
|
- lib/mkit.rb
|
319
321
|
- lib/mkit/app/controllers/mkit_controller.rb
|
@@ -349,13 +351,13 @@ files:
|
|
349
351
|
- lib/mkit/ctypes.rb
|
350
352
|
- lib/mkit/docker_listener.rb
|
351
353
|
- lib/mkit/exceptions.rb
|
352
|
-
- lib/mkit/haproxy.rb
|
353
354
|
- lib/mkit/job_manager.rb
|
354
355
|
- lib/mkit/mkit_dns.rb
|
355
356
|
- lib/mkit/mkit_interface.rb
|
356
357
|
- lib/mkit/sagas/asaga.rb
|
357
358
|
- lib/mkit/sagas/create_pod_saga.rb
|
358
359
|
- lib/mkit/sagas/saga_manager.rb
|
360
|
+
- lib/mkit/ssl/easy_ssl.rb
|
359
361
|
- lib/mkit/status.rb
|
360
362
|
- lib/mkit/utils.rb
|
361
363
|
- lib/mkit/version.rb
|
data/lib/mkit/haproxy.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'pty'
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
module MKIt
|
6
|
-
class HAProxy
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
# configs
|
10
|
-
# run standalone | daemon
|
11
|
-
@running = false
|
12
|
-
end
|
13
|
-
|
14
|
-
def start
|
15
|
-
@thread ||= Thread.new {
|
16
|
-
while (@running) do
|
17
|
-
cmd = "/usr/sbin/haproxy -f /etc/haproxy/haproxy.d"
|
18
|
-
%x{#{cmd}}
|
19
|
-
sleep 1
|
20
|
-
end
|
21
|
-
}
|
22
|
-
@thread.run
|
23
|
-
puts "haproxy started"
|
24
|
-
end
|
25
|
-
|
26
|
-
def start
|
27
|
-
@running = true
|
28
|
-
@thread ||= Thread.new {
|
29
|
-
while (@running) do
|
30
|
-
%{/usr/sbin/haproxy -f /etc/haproxy/haproxy.d/}
|
31
|
-
sleep(1)
|
32
|
-
end
|
33
|
-
}
|
34
|
-
puts "proxy started"
|
35
|
-
end
|
36
|
-
|
37
|
-
def stop
|
38
|
-
puts "proxy stopped"
|
39
|
-
end
|
40
|
-
|
41
|
-
def status
|
42
|
-
end
|
43
|
-
|
44
|
-
def reload
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|