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.
Files changed (244) hide show
  1. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/PKG-INFO +2 -2
  2. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/README.md +1 -1
  3. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/RELEASE.md +2 -1
  4. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/docker-compose.yml +1 -1
  5. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-clusterip.yml +13 -13
  6. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-daemonset.yml +11 -11
  7. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-nodeport.yml +13 -13
  8. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/kubernetes.md +3 -3
  9. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/static.md +1 -0
  10. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/swarm.md +1 -1
  11. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/acme.md +1 -1
  12. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/dashboard.md +4 -3
  13. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/ssl.md +1 -1
  14. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/cli.md +3 -2
  15. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/environment-variables.md +7 -5
  16. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/helm.md +2 -1
  17. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/other.md +1 -1
  18. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/Chart.yaml +2 -2
  19. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/README.md +1 -0
  20. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/_helpers.tpl +7 -0
  21. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/deployment.yaml +5 -1
  22. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/service.yaml +2 -0
  23. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/values.yaml +1 -0
  24. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/pyproject.toml +1 -1
  25. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easyhaproxy/main.py +12 -1
  26. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/container_env.py +10 -7
  27. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/haproxy.cfg.j2 +1 -1
  28. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_containerenv.py +51 -0
  29. easyhaproxy-6.3.0/tests/test_stats.py +70 -0
  30. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-acme.yml +1 -1
  31. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-portainer.yml +1 -1
  32. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/cloudflare.yml +1 -1
  33. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/ip-whitelist.yml +1 -1
  34. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/jwt-validator.yml +1 -1
  35. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/plugins-combined.yml +1 -1
  36. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/service.yml +1 -1
  37. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/service_tls.yml +1 -1
  38. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/uv.lock +1 -1
  39. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.dockerignore +0 -0
  40. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.github/FUNDING.yml +0 -0
  41. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.github/dependabot.yml +0 -0
  42. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.github/workflows/build.yml +0 -0
  43. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.gitignore +0 -0
  44. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.python-version +0 -0
  45. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.run/pytest in tests.run.xml +0 -0
  46. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.vscode/launch.json +0 -0
  47. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/.vscode/settings.json +0 -0
  48. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/LICENSE +0 -0
  49. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/Makefile +0 -0
  50. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/build-multiarch.sh +0 -0
  51. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/Dockerfile +0 -0
  52. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/entrypoint.sh +0 -0
  53. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/conf.d/README.md +0 -0
  54. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/400.http +0 -0
  55. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/403.http +0 -0
  56. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/408.http +0 -0
  57. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/500.http +0 -0
  58. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/502.http +0 -0
  59. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/503.http +0 -0
  60. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/504.http +0 -0
  61. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/www/dashboard.html +0 -0
  62. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/deploy/kubernetes/README.md +0 -0
  63. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/concepts/_category_.json +0 -0
  64. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/concepts/index.md +0 -0
  65. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/concepts/limitations.md +0 -0
  66. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/dashboard.png +0 -0
  67. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/dashboard_login.png +0 -0
  68. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/dashboard_thumbnail.png +0 -0
  69. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_digitalocean.png +0 -0
  70. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_docker.png +0 -0
  71. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_dokku.png +0 -0
  72. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_helm.png +0 -0
  73. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_kubernetes.png +0 -0
  74. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_logo.png +0 -0
  75. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_microk8s.png +0 -0
  76. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_static.png +0 -0
  77. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/easyhaproxy_swarm.png +0 -0
  78. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/_category_.json +0 -0
  79. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/docker.md +0 -0
  80. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/index.md +0 -0
  81. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/getting-started/native.md +0 -0
  82. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/_category_.json +0 -0
  83. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/digitalocean.md +0 -0
  84. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/dokku.md +0 -0
  85. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/helm.md +0 -0
  86. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/microk8s.md +0 -0
  87. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/plugin-development.md +0 -0
  88. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/guides/plugins.md +0 -0
  89. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/icons.xcf +0 -0
  90. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/logo.png +0 -0
  91. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/logo.xcf +0 -0
  92. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/_category_.json +0 -0
  93. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/container-labels.md +0 -0
  94. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/_category_.json +0 -0
  95. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/cleanup.md +0 -0
  96. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/cloudflare.md +0 -0
  97. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/deny-pages.md +0 -0
  98. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/fastcgi.md +0 -0
  99. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/ip-whitelist.md +0 -0
  100. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/plugins/jwt-validator.md +0 -0
  101. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/reference/volumes.md +0 -0
  102. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-docker-ssl.png +0 -0
  103. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-docker.png +0 -0
  104. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-kubernetes-letsencrypt.png +0 -0
  105. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-kubernetes.png +0 -0
  106. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-static.png +0 -0
  107. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/docs/video-tcp-mysql.png +0 -0
  108. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/.helmignore +0 -0
  109. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/LICENSE +0 -0
  110. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/clusterrole.yaml +0 -0
  111. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/clusterrolebinding.yaml +0 -0
  112. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/ingressclass.yaml +0 -0
  113. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/pvc.yaml +0 -0
  114. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/serviceaccount.yaml +0 -0
  115. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/helm/easyhaproxy/values.schema.json +0 -0
  116. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/scripts/bump-version.sh +0 -0
  117. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easyhaproxy/__init__.py +0 -0
  118. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easymapping/__init__.py +0 -0
  119. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easymapping/config_generator.py +0 -0
  120. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/easymapping/label_handler.py +0 -0
  121. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/__init__.py +0 -0
  122. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/certbot.py +0 -0
  123. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/consts.py +0 -0
  124. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/filter.py +0 -0
  125. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/functions.py +0 -0
  126. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/haproxy.py +0 -0
  127. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/functions/loggers.py +0 -0
  128. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/__init__.py +0 -0
  129. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/__init__.py +0 -0
  130. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/cleanup.py +0 -0
  131. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/cloudflare.py +0 -0
  132. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/deny_pages.py +0 -0
  133. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/fastcgi.py +0 -0
  134. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/ip_whitelist.py +0 -0
  135. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/builtin/jwt_validator.py +0 -0
  136. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/interface.py +0 -0
  137. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/manager.py +0 -0
  138. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/plugins/types.py +0 -0
  139. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/__init__.py +0 -0
  140. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/docker.py +0 -0
  141. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/interface.py +0 -0
  142. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/kubernetes.py +0 -0
  143. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/static.py +0 -0
  144. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/processor/swarm.py +0 -0
  145. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/bind.j2 +0 -0
  146. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/frontend-mode-http.j2 +0 -0
  147. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/frontend-mode-tcp.j2 +0 -0
  148. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/ssl_default.j2 +0 -0
  149. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/ssl_loose.j2 +0 -0
  150. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/src/templates/ssl_strict.j2 +0 -0
  151. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/__init__.py +0 -0
  152. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/conftest.py +0 -0
  153. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/docker.txt +0 -0
  154. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/no-services.txt +0 -0
  155. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-fcgi.txt +0 -0
  156. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-letsencrypt.txt +0 -0
  157. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-multi-containers.txt +0 -0
  158. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-multiple-hosts.txt +0 -0
  159. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-redirect-ssl.txt +0 -0
  160. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services-tcp.txt +0 -0
  161. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/services.txt +0 -0
  162. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/ssl-loose.txt +0 -0
  163. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/ssl-strict.txt +0 -0
  164. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/static-cors.txt +0 -0
  165. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/expected/static.txt +0 -0
  166. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/00_haproxy.cfg +0 -0
  167. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/10_haproxy.cfg +0 -0
  168. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/no-services +0 -0
  169. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/run_bash.sh +0 -0
  170. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services +0 -0
  171. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-changed-label +0 -0
  172. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-clone-to-ssl +0 -0
  173. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-fcgi +0 -0
  174. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-letsencrypt +0 -0
  175. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-multi-containers +0 -0
  176. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-multiple-hosts +0 -0
  177. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-redirect-ssl +0 -0
  178. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-tcp +0 -0
  179. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-cloudflare +0 -0
  180. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-deny-pages +0 -0
  181. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-ip-whitelist +0 -0
  182. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-jwt-validator +0 -0
  183. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/services-with-multiple-plugins +0 -0
  184. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/static.yml +0 -0
  185. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/static_cors.yml +0 -0
  186. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/fixtures/static_multi_domain.yml +0 -0
  187. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_certbot.py +0 -0
  188. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_certbot_haproxy_config.py +0 -0
  189. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_daemonize.py +0 -0
  190. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_docker.py +0 -0
  191. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_functions.py +0 -0
  192. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_kubernetes_processor.py +0 -0
  193. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_labels.py +0 -0
  194. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_parser.py +0 -0
  195. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_plugins.py +0 -0
  196. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests/test_static.py +0 -0
  197. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/conftest.py +0 -0
  198. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/AGENTS.md +0 -0
  199. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/README.md +0 -0
  200. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-acme-e2e.yml +0 -0
  201. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-changed-label.yml +0 -0
  202. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-cloudflare.yml +0 -0
  203. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-ip-whitelist.yml +0 -0
  204. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-jwt-validator.yml +0 -0
  205. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-multi-containers.yml +0 -0
  206. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-php-fpm.yml +0 -0
  207. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-plugins-combined.yml +0 -0
  208. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-portainer-app-example.yml +0 -0
  209. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-proxy-headers.yml +0 -0
  210. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose.yml +0 -0
  211. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/pebble-config.json +0 -0
  212. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/README.md +0 -0
  213. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/index.php +0 -0
  214. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/info.php +0 -0
  215. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/test-path-info.php +0 -0
  216. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/Dockerfile +0 -0
  217. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/README.md +0 -0
  218. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/server.py +0 -0
  219. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/generate-keys.sh +0 -0
  220. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/.gitignore +0 -0
  221. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/README.md +0 -0
  222. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/jwt-validator-secret-example.yml +0 -0
  223. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/setup-cluster.sh +0 -0
  224. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/teardown-cluster.sh +0 -0
  225. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/README.md +0 -0
  226. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-basic.yml +0 -0
  227. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-certbot.yml +0 -0
  228. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-deny-pages.yml +0 -0
  229. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-jwt-validator.yml +0 -0
  230. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/static/docker-compose.yml +0 -0
  231. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/README.md +0 -0
  232. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/cloudflare.yml +0 -0
  233. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/easyhaproxy.yml +0 -0
  234. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/ip-whitelist.yml +0 -0
  235. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/jwt-validator.yml +0 -0
  236. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/plugins-combined.yml +0 -0
  237. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/portainer.yml +0 -0
  238. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/swarm/services.yml +0 -0
  239. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_docker_compose.py +0 -0
  240. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_kubernetes.py +0 -0
  241. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_proxy_headers.py +0 -0
  242. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_static.py +0 -0
  243. {easyhaproxy-6.2.0 → easyhaproxy-6.3.0}/tests_e2e/test_swarm.py +0 -0
  244. {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.2.0
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
  [![HAProxy Monitor](docs/dashboard_thumbnail.png)](docs/guides/dashboard.md)
115
115
 
116
- A real-time dashboard is available at `http://<host>:11936/` whenever `HAPROXY_PASSWORD` is set —
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
  [![HAProxy Monitor](docs/dashboard_thumbnail.png)](docs/guides/dashboard.md)
68
68
 
69
- A real-time dashboard is available at `http://<host>:11936/` whenever `HAPROXY_PASSWORD` is set —
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.2.0` (as of Chart.yaml)
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 |
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  easyhaproxy:
3
- image: byjg/easy-haproxy:6.2.0
3
+ image: byjg/easy-haproxy:6.3.0
4
4
  volumes:
5
5
  - /var/run/docker.sock:/var/run/docker.sock
6
6
  - certs_certbot:/etc/easyhaproxy/certs/certbot
@@ -6,10 +6,10 @@ metadata:
6
6
  name: ingress-easyhaproxy
7
7
  namespace: easyhaproxy
8
8
  labels:
9
- helm.sh/chart: easyhaproxy-2.0.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.5
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.2.0"
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.2.0"
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.5
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.2.0"
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.2.0/deploy/kubernetes/easyhaproxy-nodeport.yml
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.2.0/deploy/kubernetes/easyhaproxy-clusterip.yml
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.2.0/deploy/kubernetes/easyhaproxy-daemonset.yml
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)
@@ -28,7 +28,7 @@ docker network create -d overlay --attachable easyhaproxy
28
28
  ```yaml
29
29
  services:
30
30
  haproxy:
31
- image: byjg/easy-haproxy:6.2.0
31
+ image: byjg/easy-haproxy:6.3.0
32
32
  volumes:
33
33
  - /var/run/docker.sock:/var/run/docker.sock
34
34
  deploy:
@@ -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.2.0
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
- Two environment variables are required:
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` | Enables the stats endpoint and the dashboard. |
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
- | `HAPROXY_PASSWORD` | Enables stats **and** the dashboard. Required. | *empty* |
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.2.0
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-password PASSWORD` | `HAPROXY_PASSWORD` | *(disabled)* | Enable stats dashboard with this password |
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
- The stats dashboard is only enabled when `--haproxy-password` (or `HAPROXY_PASSWORD`) is set.
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 HAProxy password to the statistics endpoint. Stats are **disabled** unless this is defined. | *empty* |
21
- | HAPROXY_STATS_PORT | (Optional) The HAProxy port to the statistics. If set to `false`, disable statistics. Only applies when `HAPROXY_PASSWORD` is defined. | `1936` |
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. Only applies when `HAPROXY_PASSWORD` is defined. | *empty* |
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 are only configured when `HAPROXY_PASSWORD` is set. Without a password, neither the
27
- stats endpoint nor the monitoring dashboard is generated.
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.password` | HAProxy stats password. **Required** to enable the stats endpoint and dashboard. | `password` |
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 only generated when you set `HAPROXY_PASSWORD`.
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.5
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.2.0"
24
+ appVersion: "6.3.0"
25
25
 
26
26
  icon: https://opensource.byjg.com/img/easy_haproxy_logo.png
@@ -50,6 +50,7 @@ binding:
50
50
 
51
51
  easyhaproxy:
52
52
  stats:
53
+ enabled: true
53
54
  username: admin
54
55
  password: password
55
56
  refresh: "10"
@@ -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 }}
@@ -79,6 +79,7 @@ affinity: {}
79
79
 
80
80
  easyhaproxy:
81
81
  stats:
82
+ enabled: true # false: no stats page or dashboard, and ports 1936/11936 are not exposed
82
83
  username: admin
83
84
  password: password
84
85
  corsOrigin: ""
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "easyhaproxy"
7
- version = "6.2.0"
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="Enable HAProxy stats dashboard with this password. Also set by HAPROXY_PASSWORD.")
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
- if os.getenv("HAPROXY_PASSWORD"):
31
- env_vars["stats"] = {
32
- "username": os.getenv("HAPROXY_USERNAME") if os.getenv("HAPROXY_USERNAME") else "admin",
33
- "password": os.getenv("HAPROXY_PASSWORD"),
34
- "port": os.getenv("HAPROXY_STATS_PORT") if os.getenv("HAPROXY_STATS_PORT") else "1936",
35
- "cors_origin": os.getenv("HAPROXY_STATS_CORS_ORIGIN", ""),
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: