mkit 0.4.1 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- 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