harbr 0.1.97 → 0.1.98
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 +2 -119
- data/lib/harbr/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe153e32f06547c4c498a5d08f8a7aef1fc27e44ed3857d73696e59062b8f80e
|
4
|
+
data.tar.gz: d5a7ad6a5f5564625a44500c396482c187fed60d9db85406e74a372d9a5fd0d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d0c6ffe147df8016539d6e126f201ba8607d6fc554fe55827cd47bb36c0aa7c7a1ca86e871d714f44280e04b09c817d8db6e9f2407488402b9e2e848d1693d0
|
7
|
+
data.tar.gz: 20271d95fb0ea8aee04d1cae9dd28949389d70ea333106060de8e1cd9a897bf20b7aca94a382bf3b98e738a36d9ddd863ece93d20a97234108b308b5fddf59e3
|
data/exe/harbr
CHANGED
@@ -48,82 +48,6 @@ class HarbrCLI < Thor
|
|
48
48
|
system("sudo apt install #{package}") or raise "Failed to install #{package}"
|
49
49
|
end
|
50
50
|
|
51
|
-
def scan_for_containers
|
52
|
-
Dir.glob("/var/harbr/containers/*").each_with_object({}) do |container_path, hash|
|
53
|
-
next unless File.directory?(container_path)
|
54
|
-
container_name = File.basename(container_path)
|
55
|
-
versions = Dir.glob("#{container_path}/versions/*").select { |path| File.directory?(path) }
|
56
|
-
versions.each { |version_path| hash["#{container_name}/versions/#{File.basename(version_path)}"] = true }
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
PLACED_FILE = "/var/harbr/.placed"
|
61
|
-
|
62
|
-
def place(container, version)
|
63
|
-
placed_containers = File.exist?(PLACED_FILE) ? File.read(PLACED_FILE).split("\n") : []
|
64
|
-
|
65
|
-
if placed_containers.include?("#{container}/#{version}")
|
66
|
-
puts "Container '#{container}', Version '#{version}' is already placed."
|
67
|
-
else
|
68
|
-
puts "Placing container: '#{container}', Version: '#{version}'"
|
69
|
-
run_jobs(container, version)
|
70
|
-
File.open(PLACED_FILE, "a") { |file| file.puts("#{container}/#{version}") }
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def check
|
75
|
-
sleep_times = [1, 3, 5, 8, 23]
|
76
|
-
begin
|
77
|
-
result = yield if block_given?
|
78
|
-
unless result
|
79
|
-
sleep_times.each do |time|
|
80
|
-
result = yield if block_given?
|
81
|
-
break if result
|
82
|
-
sleep(time)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
rescue => e
|
86
|
-
puts "Error: #{e.message}"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
def run_jobs(container, version)
|
90
|
-
check_file_exists("/var/harbr/containers/#{container}/versions/#{version}/config/manifest.yml") do
|
91
|
-
`harbr deploy #{container} #{version} --next`
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def create_traefik_config(containers)
|
96
|
-
`rm -rf "/etc/traefik/harbr.toml"`
|
97
|
-
|
98
|
-
config = {
|
99
|
-
"http" => {
|
100
|
-
"routers" => {
|
101
|
-
"traefik-dashboard" => {
|
102
|
-
"rule" => "Host(`traefik.harbr.zero2one.ee`)",
|
103
|
-
"service" => "api@internal"
|
104
|
-
}
|
105
|
-
},
|
106
|
-
"services" => {}
|
107
|
-
}
|
108
|
-
}
|
109
|
-
|
110
|
-
containers.each do |container|
|
111
|
-
container.ip = "127.0.0.1"
|
112
|
-
|
113
|
-
config["http"]["routers"]["#{container.name}-router"] = {
|
114
|
-
"rule" => "Host(`#{container.host_header}`)",
|
115
|
-
"service" => "#{container.name}-service"
|
116
|
-
}
|
117
|
-
config["http"]["services"]["#{container.name}-service"] = {
|
118
|
-
"loadBalancer" => {
|
119
|
-
"servers" => [{"url" => "http://#{container.ip}:#{container.port}"}]
|
120
|
-
}
|
121
|
-
}
|
122
|
-
end
|
123
|
-
|
124
|
-
File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
|
125
|
-
puts "Traefik configuration written to /etc/traefik/harbr.toml"
|
126
|
-
end
|
127
51
|
end
|
128
52
|
|
129
53
|
desc "destroy", "Destroy a container and remove all traces"
|
@@ -174,33 +98,11 @@ class HarbrCLI < Thor
|
|
174
98
|
def setup
|
175
99
|
# Check and create /var/harbr directory
|
176
100
|
check_and_create_directory("/var/harbr/containers")
|
177
|
-
|
101
|
+
check_and_create_directory("/var/dddr")
|
178
102
|
# Check for Ruby, Traefik, and runit, and install if necessary
|
179
103
|
install_with_snap("ruby") unless command_exists?("ruby")
|
180
104
|
install_with_snap("traefik") unless command_exists?("traefik")
|
181
105
|
install_with_apt("runit") unless command_exists?("runit")
|
182
|
-
|
183
|
-
run_script = <<~SCRIPT
|
184
|
-
#!/bin/sh
|
185
|
-
exec 2>&1
|
186
|
-
harbr monitor
|
187
|
-
SCRIPT
|
188
|
-
|
189
|
-
log_script = <<~SCRIPT
|
190
|
-
#!/bin/sh
|
191
|
-
exec svlogd -tt /var/log/harbr/
|
192
|
-
SCRIPT
|
193
|
-
|
194
|
-
write_to_file("/etc/sv/harbr/run", run_script)
|
195
|
-
write_to_file("/etc/sv/harbr/log/run", log_script)
|
196
|
-
|
197
|
-
`chmod +x /etc/sv/harbr/run`
|
198
|
-
`chmod +x /etc/sv/harbr/log/run`
|
199
|
-
`mkdir -p /var/log/harbr`
|
200
|
-
`ln -sf /etc/sv/harbr /etc/service/harbr`
|
201
|
-
`sv start harbr`
|
202
|
-
puts "Harbr service started successfully."
|
203
|
-
|
204
106
|
puts "Setup completed successfully."
|
205
107
|
end
|
206
108
|
|
@@ -256,25 +158,6 @@ class HarbrCLI < Thor
|
|
256
158
|
system "gem update harbr && sv stop harbr && sv start harbr"
|
257
159
|
end
|
258
160
|
|
259
|
-
desc "monitor", "Monitor /var/harbr/comtainers for new container versions"
|
260
|
-
def monitor
|
261
|
-
puts "version: (#{Harbr::VERSION})"
|
262
|
-
puts "Monitoring /var/harbr/containers for new container versions..."
|
263
|
-
|
264
|
-
last_known_state = {}
|
265
|
-
|
266
|
-
loop do
|
267
|
-
current_state = scan_for_containers
|
268
|
-
new_versions = current_state.keys - last_known_state.keys
|
269
|
-
|
270
|
-
new_versions.each do |container_version|
|
271
|
-
container, version = container_version.split("/versions/")
|
272
|
-
place(container, version)
|
273
|
-
end
|
274
|
-
|
275
|
-
last_known_state = current_state
|
276
|
-
sleep 3 # Poll every 10 seconds
|
277
|
-
end
|
278
|
-
end
|
279
161
|
end
|
162
|
+
|
280
163
|
HarbrCLI.start(ARGV)
|
data/lib/harbr/version.rb
CHANGED