mkit 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,6 @@
1
- class Setup < ActiveRecord::Migration[5.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 "services", ["name"], :name => "services_name_id"
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
-
@@ -1,5 +1,6 @@
1
- class MkitJobs < ActiveRecord::Migration[5.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 "dns_hosts", force: :cascade do |t|
15
- t.string "service_id"
16
- t.string "pod_id"
17
- t.string "name"
18
- t.string "ip"
19
- t.string "ipv6"
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 "leases", force: :cascade do |t|
23
- t.string "pool_id"
24
- t.string "service_id"
25
- t.string "interface_name"
26
- t.string "interface_type"
27
- t.string "status"
28
- t.string "ip"
29
- t.datetime "expires_at", precision: nil
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 "mkit_jobs", force: :cascade do |t|
33
- t.string "topic"
34
- t.string "service_id"
35
- t.string "pod_id"
36
- t.string "status"
37
- t.string "retries"
38
- t.string "payload"
39
- t.datetime "created_at", precision: nil
40
- t.datetime "updated_at", precision: nil
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 "pods", force: :cascade do |t|
44
- t.string "service_id"
45
- t.string "pod_id"
46
- t.string "name"
47
- t.string "ip"
48
- t.string "image"
49
- t.string "status"
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 "pools", force: :cascade do |t|
53
- t.string "name"
54
- t.string "ip"
55
- t.string "range"
56
- t.string "netmask"
57
- t.string "status"
58
- t.boolean "preferred", default: false
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 "service_configs", force: :cascade do |t|
62
- t.string "service_id"
63
- t.string "key"
64
- t.string "value"
65
- t.string "ctype"
66
- t.string "version"
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 "service_ports", force: :cascade do |t|
70
- t.string "service_id"
71
- t.string "internal_port"
72
- t.string "external_port"
73
- t.string "mode"
74
- t.string "load_bal"
75
- t.string "version"
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 "services", force: :cascade do |t|
79
- t.string "name"
80
- t.string "image"
81
- t.string "qdm"
82
- t.string "command"
83
- t.integer "max_replicas", default: 1
84
- t.integer "min_replicas", default: 1
85
- t.string "lease_id"
86
- t.string "pods_network", default: "mkit"
87
- t.string "version"
88
- t.string "status"
89
- t.datetime "created_at", precision: nil, default: "2023-12-28 12:41:59"
90
- t.datetime "updated_at", precision: nil
91
- t.index ["name"], name: "services_name_id"
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 "settings", force: :cascade do |t|
95
- t.string "key"
96
- t.string "value"
96
+ create_table 'settings', force: :cascade do |t|
97
+ t.string 'key'
98
+ t.string 'value'
97
99
  end
98
100
 
99
- create_table "volumes", force: :cascade do |t|
100
- t.string "service_id"
101
- t.string "name"
102
- t.string "path"
103
- t.string "ctype"
104
- t.string "status"
105
- t.string "version"
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 = "no file"
28
+ xx = 'no file'
28
29
  if params[:file]
29
30
  tempfile = params[:file][:tempfile]
30
- xx= YAML.load(tempfile.read)
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
- class PodsController < MKIt::Server
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 = "no file"
21
+ xx = 'no file'
21
22
  if params[:file]
22
23
  tempfile = params[:file][:tempfile]
23
- xx= YAML.load(tempfile.read)
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
- if params[:verbose]
10
- verbose = params[:verbose] == 'true'
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,11 +23,11 @@ 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
- resp = srv.to_json
29
- else
30
- resp = format_response(srv)
31
- end
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
 
@@ -37,7 +36,7 @@ class ServicesController < MKIt::Server
37
36
  srv = find_by_id_or_name
38
37
  if params[:file]
39
38
  tempfile = params[:file][:tempfile]
40
- yaml = YAML.load(tempfile.read)
39
+ yaml = YAML.safe_load(tempfile.read)
41
40
  srv.update!(yaml.to_o)
42
41
  end
43
42
  format_response(srv)
@@ -52,10 +51,10 @@ class ServicesController < MKIt::Server
52
51
 
53
52
  # curl -X POST localhost:4567/services -F "file=@mkit/samples/mkit.yml"
54
53
  post '/services' do
55
- srv = "no file"
54
+ srv = 'no file'
56
55
  if params[:file]
57
56
  tempfile = params[:file][:tempfile]
58
- yaml = YAML.load(tempfile.read)
57
+ yaml = YAML.safe_load(tempfile.read)
59
58
  srv = Service.create(yaml.to_o)
60
59
  end
61
60
  format_response(srv)
@@ -77,4 +76,11 @@ class ServicesController < MKIt::Server
77
76
  MkitJob.publish(topic: :stop_service, service_id: srv.id)
78
77
  format_response(srv)
79
78
  end
79
+
80
+ put '/services/:id/restart' do
81
+ srv = find_by_id_or_name
82
+ MkitJob.publish(topic: :stop_service, service_id: srv.id)
83
+ MkitJob.publish(topic: :start_service, service_id: srv.id)
84
+ format_response(srv)
85
+ end
80
86
  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 = %x{docker inspect #{instance_id}}
26
+ x = `docker inspect #{instance_id}`
26
27
  JSON.parse(x).first
27
28
  end
28
29
 
@@ -39,7 +40,7 @@ module MKIt
39
40
  end
40
41
 
41
42
  def network_exists?(network_name)
42
- x = MKIt::CmdRunner.run("docker network ls")
43
+ x = MKIt::CmdRunner.run('docker network ls')
43
44
  x.match(/\b#{network_name}\b/)
44
45
  end
45
46
 
@@ -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
- ERB.new(read_template(template)).result_with_hash(data)
13
+ ERB.new(read_template(template)).result_with_hash(data)
12
14
  end
13
15
 
14
16
  def parse_model(template)
@@ -1,54 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'text-table'
1
4
  module MKIt
2
5
  module ServicesHelper
3
- def str_template
4
- "%-5s %-18s %-15s %-25s %-10s"
5
- end
6
-
7
- def header_template
8
- ["id", "name", "addr", "ports", "status"]
9
- end
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
+ ports = srv.service_port&.each.map { |p| "#{p.mode}/#{p.external_port}" }.join(',')
12
+ pods = srv.pod.each.map { |p| p.name.to_s }.join(' ')
13
+ table.rows << [srv.id, srv.name, srv.lease&.ip, ports, pods, srv.status]
14
+ end
25
15
  else
26
- ports = data.service_port&.each.map { |p| "#{p.mode}/#{p.external_port}"}.join(",")
27
- resp << _format(str_template, [data.id, data.name, data.lease&.ip, ports, data.status])
28
- resp+=service_pods(data)
16
+ ports = data.service_port&.each.map { |p| "#{p.mode}/#{p.external_port}" }.join(',')
17
+ pods = data.pod.each.map { |p| p.name.to_s }.join(' ')
18
+ table.rows << [data.id, data.name, data.lease&.ip, ports, pods, data.status]
29
19
  end
30
- resp << ""
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
20
+ table.to_s
44
21
  end
45
22
 
46
23
  def find_by_id_or_name
47
24
  srv = Service.find_by_id(params[:id])
48
- srv = Service.find_by_name(params[:id]) unless srv
25
+ srv ||= Service.find_by_name(params[:id])
49
26
  error 404, "Couldn't find Service '#{params[:id]}'\n" unless srv
50
27
  srv
51
28
  end
52
-
53
29
  end
54
30
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mkit/exceptions'
2
4
 
3
5
  module MKIt
data/lib/mkit/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module MKIt
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
4
4