easyhaproxy 6.2.0__tar.gz → 6.3.0__tar.gz
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.
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/PKG-INFO +2 -2
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/README.md +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/RELEASE.md +2 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/docker-compose.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-clusterip.yml +13 -13
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-daemonset.yml +11 -11
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-nodeport.yml +13 -13
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/kubernetes.md +3 -3
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/static.md +1 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/swarm.md +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/acme.md +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/dashboard.md +4 -3
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/ssl.md +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/cli.md +3 -2
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/environment-variables.md +7 -5
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/helm.md +2 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/other.md +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/Chart.yaml +2 -2
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/README.md +1 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/_helpers.tpl +7 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/deployment.yaml +5 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/service.yaml +2 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/values.yaml +1 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/pyproject.toml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easyhaproxy/main.py +12 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/container_env.py +10 -7
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/haproxy.cfg.j2 +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_containerenv.py +51 -0
- easyhaproxy-6.3.0/tests/test_stats.py +70 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-acme.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-portainer.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/cloudflare.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/ip-whitelist.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/jwt-validator.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/plugins-combined.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/service.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/service_tls.yml +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/uv.lock +1 -1
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.dockerignore +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.github/FUNDING.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.github/dependabot.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.github/workflows/build.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.gitignore +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.python-version +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.run/pytest in tests.run.xml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.vscode/launch.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.vscode/settings.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/LICENSE +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/Makefile +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/build-multiarch.sh +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/Dockerfile +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/entrypoint.sh +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/conf.d/README.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/400.http +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/403.http +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/408.http +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/500.http +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/502.http +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/503.http +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/504.http +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/www/dashboard.html +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/kubernetes/README.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/concepts/_category_.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/concepts/index.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/concepts/limitations.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/dashboard.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/dashboard_login.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/dashboard_thumbnail.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_digitalocean.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_docker.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_dokku.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_helm.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_kubernetes.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_logo.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_microk8s.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_static.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_swarm.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/_category_.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/docker.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/index.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/native.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/_category_.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/digitalocean.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/dokku.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/helm.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/microk8s.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/plugin-development.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/plugins.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/icons.xcf +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/logo.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/logo.xcf +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/_category_.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/container-labels.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/_category_.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/cleanup.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/cloudflare.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/deny-pages.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/fastcgi.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/ip-whitelist.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/jwt-validator.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/volumes.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-docker-ssl.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-docker.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-kubernetes-letsencrypt.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-kubernetes.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-static.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-tcp-mysql.png +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/.helmignore +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/LICENSE +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/clusterrole.yaml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/clusterrolebinding.yaml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/ingressclass.yaml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/pvc.yaml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/serviceaccount.yaml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/values.schema.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/scripts/bump-version.sh +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easyhaproxy/__init__.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easymapping/__init__.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easymapping/config_generator.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easymapping/label_handler.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/__init__.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/certbot.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/consts.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/filter.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/functions.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/haproxy.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/loggers.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/__init__.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/__init__.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/cleanup.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/cloudflare.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/deny_pages.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/fastcgi.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/ip_whitelist.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/jwt_validator.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/interface.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/manager.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/types.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/__init__.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/docker.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/interface.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/kubernetes.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/static.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/swarm.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/bind.j2 +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/frontend-mode-http.j2 +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/frontend-mode-tcp.j2 +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/ssl_default.j2 +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/ssl_loose.j2 +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/ssl_strict.j2 +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/__init__.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/conftest.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/docker.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/no-services.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-fcgi.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-letsencrypt.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-multi-containers.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-multiple-hosts.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-redirect-ssl.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-tcp.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/ssl-loose.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/ssl-strict.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/static-cors.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/static.txt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/00_haproxy.cfg +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/10_haproxy.cfg +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/no-services +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/run_bash.sh +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-changed-label +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-clone-to-ssl +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-fcgi +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-letsencrypt +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-multi-containers +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-multiple-hosts +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-redirect-ssl +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-tcp +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-cloudflare +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-deny-pages +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-ip-whitelist +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-jwt-validator +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-multiple-plugins +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/static.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/static_cors.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/static_multi_domain.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_certbot.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_certbot_haproxy_config.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_daemonize.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_docker.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_functions.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_kubernetes_processor.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_labels.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_parser.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_plugins.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_static.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/conftest.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/AGENTS.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/README.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-acme-e2e.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-changed-label.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-cloudflare.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-ip-whitelist.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-jwt-validator.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-multi-containers.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-php-fpm.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-plugins-combined.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-portainer-app-example.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-proxy-headers.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/pebble-config.json +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/README.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/index.php +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/info.php +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/test-path-info.php +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/Dockerfile +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/README.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/server.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/generate-keys.sh +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/.gitignore +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/README.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/jwt-validator-secret-example.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/setup-cluster.sh +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/teardown-cluster.sh +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/README.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-basic.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-certbot.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-deny-pages.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-jwt-validator.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/docker-compose.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/README.md +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/cloudflare.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/easyhaproxy.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/ip-whitelist.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/jwt-validator.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/plugins-combined.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/portainer.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/services.yml +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_docker_compose.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_kubernetes.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_proxy_headers.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_static.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_swarm.py +0 -0
- {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: easyhaproxy
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.3.0
|
|
4
4
|
Summary: HAProxy label based routing with service discovery for Docker, Swarm, and Kubernetes
|
|
5
5
|
License: MIT License
|
|
6
6
|
|
|
@@ -113,7 +113,7 @@ EasyHAProxy is part of some projects:
|
|
|
113
113
|
|
|
114
114
|
[](docs/guides/dashboard.md)
|
|
115
115
|
|
|
116
|
-
A real-time dashboard is available at `http://<host>:11936/`
|
|
116
|
+
A real-time dashboard is available at `http://<host>:11936/` (set `HAPROXY_PASSWORD` to require a login) —
|
|
117
117
|
no extra containers, no Prometheus, no Grafana. See the [dashboard guide](docs/guides/dashboard.md).
|
|
118
118
|
|
|
119
119
|
## See EasyHAProxy in action
|
|
@@ -66,7 +66,7 @@ EasyHAProxy is part of some projects:
|
|
|
66
66
|
|
|
67
67
|
[](docs/guides/dashboard.md)
|
|
68
68
|
|
|
69
|
-
A real-time dashboard is available at `http://<host>:11936/`
|
|
69
|
+
A real-time dashboard is available at `http://<host>:11936/` (set `HAPROXY_PASSWORD` to require a login) —
|
|
70
70
|
no extra containers, no Prometheus, no Grafana. See the [dashboard guide](docs/guides/dashboard.md).
|
|
71
71
|
|
|
72
72
|
## See EasyHAProxy in action
|
|
@@ -54,7 +54,7 @@ EasyHAProxy follows [Semantic Versioning](https://semver.org/):
|
|
|
54
54
|
- **MINOR**: New features, plugin additions, backward-compatible changes
|
|
55
55
|
- **PATCH**: Bug fixes, documentation updates, minor improvements
|
|
56
56
|
|
|
57
|
-
**Current Version:** `6.
|
|
57
|
+
**Current Version:** `6.3.0` (as of Chart.yaml)
|
|
58
58
|
|
|
59
59
|
## Automated Release (Recommended)
|
|
60
60
|
|
|
@@ -329,6 +329,7 @@ helm show chart byjg/easyhaproxy
|
|
|
329
329
|
|
|
330
330
|
| Version | Release Date | Type | Highlights |
|
|
331
331
|
|---------|--------------|-------|---------------------------------------------------------------------------------------------------------------------------------------|
|
|
332
|
+
| 6.3.0 | 2026-10-21 | Minor | HAPROXY_STATS_ENABLE to turn stats/dashboard off, stats without a password documented with a startup warning, HAPROXY_STATS_PORT honored without a password, chart stats.enabled |
|
|
332
333
|
| 6.2.0 | 2026-10-21 | Minor | Ingress status follows a cloud LoadBalancer address, EASYHAPROXY_SERVICE_NAME, Helm chart LoadBalancer Service and certbot persistence |
|
|
333
334
|
| 6.1.1 | 2026-06-25 | Patch | Add pass_headers support to FastCGI plugin, fix flaky ACME e2e test timeout |
|
|
334
335
|
| 6.1.0 | 2026-06-24 | Minor | FastCGI protocol support, certbot sidecar plugin, dependency updates |
|
|
@@ -6,10 +6,10 @@ metadata:
|
|
|
6
6
|
name: ingress-easyhaproxy
|
|
7
7
|
namespace: easyhaproxy
|
|
8
8
|
labels:
|
|
9
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
9
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
10
10
|
app.kubernetes.io/name: easyhaproxy
|
|
11
11
|
app.kubernetes.io/instance: ingress
|
|
12
|
-
app.kubernetes.io/version: "6.
|
|
12
|
+
app.kubernetes.io/version: "6.3.0"
|
|
13
13
|
app.kubernetes.io/managed-by: Helm
|
|
14
14
|
---
|
|
15
15
|
# Source: easyhaproxy/templates/clusterrole.yaml
|
|
@@ -19,10 +19,10 @@ metadata:
|
|
|
19
19
|
name: ingress-easyhaproxy
|
|
20
20
|
namespace: easyhaproxy
|
|
21
21
|
labels:
|
|
22
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
22
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
23
23
|
app.kubernetes.io/name: easyhaproxy
|
|
24
24
|
app.kubernetes.io/instance: ingress
|
|
25
|
-
app.kubernetes.io/version: "6.
|
|
25
|
+
app.kubernetes.io/version: "6.3.0"
|
|
26
26
|
app.kubernetes.io/managed-by: Helm
|
|
27
27
|
rules:
|
|
28
28
|
- apiGroups:
|
|
@@ -83,10 +83,10 @@ metadata:
|
|
|
83
83
|
name: ingress-easyhaproxy
|
|
84
84
|
namespace: easyhaproxy
|
|
85
85
|
labels:
|
|
86
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
86
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
87
87
|
app.kubernetes.io/name: easyhaproxy
|
|
88
88
|
app.kubernetes.io/instance: ingress
|
|
89
|
-
app.kubernetes.io/version: "6.
|
|
89
|
+
app.kubernetes.io/version: "6.3.0"
|
|
90
90
|
app.kubernetes.io/managed-by: Helm
|
|
91
91
|
roleRef:
|
|
92
92
|
apiGroup: rbac.authorization.k8s.io
|
|
@@ -105,10 +105,10 @@ metadata:
|
|
|
105
105
|
name: ingress-easyhaproxy
|
|
106
106
|
namespace: easyhaproxy
|
|
107
107
|
labels:
|
|
108
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
108
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
109
109
|
app.kubernetes.io/name: easyhaproxy
|
|
110
110
|
app.kubernetes.io/instance: ingress
|
|
111
|
-
app.kubernetes.io/version: "6.
|
|
111
|
+
app.kubernetes.io/version: "6.3.0"
|
|
112
112
|
app.kubernetes.io/managed-by: Helm
|
|
113
113
|
annotations:
|
|
114
114
|
{}
|
|
@@ -140,10 +140,10 @@ metadata:
|
|
|
140
140
|
name: ingress-easyhaproxy
|
|
141
141
|
namespace: easyhaproxy
|
|
142
142
|
labels:
|
|
143
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
143
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
144
144
|
app.kubernetes.io/name: easyhaproxy
|
|
145
145
|
app.kubernetes.io/instance: ingress
|
|
146
|
-
app.kubernetes.io/version: "6.
|
|
146
|
+
app.kubernetes.io/version: "6.3.0"
|
|
147
147
|
app.kubernetes.io/managed-by: Helm
|
|
148
148
|
spec:
|
|
149
149
|
replicas: 1
|
|
@@ -164,7 +164,7 @@ spec:
|
|
|
164
164
|
- name: easyhaproxy
|
|
165
165
|
securityContext:
|
|
166
166
|
{}
|
|
167
|
-
image: "byjg/easy-haproxy:6.
|
|
167
|
+
image: "byjg/easy-haproxy:6.3.0"
|
|
168
168
|
imagePullPolicy: Always
|
|
169
169
|
ports:
|
|
170
170
|
- name: http
|
|
@@ -217,10 +217,10 @@ kind: IngressClass
|
|
|
217
217
|
metadata:
|
|
218
218
|
name: easyhaproxy
|
|
219
219
|
labels:
|
|
220
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
220
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
221
221
|
app.kubernetes.io/name: easyhaproxy
|
|
222
222
|
app.kubernetes.io/instance: ingress
|
|
223
|
-
app.kubernetes.io/version: "6.
|
|
223
|
+
app.kubernetes.io/version: "6.3.0"
|
|
224
224
|
app.kubernetes.io/managed-by: Helm
|
|
225
225
|
spec:
|
|
226
226
|
controller: byjg.com/easyhaproxy
|
|
@@ -6,10 +6,10 @@ metadata:
|
|
|
6
6
|
name: ingress-easyhaproxy
|
|
7
7
|
namespace: easyhaproxy
|
|
8
8
|
labels:
|
|
9
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
9
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
10
10
|
app.kubernetes.io/name: easyhaproxy
|
|
11
11
|
app.kubernetes.io/instance: ingress
|
|
12
|
-
app.kubernetes.io/version: "6.
|
|
12
|
+
app.kubernetes.io/version: "6.3.0"
|
|
13
13
|
app.kubernetes.io/managed-by: Helm
|
|
14
14
|
---
|
|
15
15
|
# Source: easyhaproxy/templates/clusterrole.yaml
|
|
@@ -19,10 +19,10 @@ metadata:
|
|
|
19
19
|
name: ingress-easyhaproxy
|
|
20
20
|
namespace: easyhaproxy
|
|
21
21
|
labels:
|
|
22
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
22
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
23
23
|
app.kubernetes.io/name: easyhaproxy
|
|
24
24
|
app.kubernetes.io/instance: ingress
|
|
25
|
-
app.kubernetes.io/version: "6.
|
|
25
|
+
app.kubernetes.io/version: "6.3.0"
|
|
26
26
|
app.kubernetes.io/managed-by: Helm
|
|
27
27
|
rules:
|
|
28
28
|
- apiGroups:
|
|
@@ -83,10 +83,10 @@ metadata:
|
|
|
83
83
|
name: ingress-easyhaproxy
|
|
84
84
|
namespace: easyhaproxy
|
|
85
85
|
labels:
|
|
86
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
86
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
87
87
|
app.kubernetes.io/name: easyhaproxy
|
|
88
88
|
app.kubernetes.io/instance: ingress
|
|
89
|
-
app.kubernetes.io/version: "6.
|
|
89
|
+
app.kubernetes.io/version: "6.3.0"
|
|
90
90
|
app.kubernetes.io/managed-by: Helm
|
|
91
91
|
roleRef:
|
|
92
92
|
apiGroup: rbac.authorization.k8s.io
|
|
@@ -104,10 +104,10 @@ metadata:
|
|
|
104
104
|
name: ingress-easyhaproxy
|
|
105
105
|
namespace: easyhaproxy
|
|
106
106
|
labels:
|
|
107
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
107
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
108
108
|
app.kubernetes.io/name: easyhaproxy
|
|
109
109
|
app.kubernetes.io/instance: ingress
|
|
110
|
-
app.kubernetes.io/version: "6.
|
|
110
|
+
app.kubernetes.io/version: "6.3.0"
|
|
111
111
|
app.kubernetes.io/managed-by: Helm
|
|
112
112
|
spec:
|
|
113
113
|
selector:
|
|
@@ -136,7 +136,7 @@ spec:
|
|
|
136
136
|
- name: easyhaproxy
|
|
137
137
|
securityContext:
|
|
138
138
|
{}
|
|
139
|
-
image: "byjg/easy-haproxy:6.
|
|
139
|
+
image: "byjg/easy-haproxy:6.3.0"
|
|
140
140
|
imagePullPolicy: Always
|
|
141
141
|
ports:
|
|
142
142
|
- name: http
|
|
@@ -189,10 +189,10 @@ kind: IngressClass
|
|
|
189
189
|
metadata:
|
|
190
190
|
name: easyhaproxy
|
|
191
191
|
labels:
|
|
192
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
192
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
193
193
|
app.kubernetes.io/name: easyhaproxy
|
|
194
194
|
app.kubernetes.io/instance: ingress
|
|
195
|
-
app.kubernetes.io/version: "6.
|
|
195
|
+
app.kubernetes.io/version: "6.3.0"
|
|
196
196
|
app.kubernetes.io/managed-by: Helm
|
|
197
197
|
spec:
|
|
198
198
|
controller: byjg.com/easyhaproxy
|
|
@@ -6,10 +6,10 @@ metadata:
|
|
|
6
6
|
name: ingress-easyhaproxy
|
|
7
7
|
namespace: easyhaproxy
|
|
8
8
|
labels:
|
|
9
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
9
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
10
10
|
app.kubernetes.io/name: easyhaproxy
|
|
11
11
|
app.kubernetes.io/instance: ingress
|
|
12
|
-
app.kubernetes.io/version: "6.
|
|
12
|
+
app.kubernetes.io/version: "6.3.0"
|
|
13
13
|
app.kubernetes.io/managed-by: Helm
|
|
14
14
|
---
|
|
15
15
|
# Source: easyhaproxy/templates/clusterrole.yaml
|
|
@@ -19,10 +19,10 @@ metadata:
|
|
|
19
19
|
name: ingress-easyhaproxy
|
|
20
20
|
namespace: easyhaproxy
|
|
21
21
|
labels:
|
|
22
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
22
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
23
23
|
app.kubernetes.io/name: easyhaproxy
|
|
24
24
|
app.kubernetes.io/instance: ingress
|
|
25
|
-
app.kubernetes.io/version: "6.
|
|
25
|
+
app.kubernetes.io/version: "6.3.0"
|
|
26
26
|
app.kubernetes.io/managed-by: Helm
|
|
27
27
|
rules:
|
|
28
28
|
- apiGroups:
|
|
@@ -83,10 +83,10 @@ metadata:
|
|
|
83
83
|
name: ingress-easyhaproxy
|
|
84
84
|
namespace: easyhaproxy
|
|
85
85
|
labels:
|
|
86
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
86
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
87
87
|
app.kubernetes.io/name: easyhaproxy
|
|
88
88
|
app.kubernetes.io/instance: ingress
|
|
89
|
-
app.kubernetes.io/version: "6.
|
|
89
|
+
app.kubernetes.io/version: "6.3.0"
|
|
90
90
|
app.kubernetes.io/managed-by: Helm
|
|
91
91
|
roleRef:
|
|
92
92
|
apiGroup: rbac.authorization.k8s.io
|
|
@@ -105,10 +105,10 @@ metadata:
|
|
|
105
105
|
name: ingress-easyhaproxy
|
|
106
106
|
namespace: easyhaproxy
|
|
107
107
|
labels:
|
|
108
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
108
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
109
109
|
app.kubernetes.io/name: easyhaproxy
|
|
110
110
|
app.kubernetes.io/instance: ingress
|
|
111
|
-
app.kubernetes.io/version: "6.
|
|
111
|
+
app.kubernetes.io/version: "6.3.0"
|
|
112
112
|
app.kubernetes.io/managed-by: Helm
|
|
113
113
|
annotations:
|
|
114
114
|
{}
|
|
@@ -140,10 +140,10 @@ metadata:
|
|
|
140
140
|
name: ingress-easyhaproxy
|
|
141
141
|
namespace: easyhaproxy
|
|
142
142
|
labels:
|
|
143
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
143
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
144
144
|
app.kubernetes.io/name: easyhaproxy
|
|
145
145
|
app.kubernetes.io/instance: ingress
|
|
146
|
-
app.kubernetes.io/version: "6.
|
|
146
|
+
app.kubernetes.io/version: "6.3.0"
|
|
147
147
|
app.kubernetes.io/managed-by: Helm
|
|
148
148
|
spec:
|
|
149
149
|
replicas: 1
|
|
@@ -164,7 +164,7 @@ spec:
|
|
|
164
164
|
- name: easyhaproxy
|
|
165
165
|
securityContext:
|
|
166
166
|
{}
|
|
167
|
-
image: "byjg/easy-haproxy:6.
|
|
167
|
+
image: "byjg/easy-haproxy:6.3.0"
|
|
168
168
|
imagePullPolicy: Always
|
|
169
169
|
ports:
|
|
170
170
|
- name: http
|
|
@@ -217,10 +217,10 @@ kind: IngressClass
|
|
|
217
217
|
metadata:
|
|
218
218
|
name: easyhaproxy
|
|
219
219
|
labels:
|
|
220
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
220
|
+
helm.sh/chart: easyhaproxy-2.0.6
|
|
221
221
|
app.kubernetes.io/name: easyhaproxy
|
|
222
222
|
app.kubernetes.io/instance: ingress
|
|
223
|
-
app.kubernetes.io/version: "6.
|
|
223
|
+
app.kubernetes.io/version: "6.3.0"
|
|
224
224
|
app.kubernetes.io/managed-by: Helm
|
|
225
225
|
spec:
|
|
226
226
|
controller: byjg.com/easyhaproxy
|
|
@@ -41,7 +41,7 @@ Exposes HAProxy on NodePort `31080` (HTTP), `31443` (HTTPS), and `31936` (stats)
|
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
kubectl apply -f \
|
|
44
|
-
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.
|
|
44
|
+
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.3.0/deploy/kubernetes/easyhaproxy-nodeport.yml
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
### ClusterIP (behind a LoadBalancer)
|
|
@@ -50,7 +50,7 @@ Cluster-internal only. Pair with an external cloud LoadBalancer or `kubectl port
|
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
52
|
kubectl apply -f \
|
|
53
|
-
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.
|
|
53
|
+
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.3.0/deploy/kubernetes/easyhaproxy-clusterip.yml
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
### DaemonSet (special cases — requires node label)
|
|
@@ -64,7 +64,7 @@ The node label must be reapplied after any node replacement. Failing to do so wi
|
|
|
64
64
|
kubectl label nodes node-01 "easyhaproxy/node=master"
|
|
65
65
|
|
|
66
66
|
kubectl apply -f \
|
|
67
|
-
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.
|
|
67
|
+
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.3.0/deploy/kubernetes/easyhaproxy-daemonset.yml
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
If you need to configure environment variables (log levels, stats password, etc.), see the [environment variable reference](../reference/environment-variables.md).
|
|
@@ -50,6 +50,7 @@ curl http://myapp.example.com
|
|
|
50
50
|
|
|
51
51
|
```yaml
|
|
52
52
|
stats:
|
|
53
|
+
enabled: true # Optional (default true); false turns stats and the dashboard off
|
|
53
54
|
username: admin # Optional (default "admin")
|
|
54
55
|
password: password # If omitted, stats are public with no password
|
|
55
56
|
port: 1936 # Optional (default 1936)
|
|
@@ -157,7 +157,7 @@ Here's a complete `docker-compose.yml` showing proper ACME configuration:
|
|
|
157
157
|
```yaml
|
|
158
158
|
services:
|
|
159
159
|
easyhaproxy:
|
|
160
|
-
image: byjg/easy-haproxy:6.
|
|
160
|
+
image: byjg/easy-haproxy:6.3.0
|
|
161
161
|
volumes:
|
|
162
162
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
163
163
|
# REQUIRED: Persist Certbot certificates (ACME)
|
|
@@ -13,11 +13,11 @@ single page, with no extra software required.
|
|
|
13
13
|
|
|
14
14
|
## Enabling the dashboard
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
The dashboard is on by default (`HAPROXY_STATS_ENABLE=true`). Set these two variables:
|
|
17
17
|
|
|
18
18
|
| Variable | Purpose |
|
|
19
19
|
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
|
|
20
|
-
| `HAPROXY_PASSWORD` |
|
|
20
|
+
| `HAPROXY_PASSWORD` | Requires a login for the stats endpoint and the dashboard. **Without it, both are served without a login.** |
|
|
21
21
|
| `HAPROXY_STATS_CORS_ORIGIN` | Allows the dashboard page to call the stats API. **Required** — without it the browser blocks the requests and the dashboard shows no data. |
|
|
22
22
|
|
|
23
23
|
The dashboard page is served from port `HAPROXY_STATS_PORT + 10000`, but it fetches data from
|
|
@@ -133,7 +133,8 @@ EasyHAProxy bundles a polished, self-contained dashboard that:
|
|
|
133
133
|
|
|
134
134
|
| Variable | Description | Default |
|
|
135
135
|
|---|---|---|
|
|
136
|
-
| `
|
|
136
|
+
| `HAPROXY_STATS_ENABLE` | Serve stats **and** the dashboard. `false` turns both off. | `true` |
|
|
137
|
+
| `HAPROXY_PASSWORD` | Login password for stats and the dashboard. Without it they are served without a login. | *empty* |
|
|
137
138
|
| `HAPROXY_USERNAME` | Username for the stats endpoint. | `admin` |
|
|
138
139
|
| `HAPROXY_STATS_PORT` | Stats API port. Dashboard is served on this port **+ 10000**. | `1936` |
|
|
139
140
|
| `HAPROXY_STATS_CORS_ORIGIN` | **Required for the dashboard.** Set to the exact origin you use to open the dashboard (e.g. `http://localhost:11936`). Without this the browser blocks stats API calls and the dashboard shows no data. | *empty* |
|
|
@@ -83,7 +83,7 @@ docker cp single.pem easyhaproxy:/etc/easyhaproxy/certs/haproxy/example.com.pem
|
|
|
83
83
|
```yaml
|
|
84
84
|
services:
|
|
85
85
|
easyhaproxy:
|
|
86
|
-
image: byjg/easy-haproxy:6.
|
|
86
|
+
image: byjg/easy-haproxy:6.3.0
|
|
87
87
|
volumes:
|
|
88
88
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
89
89
|
- certs_haproxy:/etc/easyhaproxy/certs/haproxy
|
|
@@ -38,13 +38,14 @@ Valid levels: `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`
|
|
|
38
38
|
|
|
39
39
|
| Flag | Environment Variable | Default | Description |
|
|
40
40
|
|--------------------------------------|-----------------------------|--------------|---------------------------------------------|
|
|
41
|
-
| `--haproxy-
|
|
41
|
+
| `--haproxy-stats-enable BOOL` | `HAPROXY_STATS_ENABLE` | `true` | Serve the stats and dashboard |
|
|
42
|
+
| `--haproxy-password PASSWORD` | `HAPROXY_PASSWORD` | *(none)* | Require this password for stats and dashboard |
|
|
42
43
|
| `--haproxy-username USERNAME` | `HAPROXY_USERNAME` | `admin` | Stats dashboard username |
|
|
43
44
|
| `--haproxy-stats-port PORT` | `HAPROXY_STATS_PORT` | `1936` | Stats dashboard port |
|
|
44
45
|
| `--haproxy-stats-cors-origin ORIGIN` | `HAPROXY_STATS_CORS_ORIGIN` | *(none)* | Allowed CORS origin for the stats dashboard |
|
|
45
46
|
|
|
46
47
|
:::tip
|
|
47
|
-
|
|
48
|
+
Stats and the dashboard are on by default. Without `--haproxy-password` (or `HAPROXY_PASSWORD`) they are served without a login; turn them off with `--haproxy-stats-enable false`.
|
|
48
49
|
:::
|
|
49
50
|
|
|
50
51
|
## ACME / Certbot (SSL certificates)
|
|
@@ -16,15 +16,17 @@ sidebar_label: "Environment Variables"
|
|
|
16
16
|
| EASYHAPROXY_LOG_LEVEL | (Optional) The log level for EasyHAproxy messages. Available: TRACE,DEBUG,INFO,WARN,ERROR,FATAL | DEBUG |
|
|
17
17
|
| CERTBOT_LOG_LEVEL | (Optional) The log level for Certbot messages. Available: TRACE,DEBUG,INFO,WARN,ERROR,FATAL | DEBUG |
|
|
18
18
|
| HAPROXY_LOG_LEVEL | (Optional) The log level for HAProxy messages. Available: TRACE,DEBUG,INFO,WARN,ERROR,FATAL | INFO |
|
|
19
|
+
| HAPROXY_STATS_ENABLE | (Optional) Serve the statistics endpoint and the monitoring dashboard. Set to `false` to turn them off. | `true` |
|
|
19
20
|
| HAPROXY_USERNAME | (Optional) The HAProxy username for the statistics endpoint (used only when `HAPROXY_PASSWORD` is set). | `admin` |
|
|
20
|
-
| HAPROXY_PASSWORD | (Optional) The
|
|
21
|
-
| HAPROXY_STATS_PORT | (Optional) The HAProxy port to the statistics.
|
|
22
|
-
| HAPROXY_STATS_CORS_ORIGIN | Required for the monitoring dashboard to function. Set to the origin you use to open the dashboard (e.g. `http://localhost:11936`). The dashboard page calls the stats API from a different port, so the browser enforces CORS — without this header the dashboard shows no data.
|
|
21
|
+
| HAPROXY_PASSWORD | (Optional) The password for the statistics endpoint and dashboard. **Without it they are served without a login.** | *empty* |
|
|
22
|
+
| HAPROXY_STATS_PORT | (Optional) The HAProxy port to the statistics. The dashboard uses this port + 10000. `false` also turns statistics off. | `1936` |
|
|
23
|
+
| HAPROXY_STATS_CORS_ORIGIN | Required for the monitoring dashboard to function. Set to the origin you use to open the dashboard (e.g. `http://localhost:11936`). The dashboard page calls the stats API from a different port, so the browser enforces CORS — without this header the dashboard shows no data. | *empty* |
|
|
23
24
|
| HAPROXY_CUSTOMERRORS | (Optional) If HAProxy will use custom HTML errors. true/false. | `false` |
|
|
24
25
|
|
|
25
26
|
:::tip HAProxy Stats & Dashboard
|
|
26
|
-
Statistics
|
|
27
|
-
|
|
27
|
+
Statistics and the monitoring dashboard are on by default. Without `HAPROXY_PASSWORD` they are served
|
|
28
|
+
**without a login**, and EasyHAProxy logs a warning at startup. Set a password, or `HAPROXY_STATS_ENABLE=false`
|
|
29
|
+
when the ports can be reached from outside.
|
|
28
30
|
When enabled, the real-time dashboard is available at `http://<host>:<HAPROXY_STATS_PORT + 10000>/`
|
|
29
31
|
(default `http://<host>:11936/`). See the [Monitoring Dashboard guide](../guides/dashboard.md) for details.
|
|
30
32
|
:::
|
|
@@ -48,7 +48,8 @@ Set `service.create: true` and `service.type: NodePort` for most setups. DaemonS
|
|
|
48
48
|
| Value | Description | Default |
|
|
49
49
|
|------------------------------------|-----------------------------------------------------|------------|
|
|
50
50
|
| `easyhaproxy.stats.username` | HAProxy stats username | `admin` |
|
|
51
|
-
| `easyhaproxy.stats.
|
|
51
|
+
| `easyhaproxy.stats.enabled` | Serve the stats endpoint and dashboard. `false` also removes ports 1936/11936 from the pod and Service. | `true` |
|
|
52
|
+
| `easyhaproxy.stats.password` | Login password for the stats endpoint and dashboard. Empty serves them without a login. | `password` |
|
|
52
53
|
| `easyhaproxy.stats.corsOrigin` | Allowed origin for stats API CORS (e.g. `http://node01:11936`). **Required** for the dashboard to load in a browser. | `""` |
|
|
53
54
|
| `easyhaproxy.refresh` | Seconds between service discovery polls | `"10"` |
|
|
54
55
|
| `easyhaproxy.customErrors` | Enable custom HTML error pages | `"true"` |
|
|
@@ -30,7 +30,7 @@ These headers help backend applications:
|
|
|
30
30
|
Some ports on the EasyHAProxy container and in the firewall are required to be open. However, you don't need to expose the other container ports because EasyHAProxy will handle that.
|
|
31
31
|
|
|
32
32
|
- The ports `80` and `443`.
|
|
33
|
-
- If you enable the HAProxy statistics, you must also expose the port defined in `HAPROXY_STATS_PORT` environment variable (default 1936). Statistics are
|
|
33
|
+
- If you enable the HAProxy statistics, you must also expose the port defined in `HAPROXY_STATS_PORT` environment variable (default 1936). Statistics are on by default (`HAPROXY_STATS_ENABLE=false` turns them off) and need `HAPROXY_PASSWORD` to require a login.
|
|
34
34
|
- Every port defined in `easyhaproxy.[definitions].port` also should be exposed.
|
|
35
35
|
|
|
36
36
|
For example:
|
|
@@ -15,12 +15,12 @@ type: application
|
|
|
15
15
|
# This is the chart version. This version number should be incremented each time you make changes
|
|
16
16
|
# to the chart and its templates, including the app version.
|
|
17
17
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
|
18
|
-
version: 2.0.
|
|
18
|
+
version: 2.0.6
|
|
19
19
|
|
|
20
20
|
# This is the version number of the application being deployed. This version number should be
|
|
21
21
|
# incremented each time you make changes to the application. Versions are not expected to
|
|
22
22
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
|
23
23
|
# It is recommended to use it with quotes.
|
|
24
|
-
appVersion: "6.
|
|
24
|
+
appVersion: "6.3.0"
|
|
25
25
|
|
|
26
26
|
icon: https://opensource.byjg.com/img/easy_haproxy_logo.png
|
|
@@ -60,3 +60,10 @@ Create the name of the service account to use
|
|
|
60
60
|
{{- default "default" .Values.serviceAccount.name }}
|
|
61
61
|
{{- end }}
|
|
62
62
|
{{- end }}
|
|
63
|
+
|
|
64
|
+
{{/*
|
|
65
|
+
"true" when the stats page and dashboard are served. Missing from older values means enabled.
|
|
66
|
+
*/}}
|
|
67
|
+
{{- define "easyhaproxy.statsEnabled" -}}
|
|
68
|
+
{{- if dig "enabled" true .Values.easyhaproxy.stats }}true{{ end }}
|
|
69
|
+
{{- end }}
|
|
@@ -64,12 +64,14 @@ spec:
|
|
|
64
64
|
- name: https
|
|
65
65
|
containerPort: 443
|
|
66
66
|
{{ if not .Values.service.create }}hostPort: {{ .Values.binding.ports.https }}{{ end }}
|
|
67
|
+
{{- if include "easyhaproxy.statsEnabled" . }}
|
|
67
68
|
- name: stats
|
|
68
69
|
containerPort: 1936
|
|
69
70
|
{{ if not .Values.service.create }}hostPort: {{ .Values.binding.ports.stats }}{{ end }}
|
|
70
71
|
- name: dashboard
|
|
71
72
|
containerPort: 11936
|
|
72
73
|
{{ if not .Values.service.create }}hostPort: {{ .Values.binding.ports.dashboard }}{{ end }}
|
|
74
|
+
{{- end }}
|
|
73
75
|
{{- range $port := .Values.binding.additionalPorts }}
|
|
74
76
|
- name: extra{{ $port }}
|
|
75
77
|
containerPort: {{ $port }}
|
|
@@ -80,10 +82,12 @@ spec:
|
|
|
80
82
|
env:
|
|
81
83
|
- name: EASYHAPROXY_DISCOVER
|
|
82
84
|
value: kubernetes
|
|
85
|
+
- name: HAPROXY_STATS_ENABLE
|
|
86
|
+
value: {{ include "easyhaproxy.statsEnabled" . | default "false" | quote }}
|
|
83
87
|
- name: HAPROXY_USERNAME
|
|
84
88
|
value: {{ .Values.easyhaproxy.stats.username }}
|
|
85
89
|
- name: HAPROXY_PASSWORD
|
|
86
|
-
value: {{ .Values.easyhaproxy.stats.password }}
|
|
90
|
+
value: {{ .Values.easyhaproxy.stats.password | quote }}
|
|
87
91
|
{{- if .Values.easyhaproxy.stats.corsOrigin }}
|
|
88
92
|
- name: HAPROXY_STATS_CORS_ORIGIN
|
|
89
93
|
value: {{ .Values.easyhaproxy.stats.corsOrigin | quote }}
|
|
@@ -18,12 +18,14 @@ spec:
|
|
|
18
18
|
- name: https
|
|
19
19
|
port: 443
|
|
20
20
|
{{ if eq .Values.service.type "NodePort" }}nodePort: {{ .Values.binding.ports.https }}{{ end }}
|
|
21
|
+
{{- if include "easyhaproxy.statsEnabled" . }}
|
|
21
22
|
- name: stats
|
|
22
23
|
port: 1936
|
|
23
24
|
{{ if eq .Values.service.type "NodePort" }}nodePort: {{ .Values.binding.ports.stats }}{{ end }}
|
|
24
25
|
- name: dashboard
|
|
25
26
|
port: 11936
|
|
26
27
|
{{ if eq .Values.service.type "NodePort" }}nodePort: {{ .Values.binding.ports.dashboard }}{{ end }}
|
|
28
|
+
{{- end }}
|
|
27
29
|
{{- range $port := .Values.binding.additionalPorts }}
|
|
28
30
|
- name: extra{{ $port }}
|
|
29
31
|
port: {{ $port }}
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "easyhaproxy"
|
|
7
|
-
version = "6.
|
|
7
|
+
version = "6.3.0"
|
|
8
8
|
description = "HAProxy label based routing with service discovery for Docker, Swarm, and Kubernetes"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {file = "LICENSE"}
|
|
@@ -10,6 +10,7 @@ from deepdiff import DeepDiff
|
|
|
10
10
|
from functions import (
|
|
11
11
|
Certbot,
|
|
12
12
|
Consts,
|
|
13
|
+
ContainerEnv,
|
|
13
14
|
DaemonizeHAProxy,
|
|
14
15
|
Functions,
|
|
15
16
|
logger_easyhaproxy,
|
|
@@ -84,8 +85,11 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
84
85
|
help="Certbot log level. Also set by CERTBOT_LOG_LEVEL.")
|
|
85
86
|
|
|
86
87
|
# Stats
|
|
88
|
+
parser.add_argument("--haproxy-stats-enable", metavar="BOOL",
|
|
89
|
+
choices=["true", "false"],
|
|
90
|
+
help="Serve the HAProxy stats and dashboard. Also set by HAPROXY_STATS_ENABLE.")
|
|
87
91
|
parser.add_argument("--haproxy-password", metavar="PASSWORD",
|
|
88
|
-
help="
|
|
92
|
+
help="Password for the HAProxy stats and dashboard. Also set by HAPROXY_PASSWORD.")
|
|
89
93
|
parser.add_argument("--haproxy-username", metavar="USERNAME",
|
|
90
94
|
help="HAProxy stats dashboard username. Also set by HAPROXY_USERNAME.")
|
|
91
95
|
parser.add_argument("--haproxy-stats-port", metavar="PORT",
|
|
@@ -149,6 +153,7 @@ def _apply_args_to_env(args: argparse.Namespace) -> None:
|
|
|
149
153
|
"log_level": "EASYHAPROXY_LOG_LEVEL",
|
|
150
154
|
"haproxy_log_level": "HAPROXY_LOG_LEVEL",
|
|
151
155
|
"certbot_log_level": "CERTBOT_LOG_LEVEL",
|
|
156
|
+
"haproxy_stats_enable": "HAPROXY_STATS_ENABLE",
|
|
152
157
|
"haproxy_password": "HAPROXY_PASSWORD",
|
|
153
158
|
"haproxy_username": "HAPROXY_USERNAME",
|
|
154
159
|
"haproxy_stats_port": "HAPROXY_STATS_PORT",
|
|
@@ -185,6 +190,12 @@ def start():
|
|
|
185
190
|
|
|
186
191
|
start_dashboard_server()
|
|
187
192
|
|
|
193
|
+
stats = ContainerEnv.read()["stats"]
|
|
194
|
+
if stats["enabled"] and not stats["password"]:
|
|
195
|
+
logger_easyhaproxy.warning(
|
|
196
|
+
f"HAProxy stats and dashboard are served WITHOUT a login on port {stats['port']}. "
|
|
197
|
+
"Set HAPROXY_PASSWORD to require one, or HAPROXY_STATS_ENABLE=false to turn them off.")
|
|
198
|
+
|
|
188
199
|
processor_obj.save_config(Consts.haproxy_config)
|
|
189
200
|
processor_obj.save_certs(Consts.certs_haproxy)
|
|
190
201
|
certbot_certs_found = processor_obj.get_certbot_hosts()
|
|
@@ -27,13 +27,14 @@ class ContainerEnv:
|
|
|
27
27
|
"ssl_mode": os.getenv("EASYHAPROXY_SSL_MODE").lower() if os.getenv("EASYHAPROXY_SSL_MODE") else 'default'
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
# Stats are on unless disabled; without a password they are served without a login
|
|
31
|
+
env_vars["stats"] = {
|
|
32
|
+
"enabled": os.getenv("HAPROXY_STATS_ENABLE", "true").lower() != "false",
|
|
33
|
+
"username": os.getenv("HAPROXY_USERNAME") if os.getenv("HAPROXY_USERNAME") else "admin",
|
|
34
|
+
"password": os.getenv("HAPROXY_PASSWORD", ""),
|
|
35
|
+
"port": os.getenv("HAPROXY_STATS_PORT") if os.getenv("HAPROXY_STATS_PORT") else "1936",
|
|
36
|
+
"cors_origin": os.getenv("HAPROXY_STATS_CORS_ORIGIN", ""),
|
|
37
|
+
}
|
|
37
38
|
|
|
38
39
|
env_vars["lookup_label"] = os.getenv("EASYHAPROXY_LABEL_PREFIX") if os.getenv(
|
|
39
40
|
"EASYHAPROXY_LABEL_PREFIX") else "easyhaproxy"
|
|
@@ -138,6 +139,8 @@ class ContainerEnv:
|
|
|
138
139
|
# Convert stats
|
|
139
140
|
if 'stats' in yaml_config:
|
|
140
141
|
stats = yaml_config['stats']
|
|
142
|
+
if 'enabled' in stats:
|
|
143
|
+
os.environ['HAPROXY_STATS_ENABLE'] = str(stats['enabled']).lower()
|
|
141
144
|
if 'username' in stats:
|
|
142
145
|
os.environ['HAPROXY_USERNAME'] = str(stats['username'])
|
|
143
146
|
if 'password' in stats:
|