mkit 0.4.1 → 0.4.2

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.
@@ -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