harbr 0.2.10 → 2.8.1

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.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/exe/harbr +225 -150
  4. data/lib/examples/container.toml +13 -0
  5. data/lib/harbr/container.rb +14 -10
  6. data/lib/harbr/host.rb +21 -0
  7. data/lib/harbr/version.rb +1 -1
  8. data/lib/harbr.rb +21 -6
  9. data/vendor/bundle/ruby/3.2.0/cache/dddr-1.0.8.gem +0 -0
  10. data/vendor/bundle/ruby/3.2.0/cache/dddr-1.1.0.gem +0 -0
  11. data/vendor/bundle/ruby/3.2.0/cache/dddr-1.1.1.gem +0 -0
  12. data/vendor/bundle/ruby/3.2.0/cache/net-ssh-7.2.1.gem +0 -0
  13. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/.DS_Store +0 -0
  14. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/.rspec +3 -0
  15. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/.standard.yml +3 -0
  16. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/CHANGELOG.md +5 -0
  17. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/CODE_OF_CONDUCT.md +84 -0
  18. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/LICENSE.txt +21 -0
  19. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/README.md +96 -0
  20. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/Rakefile +10 -0
  21. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/hero.png +0 -0
  22. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/lib/dddr/version.rb +5 -0
  23. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/lib/dddr.rb +205 -0
  24. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.0.8/sig/dddr.rbs +4 -0
  25. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/.DS_Store +0 -0
  26. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/.rspec +3 -0
  27. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/.standard.yml +3 -0
  28. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/CHANGELOG.md +5 -0
  29. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/CODE_OF_CONDUCT.md +84 -0
  30. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/LICENSE.txt +21 -0
  31. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/README.md +96 -0
  32. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/Rakefile +10 -0
  33. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/hero.png +0 -0
  34. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/lib/dddr/version.rb +5 -0
  35. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/lib/dddr.rb +182 -0
  36. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.0/sig/dddr.rbs +4 -0
  37. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/.DS_Store +0 -0
  38. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/.rspec +3 -0
  39. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/.standard.yml +3 -0
  40. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/CHANGELOG.md +5 -0
  41. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/CODE_OF_CONDUCT.md +84 -0
  42. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/LICENSE.txt +21 -0
  43. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/README.md +96 -0
  44. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/Rakefile +10 -0
  45. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/hero.png +0 -0
  46. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/lib/dddr/version.rb +5 -0
  47. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/lib/dddr.rb +184 -0
  48. data/vendor/bundle/ruby/3.2.0/gems/dddr-1.1.1/sig/dddr.rbs +4 -0
  49. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.dockerignore +6 -0
  50. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/FUNDING.yml +1 -0
  51. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/config/rubocop_linter_action.yml +4 -0
  52. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/workflows/ci-with-docker.yml +44 -0
  53. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/workflows/ci.yml +94 -0
  54. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.github/workflows/rubocop.yml +16 -0
  55. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.gitignore +15 -0
  56. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.rubocop.yml +22 -0
  57. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/.rubocop_todo.yml +1081 -0
  58. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/CHANGES.txt +738 -0
  59. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/DEVELOPMENT.md +23 -0
  60. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Dockerfile +29 -0
  61. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Dockerfile.openssl3 +17 -0
  62. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Gemfile +13 -0
  63. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Gemfile.noed25519 +12 -0
  64. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Gemfile.norbnacl +12 -0
  65. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/ISSUE_TEMPLATE.md +30 -0
  66. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/LICENSE.txt +19 -0
  67. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Manifest +132 -0
  68. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/README.md +298 -0
  69. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/Rakefile +192 -0
  70. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/SECURITY.md +4 -0
  71. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/THANKS.txt +110 -0
  72. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/appveyor.yml +58 -0
  73. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/docker-compose.yml +25 -0
  74. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/agent.rb +284 -0
  75. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/certificate.rb +183 -0
  76. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/constants.rb +20 -0
  77. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/ed25519.rb +186 -0
  78. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/ed25519_loader.rb +31 -0
  79. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/key_manager.rb +327 -0
  80. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/abstract.rb +79 -0
  81. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/hostbased.rb +72 -0
  82. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/keyboard_interactive.rb +77 -0
  83. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/none.rb +34 -0
  84. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/password.rb +80 -0
  85. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/methods/publickey.rb +137 -0
  86. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/pageant.rb +497 -0
  87. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/pub_key_fingerprint.rb +43 -0
  88. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/authentication/session.rb +172 -0
  89. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/buffer.rb +449 -0
  90. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/buffered_io.rb +202 -0
  91. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/config.rb +406 -0
  92. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/channel.rb +694 -0
  93. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/constants.rb +33 -0
  94. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/event_loop.rb +123 -0
  95. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/keepalive.rb +59 -0
  96. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/session.rb +712 -0
  97. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/term.rb +180 -0
  98. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/errors.rb +106 -0
  99. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/key_factory.rb +218 -0
  100. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/known_hosts.rb +265 -0
  101. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/loggable.rb +62 -0
  102. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/packet.rb +106 -0
  103. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/prompt.rb +62 -0
  104. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/command.rb +123 -0
  105. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/errors.rb +16 -0
  106. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/http.rb +98 -0
  107. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/https.rb +50 -0
  108. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/jump.rb +54 -0
  109. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/socks4.rb +67 -0
  110. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/proxy/socks5.rb +140 -0
  111. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/service/forward.rb +426 -0
  112. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/channel.rb +147 -0
  113. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/extensions.rb +173 -0
  114. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/kex.rb +46 -0
  115. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/local_packet.rb +53 -0
  116. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/packet.rb +101 -0
  117. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/remote_packet.rb +40 -0
  118. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/script.rb +180 -0
  119. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test/socket.rb +65 -0
  120. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/test.rb +94 -0
  121. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/algorithms.rb +524 -0
  122. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/chacha20_poly1305_cipher.rb +117 -0
  123. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/chacha20_poly1305_cipher_loader.rb +17 -0
  124. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/cipher_factory.rb +128 -0
  125. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/constants.rb +40 -0
  126. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/ctr.rb +115 -0
  127. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/abstract.rb +97 -0
  128. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/md5.rb +10 -0
  129. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/md5_96.rb +9 -0
  130. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/none.rb +13 -0
  131. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/ripemd160.rb +11 -0
  132. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha1.rb +11 -0
  133. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha1_96.rb +9 -0
  134. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_256.rb +11 -0
  135. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_256_96.rb +9 -0
  136. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_256_etm.rb +12 -0
  137. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_512.rb +11 -0
  138. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_512_96.rb +9 -0
  139. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac/sha2_512_etm.rb +12 -0
  140. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/hmac.rb +47 -0
  141. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/identity_cipher.rb +65 -0
  142. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/abstract.rb +130 -0
  143. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/abstract5656.rb +72 -0
  144. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/curve25519_sha256.rb +39 -0
  145. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/curve25519_sha256_loader.rb +30 -0
  146. 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
  147. 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
  148. 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
  149. 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
  150. 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
  151. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb +39 -0
  152. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb +21 -0
  153. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb +21 -0
  154. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/kex.rb +31 -0
  155. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/key_expander.rb +30 -0
  156. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/openssl.rb +274 -0
  157. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/openssl_cipher_extensions.rb +8 -0
  158. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/packet_stream.rb +301 -0
  159. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/server_version.rb +77 -0
  160. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/session.rb +354 -0
  161. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/transport/state.rb +208 -0
  162. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/verifiers/accept_new.rb +33 -0
  163. 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
  164. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/verifiers/always.rb +58 -0
  165. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/verifiers/never.rb +19 -0
  166. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/version.rb +68 -0
  167. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh.rb +338 -0
  168. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/net-ssh-public_cert.pem +20 -0
  169. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/net-ssh.gemspec +46 -0
  170. data/vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/support/ssh_tunnel_bug.rb +65 -0
  171. data/vendor/bundle/ruby/3.2.0/specifications/dddr-1.0.8.gemspec +27 -0
  172. data/vendor/bundle/ruby/3.2.0/specifications/dddr-1.1.0.gemspec +27 -0
  173. data/vendor/bundle/ruby/3.2.0/specifications/dddr-1.1.1.gemspec +27 -0
  174. data/vendor/bundle/ruby/3.2.0/specifications/net-ssh-7.2.1.gemspec +38 -0
  175. metadata +174 -9
  176. data/config/manifest.yml +0 -5
  177. data/lib/harbr/job.rb +0 -252
  178. data/lib/harbr/lxd/job.rb +0 -119
  179. 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
@@ -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