<a id="changelog"></a>

# Changelog

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

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

Each revision is versioned by the date of the revision.

## 2026-10-19

### Changed

- Moved the documentation tooling to the centrally managed `platform-engineering-documentation-files` Copier template and added a scheduled workflow that keeps it in sync. There is no change to the charms.

## 2026-10-14

### Changed

- Migrated the `content-cache` and `content-cache-backends-config` Terraform modules to the CC008 Charm Terraform Module standard:
  renamed `versions.tf` to `terraform.tf` and added `required_version`, split the
  combined `endpoints` output into `provides`/`requires` maps, and changed the
  `application` output to the full `juju_application` object.
  Breaking default changes: `expose` is now an object (`cidrs`/`endpoints`/`spaces`)
  defaulting to `{}` (exposed with no restrictions) instead of a `bool` defaulting to
  `false` (not exposed); `base` and `constraints` now default to `null` (the charm’s
  and Juju’s own defaults) instead of `ubuntu@24.04` and `arch=amd64` respectively.
  Added a `terraform_modules_compliance` CI workflow, a `terraform_modules_release`
  workflow tagging the shared `tf-X.Y.Z` module version, and a `generate_terraform_docs`
  workflow.
  Moved the Terraform modules to the standard repository layout: `content-cache/terraform`
  is now `terraform/charm/content_cache`, `content-cache-backends-config/terraform` is now
  `terraform/charm/content_cache_backends_config`.
  Removed the example composition Terraform module from `terraform/`. A content-cache
  application can attach to any number of content-cache-backends-config applications, so
  compose the two charm modules directly instead.

## 2026-10-07

### Added

- Each backend’s nginx server block now also listens on the IPv6 wildcard address
  (`[::]:<port>`), in addition to the existing IPv4 listener, so backends reachable only
  over IPv6 (e.g. Snap Store, Ubuntu Archive) can be proxied ([#167](https://github.com/canonical/content-cache-operator/issues/167)).

### Fixed

- The COS Grafana dashboard’s “site” variable, and the per-backend access/cache/error log
  files it’s derived from, are now keyed by `<port>-<hostname>` when a backend hostname is
  configured (falling back to just the port otherwise), so operators can filter
  logs/dashboards by the actual website being cached while filenames stay unique even if
  multiple backends share a hostname. The hostname portion is truncated as needed to stay
  within filesystem filename limits.
  (Fixes [#163](https://github.com/canonical/content-cache-operator/issues/163))

## 2026-09-23

### Added

- Added the `client-ip-hash-salt` configuration option to the content-cache charm. When set
  to a user-owned Juju secret containing a `salt` key, client IP addresses are replaced with
  a salted SHA-256 hash in the access and cache logs, helping protect user privacy. See
  [How to hash client IP addresses in logs](https://canonical.com/juju/docs/content-cache-charms/latest/how-to/hash-client-ip-addresses-in-logs/index.html.md#how-to-hash-client-ip-addresses-in-logs) for setup instructions.

## 2026-09-16

### Added

- Added an advanced tutorial walking through deploying `content-cache` behind
  `ingress-configurator` and `haproxy`, covering hostname-based routing, TLS termination, and
  other ingress features.

### Fixed

- Removed HTML comment blocks from the charm README that were rendering as literal text on
  the Charmhub landing page.

### Changed

- Updated the how-to guides, reference, and explanation pages to reflect the current
  `ingress-configurator`-based backend configuration flow, while retaining
  `content-cache-backends-config` as a supported alternative. Corrected the documented TLS certificate
  file path (`/etc/nginx/certs/content-cache-charm.pem`) and cache directory path
  (`/data/nginx/cache/<port>/`) to match the current charm implementation.

## 2026-08-21

### Removed

- Ejected the outdated “Deploy content-cache” tutorial from the documentation.
  The tutorial no longer reflects a possible deployment schema for the charms,
  and work is planned to replace the tutorial with an accurate setup.

## 2026-08-18

### Added

- The content-cache charm now verifies backend TLS certificates when HTTPS backend URLs are
  configured. Integrate a CA certificate provider via the new `receive-ca-cert` relation
  (interface: `certificate_transfer`) to supply the CA bundle. nginx is configured with
  `proxy_ssl_verify on`, `proxy_ssl_trusted_certificate`, and `proxy_ssl_name` pointing to
  the backend hostname. If HTTPS backends are configured but no CA certificate has been
  provided, the charm enters `WaitingStatus` until the relation is established. Multiple
  providers are supported; all CA certificates are merged into a single bundle at
  `/etc/nginx/certs/ca-bundle.pem`.

## 2026-07-16

### Changed

- The `backends` configuration option on `content-cache-backends-config` now accepts URLs in the
  form `<http|https>://<ip>:<port>` instead of bare IP addresses with a separate `protocol` option.
  The `protocol` option has been removed.

### Added

- The content-cache charm now publishes a `cache-backend` field to the `cache-config` relation
  data after nginx becomes active. The field contains a URL representing the address and port
  at which this unit is listening, so ingress components can discover it automatically.

## 2026-06-18

- Migrated the RTD documentation URL under the Canonical domain.

## 2025-05-06

### **Changed**

- Updated [CONTRIBUTING.md](http://CONTRIBUTING.md) and the documentation.

## 2025-01-13

### **Added**

- Support for healthcheck-valid-status configuration.
- Support for healthcheck-ssl-verify configuration.

## 2024-12-18

### **Added**

- Add grafana dashboard for the displaying metrics from COS integration.

## 2024-12-16

### **Added**

- Support for active health checks using LUA scripts. Configured through healthcheck-interval and healthcheck-path.

## 2024-12-11

### **Fixed**

- A issue where content-cache charm integrated with multiple content-cache-backends-config charms causing some configuration to not work correctly.

## 2024-12-05

### **Added**

- Support for COS integration. Integrating with charms that provides cos-agent will cause the charm to forward logs to COS.

## 2024-11-28

### **Added**

- Support for TLS certificate integration. Integrating with charms that provides tls-certificates will enable HTTPS for the content cache.

## 2024-10-17

## **Added**

- Support for fail-timeout, backends-path, proxy-cache-valid configuration options from integration with Content Cache Backends Config charm.

## 2024-10-07

## **Added**

- Changelog for tracking user-relevant changes.
- Basic content cache functionality with nginx.
- Support for hostname, path, backends, protocol configuration options from integration with Content Cache Backends Config charm.
