harbr 0.1.17 → 0.1.18

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: 7bdeb351b67890252df89a99f18bdf2541540aca0033460f4fe8380254dccfaa
4
- data.tar.gz: 3a5620d791e5eeae7c5cbe667bee6ea7ec040db00c8165ca703984328a3d45de
3
+ metadata.gz: f84f995e2f55490fd922cdf4328203e7c71000fd493e71a244965be25ac276ff
4
+ data.tar.gz: 3031f0493b7d188e1896ccef951bd227184912d8f54b219e0fec2a45fadee113
5
5
  SHA512:
6
- metadata.gz: 0eac17e4dec14a0eb7635d91475f5facc5ce6d3ddce3c90d07aebebd8186803cf0ba59f1e81b994a6d089ab0c88969a6e57c14a47e2b65b3519e08941ea83891
7
- data.tar.gz: d41bdc758f50ccbe1345046abb877b4ed72a1ed7f44b32d6fb9fc4a0fbcf137c4966202292035b5fed276719e8fe4cb279c9865fe13d276345829bf0bcf27037
6
+ metadata.gz: 95286884b0ed7a3188365a715fe7ad6f0242d9350c99bd68de4d25c730faa31c9a19be56cef432dfe16df8a47c38f9d9b972ab72a93f73dbc88368c41e574558
7
+ data.tar.gz: 8244ab88f087df540e5a27b038eaf087ee28f2c9b200eefd0f4beccba6d3db089c9022f1be796b5a5d8ea6a2421bdf5cc92f010a1dc4b5f8b06e38092e5d47db
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
- puts "waiting for 3 seconds"
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,13 @@ 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
+
177
+
178
+ if version.to_i == 0
179
+ puts "Initial Deploy!!! of #{container}"
180
+ Harbr::Job.perform_async(container, version)
181
+ end
182
+
186
183
  Dir.chdir("/var/harbr/containers/#{name}/") do
187
184
 
188
185
  /(?<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
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Harbr
4
- VERSION = "0.1.17"
4
+ VERSION = "0.1.18"
5
5
  end
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.17
4
+ version: 0.1.18
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-18 00:00:00.000000000 Z
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