Skip to content

Releases: nfrastack/herald

2.3.4

20 Jan 00:37

Choose a tag to compare

    - (input/zerotier) Allow recursive arrays within ZeroTier memberlist

'tags'

2.3.3

27 Nov 18:13

Choose a tag to compare

Changes

  • (container) Adjust DOMAIN_XX_RECORD_PROXIED to properly configure application

2.3.2

23 Dec 18:44

Choose a tag to compare

Bugfix release, and working container environment thanks to the help of @tehneimer

Changed

  • (container) Changed environment variables and simplified container usage.
  • (domain) Change domain.proxied option to -> domain.record.proxied
  • (input/docker) Fix condition where process_existing wasn't recognized
  • (output/dns/cloudflare) remove duplicate registrations
  • (output/dns/cloudflare) introduce retries for records lookups due to sluggish api
  • (output/dns/cloudflare) cleanup some 1.x leftovers

2.3.1

23 Nov 17:56

Choose a tag to compare

Release 2.3.1 - See CHANGELOG.md

2.3.0

21 Sep 19:27

Choose a tag to compare

Release 2.3.0 - See CHANGELOG.md

2.2.0

02 Sep 08:34

Choose a tag to compare

Release 2.2.0 - See CHANGELOG.md

2.1.1

09 Jul 22:29

Choose a tag to compare

Changed

  • (output/*) Don't clobber existing records - update existing and add comment
  • (build) Remove dependency to C libraries, allowing musl support

2.1.0

09 Jul 06:12

Choose a tag to compare

Added

  • PowerDNS Output Provider support

Changed

  • (domain) Log that an Input Provider is overriding an IP Address properly
  • (input) Providers with interval (file, remote, caddy, traefik, zerotier, tailscale) all now perform an initial check upon startup. Previously they waited for the first interval to pass - Now it happens on startup, and depending on value of process_existing - either performs record updates, or takes an inventory and bases the next interval execution on the initial inventory for changes. This is a much saner approach.
  • (input/docker) quiet down some INFO log level output
  • (input/docker) remove duplication in logging when nfrastack.dns.enable=true
  • (input/zerotier) Cache API type when auto detecting version and try both on intialpoll as opposed to flip-flopping.
  • (input/zerotier) Handle cases where double logprefixes appears
  • (input/zerotier) Set Name feld when calling DNSEntry struct to fix entries without FQDN not to be written
  • (input/zerotier) perform better change detection and quiet log output
  • (output/dns/cloudflare) refine operations
  • (output/dns/cloudflare) change log prefix to [function/pkg/provider/profile_name]
  • (output/dns/cloudflare) properly accomodate for multiple domains with same name
  • (output/file/zonefile) make columns fixed width
  • (output/file/zonefile) properly write soa records
  • (output/remote) - remove duplicate routines limiting ability to remove records
  • (common) introduce common package to deal with records and logprefixes properly

2.0.1

21 Jun 15:58

Choose a tag to compare

Changed

  • (domain) Fixed issue with domains reading old hardcoded profile information throwing warnings

2.0.0

20 Jun 22:26

Choose a tag to compare

New project name, Herald.

BREAKING CHANGES As the earlier versions of this tool were built the overall configuration structure started to quickly grow technical debt, so it has been revamped entirely. Please also see changes in the NixOS configuration.

The Container image that is available has been simplified. In its "AUTO" generating mode it allows for pulling from Caddy, Traefik, and Docker input providers, and only outputing to Cloudflare. If you wish to have more functionality you can set it to not auto generate the config.

Added

  • New profiles structure for domain configuration with inputs and outputs fields for cleaner, more logical domain configuration grouping
  • (domain) Enhanced poll provider validation in BatchProcessor for better filtering
  • (domain) Poll Provider Targeting - Domain configurations can now specify which poll providers are allowed to use them via poll_providers field
  • (domain) Output Profile Targeting - Domain configurations can now specify which output profiles should process their records via output_profiles field
  • (domain) Configuration validation - Application fails fast with clear error messages if domains reference non-existent poll providers, output profiles, or DNS providers
  • (domain) Multiple poll providers and output profiles support per domain configuration
  • (inputs/docker) Docker Connection Pooling - Multiple Docker poll providers now share a single connection per API endpoint for improved resource efficiency
  • (inputs/docker) Centralized Event Logging - Docker events are now logged once at the shared connection level with clear provider attribution
  • (inputs/docker) Smart Event Distribution - Container events are intelligently filtered and distributed only to relevant providers based on their filter configuration
  • (outputs/host) When Flattening CNAMEs - name sometimes gets resolved to localhost. New resolver and ip_override options to force proper entries in hosts file.

Changed

  • Filters have consistent naming per input provider

Removed

  • BREAKING Environment variables have been removed for the most part. Use the configuration file for better configuration.

Migration Guide

The entire configuration structure has been simplified and streamlined. The old multi-level structure with separate poll_providers, providers, and domain fields has been replaced with a cleaner inputs and outputs approach.

Old configuration structure:

# OLD: Separate sections for each component type
poll_providers:
  docker_services:
    type: docker
    # ... config

providers:
  cloudflare_dns:
    type: cloudflare
    # ... config

domains:
  my_domain:
    name: "example.com"
    input_profiles:        # REMOVED
      - docker_services
    outputs:              # REMOVED
      - cloudflare_dns
    poll_providers:        # REMOVED
      - docker_services
    output_profiles:       # REMOVED
      - cloudflare_dns

New configuration structure:

# NEW: Unified inputs and outputs sections
inputs:
  docker_services:
    type: docker
    # ... config

outputs:
  cloudflare_dns:
    type: cloudflare
    # ... config

domains:
  my_domain:
    name: "example.com"
    profiles:             # NEW REQUIRED STRUCTURE
      inputs:
        - docker_services
      outputs:
        - cloudflare_dns