harbr 0.0.3 → 0.0.5
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.
- checksums.yaml +4 -4
- data/exe/harbr +54 -5
- data/lib/examples/harbr.toml +43 -0
- data/lib/harbr/version.rb +1 -1
- data/lib/harbr.rb +77 -2
- metadata +45 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 982d7720d122df743daabe03e8dab68bae4f7a9bce1630273d6048020bbfb7a5
|
4
|
+
data.tar.gz: 8e34045027b5b1f3c34585249ee8e9ce34a0cad3dc6a791e457098b53f6ad149
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
52
|
-
|
53
|
-
|
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
|
-
|
56
|
-
#
|
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
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
|
-
|
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.
|
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-
|
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
|