DomainProviderOptions

Dyndns provider options for the dns VM (ddns-updater A-record sync). SEPARATE from DnsProviderOptions on purpose: dyndns != ACME registrar. dyndns works standalone (no Let’s Encrypt, no DNS-01). Provider name MUST match a string supported by services.ddns-updater (qdm12). Examples: noip, duckdns, dyn, cloudflare, namecheap, godaddy.

The secret (token or password) is NOT stored here - it rides on the DomainProvider-tagged User (config-driven-credentials rule) and is materialised at template-render time. The public IP is learned by curl echo on the dns VM (api.ipify.org primary, icanhazip.com fallback); when the customer sets a static DirectoryService.PublicIP the dyndns updater is skipped entirely (static A record needs no updater).

public sealed record DomainProviderOptions : IEquatable<DomainProviderOptions>

1. Properties

1.1. Domain

The dyndns TARGET zone the updater writes - i.e. the dynamic-DNS hostname’s zone, NOT the customer domain. In the "hosting → CNAME → dyndns" topology this is the No-IP zone (e.g. "no-ip.com", "ddns.net"); Hosts are the labels under it (e.g. "osisaftp"). Null/empty ⇒ fall back to CustomerDomain (the "provider runs your own zone" topology).

public string Domain { get; init; }

1.2. Hosts

Hosts/subdomains to update under the zone. "@" = root domain; "mail"/"nextcloud"/…​ = subdomains. Empty ⇒ dns.nix falls back to the public-service record keys.

public IReadOnlyList<string> Hosts { get; init; }

1.3. Provider

ddns-updater provider identifier (e.g. noip, duckdns, dyn, cloudflare).

public string Provider { get; init; }

1.4. SecretKey

ddns-updater settings key the secret lands under. "password" for user+password providers (noip, dyn), "token" for token providers (duckdns, cloudflare). Default "password".

public string SecretKey { get; init; }

1.5. Username

Optional provider login username. Null/empty for token-only providers (duckdns).

public string Username { get; init; }

2. Operators

2.1. operator !=(DomainProviderOptions, DomainProviderOptions)

public static bool operator !=(DomainProviderOptions left, DomainProviderOptions right)
Table 1. Parameters
Name Type Description

left

DomainProviderOptions

right

DomainProviderOptions

Returns: bool

2.2. operator ==(DomainProviderOptions, DomainProviderOptions)

public static bool operator ==(DomainProviderOptions left, DomainProviderOptions right)
Table 2. Parameters
Name Type Description

left

DomainProviderOptions

right

DomainProviderOptions

Returns: bool