harbr 0.1.17 → 0.1.19
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 +4 -13
- data/lib/harbr/job.rb +1 -6
- data/lib/harbr/next/job.rb +0 -5
- data/lib/harbr/version.rb +1 -1
- data/lib/harbr.rb +0 -6
- metadata +2 -3
- data/! +0 -177
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b584af86b43ec89938ea427ffb14918c6b6e74aad600266b9b0b09d45b9c80e4
|
4
|
+
data.tar.gz: 1ce98abc55439996b3d228cf5ca48b01e8a0cad8cd615ba969b934787590c12e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 532b7b8e256b8d5e53b3096085230e7807b4617bd6973023b7e4971fc80a8d15740bbcbfea7abbe27b7d8ba5ce447dc25fb35e13bb4b116e9b2f1f621b541583
|
7
|
+
data.tar.gz: 172a6396c837b15edfacb39280aec97d230c3ec41f7396f964bae2ea9b3253a648cdd47520216a073bee90c617c60b5e8e9d536206109d6d220331b146490ca3
|
data/exe/harbr
CHANGED
@@ -3,12 +3,6 @@ require_relative "../lib/harbr"
|
|
3
3
|
|
4
4
|
class HarbrCLI < Thor
|
5
5
|
no_commands do
|
6
|
-
def highest_numbered_directory(path)
|
7
|
-
directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
|
8
|
-
directories.max_by { |entry| entry[/\d+/].to_i }
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
6
|
def display_containers_table(containers)
|
13
7
|
return puts "No containers available." if containers.empty?
|
14
8
|
|
@@ -73,16 +67,12 @@ class HarbrCLI < Thor
|
|
73
67
|
|
74
68
|
def run_jobs(container, version)
|
75
69
|
puts "Running tasks for container: #{container}, version: #{version}"
|
76
|
-
|
77
|
-
sleep 3
|
78
|
-
puts "done waiting"
|
70
|
+
sleep 1
|
79
71
|
if version.to_i == 0
|
80
|
-
puts "Initial Deploy!!! of #{container}"
|
81
72
|
Harbr::Job.perform_async(container, version)
|
82
|
-
else
|
83
|
-
Harbr::Next::Job.perform_async(container, version)
|
84
|
-
puts "deploy next version #{version} of #{container}"
|
85
73
|
end
|
74
|
+
Harbr::Next::Job.perform_async(container, version)
|
75
|
+
puts "deploy next version #{version} of #{container}"
|
86
76
|
end
|
87
77
|
|
88
78
|
def create_traefik_config(containers)
|
@@ -183,6 +173,7 @@ desc "peek CONTAINER", "Peek in a given container"
|
|
183
173
|
|
184
174
|
desc "deploy", "deploy a container to production"
|
185
175
|
def deploy(name)
|
176
|
+
|
186
177
|
Dir.chdir("/var/harbr/containers/#{name}/") do
|
187
178
|
|
188
179
|
/(?<current>. * -> (?<path>.*))/.match(`ls -l /var/harbr/containers/#{name}/current`)
|
data/lib/harbr/job.rb
CHANGED
@@ -2,12 +2,7 @@ require 'harbr'
|
|
2
2
|
module Harbr
|
3
3
|
class Job
|
4
4
|
include SuckerPunch::Job
|
5
|
-
|
6
|
-
def highest_numbered_directory(path)
|
7
|
-
directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
|
8
|
-
directories.max_by { |entry| entry[/\d+/].to_i }
|
9
|
-
end
|
10
|
-
|
5
|
+
|
11
6
|
def get_container_name(path)
|
12
7
|
File.basename(path)
|
13
8
|
end
|
data/lib/harbr/next/job.rb
CHANGED
@@ -8,11 +8,6 @@ module Harbr
|
|
8
8
|
class Job
|
9
9
|
include SuckerPunch::Job
|
10
10
|
|
11
|
-
def highest_numbered_directory(path)
|
12
|
-
directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
|
13
|
-
directories.max_by { |entry| entry[/\d+/].to_i }
|
14
|
-
end
|
15
|
-
|
16
11
|
def get_container_name(path)
|
17
12
|
File.basename(path)
|
18
13
|
end
|
data/lib/harbr/version.rb
CHANGED
data/lib/harbr.rb
CHANGED
@@ -17,12 +17,6 @@ module Harbr
|
|
17
17
|
DEFAULT_DIRECTORY = "/var/harbr/containers"
|
18
18
|
DEFAULT_DIRECTORY_DATA_DIR = "#{DEFAULT_DIRECTORY}/.data"
|
19
19
|
class Error < StandardError; end
|
20
|
-
|
21
|
-
def self.highest_numbered_directory(path)
|
22
|
-
directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
|
23
|
-
directories.max_by { |entry| entry[/\d+/].to_i }
|
24
|
-
end
|
25
|
-
|
26
20
|
end
|
27
21
|
|
28
22
|
Dddr.configure do |config|
|
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.1.
|
4
|
+
version: 0.1.19
|
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-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: listen
|
@@ -118,7 +118,6 @@ executables:
|
|
118
118
|
extensions: []
|
119
119
|
extra_rdoc_files: []
|
120
120
|
files:
|
121
|
-
- "!"
|
122
121
|
- ".data/development/Harbr::Port.dir"
|
123
122
|
- ".data/development/Harbr::Port.pag"
|
124
123
|
- ".rspec"
|
data/!
DELETED
@@ -1,177 +0,0 @@
|
|
1
|
-
require 'harbr'
|
2
|
-
module Harbr
|
3
|
-
class Job
|
4
|
-
include SuckerPunch::Job
|
5
|
-
|
6
|
-
def highest_numbered_directory(path)
|
7
|
-
directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
|
8
|
-
directories.max_by { |entry| entry[/\d+/].to_i }
|
9
|
-
end
|
10
|
-
|
11
|
-
def get_container_name(path)
|
12
|
-
File.basename(path)
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
def create_traefik_config(containers)
|
17
|
-
config = {
|
18
|
-
"http" => {
|
19
|
-
"routers" => {
|
20
|
-
"traefik-dashboard" => {
|
21
|
-
"rule" => "Host(`traefik.harbr.zero2one.ee`)",
|
22
|
-
"service" => "api@internal",
|
23
|
-
"tls" => {} # Enable TLS for the dashboard
|
24
|
-
}
|
25
|
-
},
|
26
|
-
"services" => {}
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
containers.each do |container|
|
31
|
-
container.ip = "127.0.0.1"
|
32
|
-
name = container.name.gsub(".", "-")
|
33
|
-
|
34
|
-
# Create the router with TLS enabled
|
35
|
-
config["http"]["routers"]["#{name}-router"] = {
|
36
|
-
"rule" => "Host(`#{container.host_header}`)",
|
37
|
-
"service" => "#{name}-service",
|
38
|
-
"tls" => {
|
39
|
-
"certResolver" => "letsencrypt" # Specify the certificate resolver for TLS
|
40
|
-
}
|
41
|
-
}
|
42
|
-
|
43
|
-
# Create the service
|
44
|
-
config["http"]["services"]["#{name}-service"] = {
|
45
|
-
"loadBalancer" => {
|
46
|
-
"servers" => [{"url" => "http://#{container.ip}:#{container.port}"}]
|
47
|
-
}
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
|
52
|
-
File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
|
53
|
-
puts "Traefik configuration written to /etc/traefik/harbr.toml"
|
54
|
-
end
|
55
|
-
|
56
|
-
def collate_containers(name,host,port)
|
57
|
-
|
58
|
-
containers = Harbr::Container::Repository.new
|
59
|
-
container = containers.find_by_header(host)
|
60
|
-
|
61
|
-
if container.nil?
|
62
|
-
container = Harbr::Container.new
|
63
|
-
container.name = name
|
64
|
-
container.host_header =host
|
65
|
-
container.ip = "127.0.0.1"
|
66
|
-
container.port = port
|
67
|
-
containers.create(container)
|
68
|
-
else
|
69
|
-
container.port = port
|
70
|
-
containers.update(container)
|
71
|
-
end
|
72
|
-
containers.all
|
73
|
-
end
|
74
|
-
|
75
|
-
|
76
|
-
module Runit
|
77
|
-
|
78
|
-
class Run
|
79
|
-
def initialize(container, port)
|
80
|
-
@container_name = container
|
81
|
-
@port = port
|
82
|
-
end
|
83
|
-
|
84
|
-
def to_s
|
85
|
-
script_template = <<~SCRIPT
|
86
|
-
#!/bin/sh
|
87
|
-
exec 2>&1
|
88
|
-
cd /var/harbr/containers/#{@container_name}/current
|
89
|
-
exec ./exe/run #{@port} live
|
90
|
-
SCRIPT
|
91
|
-
end
|
92
|
-
|
93
|
-
def link
|
94
|
-
"ln -s /etc/sv/harbr/#{@container_name} /etc/service/#{@container_name}"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
|
99
|
-
class Finish
|
100
|
-
def initialize(port)
|
101
|
-
@port = port
|
102
|
-
end
|
103
|
-
|
104
|
-
def to_s
|
105
|
-
script_template = <<~SCRIPT
|
106
|
-
#!/bin/sh
|
107
|
-
sleep 3
|
108
|
-
`lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
|
109
|
-
SCRIPT
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
class Log
|
114
|
-
def initialize(container)
|
115
|
-
@container_name = container
|
116
|
-
end
|
117
|
-
|
118
|
-
def to_s
|
119
|
-
script_template = <<~SCRIPT
|
120
|
-
#!/bin/sh
|
121
|
-
exec svlogd -tt /var/log/harbr/#{@container_name}
|
122
|
-
SCRIPT
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
def write_to_file(path, contents)
|
130
|
-
File.open(path, 'w') do |file|
|
131
|
-
file.write(contents)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def load_manifest(container, version)
|
136
|
-
manifest_path = "/var/harbr/containers/#{container}/versions/#{version}/config/manifest.yml"
|
137
|
-
raise "Manifest not found at #{manifest_path}" unless File.exist?(manifest_path)
|
138
|
-
manifest_data = YAML.load_file(manifest_path)
|
139
|
-
OpenStruct.new(manifest_data)
|
140
|
-
end
|
141
|
-
|
142
|
-
def perform(name,version)
|
143
|
-
|
144
|
-
Dir.chdir "/var/harbr/containers/#{name}/versions/#{version}" do
|
145
|
-
|
146
|
-
`bundle config set --local path 'vendor/bundle'`
|
147
|
-
manifest = load_manifest(name, version)
|
148
|
-
port = `port assign #{manifest.port}`.strip
|
149
|
-
system "sv stop #{name}" if File.exist?("/etc/service/#{name}")
|
150
|
-
system 'bundle install'
|
151
|
-
|
152
|
-
|
153
|
-
`mkdir -p /etc/sv/harbr/#{name}`
|
154
|
-
`mkdir -p /etc/sv/harbr/#{name}/log`
|
155
|
-
`mkdir -p /var/log/harbr/#{name}`
|
156
|
-
|
157
|
-
write_to_file "/etc/sv/harbr/#{name}/run", Runit::Run.new(name, port).to_s
|
158
|
-
write_to_file "/etc/sv/harbr/#{name}/finish", Runit::Finish.new(port).to_s
|
159
|
-
write_to_file "/etc/sv/harbr/#{name}/log/run", Runit::Log.new(name).to_s
|
160
|
-
|
161
|
-
`chmod +x /etc/sv/harbr/#{name}/run`
|
162
|
-
`chmod +x /etc/sv/harbr/#{name}/log/run`
|
163
|
-
`chmod +x /etc/sv/harbr/#{name}/finish`
|
164
|
-
|
165
|
-
system "ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/current"
|
166
|
-
system "ln -sf /etc/sv/harbr/#{name} /etc/service/#{name}"
|
167
|
-
|
168
|
-
containers = collate_containers(name, manifest.host, port)
|
169
|
-
create_traefik_config(containers)
|
170
|
-
puts "process #{version} of #{name}"
|
171
|
-
end
|
172
|
-
|
173
|
-
end
|
174
|
-
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|