* feat: Add Azure DNS metadata (tags) support
* fix: address PR review comments for Azure metadata support
* test: add Azure metadata annotation test cases and fix prefix initialization
* Replace azure-metadata-* annotations with azure-tags
* refactor: move Azure tags parsing to provider package
Move provider-specific Azure tags annotation parsing from
source/annotations to provider/azure, following the same
pattern as Cloudflare tags handling.
* fix: use GetProviderSpecificProperty and handle duplicate tags
* fix: align with upstream Go 1.26 migration and short-form property names
* chore(go): upgrade to go1.26
* chore: use the new new() capability
* chore(lint): update golanci-lint
* chore(endpoint): add EndpointKey.String() test
* refactor(controller): move provider construction to provider/factory package
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(controller): move provider construction to provider/factory package
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(provider): introduce factory package with per-provider New constructors
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(provider): introduce factory package with per-provider New constructors
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(provider): introduce factory package with per-provider New constructors
* refactor(provider): introduce factory package with per-provider New constructors
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(provider): introduce factory package with per-provider New constructors
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(provider): zone cache provider interface
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(provider): zone cache provider interface
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(provider): zone cache provider interface
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(provider): zone cache provider interface
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(provider): zone cache provider interface
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(provider): zone cache provider interface
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(provider): zone cache provider interface
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(provider): zone cache provider interface
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(azure): Enhance retry logic using azure SDK
* Added the changes for flag based maxretries configuration
* Fixed types.go, flags.md and delected unneccesary comments
* Added the correct image for the Azure Private DNS tutorial
* Following the go naming convention for maxRetriesCount
* Added the correct flag information to the --azure-maxretries-count
* Made the required changes to accept the --azure-maxretries-count flag value from cli/env
Azure supports NS records on public DNS zones: https://learn.microsoft.com/en-us/rest/api/dns/record-sets/create-or-update?view=rest-dns-2018-05-01&tabs=HTTP#create-ns-recordset
This PR adds this support to external dns. The implementation is similar to the other records.
Besides the unit tests this PR was also tested by creating a DNSEndpoint with the following spec:
```
endpoints:
- dnsName: cloud.k8gb.io
recordTTL: 5
recordType: NS
targets:
- gslb-ns-eu-cloud.k8gb.io
- gslb-ns-us-cloud.k8gb.io
```
The creation of the NS record in Azure was successful:
```
az network dns record-set ns list --resource-group rg-k8gb --zone-name "$EDGE_DNS_ZONE" --output json
[
{...},
{
"NSRecords": [
{
"nsdname": "gslb-ns-eu-cloud.k8gb.io"
},
{
"nsdname": "gslb-ns-us-cloud.k8gb.io"
}
],
"TTL": 5,
"etag": "97a7199f-3be9-47bd-ab00-37013b775180",
"fqdn": "cloud.k8gb.io.",
"id": "/subscriptions/<redacted>/resourceGroups/rg-k8gb/providers/Microsoft.Network/dnszones/k8gb.io/NS/cloud",
"name": "cloud",
"provisioningState": "Succeeded",
"resourceGroup": "rg-k8gb",
"targetResource": {},
"trafficManagementProfile": {},
"type": "Microsoft.Network/dnszones/NS"
}
]
```
This change was already attempted in #2835, but it was never merged due to inactivity.
Signed-off-by: Andre Aguas <andre.aguas@protonmail.com>