Skip to content

fix: add proper type to hosts in haproxy libraries#383

Merged
Thanhphan1147 merged 1 commit intocanonical:mainfrom
skatsaounis:fix-hosts-type
Apr 1, 2026
Merged

fix: add proper type to hosts in haproxy libraries#383
Thanhphan1147 merged 1 commit intocanonical:mainfrom
skatsaounis:fix-hosts-type

Conversation

@skatsaounis
Copy link
Copy Markdown
Contributor

@skatsaounis skatsaounis commented Mar 3, 2026

Applicable spec:

Overview

Rationale

Juju Events Changes

Module Changes

Library Changes

Checklist

@skatsaounis skatsaounis requested a review from a team as a code owner March 3, 2026 11:08
Comment thread haproxy-operator/lib/charms/haproxy/v1/haproxy_route_tcp.py
@skatsaounis
Copy link
Copy Markdown
Contributor Author

@seb4stien @Thanhphan1147 thank you for your patience. This is no longer blocked. I addressed the comments and it is back to you to review it.

Copy link
Copy Markdown
Collaborator

@Thanhphan1147 Thanhphan1147 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@seb4stien
Copy link
Copy Markdown
Contributor

@Thanhphan1147 I leave it to you to merge.

@Thanhphan1147
Copy link
Copy Markdown
Collaborator

Hi @skatsaounis, since we have a signed commit requirement on our repos, please allow me to create a duplicate PR and I'll close this one once the duplicated one has been merged

@github-actions
Copy link
Copy Markdown
Contributor

Test results for commit 2d41e87

Test coverage for 2d41e87

Name                                       Stmts   Miss Branch BrPart  Cover   Missing
--------------------------------------------------------------------------------------
lib/charms/haproxy/v0/ddos_protection.py     154     51     34      8    64%   157-174, 183-187, 288, 316-318, 323, 326-330, 342-344, 381, 387, 393, 396, 424, 495-498, 510-529
src/charm.py                                  21      0      0      0   100%
src/state.py                                  43      0      0      0   100%
--------------------------------------------------------------------------------------
TOTAL                                        218     51     34      8    73%

Static code analysis report

Run started:2026-03-31 11:33:13.715850+00:00

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 333
  Total lines skipped (#nosec): 0
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 0

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@github-actions
Copy link
Copy Markdown
Contributor

Test results for commit 2d41e87

Test coverage for 2d41e87

Name                                         Stmts   Miss Branch BrPart  Cover   Missing
----------------------------------------------------------------------------------------
lib/charms/haproxy/v0/ddos_protection.py       154     42     34      3    72%   157-174, 183-187, 265, 284, 415-418, 422-424, 459-478, 514-529
lib/charms/haproxy/v0/spoe_auth.py             158     55     32      2    59%   203, 304-306, 315, 354-381, 392-402, 441-442, 459-472, 484-501, 522-525, 529-531
lib/charms/haproxy/v1/haproxy_route_tcp.py     385    153     78      8    56%   209, 212, 281, 290-293, 297-300, 318-321, 336, 342-347, 447, 452, 829-832, 836, 863-874, 897-900, 904-906, 926-928, 1042-1083, 1087-1093, 1097, 1166-1195, 1266-1305, 1335-1337, 1362-1364, 1386-1390, 1409-1411, 1429-1431, 1438-1444, 1452-1454, 1462-1463, 1474-1481, 1494-1505, 1513-1534, 1546-1547, 1558-1559, 1570-1573, 1584-1585, 1614-1623, 1639-1642, 1658-1669, 1685-1688, 1706-1717, 1728-1729, 1737-1738, 1746-1747, 1758-1761
lib/charms/haproxy/v2/haproxy_route.py         385     53     98     26    82%   181, 257, 266-269, 294-297, 318-323, 673-674, 860->exit, 867, 893-904, 927-930, 934-936, 955-957, 1129-1135, 1139, 1336->1338, 1340->1342, 1342->1344, 1344->1346, 1346->1348, 1348->1351, 1386, 1394, 1399, 1402, 1427, 1455, 1459, 1463, 1486, 1506, 1515-1516, 1518->exit, 1554-1556, 1576, 1590, 1595-1597
src/charm.py                                   286     69     78     11    71%   100, 228, 236-252, 257, 262, 279, 290, 296-297, 331-351, 455-463, 491-504, 517-522, 531, 544-545, 552, 562, 572, 578-584, 600, 650-653, 659->658, 672-675
src/haproxy.py                                 127     31      6      2    75%   110-116, 136-158, 268-269, 272, 280-286, 314, 344-355, 367-369, 379-380
src/http_interface.py                           73     25      4      0    62%   74, 83, 92, 106-108, 126, 138, 150, 162, 170-175, 187, 194, 202, 217-227
src/state/charm_state.py                        77     15     14      4    79%   93-95, 100-101, 104, 145-150, 159, 208-210, 222-223
src/state/ddos_protection.py                    39      0      2      0   100%
src/state/exception.py                           1      0      0      0   100%
src/state/ha.py                                 30      1      2      1    94%   50
src/state/haproxy_route.py                     197     14     60      5    90%   132, 161-170, 194, 227, 297, 346-348, 365
src/state/haproxy_route_tcp.py                 120     17     42      1    80%   92-94, 109->112, 147-160
src/state/ingress.py                            38      0      4      0   100%
src/state/ingress_per_unit.py                   32      0      4      0   100%
src/state/spoe_auth.py                          26      2      2      0    93%   63-64
src/state/tls.py                                39      7     12      4    78%   74, 77-78, 127-135, 141-142
src/state/validation.py                         46     23      8      1    44%   66-67, 71-98
src/tls_relation.py                             61      3     14      3    92%   86->85, 118-128, 140->142
----------------------------------------------------------------------------------------
TOTAL                                         2274    510    494     71    74%

Static code analysis report

Working... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Run started:2026-03-31 11:44:42.407296+00:00

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 10203
  Total lines skipped (#nosec): 13
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 10

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@github-actions
Copy link
Copy Markdown
Contributor

Test results for commit 2d41e87

Test coverage for 2d41e87

Name                                    Stmts   Miss  Cover
-----------------------------------------------------------
haproxy_route_policy/__init__.py            0      0   100%
haproxy_route_policy/settings.py           28      1    96%
haproxy_route_policy/test_settings.py       4      0   100%
haproxy_route_policy/urls.py                5      0   100%
manage.py                                  11      2    82%
policy/__init__.py                          0      0   100%
policy/apps.py                              3      0   100%
policy/db_models.py                        49      2    96%
policy/middleware.py                       16      4    75%
policy/migrations/0001_initial.py           7      0   100%
policy/migrations/0002_rule.py              5      0   100%
policy/migrations/__init__.py               0      0   100%
policy/rule_engine.py                      36      1    97%
policy/serializers.py                      25      0   100%
policy/tests/__init__.py                    0      0   100%
policy/tests/test_auth.py                  36     20    44%
policy/tests/test_models.py                85      0   100%
policy/tests/test_rule_engine.py          117      0   100%
policy/tests/test_views.py                201      0   100%
policy/urls.py                              3      0   100%
policy/views.py                            83      6    93%
-----------------------------------------------------------
TOTAL                                     714     36    95%

Static code analysis report

Run started:2026-03-31 11:31:48.269899+00:00

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 1556
  Total lines skipped (#nosec): 1
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 0

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@github-actions
Copy link
Copy Markdown
Contributor

Test results for commit 2d41e87

Test coverage for 2d41e87

Name                               Stmts   Miss Branch BrPart  Cover   Missing
------------------------------------------------------------------------------
src/charm.py                          45      9      2      0    77%   65-91, 96-98
src/haproxy_spoe_auth_service.py      44     16      2      0    61%   56-64, 76-82, 93-117
src/state.py                          55     15      6      1    67%   64-66, 79, 125-146
------------------------------------------------------------------------------
TOTAL                                144     40     10      1    68%

Static code analysis report

Run started:2026-03-31 11:32:56.366524

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 409
  Total lines skipped (#nosec): 1
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 1

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@skatsaounis
Copy link
Copy Markdown
Contributor Author

@Thanhphan1147 I fixed it here instead 🙂

@Thanhphan1147 Thanhphan1147 enabled auto-merge (squash) April 1, 2026 11:43
@Thanhphan1147 Thanhphan1147 merged commit 285102a into canonical:main Apr 1, 2026
89 checks passed
@skatsaounis skatsaounis deleted the fix-hosts-type branch April 1, 2026 13:26
Thanhphan1147 added a commit that referenced this pull request Apr 24, 2026
* Implement request API

* update model validation before save and add unit tests

* use environment variables for secret key

* ISD-5226 update docs landing pages (#387)

* update how-to landing page

* Update docs/how-to/index.md

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* add summary for each section

* Update docs/how-to/index.md

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Update docs/how-to/index.md

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Update docs/how-to/index.md

Co-authored-by: Erin Conley <erin.conley@canonical.com>

---------

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* ruff format

* add secret key for testing

* remove port attribute from test

* add requirements.txt for testing

* reintroduce port field

* Add change artifact

* run lint with uv

* add unit testing

* remove custom test

* update migration

* Wrap creation under `transaction.atomic`

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* remove unused code

* minor fixes to settings

* use django serializer

* update gitignore

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* update view to use django rest

* remove python-version

* update gitignore

* add missing license headers

* Add rules engine

* update migration

* update view

* fix lint

* remove extra tests

* add validation and update tests

* update view

* remove to_dict

* use serializer for get

* use serializer

* remove unused tests

* use filter for delete query

* update tests and move validation to serializer class

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* remove license header from generated files

* Update haproxy-route-policy/policy/migrations/0001_initial.py

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Revert "Update haproxy-route-policy/policy/migrations/0001_initial.py"

This reverts commit 10a2708.

* ignore migration files for license header

* add change artifact

* add envlist to tox commands

* update envlist

* convert pk to uuid for requests

* Add guard against mal-formed uuid and parameter. Add logging configs,  Add middleware to guard against db connection errors

* add validators for port and paths

* add tests for validators

* add note for migration

* remove unused imports

* add static tests

* guard rules API against pk

* update view, middle wares and tests

* chore(deps): update dependency haproxy-spoe-auth to v75 (#406)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* refactor tests by parametrizing

* chore(deps): update dependency haproxy-spoe-auth to v77 (#408)

* chore(deps): update dependency haproxy-spoe-auth to v77

* fix(tests): Fix root integration tests by ignoring route-policy specific tests.

* chore: fmt files

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ali Ugur <ali.ugur@canonical.com>

* group tests by parameterizing

* refactor Rule model to rename attribute from "value" to "parameters"

* update test name

* update naming

* Add coverage-report as part of unit test suite

* update env list

* implement rule evaluation

* add change artifact

* update imports

* update naming

* update rules matching logic

* update tests

* save request using serializer with the correct instace

* Haproxy route policy rules api (#400)

* group tests

* update formatting

* Add authentication configuration for django-restframework and adapt tests for auth

* add change artifact

* Add token urls

* switch DB engine to postgres

* add change artifact

* Add snap files

* fix build issue

* update module-name

* set secret key as default, drop fetching from file

* update readme, fix secret key generation

* add change artifact

* add build snap workflow

* use upload-artifact v4

* update path

* add checkout step

* change working dir for build action

* sparse checkout the policy directory

* debug

* debug path

* remove debug

* update scripts to guard against empty DB config values and update allowed-hosts to be more restrictive

* update docs link

* fix(deps): update all non-major dependencies (#381)

* fix(deps): update all non-major dependencies

* Test a fix for the RTD workflows

* Update Python version to 3.12

* Revert change to uses key

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Erin Conley <erin.conley@canonical.com>
Co-authored-by: swetha1654 <swetha.swaminathan@canonical.com>

* fix(deps): update dependency cryptography to v46.0.6 [security] (#418)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Haproxy route policy rules matching (#401)

* Implement request API

* update model validation before save and add unit tests

* use environment variables for secret key

* ruff format

* add secret key for testing

* remove port attribute from test

* add requirements.txt for testing

* reintroduce port field

* Add change artifact

* run lint with uv

* add unit testing

* remove custom test

* update migration

* Wrap creation under `transaction.atomic`

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* remove unused code

* minor fixes to settings

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* use django serializer

* update gitignore

* update view to use django rest

* remove python-version

* update gitignore

* add missing license headers

* Add rules engine

* update migration

* update view

* fix lint

* remove extra tests

* add validation and update tests

* update view

* remove to_dict

* use serializer for get

* use serializer

* remove unused tests

* use filter for delete query

* update tests and move validation to serializer class

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update haproxy-route-policy/policy/migrations/0001_initial.py

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Revert "Update haproxy-route-policy/policy/migrations/0001_initial.py"

This reverts commit 10a2708.

* ignore migration files for license header

* remove license header from generated files

* add change artifact

* add envlist to tox commands

* update envlist

* convert pk to uuid for requests

* Add guard against mal-formed uuid and parameter. Add logging configs,  Add middleware to guard against db connection errors

* add validators for port and paths

* add tests for validators

* add note for migration

* ruff format

* remove unused imports

* add static tests

* guard rules API against pk

* update view, middle wares and tests

* refactor tests by parametrizing

* group tests by parameterizing

* refactor Rule model to rename attribute from "value" to "parameters"

* update test name

* update naming

* Add coverage-report as part of unit test suite

* update env list

* implement rule evaluation

* add change artifact

* update imports

* update naming

* update rules matching logic

* update tests

* save request using serializer with the correct instace

* group tests

* update formatting

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ali UĞUR <39213991+alithethird@users.noreply.github.com>

* chore: update Copilot collections to v0.8.0 (#419)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* use python3 to run manage script instead of uv

* bump snap version

* add spread test workflow (#420)

* fix: add proper type to hosts in haproxy libraries (#383)

* update docs for postgresql container

* Update haproxy-route-policy/snap/hooks/configure

Co-authored-by: Ali UĞUR <39213991+alithethird@users.noreply.github.com>

* address comments

* add tests for snap

* shell script lint fix

* update manage script

* revert script change

* fix shellcheck errors

* Fix drifts from main

* remove 10s sleep

* wait for snap service to settle

* set config to start the snap

* add MVP for haproxy-roite-policy-operator

* simplify charm mbp

* properly handles postgresql charm state and fix lint errors

* fix unit and reformat tox

* update snap config dict

* update tox config and add integration test

* add change artifact

* run integration tests for haproxy-route-policy-operator

* add secret handling, update tests

* ignore bandit rules

* add action, fix issue with command run

* add change artifact

* add upsertsuperuser command

* block until peer relation and set a value after creating a secret to trigger peer unit reconcile

* add peer relation definition and only run migration/update user if leader

* move juju secret handling to charm state, add charm state for policy related values, add unit tests

* cast to string before dumping to json

* add change artifact

* bootstrap lib

* update fetch logic for admin credentials, update tests, update juju version to 3.6

* move juju secret handling to charm state, add charm state for policy related values, add unit tests

* cast to string before dumping to json

* add change artifact

* update handling of credentials

* bootstrap lib

* bootstrap haproxy-route-policy lib

* update lib, fix test issues

* add autoapprove logic and add integration tests with any-charm

* update uv.lock

* wait for complete relation data

* update charm and requirer

* update integration tests

* remove unused lib and update tests and lib

* remove haproxy-route from charm-libs

* run integration test for haproxy-route-policy

* ruff fmt

* add change artifact

* update change artifacts

* fix failing tests

* explicitly hint types, update uv lock, update tests

* remove docstring

* update lib patch version

* update business logic

* update logic to send haproxy route policy data to provider

* update password length checks

* don't use self-hosted runner for unit tests

* update unit test wf

* update runs-on tag

* rename

* update unit tests

* query the API to refresh backend requests

* remove merge errors

* fix rendering bug for gprc backends

* add test for grpc backend rendering

* thin out the client

* add relation interface, add global test

* add relation interface

* move exception handling to a separate state module, refactor charm code

* small fixes

* fix unit tests

* add static assets

* update db schema, add static files to gunicorn, update business logic

* update custom view in admin panel, fix small issue with model validation

* Update haproxy-route-policy-operator/charmcraft.yaml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix issues in PR

* minor fixes

* update method and add change artifact

* expose policy provider via a backend, update tests

* add trusted origins to snap config

* set secure proxy header for haproxy

* update template, conditionally render haproxy-route-policy backend when relation is present

* add change artifact

* add change artifact

* Add comments for django DEBUG mode

* Add change artifact

* add logic to set allowed-hosts if haproxy has sent a proxied-endpoint

* send policy hostname via relation data

* update scheme in hostname

* update lib for serialization and update logic

* fix merge conflicts

* resolve merge conflicts

* resolve merge conflicts, update snap, remove unused conf

* resolve conflicts

* add change artifact

* update lib schema to not send a HttpUrl but send the hostname directly

* update lib schema to not send a HttpUrl but send the hostname directly

* rework charm logic to avoid dead zones

* update test

* add context docstring

* move whitenoise and remove debug

* update serving static files, disabling debug mode

* correctly use gunicorn bin

* hook update status to the reconcile loop

* add change artifact

* Add an action to refresh backend requests on-demand

* update integration tests

* fix typo

* fix missing import

---------

Co-authored-by: Erin Conley <erin.conley@canonical.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ali Ugur <ali.ugur@canonical.com>
Co-authored-by: swetha1654 <swetha.swaminathan@canonical.com>
Co-authored-by: Ali UĞUR <39213991+alithethird@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants