harbr 0.1.15 → 0.1.16
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/! +177 -0
- data/lib/harbr/job.rb +6 -4
- data/lib/harbr/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3b7fa88e79e3aacebe05805dffd35ddb90b46208cbf11dfc75c14ab0e9be2ed
|
4
|
+
data.tar.gz: fe47d47fcb32a979fd13727fe99b87def6b7a2fe5cfd262c5b22ff4305ac6700
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 051e22a069c3685557e2728447488e19594526f8abd32ccf67525a383bcd85b9b7fefc6a50a1c031a63d8a2b9cea20c11014079ff9ee13d2ffdc810082915c19
|
7
|
+
data.tar.gz: b5da151591c407020b096dd9c4cdaa089e3f05d3db511f3aae72a5f90ddf44078b3adab3c6a9096d909ed3cefe14b7550cf38ab4f508d89e6f86f265f8012b3d
|
data/!
ADDED
@@ -0,0 +1,177 @@
|
|
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
|
data/lib/harbr/job.rb
CHANGED
@@ -31,12 +31,14 @@ module Harbr
|
|
31
31
|
container.ip = "127.0.0.1"
|
32
32
|
name = container.name.gsub(".", "-")
|
33
33
|
|
34
|
-
# Create the router with TLS enabled
|
35
|
-
|
34
|
+
# Create the router with TLS enabled and specific format
|
35
|
+
router_key = "#{name}-router-secure"
|
36
|
+
config["http"]["routers"][router_key] = {
|
36
37
|
"rule" => "Host(`#{container.host_header}`)",
|
37
38
|
"service" => "#{name}-service",
|
39
|
+
"entryPoints" => ["https"],
|
38
40
|
"tls" => {
|
39
|
-
"certResolver" => "
|
41
|
+
"certResolver" => "myresolver" # Use a custom certificate resolver
|
40
42
|
}
|
41
43
|
}
|
42
44
|
|
@@ -48,7 +50,7 @@ module Harbr
|
|
48
50
|
}
|
49
51
|
end
|
50
52
|
|
51
|
-
|
53
|
+
# Write the configuration to a TOML file
|
52
54
|
File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
|
53
55
|
puts "Traefik configuration written to /etc/traefik/harbr.toml"
|
54
56
|
end
|
data/lib/harbr/version.rb
CHANGED
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.16
|
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-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: listen
|
@@ -118,6 +118,7 @@ executables:
|
|
118
118
|
extensions: []
|
119
119
|
extra_rdoc_files: []
|
120
120
|
files:
|
121
|
+
- "!"
|
121
122
|
- ".data/development/Harbr::Port.dir"
|
122
123
|
- ".data/development/Harbr::Port.pag"
|
123
124
|
- ".rspec"
|