mkit 0.4.1 → 0.4.3
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/.github/workflows/publish.yml +22 -0
- data/.rubocop.yml +10 -0
- data/Gemfile +12 -10
- data/Gemfile.lock +3 -0
- data/README.md +33 -21
- data/Rakefile +17 -15
- data/bin/mkitc +258 -84
- data/bin/mkitd +3 -6
- data/config/mkit_config.yml +5 -5
- data/db/migrate/001_setup.rb +5 -5
- data/db/migrate/002_mkit_jobs.rb +2 -3
- data/db/schema.rb +76 -75
- data/lib/mkit/app/controllers/mkit_controller.rb +25 -0
- data/lib/mkit/app/controllers/mkitjobs_controller.rb +4 -5
- data/lib/mkit/app/controllers/pods_controller.rb +4 -5
- data/lib/mkit/app/controllers/services_controller.rb +24 -13
- data/lib/mkit/app/helpers/docker_helper.rb +11 -3
- data/lib/mkit/app/helpers/erb_helper.rb +4 -2
- data/lib/mkit/app/helpers/services_helper.rb +18 -40
- data/lib/mkit/app/mkit_server.rb +2 -0
- data/lib/mkit/app/model/service.rb +10 -1
- data/lib/mkit/version.rb +1 -1
- data/lib/mkit.rb +46 -47
- data/mkit.gemspec +33 -35
- data/samples/apps/kafka-cluster.yml +21 -0
- data/samples/apps/kafka-magic.yml +16 -0
- data/samples/apps/kafka-zookeeper.yml +15 -0
- data/samples/apps/minio.yml +16 -0
- data/samples/apps/mongo.yml +9 -0
- data/samples/apps/nexus.yml +13 -0
- data/samples/apps/redis-sentinel.yml +11 -0
- data/samples/apps/redis.yml +9 -0
- metadata +64 -53
data/bin/mkitd
CHANGED
@@ -10,23 +10,21 @@ def up
|
|
10
10
|
require 'sinatra/base'
|
11
11
|
require 'mkit'
|
12
12
|
# defaults
|
13
|
-
PARAMS_CONFIG[:bind] ||=
|
13
|
+
PARAMS_CONFIG[:bind] ||= 'localhost'
|
14
14
|
PARAMS_CONFIG[:port] ||= 4567
|
15
|
-
#
|
16
15
|
MKIt.startup(options: PARAMS_CONFIG)
|
17
16
|
|
18
17
|
use Rack::MethodOverride
|
19
18
|
use ServicesController
|
20
19
|
use MkitJobsController
|
20
|
+
use MkitController
|
21
21
|
|
22
22
|
# sinatra::base ignores in parameters
|
23
23
|
# set it here or via configure...
|
24
|
-
Sinatra::Application.run!({port: PARAMS_CONFIG[:port], bind: PARAMS_CONFIG[:bind] })
|
24
|
+
Sinatra::Application.run!({ port: PARAMS_CONFIG[:port], bind: PARAMS_CONFIG[:bind] })
|
25
25
|
# MKIt::Server.run
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
#
|
30
28
|
if ARGV.any?
|
31
29
|
require 'optparse'
|
32
30
|
parser = OptionParser.new do |op|
|
@@ -52,4 +50,3 @@ if ARGV.any?
|
|
52
50
|
end
|
53
51
|
|
54
52
|
up
|
55
|
-
|
data/config/mkit_config.yml
CHANGED
@@ -4,11 +4,11 @@ mkit:
|
|
4
4
|
haproxy:
|
5
5
|
config_dir: /etc/haproxy/haproxy.d
|
6
6
|
ctrl:
|
7
|
-
start:
|
8
|
-
stop:
|
9
|
-
reload:
|
10
|
-
restart:
|
11
|
-
status:
|
7
|
+
start: systemctl start haproxy
|
8
|
+
stop: systemctl stop haproxy
|
9
|
+
reload: systemctl reload haproxy
|
10
|
+
restart: systemctl restart haproxy
|
11
|
+
status: systemctl status haproxy
|
12
12
|
bin: /usr/sbin/haproxy
|
13
13
|
database:
|
14
14
|
env: development
|
data/db/migrate/001_setup.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
class Setup < ActiveRecord::Migration[5.1]
|
3
4
|
def up
|
4
5
|
create_table :services do |t|
|
5
6
|
t.string :name
|
@@ -16,7 +17,7 @@ class Setup < ActiveRecord::Migration[5.1]
|
|
16
17
|
t.timestamp :updated_at
|
17
18
|
end
|
18
19
|
|
19
|
-
add_index
|
20
|
+
add_index 'services', ['name'], name: 'services_name_id'
|
20
21
|
|
21
22
|
create_table :service_configs do |t|
|
22
23
|
t.string :service_id
|
@@ -82,10 +83,10 @@ class Setup < ActiveRecord::Migration[5.1]
|
|
82
83
|
end
|
83
84
|
|
84
85
|
# mkit configs
|
85
|
-
# e.g.
|
86
|
+
# e.g.
|
86
87
|
# default network pool
|
87
88
|
# rabbitmq address
|
88
|
-
# haproxy
|
89
|
+
# haproxy
|
89
90
|
# config.d path
|
90
91
|
# reload command - pq quero usar o daemontools
|
91
92
|
# stop
|
@@ -102,4 +103,3 @@ class Setup < ActiveRecord::Migration[5.1]
|
|
102
103
|
drop_table :services
|
103
104
|
end
|
104
105
|
end
|
105
|
-
|
data/db/migrate/002_mkit_jobs.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
class MkitJobs < ActiveRecord::Migration[5.1]
|
3
4
|
def up
|
4
5
|
create_table :mkit_jobs do |t|
|
5
6
|
t.string :topic
|
@@ -12,6 +13,4 @@ class MkitJobs < ActiveRecord::Migration[5.1]
|
|
12
13
|
t.timestamp :updated_at
|
13
14
|
end
|
14
15
|
end
|
15
|
-
|
16
16
|
end
|
17
|
-
|
data/db/schema.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This file is auto-generated from the current state of the database. Instead
|
2
4
|
# of editing this file, please use the migrations feature of Active Record to
|
3
5
|
# incrementally modify your database, and then regenerate this schema definition.
|
@@ -11,98 +13,97 @@
|
|
11
13
|
# It's strongly recommended that you check this file into your version control system.
|
12
14
|
|
13
15
|
ActiveRecord::Schema[7.0].define(version: 2) do
|
14
|
-
create_table
|
15
|
-
t.string
|
16
|
-
t.string
|
17
|
-
t.string
|
18
|
-
t.string
|
19
|
-
t.string
|
16
|
+
create_table 'dns_hosts', force: :cascade do |t|
|
17
|
+
t.string 'service_id'
|
18
|
+
t.string 'pod_id'
|
19
|
+
t.string 'name'
|
20
|
+
t.string 'ip'
|
21
|
+
t.string 'ipv6'
|
20
22
|
end
|
21
23
|
|
22
|
-
create_table
|
23
|
-
t.string
|
24
|
-
t.string
|
25
|
-
t.string
|
26
|
-
t.string
|
27
|
-
t.string
|
28
|
-
t.string
|
29
|
-
t.datetime
|
24
|
+
create_table 'leases', force: :cascade do |t|
|
25
|
+
t.string 'pool_id'
|
26
|
+
t.string 'service_id'
|
27
|
+
t.string 'interface_name'
|
28
|
+
t.string 'interface_type'
|
29
|
+
t.string 'status'
|
30
|
+
t.string 'ip'
|
31
|
+
t.datetime 'expires_at', precision: nil
|
30
32
|
end
|
31
33
|
|
32
|
-
create_table
|
33
|
-
t.string
|
34
|
-
t.string
|
35
|
-
t.string
|
36
|
-
t.string
|
37
|
-
t.string
|
38
|
-
t.string
|
39
|
-
t.datetime
|
40
|
-
t.datetime
|
34
|
+
create_table 'mkit_jobs', force: :cascade do |t|
|
35
|
+
t.string 'topic'
|
36
|
+
t.string 'service_id'
|
37
|
+
t.string 'pod_id'
|
38
|
+
t.string 'status'
|
39
|
+
t.string 'retries'
|
40
|
+
t.string 'payload'
|
41
|
+
t.datetime 'created_at', precision: nil
|
42
|
+
t.datetime 'updated_at', precision: nil
|
41
43
|
end
|
42
44
|
|
43
|
-
create_table
|
44
|
-
t.string
|
45
|
-
t.string
|
46
|
-
t.string
|
47
|
-
t.string
|
48
|
-
t.string
|
49
|
-
t.string
|
45
|
+
create_table 'pods', force: :cascade do |t|
|
46
|
+
t.string 'service_id'
|
47
|
+
t.string 'pod_id'
|
48
|
+
t.string 'name'
|
49
|
+
t.string 'ip'
|
50
|
+
t.string 'image'
|
51
|
+
t.string 'status'
|
50
52
|
end
|
51
53
|
|
52
|
-
create_table
|
53
|
-
t.string
|
54
|
-
t.string
|
55
|
-
t.string
|
56
|
-
t.string
|
57
|
-
t.string
|
58
|
-
t.boolean
|
54
|
+
create_table 'pools', force: :cascade do |t|
|
55
|
+
t.string 'name'
|
56
|
+
t.string 'ip'
|
57
|
+
t.string 'range'
|
58
|
+
t.string 'netmask'
|
59
|
+
t.string 'status'
|
60
|
+
t.boolean 'preferred', default: false
|
59
61
|
end
|
60
62
|
|
61
|
-
create_table
|
62
|
-
t.string
|
63
|
-
t.string
|
64
|
-
t.string
|
65
|
-
t.string
|
66
|
-
t.string
|
63
|
+
create_table 'service_configs', force: :cascade do |t|
|
64
|
+
t.string 'service_id'
|
65
|
+
t.string 'key'
|
66
|
+
t.string 'value'
|
67
|
+
t.string 'ctype'
|
68
|
+
t.string 'version'
|
67
69
|
end
|
68
70
|
|
69
|
-
create_table
|
70
|
-
t.string
|
71
|
-
t.string
|
72
|
-
t.string
|
73
|
-
t.string
|
74
|
-
t.string
|
75
|
-
t.string
|
71
|
+
create_table 'service_ports', force: :cascade do |t|
|
72
|
+
t.string 'service_id'
|
73
|
+
t.string 'internal_port'
|
74
|
+
t.string 'external_port'
|
75
|
+
t.string 'mode'
|
76
|
+
t.string 'load_bal'
|
77
|
+
t.string 'version'
|
76
78
|
end
|
77
79
|
|
78
|
-
create_table
|
79
|
-
t.string
|
80
|
-
t.string
|
81
|
-
t.string
|
82
|
-
t.string
|
83
|
-
t.integer
|
84
|
-
t.integer
|
85
|
-
t.string
|
86
|
-
t.string
|
87
|
-
t.string
|
88
|
-
t.string
|
89
|
-
t.datetime
|
90
|
-
t.datetime
|
91
|
-
t.index [
|
80
|
+
create_table 'services', force: :cascade do |t|
|
81
|
+
t.string 'name'
|
82
|
+
t.string 'image'
|
83
|
+
t.string 'qdm'
|
84
|
+
t.string 'command'
|
85
|
+
t.integer 'max_replicas', default: 1
|
86
|
+
t.integer 'min_replicas', default: 1
|
87
|
+
t.string 'lease_id'
|
88
|
+
t.string 'pods_network', default: 'mkit'
|
89
|
+
t.string 'version'
|
90
|
+
t.string 'status'
|
91
|
+
t.datetime 'created_at', precision: nil, default: '2023-12-28 12:41:59'
|
92
|
+
t.datetime 'updated_at', precision: nil
|
93
|
+
t.index ['name'], name: 'services_name_id'
|
92
94
|
end
|
93
95
|
|
94
|
-
create_table
|
95
|
-
t.string
|
96
|
-
t.string
|
96
|
+
create_table 'settings', force: :cascade do |t|
|
97
|
+
t.string 'key'
|
98
|
+
t.string 'value'
|
97
99
|
end
|
98
100
|
|
99
|
-
create_table
|
100
|
-
t.string
|
101
|
-
t.string
|
102
|
-
t.string
|
103
|
-
t.string
|
104
|
-
t.string
|
105
|
-
t.string
|
101
|
+
create_table 'volumes', force: :cascade do |t|
|
102
|
+
t.string 'service_id'
|
103
|
+
t.string 'name'
|
104
|
+
t.string 'path'
|
105
|
+
t.string 'ctype'
|
106
|
+
t.string 'status'
|
107
|
+
t.string 'version'
|
106
108
|
end
|
107
|
-
|
108
109
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mkit/version'
|
4
|
+
|
5
|
+
class MkitController < MKIt::Server
|
6
|
+
get '/mkit/version' do
|
7
|
+
"MKIt version #{MKIt::VERSION}\n"
|
8
|
+
end
|
9
|
+
|
10
|
+
put '/mkit/proxy/restart' do
|
11
|
+
MKIt::HAProxy.restart
|
12
|
+
end
|
13
|
+
|
14
|
+
put '/mkit/proxy/start' do
|
15
|
+
MKIt::HAProxy.start
|
16
|
+
end
|
17
|
+
|
18
|
+
put '/mkit/proxy/stop' do
|
19
|
+
MKIt::HAProxy.stop
|
20
|
+
end
|
21
|
+
|
22
|
+
get '/mkit/proxy/status' do
|
23
|
+
MKIt::HAProxy.status
|
24
|
+
end
|
25
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'mkit/app/model/mkit_job'
|
2
4
|
|
3
5
|
class MkitJobsController < MKIt::Server
|
4
|
-
|
5
6
|
# curl localhost:4567/mkitjobs
|
6
7
|
get '/mkitjobs' do
|
7
8
|
JSON.pretty_generate(JSON.parse(MkitJob.all.to_json))
|
@@ -24,14 +25,12 @@ class MkitJobsController < MKIt::Server
|
|
24
25
|
end
|
25
26
|
|
26
27
|
post '/mkitjobs' do
|
27
|
-
xx =
|
28
|
+
xx = 'no file'
|
28
29
|
if params[:file]
|
29
30
|
tempfile = params[:file][:tempfile]
|
30
|
-
xx= YAML.
|
31
|
+
xx = YAML.safe_load(tempfile.read)
|
31
32
|
puts xx
|
32
33
|
end
|
33
34
|
JSON.pretty_generate(JSON.parse(xx.to_json))
|
34
35
|
end
|
35
|
-
|
36
36
|
end
|
37
|
-
|
@@ -1,5 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
class PodsController < MKIt::Server
|
3
4
|
get '/services/:service_id/pods' do
|
4
5
|
"Not implemented\n"
|
5
6
|
end
|
@@ -17,14 +18,12 @@ class PodsController < MKIt::Server
|
|
17
18
|
end
|
18
19
|
|
19
20
|
post '/services/:service_id/pods' do
|
20
|
-
xx =
|
21
|
+
xx = 'no file'
|
21
22
|
if params[:file]
|
22
23
|
tempfile = params[:file][:tempfile]
|
23
|
-
xx= YAML.
|
24
|
+
xx = YAML.safe_load(tempfile.read)
|
24
25
|
puts xx
|
25
26
|
end
|
26
27
|
JSON.pretty_generate(JSON.parse(xx.to_json))
|
27
28
|
end
|
28
|
-
|
29
29
|
end
|
30
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'mkit/app/model/service'
|
2
4
|
require 'mkit/app/helpers/services_helper'
|
3
5
|
|
@@ -6,11 +8,8 @@ class ServicesController < MKIt::Server
|
|
6
8
|
|
7
9
|
# curl localhost:4567/services
|
8
10
|
get '/services' do
|
9
|
-
|
10
|
-
|
11
|
-
else
|
12
|
-
verbose = false
|
13
|
-
end
|
11
|
+
verbose = params[:verbose] == 'true'
|
12
|
+
|
14
13
|
if params[:id]
|
15
14
|
redirect "/services/#{params[:id]}"
|
16
15
|
elsif params[:name]
|
@@ -24,20 +23,25 @@ class ServicesController < MKIt::Server
|
|
24
23
|
|
25
24
|
get '/services/:id' do
|
26
25
|
srv = find_by_id_or_name
|
27
|
-
if request.env['CONTENT_TYPE'] == 'application/json'
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
resp = if request.env['CONTENT_TYPE'] == 'application/json'
|
27
|
+
srv.to_json
|
28
|
+
else
|
29
|
+
format_response(srv)
|
30
|
+
end
|
32
31
|
resp
|
33
32
|
end
|
34
33
|
|
34
|
+
get '/services/:id/logs' do
|
35
|
+
srv = find_by_id_or_name
|
36
|
+
srv.log
|
37
|
+
end
|
38
|
+
|
35
39
|
# curl -X PUT localhost:4567/services/1 -F "file=@mkit/samples/mkit.yml"
|
36
40
|
put '/services/:id' do
|
37
41
|
srv = find_by_id_or_name
|
38
42
|
if params[:file]
|
39
43
|
tempfile = params[:file][:tempfile]
|
40
|
-
yaml = YAML.
|
44
|
+
yaml = YAML.safe_load(tempfile.read)
|
41
45
|
srv.update!(yaml.to_o)
|
42
46
|
end
|
43
47
|
format_response(srv)
|
@@ -52,10 +56,10 @@ class ServicesController < MKIt::Server
|
|
52
56
|
|
53
57
|
# curl -X POST localhost:4567/services -F "file=@mkit/samples/mkit.yml"
|
54
58
|
post '/services' do
|
55
|
-
srv =
|
59
|
+
srv = 'no file'
|
56
60
|
if params[:file]
|
57
61
|
tempfile = params[:file][:tempfile]
|
58
|
-
yaml = YAML.
|
62
|
+
yaml = YAML.safe_load(tempfile.read)
|
59
63
|
srv = Service.create(yaml.to_o)
|
60
64
|
end
|
61
65
|
format_response(srv)
|
@@ -77,4 +81,11 @@ class ServicesController < MKIt::Server
|
|
77
81
|
MkitJob.publish(topic: :stop_service, service_id: srv.id)
|
78
82
|
format_response(srv)
|
79
83
|
end
|
84
|
+
|
85
|
+
put '/services/:id/restart' do
|
86
|
+
srv = find_by_id_or_name
|
87
|
+
MkitJob.publish(topic: :stop_service, service_id: srv.id)
|
88
|
+
MkitJob.publish(topic: :start_service, service_id: srv.id)
|
89
|
+
format_response(srv)
|
90
|
+
end
|
80
91
|
end
|
@@ -1,8 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'mkit/cmd_runner'
|
2
4
|
|
3
5
|
module MKIt
|
4
6
|
module DockerHelper
|
5
|
-
|
6
7
|
# from ERB template
|
7
8
|
def create_instance(cmd)
|
8
9
|
MKIt::CmdRunner.run(cmd)
|
@@ -22,7 +23,7 @@ module MKIt
|
|
22
23
|
|
23
24
|
def inspect_instance(instance_id)
|
24
25
|
# this one does not work on ubunto MKIt::CmdRunner.run("docker inspect #{instance_id}")
|
25
|
-
x =
|
26
|
+
x = `docker inspect #{instance_id}`
|
26
27
|
JSON.parse(x).first
|
27
28
|
end
|
28
29
|
|
@@ -30,6 +31,13 @@ module MKIt
|
|
30
31
|
MKIt::CmdRunner.run("docker exec -it #{instance_id} #{cmd}")
|
31
32
|
end
|
32
33
|
|
34
|
+
#
|
35
|
+
# logs
|
36
|
+
#
|
37
|
+
def logs(instance_id)
|
38
|
+
`docker logs -n 20 #{instance_id}`
|
39
|
+
end
|
40
|
+
|
33
41
|
#
|
34
42
|
# network
|
35
43
|
#
|
@@ -39,7 +47,7 @@ module MKIt
|
|
39
47
|
end
|
40
48
|
|
41
49
|
def network_exists?(network_name)
|
42
|
-
x = MKIt::CmdRunner.run(
|
50
|
+
x = MKIt::CmdRunner.run('docker network ls')
|
43
51
|
x.match(/\b#{network_name}\b/)
|
44
52
|
end
|
45
53
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'mkit/utils'
|
2
4
|
|
3
5
|
module MKIt
|
@@ -6,9 +8,9 @@ module MKIt
|
|
6
8
|
root = MKIt::Utils.root
|
7
9
|
File.read("#{root}/lib/mkit/app/templates/#{template}.erb")
|
8
10
|
end
|
9
|
-
|
11
|
+
|
10
12
|
def parse_template(template, data = {})
|
11
|
-
|
13
|
+
ERB.new(read_template(template)).result_with_hash(data)
|
12
14
|
end
|
13
15
|
|
14
16
|
def parse_model(template)
|
@@ -1,54 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'text-table'
|
1
4
|
module MKIt
|
2
5
|
module ServicesHelper
|
3
|
-
def
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def _format(template, data)
|
12
|
-
template % data
|
13
|
-
end
|
14
|
-
|
15
|
-
def format_response(data, verbose = false)
|
16
|
-
resp = []
|
17
|
-
header = _format(str_template, header_template)
|
18
|
-
resp << header
|
19
|
-
if data.respond_to?"each"
|
20
|
-
data.each { | srv |
|
21
|
-
ports = srv.service_port&.each.map { |p| "#{p.mode}/#{p.external_port}"}.join(",")
|
22
|
-
resp << _format(str_template, [srv.id, srv.name, srv.lease&.ip, ports, srv.status])
|
23
|
-
resp+=service_pods(srv) if verbose
|
24
|
-
}
|
6
|
+
def format_response(data, _verbose = false)
|
7
|
+
table = Text::Table.new
|
8
|
+
table.head = %w[id name addr ports pods status]
|
9
|
+
if data.respond_to? 'each'
|
10
|
+
data.each do |srv|
|
11
|
+
table.rows << build_table_row(srv)
|
12
|
+
end
|
25
13
|
else
|
26
|
-
|
27
|
-
resp << _format(str_template, [data.id, data.name, data.lease&.ip, ports, data.status])
|
28
|
-
resp+=service_pods(data)
|
14
|
+
table.rows << build_table_row(data)
|
29
15
|
end
|
30
|
-
|
31
|
-
resp.join("\n")
|
32
|
-
end
|
33
|
-
|
34
|
-
def service_pods(srv)
|
35
|
-
resp=[]
|
36
|
-
resp << " pods"
|
37
|
-
resp << _format(" %-5s %-15s %-15s %-15s %-10s", ["id", "pod_id", "pod_name", "pod_ip", "status"])
|
38
|
-
srv.pod.each { |pod|
|
39
|
-
name = pod.name.nil? ? "" : pod.name[0..11]
|
40
|
-
pod_id = pod.pod_id.nil? ? "" : pod.pod_id[0..11]
|
41
|
-
resp << _format(" %-5s %-15s %-15s %-15s %-10s", [pod.id, pod_id, name, pod.ip, pod.status])
|
42
|
-
}
|
43
|
-
resp
|
16
|
+
table.to_s
|
44
17
|
end
|
45
18
|
|
46
19
|
def find_by_id_or_name
|
47
20
|
srv = Service.find_by_id(params[:id])
|
48
|
-
srv
|
21
|
+
srv ||= Service.find_by_name(params[:id])
|
49
22
|
error 404, "Couldn't find Service '#{params[:id]}'\n" unless srv
|
50
23
|
srv
|
51
24
|
end
|
52
25
|
|
26
|
+
def build_table_row(data)
|
27
|
+
ports = data.service_port&.each.map { |p| "#{p.mode}/#{p.external_port}" }.join(',')
|
28
|
+
pods = data.pod.each.map { |p| p.name.to_s }.join(' ')
|
29
|
+
[data.id, data.name, data.lease&.ip, ports, pods, data.status]
|
30
|
+
end
|
53
31
|
end
|
54
32
|
end
|
data/lib/mkit/app/mkit_server.rb
CHANGED
@@ -131,7 +131,7 @@ class Service < ActiveRecord::Base
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def create_pods_network
|
134
|
-
create_network(self.pods_network)
|
134
|
+
create_network(self.pods_network) unless network_exists?(self.pods_network)
|
135
135
|
end
|
136
136
|
|
137
137
|
def deploy_network
|
@@ -237,6 +237,15 @@ class Service < ActiveRecord::Base
|
|
237
237
|
}
|
238
238
|
end
|
239
239
|
|
240
|
+
def log
|
241
|
+
out = ""
|
242
|
+
self.pod.each { |p|
|
243
|
+
out << "<<<< %s | %s >>>>\n" % [self.name, p.name]
|
244
|
+
puts logs(p.name)
|
245
|
+
out << logs(p.name)
|
246
|
+
}
|
247
|
+
out
|
248
|
+
end
|
240
249
|
def as_json(options = {})
|
241
250
|
srv = super
|
242
251
|
a=[:pod, :volume, :service_config, :service_port]
|
data/lib/mkit/version.rb
CHANGED