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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa9363526eb6b57ea708a370424cfa71ede7d50f7d91d0d8700e1170f3af5930
4
- data.tar.gz: 9c50d7cd862d5573b986f4c3231f76769ab4e5f930839c821232acd0bedf2923
3
+ metadata.gz: 567f1ce28fb7c14d9eb23ddd36c4f98f68516b1c967450ec11188bfc460f5fdb
4
+ data.tar.gz: 389a9060968047e9efb35ba47cdf3492d4ed47d8f92ce5e82203bb0668dd5ec1
5
5
  SHA512:
6
- metadata.gz: 4c30c9847cdada9bbc87c059b1824430462e29d169498144d7e690d5848e30db29aee6008da4b09a59038355d20ee28688fce7a45d018f76b4afeee82ef3e660
7
- data.tar.gz: 770e96f7cb6be72e5c0442c51b2f0229ccdb53a6611c8569a58fe370ec1f405a5d7cadd77a22dae8de1075f9202467a79b26c736f158fb661b5b50dd68aa6c66
6
+ metadata.gz: c86fc61f402f4559bbda5eb4bb89fa1a11073e0ad228f954a0cee370c50d3d3367469f64acf6073bb702985dcb99a9c655c4b38cc95f9a010e8623102742a2cd
7
+ data.tar.gz: 9387d17b7394fa1619ad0ca7b03cda17ff4b98d1de7a56624a60fe96382a95b2501a11c07f41cbe36b7f3a2d569253903b2288aebb71430ed6d671ceebd17464
data/README.md CHANGED
@@ -191,6 +191,7 @@ stop stop service
191
191
  restart restart service
192
192
  create create new service
193
193
  update update service
194
+ get print service configuration
194
195
  rm remove service
195
196
  exec execute a command in a running pod
196
197
  logs view service logs
@@ -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 request.env['CONTENT_TYPE'] == 'application/json'
31
- srv.to_json
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
@@ -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] << ["#{vararg[:name].to_sym}", varargs ]
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] << %W[#{arg[:name]} #{arg[:param]}]
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>"
@@ -17,7 +17,7 @@ module MKIt
17
17
  ws = Faye::WebSocket::Client.new(@uri, nil, @options)
18
18
 
19
19
  ws.on :open do |_event|
20
- puts "Connected to WebSocket server"
20
+ puts "Connected to remote server"
21
21
  puts "\r\n"
22
22
  end
23
23
 
@@ -38,15 +38,17 @@ module MKIt
38
38
  @client.request(req)
39
39
  end
40
40
 
41
- def request(request, request_data = nil)
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, v| "#{k}=#{v}" }.join('&')
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)
@@ -21,7 +21,7 @@ module MKIt
21
21
  ws = Faye::WebSocket::Client.new(@uri, nil, @options)
22
22
 
23
23
  ws.on :open do |_event|
24
- puts "Connected to WebSocket server"
24
+ puts "Connected to remote server"
25
25
  puts "\r\n"
26
26
  end
27
27
 
@@ -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, v| "#{k}=#{v}" }.join('&')
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
@@ -1,4 +1,4 @@
1
1
  module MKIt
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
4
4
 
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.8.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-24 00:00:00.000000000 Z
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