mkit 0.8.0 → 0.9.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 +1 -0
- data/lib/mkit/app/controllers/services_controller.rb +4 -2
- data/lib/mkit/app/model/pod.rb +10 -1
- data/lib/mkit/app/model/service.rb +49 -0
- data/lib/mkit/client/command_parser.rb +17 -2
- data/lib/mkit/client/commands.yaml +51 -0
- data/lib/mkit/client/console_websocket_client.rb +1 -1
- data/lib/mkit/client/http_client.rb +4 -2
- data/lib/mkit/client/log_websocket_client.rb +1 -1
- data/lib/mkit/client/websocket_client.rb +1 -1
- data/lib/mkit/version.rb +1 -1
- metadata +2 -3
- data/samples/soketi.yaml +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 567f1ce28fb7c14d9eb23ddd36c4f98f68516b1c967450ec11188bfc460f5fdb
|
4
|
+
data.tar.gz: 389a9060968047e9efb35ba47cdf3492d4ed47d8f92ce5e82203bb0668dd5ec1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c86fc61f402f4559bbda5eb4bb89fa1a11073e0ad228f954a0cee370c50d3d3367469f64acf6073bb702985dcb99a9c655c4b38cc95f9a010e8623102742a2cd
|
7
|
+
data.tar.gz: 9387d17b7394fa1619ad0ca7b03cda17ff4b98d1de7a56624a60fe96382a95b2501a11c07f41cbe36b7f3a2d569253903b2288aebb71430ed6d671ceebd17464
|
data/README.md
CHANGED
@@ -27,8 +27,10 @@ class ServicesController < MKIt::Server
|
|
27
27
|
|
28
28
|
get '/services/:id' do
|
29
29
|
srv = find_by_id_or_name
|
30
|
-
resp = if
|
31
|
-
srv.
|
30
|
+
resp = if params[:format] == 'yaml'
|
31
|
+
srv.to_h({details: params[:details] == 'true'}).to_yaml
|
32
|
+
elsif params[:format] == 'json'
|
33
|
+
JSON.pretty_generate(srv.to_h({details: params[:details] == 'true'}))
|
32
34
|
else
|
33
35
|
format_response(srv)
|
34
36
|
end
|
data/lib/mkit/app/model/pod.rb
CHANGED
@@ -40,7 +40,7 @@ class Pod < ActiveRecord::Base
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def set_status_from_docker
|
43
|
-
if self.instance
|
43
|
+
if !self.instance.nil?
|
44
44
|
if instance.State.Running
|
45
45
|
self.status = MKIt::Status::RUNNING
|
46
46
|
else
|
@@ -85,5 +85,14 @@ class Pod < ActiveRecord::Base
|
|
85
85
|
end
|
86
86
|
MkitJob.publish(topic: :pod_destroyed, service_id: self.service.id, data: {pod_id: self.id})
|
87
87
|
end
|
88
|
+
|
89
|
+
def to_h
|
90
|
+
{
|
91
|
+
'name' => self.name,
|
92
|
+
'ip' => self.dns_host.nil? || self.dns_host.ip.nil? ? self.ip : self.dns_host.ip,
|
93
|
+
'dns' => self.dns_host.nil? || self.dns_host.name.nil? ? self.ip : self.dns_host.name,
|
94
|
+
'status' => self.status
|
95
|
+
}
|
96
|
+
end
|
88
97
|
end
|
89
98
|
|
@@ -250,6 +250,55 @@ class Service < ActiveRecord::Base
|
|
250
250
|
}
|
251
251
|
out
|
252
252
|
end
|
253
|
+
def to_h(options = {})
|
254
|
+
details = options[:details] || false
|
255
|
+
yaml = {}
|
256
|
+
yaml['service'] = {}
|
257
|
+
srv = yaml['service']
|
258
|
+
srv['name'] = self.name
|
259
|
+
srv['image'] = self.image
|
260
|
+
srv['command'] = self.command
|
261
|
+
srv['network'] = self.pods_network
|
262
|
+
if details
|
263
|
+
srv['status'] = self.status
|
264
|
+
srv['version'] = self.version
|
265
|
+
srv['ip'] = self.lease.ip
|
266
|
+
srv['dns'] = self.dns_host.name
|
267
|
+
srv['pods'] = []
|
268
|
+
self.pod.each { |p|
|
269
|
+
srv['pods'] << p.to_h
|
270
|
+
}
|
271
|
+
end
|
272
|
+
srv['ports'] = []
|
273
|
+
self.service_port.each { |p|
|
274
|
+
"#{p.internal_port}:#{p.external_port}:#{p.mode}:#{p.load_bal}".tap { |x|
|
275
|
+
if p.ssl == 'true'
|
276
|
+
x << ':ssl'
|
277
|
+
if !p.crt.nil? && p.crt != MKIt::Utils.proxy_cert
|
278
|
+
x << ":#{p.crt}"
|
279
|
+
end
|
280
|
+
end
|
281
|
+
srv['ports'] << x
|
282
|
+
}
|
283
|
+
}
|
284
|
+
srv['resources'] = {}
|
285
|
+
srv['resources']['min_replicas'] = self.min_replicas
|
286
|
+
srv['resources']['max_replicas'] = self.max_replicas
|
287
|
+
srv['volumes'] = []
|
288
|
+
self.volume.each { |v|
|
289
|
+
if v.ctype == MKIt::CType::DOCKER_STORAGE.to_s
|
290
|
+
srv['volumes'] << "docker://#{v.name}:#{v.path}"
|
291
|
+
elsif v.ctype == MKIt::CType::LOCAL_STORAGE.to_s
|
292
|
+
srv['volumes'] << "#{v.name}:#{v.path}"
|
293
|
+
end
|
294
|
+
}
|
295
|
+
srv['environment'] = {}
|
296
|
+
self.service_config.each { |c|
|
297
|
+
srv['environment'][c.key] = "#{c.value}"
|
298
|
+
}
|
299
|
+
yaml
|
300
|
+
end
|
301
|
+
|
253
302
|
def as_json(options = {})
|
254
303
|
srv = super
|
255
304
|
a=[:pod, :volume, :service_config, :service_port]
|
@@ -56,6 +56,8 @@ class CommandParser
|
|
56
56
|
end
|
57
57
|
raise InvalidParametersException.new('Invalid command or parameters.', c) if request.nil?
|
58
58
|
|
59
|
+
fill_request_defaults(request, request_data)
|
60
|
+
|
59
61
|
validate_command(command, request_data)
|
60
62
|
#
|
61
63
|
{
|
@@ -65,6 +67,18 @@ class CommandParser
|
|
65
67
|
}
|
66
68
|
end
|
67
69
|
|
70
|
+
def fill_request_defaults(request, request_data)
|
71
|
+
if !request.nil? && !request[:defaults].nil?
|
72
|
+
request[:defaults].each do |key, value|
|
73
|
+
request[:params] ||= []
|
74
|
+
unless request[:params].include?(key.to_sym)
|
75
|
+
request[:params] << key.to_sym
|
76
|
+
request_data[key.to_sym] = value
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
68
82
|
# args = command[:args]
|
69
83
|
# argv = ARGV.dup - cmd
|
70
84
|
# request = command[:request]
|
@@ -84,7 +98,8 @@ class CommandParser
|
|
84
98
|
if vararg
|
85
99
|
request_data[vararg[:name].to_sym] = varargs
|
86
100
|
request[:params] ||= []
|
87
|
-
request[:params] <<
|
101
|
+
request[:params] << vararg[:name].to_sym unless request[:params].include?(vararg[:name].to_sym)
|
102
|
+
request_data[vararg[:name].to_sym] = varargs
|
88
103
|
end
|
89
104
|
|
90
105
|
# flag and options
|
@@ -146,7 +161,7 @@ class CommandParser
|
|
146
161
|
request[:uri] = request[:uri] + arg[:uri] unless arg[:uri].nil?
|
147
162
|
unless arg[:param].nil?
|
148
163
|
request[:params] ||= []
|
149
|
-
request[:params] <<
|
164
|
+
request[:params] << arg[:name].to_sym unless request[:params].include?(arg[:name].to_sym)
|
150
165
|
end
|
151
166
|
end
|
152
167
|
|
@@ -95,6 +95,57 @@
|
|
95
95
|
request:
|
96
96
|
verb: put
|
97
97
|
uri: "/services/<%=id%>"
|
98
|
+
- cmd: get
|
99
|
+
request:
|
100
|
+
verb: get
|
101
|
+
uri: "/services/<%=id%>"
|
102
|
+
defaults:
|
103
|
+
format: yaml
|
104
|
+
usage:
|
105
|
+
- "<service_id_or_name> [options]"
|
106
|
+
help: print service configuration
|
107
|
+
args:
|
108
|
+
- name: id
|
109
|
+
help:
|
110
|
+
- id
|
111
|
+
- Service id or name
|
112
|
+
mandatory: true
|
113
|
+
- name: format
|
114
|
+
help:
|
115
|
+
- -y
|
116
|
+
- ...as yaml format (default)
|
117
|
+
mandatory: false
|
118
|
+
param: "yaml"
|
119
|
+
type: flag
|
120
|
+
switch:
|
121
|
+
- "-y"
|
122
|
+
- name: format
|
123
|
+
help:
|
124
|
+
- -j
|
125
|
+
- ...as json format
|
126
|
+
mandatory: false
|
127
|
+
param: "json"
|
128
|
+
type: flag
|
129
|
+
switch:
|
130
|
+
- "-j"
|
131
|
+
- name: format
|
132
|
+
help:
|
133
|
+
- -t
|
134
|
+
- ...as table format (i.e. status format)
|
135
|
+
mandatory: false
|
136
|
+
param: "table"
|
137
|
+
type: flag
|
138
|
+
switch:
|
139
|
+
- "-t"
|
140
|
+
- name: details
|
141
|
+
help:
|
142
|
+
- -d
|
143
|
+
- include service dynamic details
|
144
|
+
mandatory: false
|
145
|
+
param: "<%=true%>"
|
146
|
+
type: flag
|
147
|
+
switch:
|
148
|
+
- "-d"
|
98
149
|
- cmd: rm
|
99
150
|
usage:
|
100
151
|
- "<service_id_or_name>"
|
@@ -38,15 +38,17 @@ module MKIt
|
|
38
38
|
@client.request(req)
|
39
39
|
end
|
40
40
|
|
41
|
-
def request(request, request_data =
|
41
|
+
def request(request, request_data = {})
|
42
42
|
req = nil
|
43
43
|
uri = request[:uri]
|
44
44
|
request[:file] = request_data[:file]
|
45
45
|
|
46
46
|
unless request[:params].nil? || request[:params].empty?
|
47
|
-
uri = uri + '?' + request[:params].map { |k
|
47
|
+
uri = uri + '?' + request[:params].map { |k| "#{k}=#{request_data[k]}" }.join('&')
|
48
48
|
end
|
49
49
|
uri = ERB.new(uri).result_with_hash(request_data)
|
50
|
+
# puts "Request URI: #{uri}"
|
51
|
+
|
50
52
|
case request[:verb].to_sym
|
51
53
|
when :post
|
52
54
|
req = Net::HTTP::Post.new(uri)
|
@@ -23,7 +23,7 @@ module MKIt
|
|
23
23
|
def request(request, request_data)
|
24
24
|
uri = request[:uri]
|
25
25
|
unless request[:params].nil? || request[:params].empty?
|
26
|
-
uri = uri + '?' + request[:params].map { |k
|
26
|
+
uri = uri + '?' + request[:params].map { |k| "#{k}=#{request_data[k]}" }.join('&')
|
27
27
|
end
|
28
28
|
uri = ERB.new("#{@ws_url}#{uri}").result_with_hash(request_data)
|
29
29
|
|
data/lib/mkit/version.rb
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.9.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-12-
|
11
|
+
date: 2024-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-dns
|
@@ -452,7 +452,6 @@ files:
|
|
452
452
|
- samples/apps/redis.yml
|
453
453
|
- samples/daemontools/log/run
|
454
454
|
- samples/daemontools/run
|
455
|
-
- samples/soketi.yaml
|
456
455
|
- samples/systemd/mkitd.service
|
457
456
|
homepage: https://github.com/valexsantos/mkit
|
458
457
|
licenses:
|
data/samples/soketi.yaml
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
service:
|
2
|
-
name: soketi
|
3
|
-
image: quay.io/soketi/soketi:0.17-16-alpine
|
4
|
-
# image: giovannedev/soketi:latest
|
5
|
-
ports:
|
6
|
-
#- 80:6001:http:round_robin
|
7
|
-
- 6001:6001:tcp:round_robin
|
8
|
-
- 6002:6001:tcp:round_robin:ssl
|
9
|
-
- 9601:9601:tcp:round_robin
|
10
|
-
resources:
|
11
|
-
max_replicas: 1
|
12
|
-
min_replicas: 1
|
13
|
-
environment:
|
14
|
-
SOKETI_PORT: 6001
|
15
|
-
SOKETI_METRICS_SERVER_PORT: 9601
|
16
|
-
SOKETI_DEBUG: 1
|
17
|
-
SOKETI_MODE: full
|
18
|
-
SOKETI_APP_ID: app-id
|
19
|
-
SOKETI_APP_KEY: app-key
|
20
|
-
SOKETI_APP_SECRET: app-secret
|
21
|
-
# PUSHER_HOST: 127.0.0.1
|
22
|
-
# PUSHER_PORT: 6001
|
23
|
-
# PUSHER_SCHEME: http # or https
|
24
|
-
SOKETI_PORT: 6001
|
25
|
-
SOKETI_SCHEME: http # or https
|
26
|
-
METRICS_SERVER_PORT: 9601
|
27
|
-
SOKETI_DEFAULT_APP_ENABLED: true
|
28
|
-
SOKETI_DEFAULT_APP_ENABLE_CLIENT_MESSAGES: true
|
29
|
-
DEFAULT_APP_ENABLE_CLIENT_MESSAGES: true
|
30
|
-
#SOKETI_DB_REDIS_HOST: redis
|
31
|
-
#SOKETI_DB_REDIS_PORT: 6379
|
32
|
-
#SOKETI_DB_REDIS_PASSWORD: password
|