Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog.

Each revision is versioned by the date of the revision.

2026-10-12

  • Fixed Traefik retaining a stale CA trust pool when certificates from an existing receive-ca-cert relation were restored during Pebble readiness.

  • Renamed the misspelled csr-subject-atttributes config option to csr-subject-attributes.

2026-10-07

  • Added a scheduled close_stale.yaml GitHub Actions workflow to automatically mark inactive issues and pull requests as stale and close them after a grace period.

2026-10-06

  • Fixed certificate signing requests being wiped from certificates interface relation data when a hook (e.g. config-changed) runs before the traefik Pebble service reports ready, such as right after a charm upgrade.

2026-10-05

  • Switched the logging integration from LokiPushApiConsumer to LogForwarder, so the loki_push_api relation now forwards the workload’s logs to related Loki endpoints using Pebble log targets instead of only reading the interface.

  • Removed the write of the workload’s logs to /var/log/traefik.log. The service command used to tee the output to that file as well as stdout, but tee was called without -a, so the file was truncated on every restart instead of growing without bound. Logs remain available through juju exec --unit traefik/0 -- pebble logs traefik and kubectl logs.

  • Fixed CI breakage from dev/docs tooling version bumps: resolved new pyright 1.1.414 findings in the ingress, ingress_per_unit, and ingress v2 charm libraries, silenced sphinx_llm warnings for unsupported meta/mermaid nodes, and reworded two docs pages to clear vale spell-check false positives.

2026-10-01

  • Set a blocked status that explains how to run juju trust when the charm is deployed without --trust, instead of going into error state.

  • Fixed deferred ingress events repeatedly failing hooks when relation data changed before replay. Ingress relations are now processed once through the existing reconciliation path, which cleans up invalid configuration and reports status without trapping the event in a replay loop.

2026-09-28

  • Fixed invalid routing_mode values putting the unit into error instead of blocked status.

2026-09-08

  • Replaced some external charms in integration tests with an any-charm as ingress requirer.

2026-09-02

  • Added csr-subject-atttributes config to include configurable CSR subject fields such as C, ST, L, O, OU, CN, and emailAddress in certificate requests.

2026-08-26

  • Added get-loadbalancer-ip Juju action to expose the external LoadBalancer address.

2026-08-25

  • Fixed several documentation issues.

  • Fixed typing issue in TraefikRouteRequirer.__init__: relation parameter is now Optional[Relation] with a default of None.

  • Stabilized the test_charm_trace_collection unit test by isolating it from the shared charm tracing buffer file.

  • Updated the TLS integration test to verify HTTPS with the self-signed provider’s CA certificate and stronger post-integration waits.

2026-08-19

  • Updated Sphinx Stack from 1.4.1 to 2.0 with the following changes:

    • Migrated from .sphinx/ to _dev/ directory structure

    • Migrated virtual environment from .sphinx/venv to .venv

    • Added sphinx-rerediraffe extension for improved redirects

    • Added sphinx-llm extension for LLM documentation support

    • Updated canonical-sphinx to 0.6.0

    • Fixed broken Rockcraft documentation link

  • Updated the documentation home page to the mature home page pattern, improved the how-to index organization, and reclassified the local-CA TLS page as a how-to guide.

2026-08-17

  • Fixed charm incorrectly reporting active status when the LoadBalancer Service has no external IP, even with external_hostname configured. The charm now reports waiting status until the LB obtains an address.

2026-08-14

  • Preserved the TLS private key when the certificates relation is removed so re-adding the relation reuses the existing key instead of requesting a new certificate.

2026-08-12

  • Migrated repository CI workflows from observability-owned reusable workflows to operator-workflows, and removed the unused Tiobe scan workflow.

2026-07-22

  • Updated the Grafana dashboard to the official Traefik Kubernetes dashboard using Traefik v2 metric names (e.g. traefik_service_requests_total).

  • Added a basic deployment tutorial.

2026-07-10

  • Changed the unit status to active (from blocked) while a certificate is pending, keeping the “Certificate not available yet” message.

2026-07-08

  • Added migration logic to handle TLS private key and CSR migration.

2026-07-01

  • Added a base input to the Terraform module to set the OS base the charm is deployed on.

2026-06-24

  • Fixed Traefik entrypoint readTimeout defaults for HTTP and TCP traffic entrypoints so large uploads are not cut off after 60 seconds on Traefik v2.11.2+.

  • Added integration tests for Traefik charm upgrade.

2026-06-19

  • Removed “How to force HTTPS redirect” documentation as it is stale code.

2026-06-18

  • Migrated the RTD documentation URL under the Canonical domain.

2026-06-08

  • Added an expose input to the Terraform module to make Traefik publicly available over the network.

2026-06-05

  • Added support for ubuntu@26.04 on the charm.

2026-06-04

  • Updated Terraform module Juju provider version constraint to support Juju 4.

2026-06-03

  • Added the charm architecture documentation page.

2026-06-01

  • Updated ingress lib to publish new attribute is_port_opened on the requirer’s side that represents whether the port requested is open or not.

2026-06-01

  • Update the charm to use 2.11-26.04_edge tag of traefik image.

2026-05-28

  • Push all dynamic configurations together in the end rather than individual pushes.

  • Reduced unnecessary LoadBalancer reconciliations by removing redundant _reconcile_lb() calls from CA certificate and configuration paths, and removed per-relation maintenance status churn during ingress processing.

2026-05-22

  • Fixed delete_dynamic_configs and delete_dynamic_config to guard against missing directory/file, preventing ExecError crash on first container start or after pod churn.

2026-05-19

  • Added the resources variable to the Terraform charm module so users can pin images for Traefik.

2026-05-07

  • Fixed _on_remove to only delete the LoadBalancer resource when the application is fully removed (0 planned units), preventing accidental LB deletion during scale-down.

2026-04-20

  • Replaced @property with @functools.cached_property on frequently accessed charm attributes.

2025-05-07

  • Fixed reading the CA certificates from the certificate-transfer relation.

2026-05-05

  • Ensure hosts ordering in the dynamic configuration files.

2026-04-19

  • Removed redundant relation-created and relation-joined event observers from the ingress v1 and v2 libraries; ingress processing now triggers only on relation-changed.

2026-03-30

  • Added support for release notes.

2025-03-17

  • Changed certificate mode from UNIT to APP mode.

2026-03-13

  • Add support for UDP entrypoints in the traefik-route relation.

2026-03-16

  • Add security documentation.

2025-03-12

  • Updated charm code to trigger certificate refresh conditionally rather than through refresh hooks.

2025-02-26

  • Add some more logs and unit tests on the proxied_endpoints method.

2026-01-29

  • Removed leader requirement on TraefikRouteRequirer to update the stored state.

2026-01-27

  • Cleaned up the repository to remove stale comments, align tox.ini and remove requirements.txt.

2026-01-19

  • Add how to upgrade documentation.

2026-01-08

  • Migrated documentation to GitHub and set up RTD project.

  • Added workflow to check for CLA compliance.

2025-11-28

Changed

  • Fixed Traefik accessing Pebble before container is ready.