harbr 0.2.10 → 2.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/exe/harbr +225 -150
- data/lib/examples/container.toml +13 -0
- data/lib/harbr/container.rb +14 -10
- data/lib/harbr/host.rb +21 -0
- data/lib/harbr/version.rb +1 -1
- data/lib/harbr.rb +21 -6
- data/vendor/bundle/ruby/3.2.0/cache/dddr-1.0.8.gem +0 -0
- data/vendor/bundle/ruby/3.2.0/cache/dddr-1.1.0.gem +0 -0
- data/vendor/bundle/ruby/3.2.0/cache/dddr-1.1.1.gem +0 -0
- data/vendor/bundle/ruby/3.2.0/cache/net-ssh-7.2.1.gem +0 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/.DS_Store +0 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/.rspec +3 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/.standard.yml +3 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/CHANGELOG.md +5 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/CODE_OF_CONDUCT.md +84 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/LICENSE.txt +21 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/README.md +96 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/Rakefile +10 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/hero.png +0 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/lib/dddr/version.rb +5 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/lib/dddr.rb +205 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/sig/dddr.rbs +4 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/.DS_Store +0 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/.rspec +3 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/.standard.yml +3 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/CHANGELOG.md +5 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/CODE_OF_CONDUCT.md +84 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/LICENSE.txt +21 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/README.md +96 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/Rakefile +10 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/hero.png +0 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/lib/dddr/version.rb +5 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/lib/dddr.rb +182 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/sig/dddr.rbs +4 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/.DS_Store +0 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/.rspec +3 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/.standard.yml +3 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/CHANGELOG.md +5 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/CODE_OF_CONDUCT.md +84 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/LICENSE.txt +21 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/README.md +96 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/Rakefile +10 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/hero.png +0 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/lib/dddr/version.rb +5 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/lib/dddr.rb +184 -0
- data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/sig/dddr.rbs +4 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.dockerignore +6 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/FUNDING.yml +1 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/config/rubocop_linter_action.yml +4 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/workflows/ci-with-docker.yml +44 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/workflows/ci.yml +94 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/workflows/rubocop.yml +16 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.gitignore +15 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.rubocop.yml +22 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.rubocop_todo.yml +1081 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/CHANGES.txt +738 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/DEVELOPMENT.md +23 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Dockerfile +29 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Dockerfile.openssl3 +17 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Gemfile +13 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Gemfile.noed25519 +12 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Gemfile.norbnacl +12 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/ISSUE_TEMPLATE.md +30 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/LICENSE.txt +19 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Manifest +132 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/README.md +298 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Rakefile +192 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/SECURITY.md +4 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/THANKS.txt +110 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/appveyor.yml +58 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/docker-compose.yml +25 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/agent.rb +284 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/certificate.rb +183 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/constants.rb +20 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/ed25519.rb +186 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/ed25519_loader.rb +31 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/key_manager.rb +327 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/abstract.rb +79 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/hostbased.rb +72 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/keyboard_interactive.rb +77 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/none.rb +34 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/password.rb +80 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/publickey.rb +137 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/pageant.rb +497 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/pub_key_fingerprint.rb +43 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/session.rb +172 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/buffer.rb +449 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/buffered_io.rb +202 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/config.rb +406 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/channel.rb +694 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/constants.rb +33 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/event_loop.rb +123 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/keepalive.rb +59 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/session.rb +712 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/term.rb +180 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/errors.rb +106 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/key_factory.rb +218 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/known_hosts.rb +265 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/loggable.rb +62 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/packet.rb +106 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/prompt.rb +62 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/command.rb +123 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/errors.rb +16 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/http.rb +98 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/https.rb +50 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/jump.rb +54 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/socks4.rb +67 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/socks5.rb +140 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/service/forward.rb +426 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/channel.rb +147 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/extensions.rb +173 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/kex.rb +46 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/local_packet.rb +53 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/packet.rb +101 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/remote_packet.rb +40 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/script.rb +180 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/socket.rb +65 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test.rb +94 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/algorithms.rb +524 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/chacha20_poly1305_cipher.rb +117 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/chacha20_poly1305_cipher_loader.rb +17 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/cipher_factory.rb +128 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/constants.rb +40 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/ctr.rb +115 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/abstract.rb +97 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/md5.rb +10 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/md5_96.rb +9 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/none.rb +13 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/ripemd160.rb +11 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha1.rb +11 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha1_96.rb +9 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_256.rb +11 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_256_96.rb +9 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_256_etm.rb +12 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_512.rb +11 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_512_96.rb +9 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_512_etm.rb +12 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac.rb +47 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/identity_cipher.rb +65 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/abstract.rb +130 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/abstract5656.rb +72 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/curve25519_sha256.rb +39 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/curve25519_sha256_loader.rb +30 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb +37 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/diffie_hellman_group14_sha256.rb +11 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +122 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +72 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb +11 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb +39 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb +21 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb +21 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex.rb +31 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/key_expander.rb +30 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/openssl.rb +274 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/openssl_cipher_extensions.rb +8 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/packet_stream.rb +301 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/server_version.rb +77 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/session.rb +354 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/state.rb +208 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/verifiers/accept_new.rb +33 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/verifiers/accept_new_or_local_tunnel.rb +33 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/verifiers/always.rb +58 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/verifiers/never.rb +19 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/version.rb +68 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh.rb +338 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/net-ssh-public_cert.pem +20 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/net-ssh.gemspec +46 -0
- data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/support/ssh_tunnel_bug.rb +65 -0
- data/vendor/bundle/ruby/3.2.0/specifications/dddr-1.0.8.gemspec +27 -0
- data/vendor/bundle/ruby/3.2.0/specifications/dddr-1.1.0.gemspec +27 -0
- data/vendor/bundle/ruby/3.2.0/specifications/dddr-1.1.1.gemspec +27 -0
- data/vendor/bundle/ruby/3.2.0/specifications/net-ssh-7.2.1.gemspec +38 -0
- metadata +174 -9
- data/config/manifest.yml +0 -5
- data/lib/harbr/job.rb +0 -252
- data/lib/harbr/lxd/job.rb +0 -119
- data/lib/harbr/lxd/setup.rb +0 -45
data/lib/harbr/job.rb
DELETED
@@ -1,252 +0,0 @@
|
|
1
|
-
module Harbr
|
2
|
-
class Job
|
3
|
-
include SuckerPunch::Job
|
4
|
-
|
5
|
-
def get_container_name(path)
|
6
|
-
File.basename(path)
|
7
|
-
end
|
8
|
-
|
9
|
-
def create_traefik_config(containers)
|
10
|
-
config = {
|
11
|
-
"http" => {
|
12
|
-
"routers" => {},
|
13
|
-
"services" => {}
|
14
|
-
}
|
15
|
-
}
|
16
|
-
|
17
|
-
containers.each do |container|
|
18
|
-
container.ip = "127.0.0.1"
|
19
|
-
name = container.name.tr(".", "-")
|
20
|
-
|
21
|
-
router_key = "#{name}-router-secure"
|
22
|
-
config["http"]["routers"][router_key] = {
|
23
|
-
"rule" => "Host(`#{container.host_header}`)",
|
24
|
-
"service" => "#{name}-service",
|
25
|
-
"entryPoints" => ["https"],
|
26
|
-
"tls" => {
|
27
|
-
"certResolver" => "myresolver"
|
28
|
-
}
|
29
|
-
}
|
30
|
-
|
31
|
-
config["http"]["services"]["#{name}-service"] = {
|
32
|
-
"loadBalancer" => {
|
33
|
-
"servers" => [{"url" => "http://#{container.ip}:#{container.port}"}]
|
34
|
-
}
|
35
|
-
}
|
36
|
-
end
|
37
|
-
|
38
|
-
File.write("/etc/traefik/providers/harbr.toml", TomlRB.dump(config))
|
39
|
-
puts "Traefik configuration written to /etc/traefik/providers/harbr.toml"
|
40
|
-
end
|
41
|
-
|
42
|
-
def collate_containers(name, host, port, host_header_aliases = [])
|
43
|
-
containers = Harbr::Container::Repository.new
|
44
|
-
container = containers.find_by_header(host)
|
45
|
-
|
46
|
-
if container.nil?
|
47
|
-
container = Harbr::Container.new
|
48
|
-
container.name = name
|
49
|
-
container.host_header = host
|
50
|
-
container.ip = "127.0.0.1"
|
51
|
-
container.port = port
|
52
|
-
containers.create(container)
|
53
|
-
|
54
|
-
else
|
55
|
-
container.port = port
|
56
|
-
containers.update(container)
|
57
|
-
end
|
58
|
-
|
59
|
-
if host_header_aliases
|
60
|
-
host_header_aliases.each do |host_header_alias|
|
61
|
-
container = Harbr::Container.new
|
62
|
-
container.name = "#{name} -> #{host_header_alias}"
|
63
|
-
container.host_header = host_header_alias
|
64
|
-
container.ip = "127.0.0.1"
|
65
|
-
container.port = port
|
66
|
-
containers.create(container) unless containers.find_by_header(host_header_alias)
|
67
|
-
|
68
|
-
if container.name.start_with?("live")
|
69
|
-
|
70
|
-
plain_name = host_header_alias.gsub("live.", "")
|
71
|
-
container = Harbr::Container.new
|
72
|
-
container.name = "#{name} -> #{plain_name}"
|
73
|
-
container.host_header = plain_name
|
74
|
-
container.ip = "127.0.0.1"
|
75
|
-
container.port = port
|
76
|
-
|
77
|
-
unless containers.find_by_header(container.host_header)
|
78
|
-
containers.create(container)
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
containers.all
|
86
|
-
end
|
87
|
-
|
88
|
-
def write_to_file(path, contents)
|
89
|
-
dirname = File.dirname(path)
|
90
|
-
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
|
91
|
-
File.write(path, contents)
|
92
|
-
end
|
93
|
-
|
94
|
-
def load_manifest(name, version)
|
95
|
-
manifest_path = "/var/harbr/containers/#{name}/versions/#{version}/config/manifest.yml"
|
96
|
-
check_file_exists(manifest_path)
|
97
|
-
raise "Manifest not found at #{manifest_path}" unless File.exist?(manifest_path)
|
98
|
-
|
99
|
-
manifest_data = YAML.load_file(manifest_path)
|
100
|
-
OpenStruct.new(manifest_data)
|
101
|
-
end
|
102
|
-
|
103
|
-
def perform(name, version, env)
|
104
|
-
Harbr.notifiable(name, version, env) do
|
105
|
-
manifest = load_manifest(name, version)
|
106
|
-
port = `port assign #{env}.#{manifest.port}`.strip
|
107
|
-
process_container(name, version, port, env, manifest)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
private
|
112
|
-
|
113
|
-
def remove_dot_from_string(str)
|
114
|
-
str.sub(".", "")
|
115
|
-
end
|
116
|
-
|
117
|
-
def check_file_exists(path)
|
118
|
-
sleep_times = [1, 3, 5, 8, 23]
|
119
|
-
begin
|
120
|
-
sleep_times.each do |time|
|
121
|
-
puts "checking #{path}...."
|
122
|
-
if File.exist?(path)
|
123
|
-
puts "found #{path}"
|
124
|
-
return
|
125
|
-
end
|
126
|
-
sleep(time)
|
127
|
-
end
|
128
|
-
raise "Directory not found: #{path}"
|
129
|
-
rescue => e
|
130
|
-
puts "Error: #{e.message}"
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def check_dir_exists(path)
|
135
|
-
sleep_times = [1, 3, 5, 8, 23]
|
136
|
-
begin
|
137
|
-
sleep_times.each do |time|
|
138
|
-
puts "checking #{path}...."
|
139
|
-
if Dir.exist?(path)
|
140
|
-
puts "found #{path}"
|
141
|
-
return
|
142
|
-
end
|
143
|
-
sleep(time)
|
144
|
-
end
|
145
|
-
raise "Directory not found: #{path}"
|
146
|
-
rescue => e
|
147
|
-
puts "Error: #{e.message}"
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
def process_container(name, version, port, env, manifest)
|
152
|
-
version_path = "/var/harbr/containers/#{name}/versions/#{version}"
|
153
|
-
|
154
|
-
if env == "live"
|
155
|
-
`rm -f /var/harbr/containers/#{name}/live` if Dir.exist?("/var/harbr/containers/#{name}/live")
|
156
|
-
`ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/live`
|
157
|
-
end
|
158
|
-
|
159
|
-
if env == "next"
|
160
|
-
`rm -f /var/harbr/containers/#{name}/next` if Dir.exist?("/var/harbr/containers/#{name}/next")
|
161
|
-
`ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/next`
|
162
|
-
end
|
163
|
-
|
164
|
-
bundle_install_if_needed(version_path)
|
165
|
-
|
166
|
-
create_runit_scripts(name, port, env)
|
167
|
-
link_directories(name, version, env)
|
168
|
-
sync_live_data_if_next(name) if env == "next"
|
169
|
-
|
170
|
-
containers = collate_containers("#{env}.#{name}", "#{env}.#{manifest.host}", port, manifest.host_aliases&.map { |host| "#{env}.#{host}" })
|
171
|
-
|
172
|
-
create_traefik_config(containers)
|
173
|
-
|
174
|
-
system "sv restart #{env}.#{name}"
|
175
|
-
|
176
|
-
puts "harbr: #{version} of #{name} deployed to #{env} environment"
|
177
|
-
end
|
178
|
-
|
179
|
-
def bundle_install_if_needed(path)
|
180
|
-
check_dir_exists(path)
|
181
|
-
|
182
|
-
Dir.chdir(path) do
|
183
|
-
if File.exist?("Gemfile")
|
184
|
-
`bundle config set --local path 'vendor/bundle'`
|
185
|
-
system "bundle install"
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
def create_runit_scripts(name, port, env)
|
191
|
-
run_script = Runit::Script.new(name, port, env).run_script
|
192
|
-
finish_script = Runit::Script.new(name, port, env).finish_script
|
193
|
-
log_script = Runit::Script.new(name, port, env).log_script
|
194
|
-
|
195
|
-
write_to_file "/etc/sv/harbr/#{name}/#{env}/run", run_script
|
196
|
-
write_to_file "/etc/sv/harbr/#{name}/#{env}/log/run", log_script
|
197
|
-
#write_to_file "/etc/sv/harbr/#{name}/#{env}/finish", finish_script
|
198
|
-
`chmod +x /etc/sv/harbr/#{name}/#{env}/run`
|
199
|
-
#`chmod +x /etc/sv/harbr/#{name}/#{env}/finish`
|
200
|
-
`chmod +x /etc/sv/harbr/#{name}/#{env}/log/run`
|
201
|
-
`mkdir -p /var/log/harbr/#{name}/#{env}`
|
202
|
-
end
|
203
|
-
|
204
|
-
def link_directories(name, version, env)
|
205
|
-
`rm -f /etc/service/#{env}.#{name}`
|
206
|
-
`rm -f /var/harbr/containers/#{name}/#{env}`
|
207
|
-
`ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/#{env}`
|
208
|
-
`ln -sf /etc/sv/harbr/#{name}/#{env} /etc/service/#{env}.#{name}`
|
209
|
-
end
|
210
|
-
|
211
|
-
def sync_live_data_if_next(name)
|
212
|
-
`rsync -av /var/dddr/#{name}/live /var/dddr/#{name}/next`
|
213
|
-
puts "sync live data to next"
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
module Runit
|
218
|
-
class Script
|
219
|
-
def initialize(container, port, env)
|
220
|
-
@container_name = container
|
221
|
-
@port = port
|
222
|
-
@env = env
|
223
|
-
end
|
224
|
-
|
225
|
-
def run_script
|
226
|
-
<<~SCRIPT
|
227
|
-
#!/bin/sh
|
228
|
-
exec 2>&1
|
229
|
-
cd /var/harbr/containers/#{@container_name}/#{@env}
|
230
|
-
exec ./exe/run #{@port} #{@env}
|
231
|
-
echo "started #{@container_name} on port #{@port}"
|
232
|
-
SCRIPT
|
233
|
-
end
|
234
|
-
|
235
|
-
# def finish_script
|
236
|
-
# <<~SCRIPT
|
237
|
-
# #!/bin/sh
|
238
|
-
# lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill
|
239
|
-
# echo "killed #{@container_name} on port #{@port}"
|
240
|
-
# SCRIPT
|
241
|
-
# end
|
242
|
-
|
243
|
-
def log_script
|
244
|
-
<<~SCRIPT
|
245
|
-
#!/bin/sh
|
246
|
-
echo "starting log for #{@container_name} on port #{@port}"
|
247
|
-
exec svlogd -tt /var/log/harbr/#{@container_name}/#{@env}
|
248
|
-
SCRIPT
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
data/lib/harbr/lxd/job.rb
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
require "fileutils"
|
2
|
-
|
3
|
-
module Harbr
|
4
|
-
module Runit
|
5
|
-
class Script
|
6
|
-
def initialize(container, port, env)
|
7
|
-
@container_name = container
|
8
|
-
@port = port
|
9
|
-
@env = env
|
10
|
-
end
|
11
|
-
|
12
|
-
def run_script
|
13
|
-
<<~SCRIPT
|
14
|
-
#!/bin/sh
|
15
|
-
exec 2>&1
|
16
|
-
cd /var/harbr/containers/#{@container_name}/#{@env}
|
17
|
-
exec ./exe/run #{@port} #{@env}
|
18
|
-
echo "started #{@container_name} on port #{@port}"
|
19
|
-
SCRIPT
|
20
|
-
end
|
21
|
-
|
22
|
-
def finish_script
|
23
|
-
<<~SCRIPT
|
24
|
-
#!/bin/sh
|
25
|
-
lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill
|
26
|
-
echo "killed #{@container_name} on port #{@port}"
|
27
|
-
SCRIPT
|
28
|
-
end
|
29
|
-
|
30
|
-
def log_script
|
31
|
-
<<~SCRIPT
|
32
|
-
#!/bin/sh
|
33
|
-
echo "starting log for #{@container_name} on port #{@port}"
|
34
|
-
exec svlogd -tt /var/log/harbr/#{@container_name}/#{@env}
|
35
|
-
SCRIPT
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
module Lxd
|
40
|
-
class Job
|
41
|
-
include SuckerPunch::Job
|
42
|
-
|
43
|
-
def perform(name, version, env, port)
|
44
|
-
ip_address = lxd_pack(name, env, port)
|
45
|
-
puts "Container IP Address: #{ip_address}"
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def lxd_pack(name, env, port)
|
51
|
-
base_path = "/var/harbr/containers/paiddm"
|
52
|
-
source_path = File.join(base_path, env)
|
53
|
-
runit_script = Runit::Script.new(name, port, env)
|
54
|
-
|
55
|
-
# Check if the source path exists
|
56
|
-
raise "Source path #{source_path} does not exist." unless File.directory?(source_path)
|
57
|
-
|
58
|
-
# Create the container
|
59
|
-
system("lxc launch panamax #{name}")
|
60
|
-
sleep(5) # Wait for the container to initialize
|
61
|
-
|
62
|
-
# Check if runit is installed, if not then install
|
63
|
-
unless system("lxc exec #{name} -- dpkg -s runit")
|
64
|
-
system("lxc exec #{name} -- apt-get update")
|
65
|
-
system("lxc exec #{name} -- apt-get install -y runit")
|
66
|
-
end
|
67
|
-
|
68
|
-
# Check if chruby is installed, if not then install chruby, ruby-install and Ruby versions
|
69
|
-
unless system("lxc exec #{name} -- bash -c 'type chruby'")
|
70
|
-
system("lxc exec #{name} -- apt-get install -y git curl build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libgdbm-dev libncurses5-dev libffi-dev")
|
71
|
-
system("lxc exec #{name} -- wget -O chruby-0.3.9.tar.gz https://github.com/postmodern/chruby/archive/v0.3.9.tar.gz")
|
72
|
-
system("lxc exec #{name} -- tar -xzvf chruby-0.3.9.tar.gz")
|
73
|
-
system("lxc exec #{name} -- cd chruby-0.3.9/ && make install")
|
74
|
-
system("lxc exec #{name} -- echo 'source /usr/local/share/chruby/chruby.sh' >> ~/.bashrc")
|
75
|
-
system("lxc exec #{name} -- wget -O ruby-install-0.8.3.tar.gz https://github.com/postmodern/ruby-install/archive/v0.8.3.tar.gz")
|
76
|
-
system("lxc exec #{name} -- tar -xzvf ruby-install-0.8.3.tar.gz")
|
77
|
-
system("lxc exec #{name} -- cd ruby-install-0.8.3/ && make install")
|
78
|
-
|
79
|
-
# Install Ruby versions
|
80
|
-
["3.2.2", "3.1.2", "3.3.0"].each do |ruby_version|
|
81
|
-
system("lxc exec #{name} -- ruby-install ruby #{ruby_version}")
|
82
|
-
end
|
83
|
-
end
|
84
|
-
# Copy the entire directory structure to the container
|
85
|
-
system("lxc file push -r #{source_path}/* #{name}/var/harbr/containers/#{name}/")
|
86
|
-
|
87
|
-
# Start the container, if it's not already running
|
88
|
-
system("lxc start #{name}")
|
89
|
-
sleep(5) # Wait for the container to fully start
|
90
|
-
|
91
|
-
# Create Runit scripts and directories
|
92
|
-
sv_path = "/etc/sv/#{name}"
|
93
|
-
system("lxc exec #{name} -- mkdir -p #{sv_path}")
|
94
|
-
system("lxc exec #{name} -- mkdir -p /var/log/harbr/#{name}/#{env}")
|
95
|
-
|
96
|
-
# Create and set execute permissions on each script
|
97
|
-
["run_script", "finish_script", "log_script"].each do |script_method|
|
98
|
-
script_content = runit_script.send(script_method)
|
99
|
-
File.write("tmp_script.sh", script_content)
|
100
|
-
system("lxc file push tmp_script.sh #{name}#{sv_path}/#{script_method.gsub("_script", "")}")
|
101
|
-
system("lxc exec #{name} -- chmod +x #{sv_path}/#{script_method.gsub("_script", "")}")
|
102
|
-
File.delete("tmp_script.sh")
|
103
|
-
end
|
104
|
-
|
105
|
-
# Symlink from source to /etc/sv
|
106
|
-
system("lxc exec #{name} -- ln -s #{source_path} /etc/sv/#{name}")
|
107
|
-
|
108
|
-
# Symlink from sv to /etc/service
|
109
|
-
system("lxc exec #{name} -- ln -s #{sv_path} /etc/service/#{name}")
|
110
|
-
|
111
|
-
# Fetch the container's IP address
|
112
|
-
ip_address = `lxc list #{name} -c 4 --format csv`.strip
|
113
|
-
|
114
|
-
puts "Container #{name} created on #{ip_address}, Runit scripts set up, and started."
|
115
|
-
ip_address
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
data/lib/harbr/lxd/setup.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module Harbr
|
2
|
-
module Lxd
|
3
|
-
class Setup
|
4
|
-
include SuckerPunch::Job
|
5
|
-
|
6
|
-
def perform(name)
|
7
|
-
# Create the container
|
8
|
-
system("lxc launch ubuntu:20.04 #{name}")
|
9
|
-
sleep(5) # Wait for the container to initialize
|
10
|
-
|
11
|
-
# Check if runit is installed, if not then install
|
12
|
-
unless system("lxc exec #{name} -- dpkg -s runit")
|
13
|
-
system("lxc exec #{name} -- apt-get update")
|
14
|
-
system("lxc exec #{name} -- apt-get install -y runit")
|
15
|
-
end
|
16
|
-
|
17
|
-
# Check if chruby is installed, if not then install chruby, ruby-install and Ruby versions
|
18
|
-
unless system("lxc exec #{name} -- bash -c 'type chruby'")
|
19
|
-
system("lxc exec #{name} -- apt-get install -y git curl build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libgdbm-dev libncurses5-dev libffi-dev")
|
20
|
-
system("lxc exec #{name} -- wget -O chruby-0.3.9.tar.gz https://github.com/postmodern/chruby/archive/v0.3.9.tar.gz")
|
21
|
-
system("lxc exec #{name} -- tar -xzvf chruby-0.3.9.tar.gz")
|
22
|
-
system("lxc exec #{name} -- cd chruby-0.3.9/ && make install")
|
23
|
-
system("lxc exec #{name} -- echo 'source /usr/local/share/chruby/chruby.sh' >> ~/.bashrc")
|
24
|
-
system("lxc exec #{name} -- wget -O ruby-install-0.8.3.tar.gz https://github.com/postmodern/ruby-install/archive/v0.8.3.tar.gz")
|
25
|
-
system("lxc exec #{name} -- tar -xzvf ruby-install-0.8.3.tar.gz")
|
26
|
-
system("lxc exec #{name} -- cd ruby-install-0.8.3/ && make install")
|
27
|
-
|
28
|
-
# Install Ruby versions
|
29
|
-
["3.2.2", "3.1.2", "3.3.0"].each do |ruby_version|
|
30
|
-
system("lxc exec #{name} -- ruby-install ruby #{ruby_version}")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
puts "Container #{name} created."
|
35
|
-
|
36
|
-
# Publish the container as an image named "panamax"
|
37
|
-
system("lxc stop #{name}")
|
38
|
-
system("lxc publish #{name} --alias @#{name}")
|
39
|
-
|
40
|
-
puts "panamax image #{name} published."
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|