lib/harbr/job.rb in harbr-0.1.20 vs lib/harbr/job.rb in harbr-0.1.21

- old
+ new

@@ -1,15 +1,14 @@ -require 'harbr' +require "harbr" module Harbr class Job include SuckerPunch::Job - + def get_container_name(path) File.basename(path) end - def create_traefik_config(containers) config = { "http" => { "routers" => { "traefik-dashboard" => { @@ -22,11 +21,11 @@ } } containers.each do |container| container.ip = "127.0.0.1" - name = container.name.gsub(".", "-") + name = container.name.tr(".", "-") # Create the router with TLS enabled and specific format router_key = "#{name}-router-secure" config["http"]["routers"][router_key] = { "rule" => "Host(`#{container.host_header}`)", @@ -48,63 +47,59 @@ # Write the configuration to a TOML file File.write("/etc/traefik/harbr.toml", TomlRB.dump(config)) puts "Traefik configuration written to /etc/traefik/harbr.toml" end - def collate_containers(name,host,port) - + def collate_containers(name, host, port) containers = Harbr::Container::Repository.new container = containers.find_by_header(host) if container.nil? container = Harbr::Container.new container.name = name - container.host_header =host + container.host_header = host container.ip = "127.0.0.1" container.port = port containers.create(container) else container.port = port containers.update(container) end containers.all end - module Runit - class Run def initialize(container, port) @container_name = container @port = port end def to_s script_template = <<~SCRIPT - #!/bin/sh - exec 2>&1 - cd /var/harbr/containers/#{@container_name}/current - exec ./exe/run #{@port} live + #!/bin/sh + exec 2>&1 + cd /var/harbr/containers/#{@container_name}/current + exec ./exe/run #{@port} live SCRIPT end def link "ln -s /etc/sv/harbr/#{@container_name} /etc/service/#{@container_name}" end end - class Finish def initialize(port) @port = port end def to_s script_template = <<~SCRIPT - #!/bin/sh - sleep 3 - `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill` + #!/bin/sh + sleep 3 + `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill` SCRIPT end end class Log @@ -112,43 +107,36 @@ @container_name = container end def to_s script_template = <<~SCRIPT - #!/bin/sh - exec svlogd -tt /var/log/harbr/#{@container_name} + #!/bin/sh + exec svlogd -tt /var/log/harbr/#{@container_name} SCRIPT end - end - end def write_to_file(path, contents) - File.open(path, 'w') do |file| - file.write(contents) - end + File.write(path, contents) end def load_manifest(container, version) manifest_path = "/var/harbr/containers/#{container}/versions/#{version}/config/manifest.yml" raise "Manifest not found at #{manifest_path}" unless File.exist?(manifest_path) manifest_data = YAML.load_file(manifest_path) OpenStruct.new(manifest_data) end - def perform(name,version) - + def perform(name, version) Dir.chdir "/var/harbr/containers/#{name}/versions/#{version}" do - `bundle config set --local path 'vendor/bundle'` manifest = load_manifest(name, version) port = `port assign #{manifest.port}`.strip system "sv stop #{name}" if File.exist?("/etc/service/#{name}") - system 'bundle install' + system "bundle install" - `mkdir -p /etc/sv/harbr/#{name}` `mkdir -p /etc/sv/harbr/#{name}/log` `mkdir -p /var/log/harbr/#{name}` write_to_file "/etc/sv/harbr/#{name}/run", Runit::Run.new(name, port).to_s @@ -164,11 +152,8 @@ containers = collate_containers(name, manifest.host, port) create_traefik_config(containers) puts "process #{version} of #{name}" end - end - end - end