mkit 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56a055d0f918142de3df69c4855efe29d91eb31aa708bdd2750686b8bdb80c47
4
- data.tar.gz: 4060c899e719dad8dcd11a587e2b34f40caf0d4929a5e3d587d4e51b8a133a82
3
+ metadata.gz: fb997b1bc61151dde6209eeaefdf4f669df9255b7e69735eb0c5c56e346222f1
4
+ data.tar.gz: 3819a29d9335a2d4831051d133d9e0056b93d54803701a27ed596a750f907d7b
5
5
  SHA512:
6
- metadata.gz: 7834b888e1474e287e7466443be8ac139bbd96d89e17f787d688aee5f308f076aab408de600acee6dc4f94a145fda9edb8574e7828b1d20ae8fcb46700c96e85
7
- data.tar.gz: 91130b1307fb43d0ac3dc590bf01727dab106c5b726210ef9fe67057dcb7454434f514beee94c4d265ee7351b802d4797ecb8084965f0c07975c4f17e96c3b4e
6
+ metadata.gz: c95a967e4a016554700b9e844de87481fd8f4b1f71e2cb4cdae16509104b177485f6cdcc3aa114f3d4ab8680e8d39fb05c125fca4dd81edbb089800d08ec275e
7
+ data.tar.gz: f62ac16133370c7bc41f901fe148b708c046f4598331848daefd4bb108419f7b2fc510a9176bff771fbff3afa4e38d5ce000d70d8cad1feeb41b8f339956d802
@@ -0,0 +1,22 @@
1
+ name: Publish Gem
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - v[0-9]*.[0-9]*.[0-9]*
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v3
13
+ - name: Publish to RubyGems
14
+ run: |
15
+ mkdir -p $HOME/.gem
16
+ touch $HOME/.gem/credentials
17
+ chmod 0600 $HOME/.gem/credentials
18
+ printf -- "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}\n" > $HOME/.gem/credentials
19
+ gem build *.gemspec
20
+ gem push *.gem
21
+ env:
22
+ RUBYGEMS_API_KEY: "${{secrets.RUBYGEMS_API_KEY}}"
data/README.md CHANGED
@@ -66,6 +66,7 @@ Commands:
66
66
 
67
67
  ps show services status (alias for status)
68
68
  status show services status
69
+ logs prints service logs
69
70
  start start service
70
71
  stop stop service
71
72
  restart restart service
data/Rakefile CHANGED
@@ -9,6 +9,7 @@ require 'rubygems/specification'
9
9
  require 'rake/testtask'
10
10
  require 'pry'
11
11
  require 'fileutils'
12
+ require 'bundler'
12
13
  require 'bundler/setup'
13
14
  require 'dry-container'
14
15
  require 'sinatra/activerecord'
data/bin/mkitc CHANGED
@@ -46,6 +46,15 @@ class MKItClient
46
46
  usage: ['[service_id_or_name]'],
47
47
  request: { verb: :get, uri: '/services' }
48
48
  },
49
+ {
50
+ cmd: 'logs',
51
+ args: [
52
+ { name: 'id', mandatory: true }
53
+ ],
54
+ help: 'prints service logs',
55
+ usage: ['<service_id_or_name>'],
56
+ request: { verb: :get, uri: '/services/<%=id%>/logs' }
57
+ },
49
58
  {
50
59
  cmd: 'start',
51
60
  args: [
@@ -31,6 +31,11 @@ class ServicesController < MKIt::Server
31
31
  resp
32
32
  end
33
33
 
34
+ get '/services/:id/logs' do
35
+ srv = find_by_id_or_name
36
+ srv.log
37
+ end
38
+
34
39
  # curl -X PUT localhost:4567/services/1 -F "file=@mkit/samples/mkit.yml"
35
40
  put '/services/:id' do
36
41
  srv = find_by_id_or_name
@@ -31,6 +31,13 @@ module MKIt
31
31
  MKIt::CmdRunner.run("docker exec -it #{instance_id} #{cmd}")
32
32
  end
33
33
 
34
+ #
35
+ # logs
36
+ #
37
+ def logs(instance_id)
38
+ `docker logs -n 20 #{instance_id}`
39
+ end
40
+
34
41
  #
35
42
  # network
36
43
  #
@@ -8,14 +8,10 @@ module MKIt
8
8
  table.head = %w[id name addr ports pods status]
9
9
  if data.respond_to? 'each'
10
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]
11
+ table.rows << build_table_row(srv)
14
12
  end
15
13
  else
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]
14
+ table.rows << build_table_row(data)
19
15
  end
20
16
  table.to_s
21
17
  end
@@ -26,5 +22,11 @@ module MKIt
26
22
  error 404, "Couldn't find Service '#{params[:id]}'\n" unless srv
27
23
  srv
28
24
  end
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
29
31
  end
30
32
  end
@@ -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) if !network_exists?(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
@@ -1,4 +1,4 @@
1
1
  module MKIt
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
4
4
 
data/mkit.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.summary = 'Micro Kubernets on Ruby'
10
10
  s.bindir = 'bin'
11
11
  s.homepage = 'https://github.com/valexsantos/mkit'
12
- s.license = 'Apache-2.0'
12
+ s.license = 'MIT'
13
13
  s.description = 'Micro k8s on Ruby - a simple tool to deploy containers to mimic a (very) minimalistic k8 cluster with a nice REST API'
14
14
  # s.require_paths = ["."]
15
15
  s.author = 'Vasco Santos'
@@ -0,0 +1,21 @@
1
+ #
2
+ service:
3
+ name: kafka-cluster
4
+ network: kafka-cluster
5
+ image: confluentinc/cp-kafka:7.1.6
6
+ ports:
7
+ - 9092:9092:tcp:round_robin
8
+ volumes:
9
+ - docker://kafka_cluster_secrets:/etc/kafka/secrets
10
+ - docker://kafka_cluster_data:/var/lib/kafka/data
11
+ environment:
12
+ KAFKA_BROKER_ID: 1
13
+ KAFKA_ZOOKEEPER_CONNECT: kafka-zookeeper:2181
14
+ KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
15
+ KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-cluster:9092
16
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
17
+ # KAFKA_CONFLUENT_SCHEMA_REGISTRY_URL: http://kafka-schema-registry
18
+ KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
19
+ KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
20
+ KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
21
+
@@ -0,0 +1,16 @@
1
+ #
2
+ service:
3
+ name: kafka-magic
4
+ network: kafka-cluster
5
+ ports:
6
+ - 80:80:http:round_robin
7
+ image: digitsy/kafka-magic
8
+ environment:
9
+ KMAGIC_ALLOW_TOPIC_DELETE: "true"
10
+ KMAGIC_ALLOW_SCHEMA_DELETE: "true"
11
+ KMAGIC_CONFIG_STORE_TYPE: "file"
12
+ KMAGIC_CONFIG_STORE_CONNECTION: "Data Source=/config/KafkaMagicConfig.db;"
13
+ KMAGIC_CONFIG_ENCRYPTION_KEY: "123456"
14
+ volumes:
15
+ - docker://kafka_magic_config:/config
16
+
@@ -0,0 +1,15 @@
1
+ #
2
+ service:
3
+ name: kafka-zookeeper
4
+ image: confluentinc/cp-zookeeper:7.1.6
5
+ network: kafka-cluster
6
+ ports:
7
+ - 2181:2181:tcp:round_robin
8
+ volumes:
9
+ - docker://kafka_zookeeper_secrets:/etc/zookeeper/secrets
10
+ - docker://kafka_zookeeper_data:/var/lib/zookeeper/data
11
+ - docker://kafka_zookeeper_log:/var/lib/zookeeper/log
12
+ environment:
13
+ ZOOKEEPER_CLIENT_PORT: 2181
14
+ ZOOKEEPER_TICK_TIME: 2000
15
+
@@ -0,0 +1,16 @@
1
+ #
2
+ service:
3
+ name: minio
4
+ image: minio/minio
5
+ command: server /data --console-address ":9001"
6
+ network: bridge
7
+ ports:
8
+ - 9001:9001:http:round_robin
9
+ - 9000:9000:tcp:round_robin
10
+ environment:
11
+ MINIO_ACCESS_KEY: minio
12
+ MINIO_SECRET_KEY: minio123
13
+ volumes:
14
+ #- docker://minio_data:/data
15
+ - /tmp/minio_data:/data
16
+
@@ -0,0 +1,9 @@
1
+ #
2
+ service:
3
+ name: mongo
4
+ image: mongo:4.0
5
+ command: "--smallfiles"
6
+ network: bridge
7
+ ports:
8
+ - 27017:27017:tcp:round_robin
9
+
@@ -0,0 +1,13 @@
1
+ #
2
+ service:
3
+ name: nexus
4
+ image: sonatype/nexus3
5
+ network: bridge
6
+ ports:
7
+ - 80:8081:http:round_robin
8
+ resources:
9
+ max_replicas: 1
10
+ min_replicas: 1
11
+ volumes:
12
+ - docker://nexus_data:/nexus-data
13
+
@@ -0,0 +1,11 @@
1
+ #
2
+ service:
3
+ name: redis-sentinel
4
+ image: bitnami/redis-sentinel:latest
5
+ network: bridge
6
+ ports:
7
+ - 26379:26379:tcp:round_robin
8
+ environment:
9
+ REDIS_MASTER_HOST: redis
10
+
11
+
@@ -0,0 +1,9 @@
1
+ #
2
+ service:
3
+ name: redis
4
+ image: redis:4.0-alpine
5
+ network: bridge
6
+ ports:
7
+ - 6379:6379:tcp:round_robin
8
+
9
+
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.4.2
4
+ version: 0.4.3
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-02-02 00:00:00.000000000 Z
11
+ date: 2024-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-dns
@@ -300,6 +300,7 @@ executables:
300
300
  extensions: []
301
301
  extra_rdoc_files: []
302
302
  files:
303
+ - ".github/workflows/publish.yml"
303
304
  - ".rubocop.yml"
304
305
  - Gemfile
305
306
  - Gemfile.lock
@@ -365,14 +366,22 @@ files:
365
366
  - lib/mkit/workers/worker_manager.rb
366
367
  - mkit.gemspec
367
368
  - mkitd
369
+ - samples/apps/kafka-cluster.yml
370
+ - samples/apps/kafka-magic.yml
371
+ - samples/apps/kafka-zookeeper.yml
372
+ - samples/apps/minio.yml
373
+ - samples/apps/mongo.yml
374
+ - samples/apps/nexus.yml
368
375
  - samples/apps/postgres.yml
369
376
  - samples/apps/rabbitmq.yml
377
+ - samples/apps/redis-sentinel.yml
378
+ - samples/apps/redis.yml
370
379
  - samples/daemontools/log/run
371
380
  - samples/daemontools/run
372
381
  - samples/systemd/mkitd.service
373
382
  homepage: https://github.com/valexsantos/mkit
374
383
  licenses:
375
- - Apache-2.0
384
+ - MIT
376
385
  metadata: {}
377
386
  post_install_message:
378
387
  rdoc_options: []