* source/gateway-api: Migrate Gateway and HTTPRoute from v1beta1 to v1
This migrates the Kubernetes API interactions for Gateway and HTTPRoute
objects from v1beta1 to v1.
The v1beta1 revert was originally made in PR #4610 (July 2024) because
GKE clusters were not yet serving v1 CRDs. That is no longer the case:
v1 Gateway and HTTPRoute have been available since Gateway API v1.0.0
(October 2023) and all major managed Kubernetes providers now serve them.
This change does NOT modify TLSRoute, TCPRoute, or UDPRoute, which
remain at v1alpha2. TLSRoute's migration to v1 depends on Gateway API
v1.5.0+ and is tracked separately in #6247.
* Updated Gateway API "Supported API Versions" section.
* Document minimum supported Gateway API CRD version
Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
* Merge branch 'master' into gateway-api-v1
* Revised "Supported API Versions" Gateway API doc.
Incorporated review suggestions from @mloiseleur
* Removed extraneous empty links in import blocks
---------
Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
* 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
* feat(metrics): add source wrapper metrics for invalid and deduplicated endpoints
Add GaugeVecMetric.Reset() to clear stale label combinations between cycles.
Introduce invalidEndpoints and deduplicatedEndpoints gauge vectors in the
source wrappers package, partitioned by record_type and source_type. The
dedup source wrapper now tracks rejected (invalid) and de-duplicated
endpoints per collection cycle.
Update the metrics documentation and bump the known metrics count.
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* feat(source): add PTR source wrapper for automatic reverse DNS
Implement ptrSource, a source wrapper that generates PTR endpoints from
A/AAAA records. The wrapper supports:
- Global default via WithCreatePTR (maps to --create-ptr flag)
- Per-endpoint override via record-type provider-specific property
- Grouping multiple hostnames sharing an IP into a single PTR endpoint
- Skipping wildcard DNS names
Add WithPTRSupported and WithCreatePTR options to the wrapper Config
and wire the PTR wrapper into the WrapSources chain when PTR is in
managed-record-types.
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* feat(config): add --create-ptr flag and deprecate --rfc2136-create-ptr
Add the generic --create-ptr boolean flag to Config, enabling automatic
PTR record creation for any provider. Add IsPTRSupported() helper that
checks whether PTR is included in --managed-record-types.
Add validation: --create-ptr (or legacy --rfc2136-create-ptr) now
requires PTR in --managed-record-types, preventing misconfiguration.
Mark --rfc2136-create-ptr as deprecated in the flag description.
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* refactor(rfc2136): remove inline PTR logic in favor of PTR source wrapper
Remove the createPTR field, AddReverseRecord, RemoveReverseRecord, and
GenerateReverseRecord methods from the rfc2136 provider. PTR record
generation is now handled generically by the PTR source wrapper before
records reach the provider.
Update the PTR creation test to supply pre-generated PTR endpoints
(simulating what the source wrapper produces) instead of relying on
the provider to create them internally.
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* feat(controller): wire PTR source wrapper into buildSource
Pass the top-level Config to buildSource so it can read IsPTRSupported()
and the CreatePTR / RFC2136CreatePTR flags. When PTR is in
managed-record-types, the PTR source wrapper is installed in the
wrapper chain with the combined create-ptr default.
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* chore(pdns): remove stale comment and fix whitespace
Remove an outdated comment about a single-target-per-tuple assumption
that no longer applies.
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* docs: add PTR records documentation and update existing guides
Add docs/advanced/ptr-records.md covering the --create-ptr flag,
per-resource annotation overrides, prerequisites, and usage examples.
Update:
- annotations.md: document record-type annotation
- flags.md: add --create-ptr, mark --rfc2136-create-ptr as deprecated
- tutorials/rfc2136.md: point to generic --create-ptr flag
- contributing/source-wrappers.md: add PTR wrapper to the chain
- mkdocs.yml: add PTR Records navigation entry
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* feat(rfc2136)!: remove rfc2136-create-ptr in favor of create-ptr
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
---------
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* chore(go): upgrade to go1.26
* chore: use the new new() capability
* chore(lint): update golanci-lint
* chore(endpoint): add EndpointKey.String() test
* perf(source/istio): replace API calls with indexed informer cache for gateway and virtualservice sources
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* perf(source/istio): replace API calls with indexed informer cache for gateway and virtualservice sources
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(wrappers): introduce BuildWrappedSource as single entry point for source pipeline
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(wrappers): introduce BuildWrappedSource as single entry point for source pipeline
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(wrappers): introduce BuildWrappedSource as single entry point for source pipeline
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactor(wrappers): introduce wrapper.Build as single entry point for source pipeline
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(source/istio): migrate gateway and virtualservice sources to networking.istio.io/v1
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(source/istio): migrate gateway and virtualservice sources to networking.istio.io/v1
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(source/istio): migrate gateway and virtualservice sources to networking.istio.io/v1
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(source/istio): migrate gateway and virtualservice sources to networking.istio.io/v1
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(source/istio): migrate gateway and virtualservice sources to networking.istio.io/v1
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(source/istio): migrate gateway and virtualservice sources to networking.istio.io/v1
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support it in source documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support it in source documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support it in source documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support it in source documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support it in source documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support it in source documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support in documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support in documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support in documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(sources): surface provider-specific annotations support in documentation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources with config
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(kubeclient): consolidate duplicate code to ensure consistent client creation
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* refactore(source): move SuitableType to endpiont package
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(event): add support for svc,ingress,pod,node,crd
Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>
* feat(event): add support for svc,ingress,pod,node,crd
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>
* linter(goimports): Mixed import groups (internal before external)
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* inter(goimports): Mixed import groups (internal before external)
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Add ValidatePTRRecord() that checks:
- DNSName ends with .in-addr.arpa or .ip6.arpa
- Targets are non-empty hostnames (not IP addresses)
Add PTR case to CheckEndpoint switch, following the existing
MX/SRV validation pattern. Invalid PTR endpoints are now rejected
by the dedup source wrapper with a warning log.
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(service): classify nodes by best pod state in externalTrafficPolicy=Local
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs: correct pod internal-hostname behavior in hostNetwork mode
* test(pod): add internal-hostname regressions for host-network and non-host-network
* docs: add internal-hostname annotation use cases
* fix(fake): Fake clientset hangs for 10s per informer with client-go v0.35+
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(fake): Fake clientset hangs for 10s per informer with client-go v0.35+
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* feat(endpoint): reject alias property on unsupported record types
Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
* refactor(endpoint): rename supportAlias to supportsAlias and extract alias constant
Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
* test(endpoint): add alias warning log assertion cases
Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
* test(wrappers): add alias cases to dedup validation and warn tests
Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
* refactor(endpoint): use providerSpecificAlias constant in tests
Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
* docs(annotations): note alias annotation is limited to A, AAAA, and CNAME
Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
---------
Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
* chore(store): Added RESTConfig() to ClientGenerator
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(store): Added RESTConfig() to ClientGenerator
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(ingress): clarify behavior with unit tests
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(ingress): clarify behavior with unit tests
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(fqdn): no duplicates, added extra functions
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(fqdn): no duplicates, added extra functions
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(fqdn): no duplicates, added extra functions
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(fqdn): no duplicates, added extra functions
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(annotations): allow resetting annotation prefix to default value
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(annotations): allow resetting annotation prefix to default value
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(annotations): allow resetting annotation prefix to default value
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): standardize sources
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise with IsControllerMismatch
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise with IsControllerMismatch
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise with IsControllerMismatch
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise with IsControllerMismatch
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise with IsControllerMismatch
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise
Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>
* chore(source): sources to standartise
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* chore(source): sources to standartise
Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>
* docs(source): autogenerate docs for events
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(source): autogenerate docs for events
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(source): autogenerate docs for events
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(source): autogenerate docs for events
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(source): autogenerate docs for events
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(source): autogenerate docs for events
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(source): autogenerate docs for events
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* docs(source): autogenerate docs for events
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(fqdn): support kind and api version
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(fqdn): support kind and api version
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(fqdn): support kind and api version
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
* fix(fqdn): support kind and api version
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
---------
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>