harbr 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e26de07f3df5247209a87712d8d58a8672ae4e176d8362bda79fa1dcbe6ea0a1
4
- data.tar.gz: f82eb0f740990b33ba3c7d86ef315d807b06d99fa19cb1b1e53484733749e490
3
+ metadata.gz: 2cb79dc0e68c2cb185caf3a1ff09234daeee64c7bdc1bbb97c1a916de40b0099
4
+ data.tar.gz: dc873fbf09ca7c7b0a8b0df9e407a396b30056cf5caa11c984507470bf91bbf9
5
5
  SHA512:
6
- metadata.gz: c37c0e01f7dbdbf121f0a0e2ac56ce5fc250e7e2771671026961c4808749dc69adea3d79624424ae897023df89990d4d1edd844e9956f2a4832ff5bedce82a27
7
- data.tar.gz: fb0301af387b4f7bb3fbe128156a9a53e5966c881d7781b59b96cc0db13b9a4069239dfdf1beb91f781ef30b79f2c83aa1f5a97838a05d39b173d99ce1150a73
6
+ metadata.gz: 28d24d71cfe3e23c69ab405e2932a0d8deb1ef290f36286e3d50674c1056c1da1854ca141838c790768f7054f0f6aa6699b55614fc20240540acec38daa6005a
7
+ data.tar.gz: 628a1d7e58c8591b2953feaa87e67606ce688cf38b354ad3b30dbc75cfd679b4df64c7ee64ecf8549553cc88f3916af3d3959fc1fa642061bdb31c2c47805f41
data/lib/harbr/job.rb CHANGED
@@ -7,11 +7,11 @@ module Harbr
7
7
  directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
8
8
  directories.max_by { |entry| entry[/\d+/].to_i }
9
9
  end
10
-
10
+
11
11
  def get_container_name(path)
12
12
  File.basename(path)
13
13
  end
14
-
14
+
15
15
 
16
16
  def create_traefik_config(containers)
17
17
  config = {
@@ -19,37 +19,43 @@ module Harbr
19
19
  "routers" => {
20
20
  "traefik-dashboard" => {
21
21
  "rule" => "Host(`traefik.harbr.zero2one.ee`)",
22
- "service" => "api@internal"
22
+ "service" => "api@internal",
23
+ "tls" => {} # Enable TLS for the dashboard
23
24
  }
24
25
  },
25
26
  "services" => {}
26
27
  }
27
28
  }
28
-
29
+
29
30
  containers.each do |container|
30
31
  container.ip = "127.0.0.1"
31
- name = container.name.gsub(".","-")
32
-
32
+ name = container.name.gsub(".", "-")
33
+
34
+ # Create the router with TLS enabled
33
35
  config["http"]["routers"]["#{name}-router"] = {
34
36
  "rule" => "Host(`#{container.host_header}`)",
35
- "service" => "#{name}-service"
37
+ "service" => "#{name}-service",
38
+ "tls" => {
39
+ "certResolver" => "letsencrypt" # Specify the certificate resolver for TLS
40
+ }
36
41
  }
42
+
43
+ # Create the service
37
44
  config["http"]["services"]["#{name}-service"] = {
38
45
  "loadBalancer" => {
39
46
  "servers" => [{"url" => "http://#{container.ip}:#{container.port}"}]
40
47
  }
41
48
  }
42
49
  end
43
-
44
- File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
45
- puts "Traefik configuration written to /etc/traefik/harbr.toml"
50
+
51
+ config
46
52
  end
47
-
53
+
48
54
  def collate_containers(name,host,port)
49
-
55
+
50
56
  containers = Harbr::Container::Repository.new
51
57
  container = containers.find_by_header(host)
52
-
58
+
53
59
  if container.nil?
54
60
  container = Harbr::Container.new
55
61
  container.name = name
@@ -63,67 +69,67 @@ module Harbr
63
69
  end
64
70
  containers.all
65
71
  end
66
-
67
-
72
+
73
+
68
74
  module Runit
69
-
75
+
70
76
  class Run
71
77
  def initialize(container, port)
72
78
  @container_name = container
73
79
  @port = port
74
80
  end
75
-
81
+
76
82
  def to_s
77
83
  script_template = <<~SCRIPT
78
- #!/bin/sh
79
- exec 2>&1
80
- cd /var/harbr/containers/#{@container_name}/current
81
- exec ./exe/run #{@port} live
84
+ #!/bin/sh
85
+ exec 2>&1
86
+ cd /var/harbr/containers/#{@container_name}/current
87
+ exec ./exe/run #{@port} live
82
88
  SCRIPT
83
89
  end
84
-
90
+
85
91
  def link
86
92
  "ln -s /etc/sv/harbr/#{@container_name} /etc/service/#{@container_name}"
87
93
  end
88
94
  end
89
-
90
-
95
+
96
+
91
97
  class Finish
92
98
  def initialize(port)
93
99
  @port = port
94
100
  end
95
-
101
+
96
102
  def to_s
97
103
  script_template = <<~SCRIPT
98
- #!/bin/sh
99
- sleep 3
100
- `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
104
+ #!/bin/sh
105
+ sleep 3
106
+ `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
101
107
  SCRIPT
102
108
  end
103
109
  end
104
-
110
+
105
111
  class Log
106
112
  def initialize(container)
107
113
  @container_name = container
108
114
  end
109
-
115
+
110
116
  def to_s
111
117
  script_template = <<~SCRIPT
112
- #!/bin/sh
113
- exec svlogd -tt /var/log/harbr/#{@container_name}
118
+ #!/bin/sh
119
+ exec svlogd -tt /var/log/harbr/#{@container_name}
114
120
  SCRIPT
115
121
  end
116
-
122
+
117
123
  end
118
-
124
+
119
125
  end
120
-
126
+
121
127
  def write_to_file(path, contents)
122
128
  File.open(path, 'w') do |file|
123
129
  file.write(contents)
124
130
  end
125
131
  end
126
-
132
+
127
133
  def load_manifest(container, version)
128
134
  manifest_path = "/var/harbr/containers/#{container}/versions/#{version}/config/manifest.yml"
129
135
  raise "Manifest not found at #{manifest_path}" unless File.exist?(manifest_path)
@@ -132,7 +138,7 @@ module Harbr
132
138
  end
133
139
 
134
140
  def perform(name,version)
135
-
141
+
136
142
  Dir.chdir "/var/harbr/containers/#{name}/versions/#{version}" do
137
143
 
138
144
  `bundle config set --local path 'vendor/bundle'`
@@ -141,11 +147,11 @@ module Harbr
141
147
  system "sv stop #{name}" if File.exist?("/etc/service/#{name}")
142
148
  system 'bundle install'
143
149
 
144
-
150
+
145
151
  `mkdir -p /etc/sv/harbr/#{name}`
146
152
  `mkdir -p /etc/sv/harbr/#{name}/log`
147
153
  `mkdir -p /var/log/harbr/#{name}`
148
-
154
+
149
155
  write_to_file "/etc/sv/harbr/#{name}/run", Runit::Run.new(name, port).to_s
150
156
  write_to_file "/etc/sv/harbr/#{name}/finish", Runit::Finish.new(port).to_s
151
157
  write_to_file "/etc/sv/harbr/#{name}/log/run", Runit::Log.new(name).to_s
@@ -16,45 +16,52 @@ module Harbr
16
16
  def get_container_name(path)
17
17
  File.basename(path)
18
18
  end
19
-
20
-
19
+
20
+
21
+
21
22
  def create_traefik_config(containers)
22
23
  config = {
23
24
  "http" => {
24
25
  "routers" => {
25
26
  "traefik-dashboard" => {
26
27
  "rule" => "Host(`traefik.harbr.zero2one.ee`)",
27
- "service" => "api@internal"
28
+ "service" => "api@internal",
29
+ "tls" => {} # Enable TLS for the dashboard
28
30
  }
29
31
  },
30
32
  "services" => {}
31
33
  }
32
34
  }
33
-
35
+
34
36
  containers.each do |container|
35
37
  container.ip = "127.0.0.1"
36
- name = container.name.gsub(".","-")
37
-
38
+ name = container.name.gsub(".", "-")
39
+
40
+ # Create the router with TLS enabled
38
41
  config["http"]["routers"]["#{name}-router"] = {
39
42
  "rule" => "Host(`#{container.host_header}`)",
40
- "service" => "#{name}-service"
43
+ "service" => "#{name}-service",
44
+ "tls" => {
45
+ "certResolver" => "letsencrypt" # Specify the certificate resolver for TLS
46
+ }
41
47
  }
48
+
49
+ # Create the service
42
50
  config["http"]["services"]["#{name}-service"] = {
43
51
  "loadBalancer" => {
44
52
  "servers" => [{"url" => "http://#{container.ip}:#{container.port}"}]
45
53
  }
46
54
  }
47
55
  end
48
-
49
- File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
50
- puts "Traefik configuration written to /etc/traefik/harbr.toml"
56
+
57
+ config
51
58
  end
52
-
59
+
53
60
  def collate_containers(name,host,port)
54
-
61
+
55
62
  containers = Harbr::Container::Repository.new
56
63
  container = containers.find_by_header(host)
57
-
64
+
58
65
  if container.nil?
59
66
  container = Harbr::Container.new
60
67
  container.name = name
@@ -68,99 +75,99 @@ module Harbr
68
75
  end
69
76
  containers.all
70
77
  end
71
-
72
-
78
+
79
+
73
80
  module Runit
74
-
81
+
75
82
  class Run
76
83
  def initialize(container, port)
77
84
  @container_name = container
78
85
  @port = port
79
86
  end
80
-
87
+
81
88
  def to_s
82
89
  script_template = <<~SCRIPT
83
- #!/bin/sh
84
- exec 2>&1
85
- cd /var/harbr/#{@container_name}/current
86
- exec ./exe/run #{@port} live
90
+ #!/bin/sh
91
+ exec 2>&1
92
+ cd /var/harbr/#{@container_name}/current
93
+ exec ./exe/run #{@port} live
87
94
  SCRIPT
88
95
  end
89
-
96
+
90
97
  def link
91
98
  "ln -s /etc/sv/harbr/#{@container_name} /etc/service/#{@container_name}"
92
99
  end
93
100
  end
94
-
95
-
101
+
102
+
96
103
  class Finish
97
104
  def initialize(port)
98
105
  @port = port
99
106
  end
100
-
107
+
101
108
  def to_s
102
109
  script_template = <<~SCRIPT
103
- #!/bin/sh
104
- sleep 3
105
- `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
110
+ #!/bin/sh
111
+ sleep 3
112
+ `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
106
113
  SCRIPT
107
114
  end
108
115
  end
109
-
116
+
110
117
  class Log
111
118
  def initialize(container, port)
112
119
  @container_name = container
113
120
  end
114
-
121
+
115
122
  def to_s
116
123
  script_template = <<~SCRIPT
117
- #!/bin/sh
118
- exec svlogd -tt /var/log/harbr/#{@container_name}/next/
124
+ #!/bin/sh
125
+ exec svlogd -tt /var/log/harbr/#{@container_name}/next/
119
126
  SCRIPT
120
127
  end
121
-
128
+
122
129
  end
123
-
130
+
124
131
  module Next
125
-
132
+
126
133
  class Run
127
134
  def initialize(container, port)
128
135
  @container_name = container
129
136
  @port = port
130
137
  end
131
-
138
+
132
139
  def to_s
133
140
  script_template = <<~SCRIPT
134
- #!/bin/sh
135
- exec 2>&1
136
- cd /var/harbr/containers/#{@container_name}/next
137
- exec ./exe/run #{@port} next
141
+ #!/bin/sh
142
+ exec 2>&1
143
+ cd /var/harbr/containers/#{@container_name}/next
144
+ exec ./exe/run #{@port} next
138
145
  SCRIPT
139
146
  end
140
147
  end
141
-
148
+
142
149
  class Log
143
150
  def initialize(container)
144
151
  @container_name = container
145
152
  end
146
-
153
+
147
154
  def to_s
148
155
  script_template = <<~SCRIPT
149
- #!/bin/sh
150
- exec svlogd -tt /var/log/harbr/#{@container_name}/next/
156
+ #!/bin/sh
157
+ exec svlogd -tt /var/log/harbr/#{@container_name}/next/
151
158
  SCRIPT
152
159
  end
153
160
  end
154
-
161
+
155
162
  end
156
163
  end
157
-
164
+
158
165
  def write_to_file(path, contents)
159
166
  File.open(path, 'w') do |file|
160
167
  file.write(contents)
161
168
  end
162
169
  end
163
-
170
+
164
171
  def load_manifest(container, version)
165
172
  manifest_path = "/var/harbr/containers/#{container}/versions/#{version}/config/manifest.yml"
166
173
  raise "Manifest not found at #{manifest_path}" unless File.exist?(manifest_path)
@@ -170,46 +177,46 @@ module Harbr
170
177
 
171
178
  def perform(name, version)
172
179
  `bundle config set --local path 'vendor/bundle'`
173
-
180
+
174
181
  manifest = load_manifest(name,version)
175
182
  current_path = "/var/harbr/containers/#{name}/versions/#{version}"
176
-
183
+
177
184
  port = `port assign next.#{manifest.port}`.strip
178
-
185
+
179
186
  Dir.chdir current_path do
180
-
187
+
181
188
  system "sv stop next.#{name}"
182
189
  system "bundle install"
183
-
190
+
184
191
  `mkdir -p /etc/sv/harbr/#{name}/next`
185
192
  `mkdir -p /etc/sv/harbr/#{name}/next/log`
186
193
  `mkdir -p /var/log/harbr/#{name}/next/log`
187
-
194
+
188
195
  write_to_file "/etc/sv/harbr/#{name}/next/run", Runit::Next::Run.new(name,port).to_s
189
196
  write_to_file "/etc/sv/harbr/#{name}/next/finish", Runit::Finish.new(port).to_s
190
197
  write_to_file "/etc/sv/harbr/#{name}/next/log/run", Runit::Next::Log.new(name).to_s
191
-
198
+
192
199
  `chmod +x /etc/sv/harbr/#{name}/next/run`
193
200
  `chmod +x /etc/sv/harbr/#{name}/next/log/run`
194
201
  `chmod +x /etc/sv/harbr/#{name}/next/finish`
195
-
196
-
202
+
203
+
197
204
  system "rm /etc/service/next.#{name}"
198
205
  system "rm /var/harbr/containers/#{name}/next"
199
-
206
+
200
207
  system "ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/next"
201
208
  system "ln -sf /etc/sv/harbr/#{name}/next /etc/service/next.#{name}"
202
209
  system "sv restart next.#{name}"
203
-
210
+
204
211
  containers = collate_containers("next.#{name}","next.#{manifest.host}",port)
205
212
  create_traefik_config(containers)
206
213
  end
207
-
214
+
208
215
  puts "process #{version} of #{name}"
209
-
216
+
210
217
  end
211
218
 
212
219
  end
213
-
220
+
214
221
  end
215
222
  end
data/lib/harbr/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Harbr
4
- VERSION = "0.1.9"
4
+ VERSION = "0.1.10"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: harbr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delaney Kuldvee Burke