harbr 0.0.29 → 0.0.32
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 +1 -9
- data/lib/harbr/container.rb +5 -0
- data/lib/harbr/job.rb +94 -96
- data/lib/harbr/version.rb +1 -1
- data/lib/harbr.rb +9 -2
- 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: aa8e693bce29b6b9d7d8140321e675ff673db168804972ed2e0e81d9b6840254
|
4
|
+
data.tar.gz: 3392caeb344b34ffc0c068918a406c93feb7e8f2a7abf48cce9368d07ce73386
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f44d0dd7e4941374ad502a3bd46ff2926540df7eee8e5e60f388d626c71fc498097177c5978b4cea1cccf4db607796b146e51006a9498f90e3c2d40347bec6ce
|
7
|
+
data.tar.gz: 97745289088960ae6ff286ab2bb7b77d0d2ad3bb1e624f67568d3c4dfc8d4f8a3cdfa65305b4c577879efc1cf47c6dce9a2dc1407b73787a2f3a078681276ab2
|
data/exe/harbr
CHANGED
@@ -1,13 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "dddr"
|
4
|
-
require "harbr"
|
5
|
-
require "sucker_punch"
|
6
|
-
require "terminal-table"
|
7
|
-
require "yaml"
|
8
|
-
require "toml-rb"
|
9
|
-
require "fileutils"
|
10
|
-
require "ostruct"
|
2
|
+
require_relative "../lib/harbr"
|
11
3
|
|
12
4
|
class HarbrCLI < Thor
|
13
5
|
DEFAULT_DIRECTORY = "/var/harbr"
|
data/lib/harbr/container.rb
CHANGED
data/lib/harbr/job.rb
CHANGED
@@ -1,123 +1,121 @@
|
|
1
1
|
module Harbr
|
2
|
-
|
3
|
-
class
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
"
|
9
|
-
"
|
10
|
-
"
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
"services" => {}
|
16
|
-
}
|
2
|
+
class Container
|
3
|
+
class Job
|
4
|
+
include SuckerPunch::Job
|
5
|
+
def create_traefik_config(containers)
|
6
|
+
config = {
|
7
|
+
"http" => {
|
8
|
+
"routers" => {
|
9
|
+
"traefik-dashboard" => {
|
10
|
+
"rule" => "Host(`traefik.harbr.zero2one.ee`)",
|
11
|
+
"service" => "api@internal"
|
12
|
+
}
|
13
|
+
},
|
14
|
+
"services" => {}
|
17
15
|
}
|
16
|
+
}
|
18
17
|
|
19
|
-
|
20
|
-
|
18
|
+
containers.each do |container|
|
19
|
+
container.ip = "127.0.0.1"
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
}
|
21
|
+
config["http"]["routers"]["#{container.name}-router"] = {
|
22
|
+
"rule" => "Host(`#{container.host_header}`)",
|
23
|
+
"service" => "#{container.name}-service"
|
24
|
+
}
|
25
|
+
config["http"]["services"]["#{container.name}-service"] = {
|
26
|
+
"loadBalancer" => {
|
27
|
+
"servers" => [{"url" => "http://#{container.ip}:#{container.port}"}]
|
30
28
|
}
|
31
|
-
|
32
|
-
|
33
|
-
File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
|
34
|
-
puts "Traefik configuration written to /etc/traefik/harbr.toml"
|
29
|
+
}
|
35
30
|
end
|
36
31
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
puts "Directory already exists: #{service_dir}"
|
41
|
-
return
|
42
|
-
end
|
43
|
-
|
44
|
-
script_template = <<~SCRIPT
|
45
|
-
#!/bin/sh
|
46
|
-
exec 2>&1
|
47
|
-
cd /var/harbr/#{container_name}/current
|
48
|
-
exec bundle install && bundle exec puma -p #{port}
|
49
|
-
SCRIPT
|
50
|
-
|
51
|
-
service_dir = "/etc/sv/harbr/#{container_name}"
|
52
|
-
FileUtils.mkdir_p(service_dir)
|
53
|
-
|
54
|
-
File.write("#{service_dir}/run", script_template)
|
55
|
-
FileUtils.chmod("+x", "#{service_dir}/run")
|
56
|
-
puts "Run script created and made executable for container: #{container_name}"
|
57
|
-
end
|
32
|
+
File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
|
33
|
+
puts "Traefik configuration written to /etc/traefik/harbr.toml"
|
34
|
+
end
|
58
35
|
|
59
|
-
|
60
|
-
|
36
|
+
def create_run_script(container_name, port)
|
37
|
+
service_dir = "/etc/sv/harbr/#{container_name}"
|
38
|
+
if File.directory?(service_dir)
|
39
|
+
puts "Directory already exists: #{service_dir}"
|
40
|
+
return
|
41
|
+
end
|
61
42
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
43
|
+
script_template = <<~SCRIPT
|
44
|
+
#!/bin/sh
|
45
|
+
exec 2>&1
|
46
|
+
cd /var/harbr/#{container_name}/current
|
47
|
+
exec bundle install && bundle exec puma -p #{port}
|
48
|
+
SCRIPT
|
66
49
|
|
67
|
-
|
50
|
+
service_dir = "/etc/sv/harbr/#{container_name}"
|
51
|
+
FileUtils.mkdir_p(service_dir)
|
68
52
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
53
|
+
File.write("#{service_dir}/run", script_template)
|
54
|
+
FileUtils.chmod("+x", "#{service_dir}/run")
|
55
|
+
puts "Run script created and made executable for container: #{container_name}"
|
56
|
+
end
|
73
57
|
|
74
|
-
|
75
|
-
|
58
|
+
def create_log_script(container_name)
|
59
|
+
log_dir = "/var/log/harbr/#{container_name}"
|
76
60
|
|
77
|
-
|
78
|
-
|
79
|
-
|
61
|
+
if File.directory?(log_dir)
|
62
|
+
puts "Directory already exists: #{log_dir}"
|
63
|
+
return
|
80
64
|
end
|
81
65
|
|
82
|
-
|
83
|
-
create_run_script(container_name, port)
|
84
|
-
create_log_script(container_name)
|
85
|
-
system("ln -s /etc/sv/harbr/#{container_name} /etc/service/#{container_name}") unless File.exist?("/etc/service/#{container_name}")
|
86
|
-
end
|
66
|
+
FileUtils.mkdir_p(log_dir)
|
87
67
|
|
88
|
-
|
89
|
-
|
68
|
+
script_template = <<~SCRIPT
|
69
|
+
#!/bin/sh
|
70
|
+
exec svlogd -tt #{log_dir}/
|
71
|
+
SCRIPT
|
90
72
|
|
91
|
-
|
92
|
-
|
93
|
-
end
|
73
|
+
dir_path = "/etc/sv/harbr/#{container_name}/log"
|
74
|
+
FileUtils.mkdir_p(dir_path)
|
94
75
|
|
95
|
-
|
96
|
-
|
76
|
+
File.write("#{dir_path}/run", script_template)
|
77
|
+
FileUtils.chmod("+x", "#{dir_path}/run")
|
78
|
+
puts "Log script created and made executable for container: #{container_name}"
|
79
|
+
end
|
97
80
|
|
98
|
-
|
81
|
+
def create_a_service(container_name, port)
|
82
|
+
create_run_script(container_name, port)
|
83
|
+
create_log_script(container_name)
|
84
|
+
system("ln -s /etc/sv/harbr/#{container_name} /etc/service/#{container_name}") unless File.exist?("/etc/service/#{container_name}")
|
85
|
+
end
|
99
86
|
|
100
|
-
|
101
|
-
|
102
|
-
sleep 5
|
103
|
-
system("sv status #{manifest.name}")
|
104
|
-
puts "Started container: #{manifest.name}"
|
87
|
+
def run_container(manifest)
|
88
|
+
puts "Starting container: #{manifest.name}"
|
105
89
|
|
106
|
-
|
107
|
-
|
90
|
+
Dddr.configure do |config|
|
91
|
+
config.data_dir = Harbr::DEFAULT_DIRECTORY_DATA_DIR
|
92
|
+
end
|
108
93
|
|
109
|
-
|
110
|
-
|
111
|
-
container.ip = manifest.ip.nil?
|
112
|
-
container.port = port.number
|
113
|
-
containers.add(container) unless containers.find_by_header(manifest.host)
|
94
|
+
pool = Harbr::Port::Pool.new
|
95
|
+
port = pool.get_port(manifest.host)
|
114
96
|
|
115
|
-
|
116
|
-
end
|
97
|
+
create_a_service(manifest.name, port.number)
|
117
98
|
|
118
|
-
|
119
|
-
|
120
|
-
|
99
|
+
sleep 5
|
100
|
+
system("sv restart #{manifest.name}")
|
101
|
+
sleep 5
|
102
|
+
system("sv status #{manifest.name}")
|
103
|
+
puts "Started container: #{manifest.name}"
|
104
|
+
|
105
|
+
container = Container.new
|
106
|
+
containers = Container::Repository.new
|
107
|
+
|
108
|
+
container.name = manifest.name
|
109
|
+
container.host_header = manifest.host
|
110
|
+
container.ip = manifest.ip.nil?
|
111
|
+
container.port = port.number
|
112
|
+
containers.add(container) unless containers.find_by_header(manifest.host)
|
113
|
+
|
114
|
+
create_traefik_config(containers.all)
|
115
|
+
end
|
116
|
+
|
117
|
+
def perform(manifest)
|
118
|
+
run_container(manifest)
|
121
119
|
end
|
122
120
|
end
|
123
121
|
end
|
data/lib/harbr/version.rb
CHANGED
data/lib/harbr.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
-
require "
|
1
|
+
require "thor"
|
2
|
+
require "dddr"
|
3
|
+
require "harbr"
|
4
|
+
require "terminal-table"
|
5
|
+
require "yaml"
|
2
6
|
require "toml-rb"
|
7
|
+
require "fileutils"
|
8
|
+
require "ostruct"
|
9
|
+
require "sucker_punch"
|
3
10
|
|
4
11
|
require_relative "harbr/version"
|
5
12
|
require_relative "harbr/container"
|
@@ -17,4 +24,4 @@ module Harbr
|
|
17
24
|
end
|
18
25
|
|
19
26
|
class Error < StandardError; end
|
20
|
-
end
|
27
|
+
end
|