Add kamal-proxy in experimental mode
The proxy can be enabled via the config:
```
proxy:
enabled: true
hosts:
- 10.0.0.1
- 10.0.0.2
```
This will enable the proxy and cause it to be run on the hosts listed
under `hosts`, after running `kamal proxy reboot`.
Enabling the proxy disables `kamal traefik` commands and replaces them
with `kamal proxy` ones. However only the marked hosts will run the
kamal-proxy container, the rest will run Traefik as before.
This commit is contained in:
committed by
Donal McBreen
parent
debdf00cca
commit
61715e0a4b
@@ -27,6 +27,5 @@ class BrokenDeployTest < IntegrationTest
|
||||
assert_match /First web container is unhealthy on vm[12], not booting any other roles/, output
|
||||
assert_match "First web container is unhealthy, not booting workers on vm3", output
|
||||
assert_match "nginx: [emerg] unexpected end of file, expecting \";\" or \"}\" in /etc/nginx/conf.d/default.conf:2", output
|
||||
assert_match 'ERROR {"Status":"unhealthy","FailingStreak":0,"Log":[]}', output
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,4 +6,4 @@ ARG COMMIT_SHA
|
||||
RUN echo $COMMIT_SHA > /usr/share/nginx/html/version
|
||||
RUN mkdir -p /usr/share/nginx/html/versions && echo "version" > /usr/share/nginx/html/versions/$COMMIT_SHA
|
||||
RUN mkdir -p /usr/share/nginx/html/versions && echo "hidden" > /usr/share/nginx/html/versions/.hidden
|
||||
|
||||
RUN echo "Up!" > /usr/share/nginx/html/up
|
||||
|
||||
@@ -6,4 +6,4 @@ ARG COMMIT_SHA
|
||||
RUN echo $COMMIT_SHA > /usr/share/nginx/html/version
|
||||
RUN mkdir -p /usr/share/nginx/html/versions && echo "version" > /usr/share/nginx/html/versions/$COMMIT_SHA
|
||||
RUN mkdir -p /usr/share/nginx/html/versions && echo "hidden" > /usr/share/nginx/html/versions/.hidden
|
||||
|
||||
RUN echo "Up!" > /usr/share/nginx/html/up
|
||||
|
||||
@@ -9,6 +9,11 @@ servers:
|
||||
hosts:
|
||||
- vm3
|
||||
cmd: sleep infinity
|
||||
proxy:
|
||||
enabled: true
|
||||
hosts:
|
||||
- vm2
|
||||
deploy_timeout: 2s
|
||||
|
||||
asset_path: /usr/share/nginx/html/versions
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ class IntegrationTest < ActiveSupport::TestCase
|
||||
succeeded = system("cd test/integration && #{command}")
|
||||
end
|
||||
|
||||
raise "Command `#{command}` failed with error code `#{$?}`" if !succeeded && raise_on_error
|
||||
raise "Command `#{command}` failed with error code `#{$?}`, and output:\n#{result}" if !succeeded && raise_on_error
|
||||
result
|
||||
end
|
||||
|
||||
|
||||
84
test/integration/proxy_test.rb
Normal file
84
test/integration/proxy_test.rb
Normal file
@@ -0,0 +1,84 @@
|
||||
require_relative "integration_test"
|
||||
|
||||
class ProxyTest < IntegrationTest
|
||||
setup do
|
||||
@app = "app_with_roles"
|
||||
end
|
||||
|
||||
test "boot, reboot, stop, start, restart, logs, remove" do
|
||||
kamal :envify
|
||||
|
||||
kamal :proxy, :boot
|
||||
assert_proxy_running
|
||||
|
||||
output = kamal :proxy, :reboot, "-y", "--verbose", capture: true
|
||||
assert_proxy_running
|
||||
assert_hooks_ran "pre-traefik-reboot", "post-traefik-reboot"
|
||||
assert_match /Rebooting Traefik on vm1,vm2.../, output
|
||||
assert_match /Rebooted Traefik on vm1,vm2/, output
|
||||
|
||||
output = kamal :proxy, :reboot, "--rolling", "-y", "--verbose", capture: true
|
||||
assert_proxy_running
|
||||
assert_hooks_ran "pre-traefik-reboot", "post-traefik-reboot"
|
||||
assert_match /Rebooting Traefik on vm1.../, output
|
||||
assert_match /Rebooted Traefik on vm1/, output
|
||||
assert_match /Rebooting Traefik on vm2.../, output
|
||||
assert_match /Rebooted Traefik on vm2/, output
|
||||
|
||||
kamal :proxy, :boot
|
||||
assert_proxy_running
|
||||
assert_traefik_running
|
||||
|
||||
# Check booting when booted doesn't raise an error
|
||||
kamal :proxy, :stop
|
||||
assert_proxy_not_running
|
||||
assert_traefik_not_running
|
||||
|
||||
# Check booting when stopped works
|
||||
kamal :proxy, :boot
|
||||
assert_proxy_running
|
||||
assert_traefik_running
|
||||
|
||||
kamal :proxy, :stop
|
||||
assert_proxy_not_running
|
||||
assert_traefik_not_running
|
||||
|
||||
kamal :proxy, :start
|
||||
assert_proxy_running
|
||||
assert_traefik_running
|
||||
|
||||
kamal :proxy, :restart
|
||||
assert_proxy_running
|
||||
assert_traefik_running
|
||||
|
||||
logs = kamal :proxy, :logs, capture: true
|
||||
assert_match /Traefik version [\d.]+ built on/, logs
|
||||
|
||||
kamal :proxy, :remove
|
||||
assert_proxy_not_running
|
||||
assert_traefik_not_running
|
||||
|
||||
kamal :env, :delete
|
||||
end
|
||||
|
||||
private
|
||||
def assert_proxy_running
|
||||
assert_match /basecamp\/kamal-proxy:latest \"kamal-proxy run\"/, proxy_details
|
||||
end
|
||||
|
||||
def assert_proxy_not_running
|
||||
assert_no_match /basecamp\/kamal-proxy:latest \"kamal-proxy run\"/, proxy_details
|
||||
end
|
||||
|
||||
def assert_traefik_running
|
||||
assert_match /traefik:v2.10 "\/entrypoint.sh/, proxy_details
|
||||
end
|
||||
|
||||
def assert_traefik_not_running
|
||||
assert_no_match /traefik:v2.10 "\/entrypoint.sh/, proxy_details
|
||||
end
|
||||
|
||||
def proxy_details
|
||||
kamal :proxy, :details, capture: true
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user