mirror of
https://github.com/cozystack/cozystack.git
synced 2026-11-03 18:47:04 +09:00
## Summary Add external-dns as a standalone self-managed application in `packages/extra/external-dns/`, allowing tenants to deploy and configure their own DNS management directly from the dashboard. ## Motivation Tenants need the ability to manage their own DNS domains with their own provider. Following the [developers guide](https://github.com/cozystack/website/pull/413), this is implemented as an extra package (like `ingress` and `seaweedfs`) using the HelmRelease-based pattern, rather than embedding it in the tenant chart. This enables multi-tenant scenarios where: - Tenant A uses Cloudflare for `domain-a.com` - Tenant B uses AWS Route53 for `domain-b.com` - Each tenant deploys and manages external-dns independently from the dashboard ## Changes - **New package**: `packages/extra/external-dns/` — standalone HelmRelease-based application - **New PackageSource**: `packages/core/platform/sources/external-dns-application.yaml` — references `system/external-dns` and `extra/external-dns` components - **Cleaned tenant chart**: removed the previously embedded `externalDns` block from `packages/apps/tenant/` ## Features - Support for 9 DNS providers: cloudflare, aws, azure, google, digitalocean, linode, ovh, exoscale, godaddy - Per-provider credential configuration with full JSON schema validation - Domain filtering via `domainFilters` - Configurable sync policy (`sync` or `upsert-only`) - Namespaced operation (`namespaced: true`) for tenant isolation - Unique `txtOwnerId` per namespace to prevent DNS record conflicts - Resource sizing via presets or explicit CPU/memory ## Usage Example Deploy from the dashboard, or via values: ```yaml # Cloudflare provider: cloudflare domainFilters: - example.com cloudflare: apiToken: "your-cloudflare-api-token" ``` ```yaml # AWS Route53 provider: aws domainFilters: - example.org aws: accessKeyId: "AKIAXXXXXXXX" secretAccessKey: "your-secret-key" region: "us-east-1" ``` ## Test plan - [ ] `helm template external-dns packages/extra/external-dns/ --set provider=cloudflare --set cloudflare.apiToken=test` renders correctly - [ ] `helm template external-dns packages/extra/external-dns/` fails (provider required) - [ ] `helm template wrong-name packages/extra/external-dns/ --set provider=cloudflare` fails (release name check) - [ ] Deploy external-dns from tenant dashboard - [ ] Verify HelmRelease is created in tenant namespace with namespaced RBAC - [ ] Create an Ingress and verify DNS record is created - [ ] Verify no conflict with global external-dns instance 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added an External DNS package for automatic DNS record management. * Support for 9 DNS providers: Cloudflare, AWS, Azure, Google, DigitalOcean, Linode, OVH, Exoscale, GoDaddy. * Helm-based deployment with namespaced/system variants and release configuration options. * Configurable synchronization policies, domain filtering, provider credentials, extra args, and resource presets. * **Documentation** * New README and schema-driven values documentation for installation and configuration. <!-- end of auto-generated comment: release notes by coderabbit.ai -->