harbr 0.0.3 → 0.0.5

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: 90e673e0e33206181428629abfc84ab183035492ac8cc2086db07044508e2837
4
- data.tar.gz: 50e1981a9f69c5bc1ee39ad0c7c9cbb4f0109026f7c34df7c291d5915ee16416
3
+ metadata.gz: 982d7720d122df743daabe03e8dab68bae4f7a9bce1630273d6048020bbfb7a5
4
+ data.tar.gz: 8e34045027b5b1f3c34585249ee8e9ce34a0cad3dc6a791e457098b53f6ad149
5
5
  SHA512:
6
- metadata.gz: ae41ff56df3bc5a5792a3285deb68eb1bcfc8f52377b2616260750ab848fe673066f5401385400c590a1d1c8abcbde2bd18e2645ced9c9978ea6755371e514c4
7
- data.tar.gz: c6161573a840e91d343fdc7fad17074e06d352cbd722b8147b34178f7218771436f953ccd82e8408cdee6d327d72423b7ccaab457214c837ac0d7e6f38d4bfef
6
+ metadata.gz: 3501f933ff90e155ccf27a59288902a8855efd329a9dc51a9abb379e44ee0542170978b45eff28ba740927ef2b4ff7975273a5018970d9e5d5c87719324f17eb
7
+ data.tar.gz: 3eb0f64c9c7447ed11cefc5527704b0d8dd78bd49563adb488bc07b32639dfde665d3a50b244995d4a07af18716d8cd9da1408a3f23a648dee6d34871e57f6bc
data/exe/harbr CHANGED
@@ -1,12 +1,42 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'thor'
3
3
  require 'listen'
4
+ require 'dddr'
5
+ require 'harbr'
6
+ require 'sucker_punch'
7
+ require 'terminal-table'
4
8
 
5
9
  class HarbrCLI < Thor
6
10
  DEFAULT_DIRECTORY = '/var/harbr'
11
+ DEFAULT_DIRECTORY_DATA_DIR = "#{DEFAULT_DIRECTORY}/.data"
7
12
  @@listener = nil
8
13
 
14
+ Dddr.configure do |config|
15
+ config.data_dir = DEFAULT_DIRECTORY_DATA_DIR
16
+ end
17
+
18
+
9
19
  no_commands do
20
+
21
+ def display_containers_table(containers)
22
+ return puts "No containers available." if containers.empty?
23
+
24
+ # Define headers based on Container attributes
25
+ headers = ['Name', 'Host Header', 'IP', 'Port']
26
+
27
+ rows = containers.map do |container|
28
+ [container.name, container.host_header, container.ip, container.port]
29
+ end
30
+
31
+ table = ::Terminal::Table.new(headings: headers, rows: rows)
32
+ puts ""
33
+ puts "Harbr Containers"
34
+ puts ""
35
+ puts table
36
+ puts ""
37
+ end
38
+
39
+
10
40
  def check_and_create_directory(path)
11
41
  unless Dir.exist?(path)
12
42
  puts "Creating directory: #{path}"
@@ -47,13 +77,25 @@ class HarbrCLI < Thor
47
77
  return if @@listener
48
78
 
49
79
  puts "Starting Harbr, listening to #{directory}"
80
+
50
81
  @@listener = Listen.to(directory) do |modified, added, removed|
51
- puts "Modified: #{modified}" unless modified.empty?
52
- puts "Added: #{added}" unless added.empty?
53
- puts "Removed: #{removed}" unless removed.empty?
82
+ unless added.empty?
83
+ next if added.first.include? "vendor"
84
+ next if added.first.include? ".git"
85
+ /\/var\/harbr\/(?<container>.+)\/.*/.match(added.first)
86
+ config = "/var/harbr/#{$1}/config/manifest.yml"
87
+ Harbr::Container::Job.perform_async(config)
88
+ end
54
89
 
55
- puts directory
56
- # Add your logic here for handling these changes
90
+ # unless removed.empty?
91
+ # /\/var\/harbr\/(?<container>.+)\/.*/.match(removed.first)
92
+ # config = "/var/harbr/#{$1}/config/manifest.yml"
93
+
94
+ # puts $1
95
+
96
+
97
+ # end
98
+
57
99
  end
58
100
  @@listener.start # not blocking
59
101
  sleep
@@ -89,6 +131,13 @@ class HarbrCLI < Thor
89
131
  puts "Harbr is not running or already active."
90
132
  end
91
133
  end
134
+
135
+ desc "containers", "show all containers"
136
+ def containers
137
+ container_repo = Harbr::Container::Repository.new
138
+ display_containers_table(container_repo.all)
139
+ end
140
+
92
141
  end
93
142
 
94
143
  HarbrCLI.start(ARGV)
@@ -0,0 +1,43 @@
1
+ # Define HTTP routers
2
+ [http.routers]
3
+ [http.routers.traefik-dashboard]
4
+ rule = "Host(`traefik.harbr.zero2one.ee`)"
5
+ service = "api@internal"
6
+ entryPoints = ["http"]
7
+
8
+
9
+ # Define the router for the Traefik Dashboard and API
10
+ [http.routers.traefik-dashboard]
11
+ rule = "Host(`traefik.harbr.zero2one.ee`)"
12
+ service = "api@internal"
13
+ entryPoints = ["http"]
14
+
15
+ [http.routers.tallinn-router]
16
+ rule = "Host(`tallinn.laki.zero2one.ee`)"
17
+ service = "tallinn-service"
18
+
19
+ [http.routers.vidtreon-router]
20
+ rule = "Host(`vidtreon.harbr.zero2one.ee`)"
21
+ service = "vidtreon-service"
22
+
23
+ [http.routers.sild-router]
24
+ rule = "Host(`sild.harbr.zero2one.ee`)"
25
+ service = "sild-service"
26
+
27
+
28
+
29
+ [http.services]
30
+ [http.services.tallinn-service]
31
+ [http.services.tallinn-service.loadBalancer]
32
+ [[http.services.tallinn-service.loadBalancer.servers]]
33
+ url = "http://10.80.172.9:80"
34
+
35
+ [http.services.vidtreon-service]
36
+ [http.services.vidtreon-service.loadBalancer]
37
+ [[http.services.vidtreon-service.loadBalancer.servers]]
38
+ url = "http://127.0.0.1:9292"
39
+
40
+ [http.services.sild-service]
41
+ [http.services.sild-service.loadBalancer]
42
+ [[http.services.sild-service.loadBalancer.servers]]
43
+ url = "http://127.0.0.1:9393"
data/lib/harbr/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Harbr
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.5"
5
5
  end
data/lib/harbr.rb CHANGED
@@ -1,8 +1,83 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  require_relative "harbr/version"
3
+ require 'dddr'
4
+ require 'sucker_punch'
4
5
 
5
6
  module Harbr
6
7
  class Error < StandardError; end
7
- # Your code goes here...
8
+ class Container
9
+ class Job
10
+ include SuckerPunch::Job
11
+
12
+ def perform(config)
13
+
14
+ puts "Harbr Job!"
15
+ puts config
16
+
17
+ end
18
+ end
19
+
20
+ include Dddr::Entity
21
+ attr_accessor :name, :host_header, :ip, :port
22
+ end
23
+
24
+ class Port
25
+
26
+ include Dddr::Entity
27
+ attr_accessor :host_header, :number
28
+
29
+ queries do
30
+ def has_port_number?(number)
31
+ all.find {|port| port.number == number.to_i}
32
+ end
33
+ def assigned_a_port?(host_header)
34
+ all.find {|port| port.host_header == host_header}
35
+ end
36
+ end
37
+ class Pool
38
+ def initialize(port_range=50000..51000)
39
+
40
+ @repository = Port::Repository.new
41
+
42
+ port_range.each do |number|
43
+
44
+ port = Port.new
45
+ port.number = number
46
+
47
+ unless @repository.has_port_number? number
48
+ @repository.add(port)
49
+ puts port.number.to_s + " added!"
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ def get_port(host_header)
56
+
57
+ port = @repository.assigned_a_port?(host_header)
58
+ return port unless port.nil?
59
+
60
+ port = ports.shuffle.sample
61
+ port.host_header = host_header
62
+ @repository.update(port)
63
+ port
64
+ end
65
+
66
+ def return_port(port)
67
+ port.host_header = nil
68
+ @repository.update(port)
69
+ port.host_header.nil?
70
+ end
71
+
72
+ def ports
73
+ @repository.all
74
+ end
75
+
76
+ end
77
+
78
+
79
+ end
80
+
81
+
82
+ # Your code goes here...
8
83
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: harbr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delaney Kuldvee Burke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-02 00:00:00.000000000 Z
11
+ date: 2023-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: listen
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dddr
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: sucker_punch
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.1.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: terminal-table
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.2
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.2
41
83
  description: Harbr is a versatile tool designed to streamline the deployment, management,
42
84
  and scaling of Rack-based applications. It integrates with version control and process
43
85
  supervision systems to ensure smooth and consistent application delivery.
@@ -57,6 +99,7 @@ files:
57
99
  - Rakefile
58
100
  - exe/harbr
59
101
  - hero.png
102
+ - lib/examples/harbr.toml
60
103
  - lib/harbr.rb
61
104
  - lib/harbr/version.rb
62
105
  - sig/harbr.rbs