Giter Site home page Giter Site logo

gardener / external-dns-management Goto Github PK

View Code? Open in Web Editor NEW
80.0 80.0 67.0 30.24 MB

Environment to manage external DNS entries for a kubernetes cluster

License: Apache License 2.0

Shell 1.97% Dockerfile 0.07% Makefile 0.42% Go 97.16% Python 0.21% Mustache 0.17%

external-dns-management's Introduction

Gardener Logo

REUSE status CI Build status Slack channel #gardener Go Report Card GoDoc CII Best Practices

Gardener implements the automated management and operation of Kubernetes clusters as a service and provides a fully validated extensibility framework that can be adjusted to any programmatic cloud or infrastructure provider.

Gardener is 100% Kubernetes-native and exposes its own Cluster API to create homogeneous clusters on all supported infrastructures. This API differs from SIG Cluster Lifecycle's Cluster API that only harmonizes how to get to clusters, while Gardener's Cluster API goes one step further and also harmonizes the make-up of the clusters themselves. That means, Gardener gives you homogeneous clusters with exactly the same bill of material, configuration and behavior on all supported infrastructures, which you can see further down below in the section on our K8s Conformance Test Coverage.

In 2020, SIG Cluster Lifecycle's Cluster API made a huge step forward with v1alpha3 and the newly added support for declarative control plane management. This made it possible to integrate managed services like GKE or Gardener. We would be more than happy, if the community would be interested, to contribute a Gardener control plane provider. For more information on the relation between Gardener API and SIG Cluster Lifecycle's Cluster API, please see here.

Gardener's main principle is to leverage Kubernetes concepts for all of its tasks.

In essence, Gardener is an extension API server that comes along with a bundle of custom controllers. It introduces new API objects in an existing Kubernetes cluster (which is called garden cluster) in order to use them for the management of end-user Kubernetes clusters (which are called shoot clusters). These shoot clusters are described via declarative cluster specifications which are observed by the controllers. They will bring up the clusters, reconcile their state, perform automated updates and make sure they are always up and running.

To accomplish these tasks reliably and to offer a high quality of service, Gardener controls the main components of a Kubernetes cluster (etcd, API server, controller manager, scheduler). These so-called control plane components are hosted in Kubernetes clusters themselves (which are called seed clusters). This is the main difference compared to many other OSS cluster provisioning tools: The shoot clusters do not have dedicated master VMs. Instead, the control plane is deployed as a native Kubernetes workload into the seeds (the architecture is commonly referred to as kubeception or inception design). This does not only effectively reduce the total cost of ownership but also allows easier implementations for "day-2 operations" (like cluster updates or robustness) by relying on all the mature Kubernetes features and capabilities.

Gardener reuses the identical Kubernetes design to span a scalable multi-cloud and multi-cluster landscape. Such familiarity with known concepts has proven to quickly ease the initial learning curve and accelerate developer productivity:

  • Kubernetes API Server = Gardener API Server
  • Kubernetes Controller Manager = Gardener Controller Manager
  • Kubernetes Scheduler = Gardener Scheduler
  • Kubelet = Gardenlet
  • Node = Seed cluster
  • Pod = Shoot cluster

Please find more information regarding the concepts and a detailed description of the architecture in our Gardener Wiki and our blog posts on kubernetes.io: Gardener - the Kubernetes Botanist (17.5.2018) and Gardener Project Update (2.12.2019).


K8s Conformance Test Coverage certified kubernetes logo

Gardener takes part in the Certified Kubernetes Conformance Program to attest its compatibility with the K8s conformance testsuite. Currently Gardener is certified for K8s versions up to v1.30, see the conformance spreadsheet.

Continuous conformance test results of the latest stable Gardener release are uploaded regularly to the CNCF test grid:

Provider/K8s v1.30 v1.29 v1.28 v1.27 v1.26 v1.25
AWS Gardener v1.30 Conformance Tests Gardener v1.29 Conformance Tests Gardener v1.28 Conformance Tests Gardener v1.27 Conformance Tests Gardener v1.26 Conformance Tests Gardener v1.25 Conformance Tests
Azure Gardener v1.30 Conformance Tests Gardener v1.29 Conformance Tests Gardener v1.28 Conformance Tests Gardener v1.27 Conformance Tests Gardener v1.26 Conformance Tests Gardener v1.25 Conformance Tests
GCP Gardener v1.30 Conformance Tests Gardener v1.29 Conformance Tests Gardener v1.28 Conformance Tests Gardener v1.27 Conformance Tests Gardener v1.26 Conformance Tests Gardener v1.25 Conformance Tests
OpenStack Gardener v1.30 Conformance Tests Gardener v1.29 Conformance Tests Gardener v1.28 Conformance Tests Gardener v1.27 Conformance Tests Gardener v1.26 Conformance Tests Gardener v1.25 Conformance Tests
Alicloud Gardener v1.30 Conformance Tests Gardener v1.29 Conformance Tests Gardener v1.28 Conformance Tests Gardener v1.27 Conformance Tests Gardener v1.26 Conformance Tests Gardener v1.25 Conformance Tests
Equinix Metal N/A N/A N/A N/A N/A N/A
vSphere N/A N/A N/A N/A N/A N/A

Get an overview of the test results at testgrid.

Start using or developing the Gardener locally

See our documentation in the /docs repository, please find the index here.

Setting up your own Gardener landscape in the Cloud

The quickest way to test drive Gardener is to install it virtually onto an existing Kubernetes cluster, just like you would install any other Kubernetes-ready application. You can do this with our Gardener Helm Chart.

Alternatively you can use our garden setup project to create a fully configured Gardener landscape which also includes our Gardener Dashboard.

Feedback and Support

Feedback and contributions are always welcome!

All channels for getting in touch or learning about our project are listed under the community section. We are cordially inviting interested parties to join our bi-weekly meetings.

Please report bugs or suggestions about our Kubernetes clusters as such or the Gardener itself as GitHub issues or join our Slack channel #gardener (please invite yourself to the Kubernetes workspace here).

Learn More!

Please find further resources about our project here:

external-dns-management's People

Contributors

achimweigel avatar andreasburger avatar avarei avatar beckermax avatar brumhard avatar ccwienk avatar danielfoehrkn avatar deissnerk avatar dependabot[bot] avatar dimityrmirchev avatar gardener-robot-ci-1 avatar gardener-robot-ci-2 avatar gardener-robot-ci-3 avatar ialidzhikov avatar jia-jerry avatar jschicktanz avatar majst01 avatar mandelsoft avatar martinweindel avatar n-boshnakov avatar raphaelvogel avatar rfranzke avatar robertgraeff avatar sayakmukhopadhyay avatar sdputurn avatar seankilleen avatar shafeeqes avatar timuthy avatar vasu1124 avatar vlerenc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

external-dns-management's Issues

DNS resolve timeout

Dear colleagues,

We've deployed v0.7.6 to our gardener cluster which hosted on alibaba cloud, after the dns controller manager got deployed, we still could not do any name resolve, by observing coredns log, it continuously produce error log like

[ERROR] plugin/errors: 2 izbp1ggudxumgfip9jsn60z. AAAA: read udp 100.96.0.17:55171->100.100.2.136:53: i/o timeout
[INFO] 100.96.0.16:35403 - 49792 "A IN checkip.amazonaws.com. udp 39 false 512" NOERROR - 0 2.000216725s
[ERROR] plugin/errors: 2 checkip.amazonaws.com. A: read udp 100.96.0.17:52579->100.100.2.136:53: i/o timeout
[INFO] 100.96.0.21:38277 - 6361 "AAAA IN alidns.aliyuncs.com. udp 37 false 512" NOERROR - 0 2.000200547s
[ERROR] plugin/errors: 2 alidns.aliyuncs.com. AAAA: read udp 100.96.0.17:32784->100.100.2.136:53: i/o timeout

the DNS provider we use

apiVersion: dns.gardener.cloud/v1alpha1
kind: DNSProvider
metadata:
  name: alicloud-dns-provider
  namespace: default
spec:
  type: alicloud-dns
  secretRef:
    name: alicloud-dns-credentials
  domains:
    include:
    - shoot.can.k8s.vlab-sapcloudplatformdev.cn

Thanks

Alicloud DNS hit ratelimiter of DNS api

What happened:
Recently, shoot can't be created because of DNS extension issue. The root cause is that DNS api hit the rate limiter. about 50 qps.
What you expected to happen:
We need ratelimiter to call Alicloud DNS api.
How to reproduce it (as minimally and precisely as possible):

Anything else we need to know:
Here is the log(search flow control):

time="2020-04-20T02:00:29Z" level=info msg="alicloud-dns: providers: 5: obj:default:dns.gardener.cloud/DNSProvider/shoot--core--v2yopi2irs/internal: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="azure-dns: providers: 3: obj:default:dns.gardener.cloud/DNSProvider/shoot--core--v2yopi2irs/internal: stop reconciling \"obj:default:dns.gardener.cloud/DNSProvider/shoot--core--v2yopi2irs/internal\""
time="2020-04-20T02:00:29Z" level=warning msg="alicloud-dns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: cannot get zones: SDK.ServerError\nErrorCode: Throttling.User\nRecommend: https://error-center.aliyun.com/status/search?Keyword=Throttling.User&source=PopGw\nRequestId: F8D495A7-8523-4924-BFD0-C8C9BF2885C6\nMessage: Request was denied due to user flow control."
time="2020-04-20T02:00:29Z" level=info msg="alicloud-dns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: errorneous provider: cannot get zones: SDK.ServerError\nErrorCode: Throttling.User\nRecommend: https://error-center.aliyun.com/status/search?Keyword=Throttling.User&source=PopGw\nRequestId: F8D495A7-8523-4924-BFD0-C8C9BF2885C6\nMessage: Request was denied due to user flow control."
time="2020-04-20T02:00:29Z" level=info msg="alicloud-dns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: trigger old zones"
time="2020-04-20T02:00:29Z" level=warning msg="alicloud-dns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: add rate limited because of problem: cannot get zones: SDK.ServerError\nErrorCode: Throttling.User\nRecommend: https://error-center.aliyun.com/status/search?Keyword=Throttling.User&source=PopGw\nRequestId: F8D495A7-8523-4924-BFD0-C8C9BF2885C6\nMessage: Request was denied due to user flow control."
time="2020-04-20T02:00:29Z" level=info msg="aws-route53: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="aws-route53: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: included domain changed for foreign provider \"shoot--appstudio--appstudio/internal\": []"
time="2020-04-20T02:00:29Z" level=info msg="alicloud-dns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="openstack-designate: providers: 4: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="openstack-designate: providers: 4: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: included domain changed for foreign provider \"shoot--appstudio--appstudio/internal\": []"
time="2020-04-20T02:00:29Z" level=info msg="openstack-designate: providers: 4: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: excluded domain changed for foreign provider \"shoot--appstudio--appstudio/internal\": []"
time="2020-04-20T02:00:29Z" level=info msg="openstack-designate: providers: 4: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: stop reconciling \"obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal\""
time="2020-04-20T02:00:29Z" level=info msg="azure-dns: providers: 2: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="azure-dns: providers: 2: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: included domain changed for foreign provider \"shoot--appstudio--appstudio/internal\": []"
time="2020-04-20T02:00:29Z" level=info msg="azure-dns: providers: 2: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: excluded domain changed for foreign provider \"shoot--appstudio--appstudio/internal\": []"
time="2020-04-20T02:00:29Z" level=info msg="azure-dns: providers: 2: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: stop reconciling \"obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal\""
time="2020-04-20T02:00:29Z" level=info msg="google-clouddns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="google-clouddns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: included domain changed for foreign provider \"shoot--appstudio--appstudio/internal\": []"
time="2020-04-20T02:00:29Z" level=info msg="google-clouddns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: excluded domain changed for foreign provider \"shoot--appstudio--appstudio/internal\": []"
time="2020-04-20T02:00:29Z" level=info msg="google-clouddns: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: stop reconciling \"obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal\""
time="2020-04-20T02:00:29Z" level=info msg="aws-route53: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: excluded domain changed for foreign provider \"shoot--appstudio--appstudio/internal\": []"
time="2020-04-20T02:00:29Z" level=info msg="aws-route53: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal: stop reconciling \"obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/internal\""
time="2020-04-20T02:00:29Z" level=warning msg="alicloud-dns: providers: 3: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: cannot get zones: SDK.ServerError\nErrorCode: Throttling.User\nRecommend: https://error-center.aliyun.com/status/search?Keyword=Throttling.User&source=PopGw\nRequestId: CEE19AAA-F0DD-46FB-9426-87553A2DAC0C\nMessage: Request was denied due to user flow control."
time="2020-04-20T02:00:29Z" level=info msg="openstack-designate: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="openstack-designate: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: included domain changed for foreign provider \"shoot--appstudio--appstudio/external\": []"
time="2020-04-20T02:00:29Z" level=info msg="openstack-designate: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: excluded domain changed for foreign provider \"shoot--appstudio--appstudio/external\": []"
time="2020-04-20T02:00:29Z" level=info msg="openstack-designate: providers: 1: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: stop reconciling \"obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external\""
time="2020-04-20T02:00:29Z" level=info msg="alicloud-dns: providers: 3: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: errorneous provider: cannot get zones: SDK.ServerError\nErrorCode: Throttling.User\nRecommend: https://error-center.aliyun.com/status/search?Keyword=Throttling.User&source=PopGw\nRequestId: CEE19AAA-F0DD-46FB-9426-87553A2DAC0C\nMessage: Request was denied due to user flow control."
time="2020-04-20T02:00:29Z" level=info msg="alicloud-dns: providers: 3: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: trigger old zones"
time="2020-04-20T02:00:29Z" level=warning msg="alicloud-dns: providers: 3: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: add rate limited because of problem: cannot get zones: SDK.ServerError\nErrorCode: Throttling.User\nRecommend: https://error-center.aliyun.com/status/search?Keyword=Throttling.User&source=PopGw\nRequestId: CEE19AAA-F0DD-46FB-9426-87553A2DAC0C\nMessage: Request was denied due to user flow control."
time="2020-04-20T02:00:29Z" level=info msg="aws-route53: providers: 8: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="alicloud-dns: providers: 3: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="aws-route53: providers: 8: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: included domain changed for foreign provider \"shoot--appstudio--appstudio/external\": []"
time="2020-04-20T02:00:29Z" level=info msg="aws-route53: providers: 8: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: excluded domain changed for foreign provider \"shoot--appstudio--appstudio/external\": []"
time="2020-04-20T02:00:29Z" level=info msg="aws-route53: providers: 8: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: stop reconciling \"obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external\""
time="2020-04-20T02:00:29Z" level=info msg="google-clouddns: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="google-clouddns: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: included domain changed for foreign provider \"shoot--appstudio--appstudio/external\": []"
time="2020-04-20T02:00:29Z" level=info msg="google-clouddns: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: excluded domain changed for foreign provider \"shoot--appstudio--appstudio/external\": []"
time="2020-04-20T02:00:29Z" level=info msg="google-clouddns: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: stop reconciling \"obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external\""
time="2020-04-20T02:00:29Z" level=info msg="azure-dns: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: reconcile PROVIDER"
time="2020-04-20T02:00:29Z" level=info msg="azure-dns: providers: 9: obj:default:dns.gardener.cloud/DNSProvider/shoot--appstudio--appstudio/external: included domain changed for foreign provider \"shoot--appstudio--appstudio/external\": []"

Environment:
Alicloud

Add hostname to DNSEntry's status

I could't find any way to clean orphaned records. A simple (yet not fully covering all use-cases) is to add in the status of DNSEntry hostname.

Broken behavior scenario:

If I create the following resource

apiVersion: dns.gardener.cloud/v1alpha1
kind: DNSEntry
metadata:
  name: dns
  namespace: default
spec:
  dnsName: api.foo.com
  ttl: 600
  targets:
  - 8.8.8.8

The DNS controller will create api.foo.com record.
If DNSEntry controller is down and I update spec.dnsName to baz.foo.com, then when the controller is back again it'll create baz.foo.com, leaving api.foo.com record in the limbo.

With .status.dnsName the flow can be:

apiVersion: dns.gardener.cloud/v1alpha1
kind: DNSEntry
metadata:
  name: dns
  namespace: default
spec:
  dnsName: api.foo.com
  ttl: 600
  targets:
  - 8.8.8.8
status:
  dnsName: api.foo.com

I update the field spec.dnsName to baz.foo.com, leading to:

apiVersion: dns.gardener.cloud/v1alpha1
kind: DNSEntry
metadata:
  name: dns
  namespace: default
spec:
  dnsName: baz.foo.com
  ttl: 600
  targets:
  - 8.8.8.8
status:
  dnsName: api.foo.com

Then the controller should delete the old record and remove it from .status.dnsName stopping the current reconciliation:

apiVersion: dns.gardener.cloud/v1alpha1
kind: DNSEntry
metadata:
  name: dns
  namespace: default
spec:
  dnsName: baz.foo.com
  ttl: 600
  targets:
  - 8.8.8.8
status:

This would trigger another reconciliation which would finally create the correct baz.foo.com record and update the status:

apiVersion: dns.gardener.cloud/v1alpha1
kind: DNSEntry
metadata:
  name: dns
  namespace: default
spec:
  dnsName: baz.foo.com
  ttl: 600
  targets:
  - 8.8.8.8
status:
  dnsName: baz.foo.com

Excluded zones are used to reconcile DnsEntry

What happened:
My dns entry is added to an excluded dns zone.

What you expected to happen:
Dns entry being added to the included dns zone.

How to reproduce it (as minimally and precisely as possible):
Create two hosted zones in route53:

  • a.<domain>
  • b.a.<domain>

Create a dnsprovider with:

domians:
   included:
   - `a.<domain>

Create a dnsentry targeted to `c.b.a.

The dnsentry will be added to b.a.<domain>, while the status of dnsprovider shows that only a.<domain> is included and b.a.<domain> is excluded.

Anything else we need to know:

Environment:

Finalizer convention disobeyed

The convention for finalizers is <domain-name>/<controller-name>, but the dns-controller-manager uses e.g., aws-route53/dns.gardener.cloud. It should be dns.gardener.cloud/aws-route53 to go with the community.

Make external-dns-management DNS provider abstraction bin?

What would you like to be added:
external-dns-management seems to be kubernetes-specific now (please correct me if I'm wrong). I'd be nice to make it a CLI utility which would be like an abstraction layer for DNS providers. That way people could use it to get all the DNS records for the specified zone/add any record there too. I was unable to find any utility like this, and we're thinking if we should code a totally new one, or.. just suggest a project like external-dns-management to become usable for such use-cases too.

Why is this needed:
external-dns-management already has a list of DNS providers supported, so, it might be not so hard to adapt it for other use-cases and attract more customers/developers to participate in the project.

Just an idea though.

A DNSProvider is unable to manage DNS entries of other namespaces

I would like to manage DNS entries of different namespaces from a single DNSProvider. But I got the following error when I tried to do that.

time="2019-07-19T08:55:14Z" level=info msg="azure-dns: default: 1: obj:default:dns.gardener.cloud/DNSEntry/dev/nginx-ingress-jdvsv: Error: valid: false, message: default/gardener.cloud:extensions/Ingress/dev/nginx: denied by LocalNamespaceAccessOnly, err: default/gardener.cloud:extensions/Ingress/dev/nginx: denied by LocalNamespaceAccessOnly"

Too many lint failures

What happened:
There are too many lint failures and general violations of go idioms and conventions.

  1. Usage of this of self may be a convention for given languages but it is not for golang
warning: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self" (golint)
  1. ALL_CAPS consts may be a convention for given languages but it is not for golang

How to reproduce it (as minimally and precisely as possible):

  1. Run golangci-lint run ./pkg/... ./cmd/... and ensure that there quite a lot of findings. Expand Details to see them in the time of writing this issue.
$ golangci-lint run ./pkg/... ./cmd/...
pkg/dns/provider/entry.go:663:6: func `testUpdate` is unused (unused)
pkg/controller/provider/mock/handler.go:32:2: field `ctx` is unused (unused)
pkg/client/dns/clientset/versioned/fake/register.go:32:5: var `parameterCodec` is unused (unused)
pkg/controller/provider/openstack/execution.go:29:2: field `rs` is unused (unused)
pkg/controller/provider/azure/execution.go:30:2: field `rs` is unused (unused)
pkg/dns/provider/zonecache.go:164:2: field `lock` is unused (unused)
pkg/controller/provider/aws/handler.go:118:3: S1011: should replace loop with `raw = append(raw, resp.HostedZones...)` (gosimple)
		for _, zone := range resp.HostedZones {
		^
pkg/controller/provider/alicloud/handler.go:154:10: S1034: assigning the result of this type assertion to a variable (switch err := err.(type)) could eliminate type assertions in switch cases (gosimple)
		switch err.(type) {
		       ^
pkg/dns/provider/controller.go:176:23: Error return value of `obj.UpdateFromCache` is not checked (errcheck)
			obj.UpdateFromCache()
			                   ^
pkg/dns/provider/entry.go:287:26: Error return value of `state.RemoveFinalizer` is not checked (errcheck)
				state.RemoveFinalizer(this.object)
				                     ^
pkg/dns/provider/entry.go:355:20: Error return value of `this.UpdateStatus` is not checked (errcheck)
		this.UpdateStatus(logger, state, verr.Error())
		                 ^
pkg/dns/provider/entry.go:385:22: Error return value of `this.UpdateStatus` is not checked (errcheck)
				this.UpdateStatus(logger, state, verr.Error())
				                 ^
pkg/dns/provider/provider.go:202:10: Error return value of `h.Write` is not checked (errcheck)
		h.Write([]byte(k))
		       ^
pkg/dns/provider/provider.go:203:10: Error return value of `h.Write` is not checked (errcheck)
		h.Write(null)
		       ^
pkg/dns/provider/provider.go:204:10: Error return value of `h.Write` is not checked (errcheck)
		h.Write(([]byte(v)))
		       ^
pkg/dns/provider/state.go:173:30: Error return value of `this.context.EnqueueCommand` is not checked (errcheck)
		this.context.EnqueueCommand(c)
		                           ^
pkg/dns/provider/state.go:178:26: Error return value of `this.context.EnqueueKey` is not checked (errcheck)
		this.context.EnqueueKey(key)
		                       ^
pkg/dns/provider/state.go:509:30: Error return value of `this.context.EnqueueCommand` is not checked (errcheck)
		this.context.EnqueueCommand(cmd)
		                           ^
pkg/dns/provider/state.go:517:26: Error return value of `this.context.EnqueueKey` is not checked (errcheck)
		this.context.EnqueueKey(key)
		                       ^
pkg/dns/provider/state.go:751:25: Error return value of `this.context.EnqueueKey` is not checked (errcheck)
	this.context.EnqueueKey(e.ClusterKey())
	                       ^
pkg/dns/provider/state.go:979:20: Error return value of `new.UpdateStatus` is not checked (errcheck)
			new.UpdateStatus(logger, api.STATE_PENDING, msg)
			                ^
pkg/dns/provider/statusupdate.go:47:32: Error return value of `this.fhandler.RemoveFinalizer` is not checked (errcheck)
		this.fhandler.RemoveFinalizer(this.Entry.object)
		                             ^
pkg/dns/provider/statusupdate.go:58:32: Error return value of `this.fhandler.RemoveFinalizer` is not checked (errcheck)
		this.fhandler.RemoveFinalizer(this.Entry.Object())
		                             ^
pkg/dns/provider/statusupdate.go:71:33: Error return value of `this.fhandler.RemoveFinalizer` is not checked (errcheck)
			this.fhandler.RemoveFinalizer(this.Entry.Object())
			                             ^
pkg/dns/provider/statusupdate.go:74:30: Error return value of `this.fhandler.SetFinalizer` is not checked (errcheck)
			this.fhandler.SetFinalizer(this.Entry.Object())
			                          ^
pkg/dns/provider/zonecache.go:536:26: Error return value of `s.deletePersistedZone` is not checked (errcheck)
	go s.deletePersistedZone(zone.Id())
	                        ^
pkg/dns/provider/zonecache.go:590:24: Error return value of `s.deletePersistedZone` is not checked (errcheck)
		s.deletePersistedZone(zoneid)
		                     ^
pkg/dns/provider/state.go:367:6: ineffectual assignment to `err` (ineffassign)
		r, err := provider.Object().Resources().Get(&corev1.Secret{})
		   ^
pkg/dns/provider/zonecache.go:402:5: ineffectual assignment to `err` (ineffassign)
				err = os.Remove(filepath.Join(subDir, subfile.Name()))
				^
pkg/dns/provider/entry.go:85:2: `duplicate` is unused (structcheck)
	duplicate   bool
	^
pkg/dns/provider/zonecache.go:155:2: `zones` is unused (structcheck)
	zones        DNSHostedZones
	^
pkg/dns/provider/zonecache.go:156:2: `zonesErr` is unused (structcheck)
	zonesErr     error
	^
pkg/dns/provider/zonecache.go:157:2: `zonesNext` is unused (structcheck)
	zonesNext    time.Time
	^
pkg/dns/provider/interface.go:128:4: SA4004: the surrounding loop is unconditionally terminated (staticcheck)
			return false
			^
pkg/dns/provider/entry.go:206:9: S1017: should replace this `if` statement with an unconditional `strings.TrimPrefix` (gosimple)
	} else if strings.HasPrefix(check, "_") {
	       ^
pkg/dns/provider/state.go:852:5: S1009: should omit nil check; len() for nil slices is defined as zero (gosimple)
	if providers == nil || len(providers) == 0 {
	   ^
pkg/dns/provider/state.go:562:3: S1031: unnecessary nil check around range (gosimple)
		if old != nil {
		^
pkg/controller/provider/azure/handler.go:121:39: Error return value of `results.Next` is not checked (errcheck)
	for ; results.NotDone(); results.Next() {
	                                     ^
pkg/controller/provider/azure/handler.go:185:39: Error return value of `results.Next` is not checked (errcheck)
	for ; results.NotDone(); results.Next() {
	                                     ^
pkg/dns/source/controller.go:57:18: Error return value of `cluster.Register` is not checked (errcheck)
	cluster.Register(TARGET_CLUSTER, "target", "target cluster for dns requests")
	                ^
pkg/dns/source/slaves.go:63:31: Error return value of `this.controller.EnqueueKey` is not checked (errcheck)
				this.controller.EnqueueKey(k)
				                          ^
pkg/dns/source/feedback.go:42:9: S1039: unnecessary use of fmt.Sprintf (gosimple)
		msg = fmt.Sprintf("dns entry is ready")
		      ^
pkg/dns/source/feedback.go:49:9: S1039: unnecessary use of fmt.Sprintf (gosimple)
		msg = fmt.Sprintf("dns entry is pending")
		      ^
pkg/dns/source/feedback.go:70:9: S1039: unnecessary use of fmt.Sprintf (gosimple)
		msg = fmt.Sprintf("dns entry deleted")
		      ^
pkg/controller/provider/google/handler.go:78:19: SA1019: googledns.New is deprecated: please use NewService instead. To provide a custom HTTP client, use option.WithHTTPClient. If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.  (staticcheck)
	h.service, err = googledns.New(h.client)
	                 ^
pkg/controller/provider/google/handler.go:104:3: S1011: should replace loop with `raw = append(raw, resp.ManagedZones...)` (gosimple)
		for _, zone := range resp.ManagedZones {
		^
pkg/dns/mapping.go:83:5: S1017: should replace this `if` statement with an unconditional `strings.TrimPrefix` (gosimple)
				if strings.HasPrefix(dns, ".") {
				^
  1. . Run golint ./pkg/... ./cmd/... and ensure that there quite a lot of findings. Expand Details to see them in the time of writing this issue.
pkg/apis/dns/register.go:20:2: exported const GroupName should have comment (or a comment on this block) or be unexported
pkg/apis/dns/v1alpha1/dnsentry.go:25:6: exported type DNSEntryList should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsentry.go:36:6: exported type DNSEntry should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsentry.go:43:6: exported type DNSEntrySpec should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsentry.go:45:2: struct field OwnerId should be OwnerID
pkg/apis/dns/v1alpha1/dnsentry.go:52:6: exported type DNSEntryStatus should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsowner.go:25:6: exported type DNSOwnerList should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsowner.go:36:6: exported type DNSOwner should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsowner.go:42:6: exported type DNSOwnerSpec should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsowner.go:43:2: struct field OwnerId should be OwnerID
pkg/apis/dns/v1alpha1/dnsprovider.go:27:6: exported type DNSProviderList should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsprovider.go:38:6: exported type DNSProvider should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsprovider.go:45:6: exported type DNSProviderSpec should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsprovider.go:53:6: exported type DNSSelection should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsprovider.go:58:6: exported type DNSProviderStatus should have comment or be unexported
pkg/apis/dns/v1alpha1/dnsprovider.go:66:6: exported type DNSSelectionStatus should have comment or be unexported
pkg/apis/dns/v1alpha1/register.go:28:2: exported const Version should have comment (or a comment on this block) or be unexported
pkg/apis/dns/v1alpha1/register.go:55:2: exported var SchemeBuilder should have comment or be unexported
pkg/apis/dns/v1alpha1/state.go:19:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/apis/dns/v1alpha1/state.go:19:7: exported const STATE_PENDING should have comment or be unexported
pkg/apis/dns/v1alpha1/state.go:20:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/apis/dns/v1alpha1/state.go:20:7: exported const STATE_ERROR should have comment or be unexported
pkg/apis/dns/v1alpha1/state.go:21:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/apis/dns/v1alpha1/state.go:21:7: exported const STATE_INVALID should have comment or be unexported
pkg/apis/dns/v1alpha1/state.go:22:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/apis/dns/v1alpha1/state.go:22:7: exported const STATE_STALE should have comment or be unexported
pkg/apis/dns/v1alpha1/state.go:23:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/apis/dns/v1alpha1/state.go:23:7: exported const STATE_READY should have comment or be unexported
pkg/apis/dns/v1alpha1/state.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/apis/dns/v1alpha1/state.go:24:7: exported const STATE_DELETING should have comment or be unexported
pkg/controller/provider/alicloud/access.go:32:1: exported function GetDNSName should have comment or be unexported
pkg/controller/provider/alicloud/access.go:39:1: exported function GetRR should have comment or be unexported
pkg/controller/provider/alicloud/access.go:50:6: exported type Access should have comment or be unexported
pkg/controller/provider/alicloud/access.go:62:1: exported function NewAccess should have comment or be unexported
pkg/controller/provider/alicloud/access.go:62:16: func parameter accessKeyId should be accessKeyID
pkg/controller/provider/alicloud/access.go:70:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/alicloud/access.go:77:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/alicloud/access.go:101:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/alicloud/access.go:126:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/alicloud/access.go:139:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/alicloud/access.go:152:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/alicloud/access.go:160:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/alicloud/factory.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/alicloud/factory.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/alicloud/factory.go:26:5: exported var Factory should have comment or be unexported
pkg/controller/provider/alicloud/handler.go:29:6: exported type Handler should have comment or be unexported
pkg/controller/provider/alicloud/handler.go:38:1: exported function NewHandler should have comment or be unexported
pkg/controller/provider/alicloud/handler.go:70:1: exported method Handler.Release should have comment or be unexported
pkg/controller/provider/alicloud/handler.go:74:1: exported method Handler.GetZones should have comment or be unexported
pkg/controller/provider/alicloud/handler.go:121:1: exported method Handler.GetZoneState should have comment or be unexported
pkg/controller/provider/alicloud/handler.go:142:1: exported method Handler.ReportZoneStateConflict should have comment or be unexported
pkg/controller/provider/alicloud/handler.go:146:1: exported method Handler.ExecuteRequests should have comment or be unexported
pkg/controller/provider/alicloud/state.go:26:6: exported type Record should have comment or be unexported
pkg/controller/provider/alicloud/state.go:28:1: exported method Record.GetType should have comment or be unexported
pkg/controller/provider/alicloud/state.go:29:1: exported method Record.GetId should have comment or be unexported
pkg/controller/provider/alicloud/state.go:29:18: method GetId should be GetID
pkg/controller/provider/alicloud/state.go:30:1: exported method Record.GetDNSName should have comment or be unexported
pkg/controller/provider/alicloud/state.go:31:1: exported method Record.GetValue should have comment or be unexported
pkg/controller/provider/alicloud/state.go:37:1: exported method Record.GetTTL should have comment or be unexported
pkg/controller/provider/alicloud/state.go:38:1: exported method Record.SetTTL should have comment or be unexported
pkg/controller/provider/alicloud/state.go:39:1: exported method Record.Copy should have comment or be unexported
pkg/controller/provider/aws/execution.go:30:6: exported type Change should have comment or be unexported
pkg/controller/provider/aws/execution.go:35:6: exported type Execution should have comment or be unexported
pkg/controller/provider/aws/execution.go:44:1: exported function NewExecution should have comment or be unexported
pkg/controller/provider/aws/execution.go:62:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/aws/execution.go:85:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/aws/execution.go:89:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/aws/factory.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/aws/factory.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/aws/factory.go:26:5: exported var Factory should have comment or be unexported
pkg/controller/provider/aws/handler.go:36:6: exported type Handler should have comment or be unexported
pkg/controller/provider/aws/handler.go:45:6: exported type AWSConfig should have comment or be unexported
pkg/controller/provider/aws/handler.go:45:6: type name will be used as aws.AWSConfig by other packages, and that stutters; consider calling this Config
pkg/controller/provider/aws/handler.go:51:1: exported function NewHandler should have comment or be unexported
pkg/controller/provider/aws/handler.go:106:1: exported method Handler.Release should have comment or be unexported
pkg/controller/provider/aws/handler.go:110:1: exported method Handler.GetZones should have comment or be unexported
pkg/controller/provider/aws/handler.go:176:1: exported method Handler.GetZoneState should have comment or be unexported
pkg/controller/provider/aws/handler.go:230:1: exported method Handler.ReportZoneStateConflict should have comment or be unexported
pkg/controller/provider/aws/handler.go:234:1: exported method Handler.ExecuteRequests should have comment or be unexported
pkg/controller/provider/aws/handler.go:260:1: exported method Handler.MapTarget should have comment or be unexported
pkg/controller/provider/aws/handler.go:272:46: method parameter vpcId should be vpcID
pkg/controller/provider/aws/handler.go:272:78: method parameter hostedZoneId should be hostedZoneID
pkg/controller/provider/aws/handler.go:286:49: method parameter vpcId should be vpcID
pkg/controller/provider/aws/handler.go:286:81: method parameter hostedZoneId should be hostedZoneID
pkg/controller/provider/aws/handler.go:300:33: method parameter hostedZoneId should be hostedZoneID
pkg/controller/provider/aws/handler.go:314:53: method parameter hostedZoneId should be hostedZoneID
pkg/controller/provider/aws/handler.go:314:74: method parameter vpcId should be vpcID
pkg/controller/provider/aws/handler.go:331:53: method parameter hostedZoneId should be hostedZoneID
pkg/controller/provider/aws/handler.go:331:74: method parameter vpcId should be vpcID
pkg/controller/provider/azure/execution.go:29:6: exported type Change should have comment or be unexported
pkg/controller/provider/azure/execution.go:34:6: exported type Execution should have comment or be unexported
pkg/controller/provider/azure/execution.go:43:1: exported function NewExecution should have comment or be unexported
pkg/controller/provider/azure/execution.go:50:2: don't use underscores in Go names; const bs_ok should be bsOk
pkg/controller/provider/azure/execution.go:51:2: don't use underscores in Go names; const bs_invalidType should be bsInvalidType
pkg/controller/provider/azure/execution.go:52:2: don't use underscores in Go names; const bs_empty should be bsEmpty
pkg/controller/provider/azure/execution.go:53:2: don't use underscores in Go names; const bs_dryrun should be bsDryrun
pkg/controller/provider/azure/execution.go:54:2: don't use underscores in Go names; const bs_invalidName should be bsInvalidName
pkg/controller/provider/azure/factory.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/azure/factory.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/azure/factory.go:26:5: exported var Factory should have comment or be unexported
pkg/controller/provider/azure/handler.go:36:6: exported type Handler should have comment or be unexported
pkg/controller/provider/azure/handler.go:47:1: exported function NewHandler should have comment or be unexported
pkg/controller/provider/azure/handler.go:105:1: exported method Handler.Release should have comment or be unexported
pkg/controller/provider/azure/handler.go:109:1: exported method Handler.GetZones should have comment or be unexported
pkg/controller/provider/azure/handler.go:171:1: exported method Handler.GetZoneState should have comment or be unexported
pkg/controller/provider/azure/handler.go:220:1: exported method Handler.ReportZoneStateConflict should have comment or be unexported
pkg/controller/provider/azure/handler.go:224:1: exported method Handler.ExecuteRequests should have comment or be unexported
pkg/controller/provider/azure/controller/controller.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/azure/controller/controller.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/cloudflare/access.go:25:6: exported type Access should have comment or be unexported
pkg/controller/provider/cloudflare/access.go:27:14: interface method parameter zoneId should be zoneID
pkg/controller/provider/cloudflare/access.go:37:1: exported function NewAccess should have comment or be unexported
pkg/controller/provider/cloudflare/access.go:45:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/cloudflare/access.go:59:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/cloudflare/access.go:59:33: method parameter zoneId should be zoneID
pkg/controller/provider/cloudflare/access.go:73:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/cloudflare/access.go:89:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/cloudflare/access.go:105:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/cloudflare/access.go:112:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/cloudflare/factory.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/cloudflare/factory.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/cloudflare/factory.go:26:5: exported var Factory should have comment or be unexported
pkg/controller/provider/cloudflare/handler.go:28:6: exported type Handler should have comment or be unexported
pkg/controller/provider/cloudflare/handler.go:37:1: exported function NewHandler should have comment or be unexported
pkg/controller/provider/cloudflare/handler.go:70:1: exported method Handler.Release should have comment or be unexported
pkg/controller/provider/cloudflare/handler.go:74:1: exported method Handler.GetZones should have comment or be unexported
pkg/controller/provider/cloudflare/handler.go:120:1: exported method Handler.GetZoneState should have comment or be unexported
pkg/controller/provider/cloudflare/handler.go:140:1: exported method Handler.ReportZoneStateConflict should have comment or be unexported
pkg/controller/provider/cloudflare/handler.go:144:1: exported method Handler.ExecuteRequests should have comment or be unexported
pkg/controller/provider/cloudflare/state.go:26:6: exported type Record should have comment or be unexported
pkg/controller/provider/cloudflare/state.go:28:1: exported method Record.GetType should have comment or be unexported
pkg/controller/provider/cloudflare/state.go:29:1: exported method Record.GetId should have comment or be unexported
pkg/controller/provider/cloudflare/state.go:29:18: method GetId should be GetID
pkg/controller/provider/cloudflare/state.go:30:1: exported method Record.GetDNSName should have comment or be unexported
pkg/controller/provider/cloudflare/state.go:31:1: exported method Record.GetValue should have comment or be unexported
pkg/controller/provider/cloudflare/state.go:37:1: exported method Record.GetTTL should have comment or be unexported
pkg/controller/provider/cloudflare/state.go:38:1: exported method Record.SetTTL should have comment or be unexported
pkg/controller/provider/cloudflare/state.go:39:1: exported method Record.Copy should have comment or be unexported
pkg/controller/provider/compound/factory.go:21:7: exported const NAME should have comment or be unexported
pkg/controller/provider/compound/factory.go:23:5: exported var Factory should have comment or be unexported
pkg/controller/provider/compound/factory.go:25:1: exported function Register should have comment or be unexported
pkg/controller/provider/compound/factory.go:29:1: exported function MustRegister should have comment or be unexported
pkg/controller/provider/google/execution.go:31:6: exported type Execution should have comment or be unexported
pkg/controller/provider/google/execution.go:40:1: exported function NewExecution should have comment or be unexported
pkg/controller/provider/google/execution.go:54:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/google/execution.go:83:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/provider/google/execution.go:105:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/controller/provider/google/factory.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/google/factory.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/google/factory.go:26:5: exported var Factory should have comment or be unexported
pkg/controller/provider/google/handler.go:35:6: exported type Handler should have comment or be unexported
pkg/controller/provider/google/handler.go:47:1: exported function NewHandler should have comment or be unexported
pkg/controller/provider/google/handler.go:92:1: exported method Handler.Release should have comment or be unexported
pkg/controller/provider/google/handler.go:96:1: exported method Handler.GetZones should have comment or be unexported
pkg/controller/provider/google/handler.go:156:1: exported method Handler.GetZoneState should have comment or be unexported
pkg/controller/provider/google/handler.go:182:1: exported method Handler.ReportZoneStateConflict should have comment or be unexported
pkg/controller/provider/google/handler.go:186:1: exported method Handler.ExecuteRequests should have comment or be unexported
pkg/controller/provider/google/controller/controller.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/google/controller/controller.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/mock/factory.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/mock/factory.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/mock/factory.go:26:5: exported var Factory should have comment or be unexported
pkg/controller/provider/mock/handler.go:28:6: exported type Handler should have comment or be unexported
pkg/controller/provider/mock/handler.go:36:6: exported type MockConfig should have comment or be unexported
pkg/controller/provider/mock/handler.go:36:6: type name will be used as mock.MockConfig by other packages, and that stutters; consider calling this Config
pkg/controller/provider/mock/handler.go:42:1: exported function NewHandler should have comment or be unexported
pkg/controller/provider/mock/handler.go:73:1: exported method Handler.Release should have comment or be unexported
pkg/controller/provider/mock/handler.go:77:1: exported method Handler.GetZones should have comment or be unexported
pkg/controller/provider/mock/handler.go:86:1: exported method Handler.GetZoneState should have comment or be unexported
pkg/controller/provider/mock/handler.go:94:1: exported method Handler.ReportZoneStateConflict should have comment or be unexported
pkg/controller/provider/mock/handler.go:98:1: exported method Handler.ExecuteRequests should have comment or be unexported
pkg/controller/provider/mock/controller/controller.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/mock/controller/controller.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/openstack/execution.go:28:6: exported type Change should have comment or be unexported
pkg/controller/provider/openstack/execution.go:33:6: exported type Execution should have comment or be unexported
pkg/controller/provider/openstack/execution.go:41:1: exported function NewExecution should have comment or be unexported
pkg/controller/provider/openstack/factory.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/openstack/factory.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/provider/openstack/factory.go:26:5: exported var Factory should have comment or be unexported
pkg/controller/provider/openstack/handler.go:201:1: exported method Handler.ReportZoneStateConflict should have comment or be unexported
pkg/controller/provider/openstack/handler_test.go:48:21: method buildNextId should be buildNextID
pkg/controller/provider/openstack/handler_test.go:58:21: method Id should be ID
pkg/controller/provider/openstack/controller/controller.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/provider/openstack/controller/controller.go:24:7: exported const TYPE_CODE should have comment or be unexported
pkg/controller/source/dnsentry/controller.go:27:5: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/source/dnsentry/handler.go:29:6: exported type DNSEntrySource should have comment or be unexported
pkg/controller/source/dnsentry/handler.go:29:6: type name will be used as dnsentry.DNSEntrySource by other packages, and that stutters; consider calling this Source
pkg/controller/source/dnsentry/handler.go:40:1: exported function NewDNSEntrySource should have comment or be unexported
pkg/controller/source/dnsentry/handler.go:44:1: exported method DNSEntrySource.CreateDNSFeedback should have comment or be unexported
pkg/controller/source/dnsentry/handler.go:44:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/source/dnsentry/handler.go:53:1: exported method DNSEntrySource.GetDNSInfo should have comment or be unexported
pkg/controller/source/dnsentry/handler.go:53:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/source/ingress/controller.go:24:5: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/source/ingress/handler.go:29:6: exported type IngressSource should have comment or be unexported
pkg/controller/source/ingress/handler.go:29:6: type name will be used as ingress.IngressSource by other packages, and that stutters; consider calling this Source
pkg/controller/source/ingress/handler.go:33:1: exported function NewIngressSource should have comment or be unexported
pkg/controller/source/ingress/handler.go:37:1: exported method IngressSource.GetDNSInfo should have comment or be unexported
pkg/controller/source/ingress/handler.go:37:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/source/ingress/handler.go:56:1: exported method IngressSource.GetTargets should have comment or be unexported
pkg/controller/source/ingress/handler.go:56:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/controller/source/service/controller.go:24:5: don't use ALL_CAPS in Go names; use CamelCase
pkg/controller/source/service/handler.go:32:1: exported function GetTargets should have comment or be unexported
pkg/crds/crds.go:26:5: exported var DNSOwnerCRD should have comment or be unexported
pkg/crds/crds.go:34:5: exported var DNSProviderCRD should have comment or be unexported
pkg/crds/crds.go:48:5: exported var DNSEntryCRD should have comment or be unexported
pkg/dns/cache.go:19:6: exported type GroupKey should have comment or be unexported
pkg/dns/cache.go:23:6: exported type GroupInfo should have comment or be unexported
pkg/dns/cache.go:25:6: exported type Group should have comment or be unexported
pkg/dns/cache.go:31:6: exported type Cache should have comment or be unexported
pkg/dns/const.go:20:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/const.go:20:7: exported const DEFAULT_CLASS should have comment or be unexported
pkg/dns/const.go:21:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/const.go:21:7: exported const ANNOTATION_GROUP should have comment or be unexported
pkg/dns/const.go:22:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/const.go:22:7: exported const CLASS_ANNOTATION should have comment or be unexported
pkg/dns/const.go:23:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/const.go:23:7: exported const REALM_ANNOTATION should have comment or be unexported
pkg/dns/dnsset.go:52:6: exported type DNSSets should have comment or be unexported
pkg/dns/dnsset.go:52:6: type name will be used as dns.DNSSets by other packages, and that stutters; consider calling this Sets
pkg/dns/dnsset.go:54:1: exported method DNSSets.AddRecordSetFromProvider should have comment or be unexported
pkg/dns/dnsset.go:61:1: exported method DNSSets.AddRecordSet should have comment or be unexported
pkg/dns/dnsset.go:70:1: exported method DNSSets.RemoveRecordSet should have comment or be unexported
pkg/dns/dnsset.go:80:1: exported method DNSSets.Clone should have comment or be unexported
pkg/dns/dnsset.go:93:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/dnsset.go:93:2: exported const ATTR_OWNER should have comment (or a comment on this block) or be unexported
pkg/dns/dnsset.go:94:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/dnsset.go:95:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/dnsset.go:98:6: exported type DNSSet should have comment or be unexported
pkg/dns/dnsset.go:98:6: type name will be used as dns.DNSSet by other packages, and that stutters; consider calling this Set
pkg/dns/dnsset.go:103:1: exported method DNSSet.GetAttr should have comment or be unexported
pkg/dns/dnsset.go:103:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/dnsset.go:111:1: exported method DNSSet.SetAttr should have comment or be unexported
pkg/dns/dnsset.go:111:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/dnsset.go:121:1: exported method DNSSet.IsOwnedBy should have comment or be unexported
pkg/dns/dnsset.go:121:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/dnsset.go:126:1: exported method DNSSet.IsForeign should have comment or be unexported
pkg/dns/dnsset.go:126:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/dnsset.go:131:1: exported method DNSSet.GetOwner should have comment or be unexported
pkg/dns/dnsset.go:131:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/dnsset.go:135:1: exported method DNSSet.SetOwner should have comment or be unexported
pkg/dns/dnsset.go:135:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/dnsset.go:140:1: exported method DNSSet.SetRecordSet should have comment or be unexported
pkg/dns/dnsset.go:140:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/dnsset.go:148:1: exported function NewDNSSet should have comment or be unexported
pkg/dns/mapping.go:27:5: exported var TxtPrefix should have comment or be unexported
pkg/dns/mapping.go:29:1: exported function AlignHostname should have comment or be unexported
pkg/dns/mapping.go:36:1: exported function NormalizeHostname should have comment or be unexported
pkg/dns/mapping.go:46:1: exported function MapToProvider should have comment or be unexported
pkg/dns/mapping.go:70:1: exported function MapFromProvider should have comment or be unexported
pkg/dns/mapping.go:87:11: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/records.go:24:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/records.go:24:7: exported const RS_META should have comment or be unexported
pkg/dns/records.go:25:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/records.go:25:7: exported const RS_ALIAS should have comment or be unexported
pkg/dns/records.go:27:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/records.go:27:7: exported const RS_TXT should have comment or be unexported
pkg/dns/records.go:28:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/records.go:28:7: exported const RS_CNAME should have comment or be unexported
pkg/dns/records.go:29:7: don't use underscores in Go names; const RS_A should be RSA
pkg/dns/records.go:29:7: exported const RS_A should have comment or be unexported
pkg/dns/records.go:31:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/records.go:31:7: exported const RS_NS should have comment or be unexported
pkg/dns/records.go:37:6: exported type RecordSets should have comment or be unexported
pkg/dns/records.go:38:6: exported type Records should have comment or be unexported
pkg/dns/records.go:40:6: exported type Record should have comment or be unexported
pkg/dns/records.go:44:1: exported method Record.Clone should have comment or be unexported
pkg/dns/records.go:44:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/records.go:48:6: exported type RecordSet should have comment or be unexported
pkg/dns/records.go:55:1: exported function NewRecordSet should have comment or be unexported
pkg/dns/records.go:62:1: exported method RecordSet.Clone should have comment or be unexported
pkg/dns/records.go:62:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/records.go:70:1: exported method RecordSet.Length should have comment or be unexported
pkg/dns/records.go:70:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/records.go:77:1: exported method RecordSet.Add should have comment or be unexported
pkg/dns/records.go:77:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/records.go:84:1: exported method RecordSet.RecordString should have comment or be unexported
pkg/dns/records.go:84:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/records.go:97:1: exported method RecordSet.Match should have comment or be unexported
pkg/dns/records.go:97:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/records.go:121:1: exported method RecordSet.GetAttr should have comment or be unexported
pkg/dns/records.go:121:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/records.go:133:1: exported method RecordSet.SetAttr should have comment or be unexported
pkg/dns/records.go:133:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/records.go:145:1: exported method RecordSet.DiffTo should have comment or be unexported
pkg/dns/records.go:145:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils.go:24:1: exported function SupportedRecordType should have comment or be unexported
pkg/dns/utils.go:32:1: exported function DNSNameMatcher should have comment or be unexported
pkg/dns/utils.go:32:6: func name will be used as dns.DNSNameMatcher by other packages, and that stutters; consider calling this NameMatcher
pkg/dns/provider/changemodel.go:38:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/changemodel.go:38:2: exported const R_CREATE should have comment (or a comment on this block) or be unexported
pkg/dns/provider/changemodel.go:39:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/changemodel.go:40:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/changemodel.go:43:6: exported type ChangeRequests should have comment or be unexported
pkg/dns/provider/changemodel.go:45:6: exported type ChangeRequest should have comment or be unexported
pkg/dns/provider/changemodel.go:53:1: exported function NewChangeRequest should have comment or be unexported
pkg/dns/provider/changemodel.go:57:6: exported type ChangeGroup should have comment or be unexported
pkg/dns/provider/changemodel.go:69:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:103:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:118:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:121:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:124:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:127:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:136:6: exported type ChangeModel should have comment or be unexported
pkg/dns/provider/changemodel.go:147:6: exported type ChangeResult should have comment or be unexported
pkg/dns/provider/changemodel.go:153:1: exported function NewChangeModel should have comment or be unexported
pkg/dns/provider/changemodel.go:164:1: exported method ChangeModel.IsStale should have comment or be unexported
pkg/dns/provider/changemodel.go:164:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:168:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:177:1: exported method ChangeModel.ZoneId should have comment or be unexported
pkg/dns/provider/changemodel.go:177:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:177:26: method ZoneId should be ZoneID
pkg/dns/provider/changemodel.go:181:1: exported method ChangeModel.Domain should have comment or be unexported
pkg/dns/provider/changemodel.go:181:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:185:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:193:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:197:1: exported method ChangeModel.Setup should have comment or be unexported
pkg/dns/provider/changemodel.go:197:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:229:1: exported method ChangeModel.Check should have comment or be unexported
pkg/dns/provider/changemodel.go:229:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:232:1: exported method ChangeModel.Apply should have comment or be unexported
pkg/dns/provider/changemodel.go:232:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:235:1: exported method ChangeModel.Delete should have comment or be unexported
pkg/dns/provider/changemodel.go:235:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:239:1: exported method ChangeModel.Exec should have comment or be unexported
pkg/dns/provider/changemodel.go:239:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:280:10: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/provider/changemodel.go:344:1: exported method ChangeModel.Cleanup should have comment or be unexported
pkg/dns/provider/changemodel.go:344:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:356:1: exported method ChangeModel.Update should have comment or be unexported
pkg/dns/provider/changemodel.go:356:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:371:1: exported method ChangeModel.Owns should have comment or be unexported
pkg/dns/provider/changemodel.go:371:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:375:1: exported method ChangeModel.IsForeign should have comment or be unexported
pkg/dns/provider/changemodel.go:375:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:379:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:391:1: exported method ChangeModel.AddTargets should have comment or be unexported
pkg/dns/provider/changemodel.go:391:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/changemodel.go:434:1: exported function AddRecord should have comment or be unexported
pkg/dns/provider/config.go:27:1: exported method DNSHandlerConfig.GetRequiredProperty should have comment or be unexported
pkg/dns/provider/config.go:31:1: exported method DNSHandlerConfig.GetProperty should have comment or be unexported
pkg/dns/provider/config.go:36:1: exported method DNSHandlerConfig.GetRequiredIntProperty should have comment or be unexported
pkg/dns/provider/config.go:44:1: exported method DNSHandlerConfig.GetDefaultedProperty should have comment or be unexported
pkg/dns/provider/config.go:52:1: exported method DNSHandlerConfig.GetDefaultedIntProperty should have comment or be unexported
pkg/dns/provider/config.go:95:1: exported method DNSHandlerConfig.FillRequiredProperty should have comment or be unexported
pkg/dns/provider/config.go:107:1: exported method DNSHandlerConfig.FillRequiredIntProperty should have comment or be unexported
pkg/dns/provider/config.go:123:1: exported method DNSHandlerConfig.FillDefaultedIntProperty should have comment or be unexported
pkg/dns/provider/const.go:28:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:28:2: exported const OPT_IDENTIFIER should have comment (or a comment on this block) or be unexported
pkg/dns/provider/const.go:29:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:30:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:31:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:32:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:33:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:34:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:35:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:36:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:37:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:39:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/const.go:41:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/context.go:31:6: exported type Context should have comment or be unexported
pkg/dns/provider/context.go:53:6: exported type DefaultContext should have comment or be unexported
pkg/dns/provider/context.go:60:1: exported function NewDefaultContext should have comment or be unexported
pkg/dns/provider/context.go:64:1: exported method DefaultContext.GetContext should have comment or be unexported
pkg/dns/provider/context.go:64:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:68:1: exported method DefaultContext.IsReady should have comment or be unexported
pkg/dns/provider/context.go:68:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:72:1: exported method DefaultContext.GetByExample should have comment or be unexported
pkg/dns/provider/context.go:72:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:76:1: exported method DefaultContext.GetIntOption should have comment or be unexported
pkg/dns/provider/context.go:76:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:80:1: exported method DefaultContext.Enqueue should have comment or be unexported
pkg/dns/provider/context.go:80:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:84:1: exported method DefaultContext.EnqueueCommand should have comment or be unexported
pkg/dns/provider/context.go:84:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:88:1: exported method DefaultContext.EnqueueKey should have comment or be unexported
pkg/dns/provider/context.go:88:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:92:1: exported method DefaultContext.HasFinalizer should have comment or be unexported
pkg/dns/provider/context.go:92:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:96:1: exported method DefaultContext.SetFinalizer should have comment or be unexported
pkg/dns/provider/context.go:96:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:100:1: exported method DefaultContext.RemoveFinalizer should have comment or be unexported
pkg/dns/provider/context.go:100:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:104:1: exported method DefaultContext.GetSecretPropertiesByRef should have comment or be unexported
pkg/dns/provider/context.go:104:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/context.go:108:1: exported method DefaultContext.GetPoolPeriod should have comment or be unexported
pkg/dns/provider/context.go:108:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/controller.go:38:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/controller.go:38:7: exported const CONTROLLER_GROUP_DNS_CONTROLLERS should have comment or be unexported
pkg/dns/provider/controller.go:40:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/controller.go:40:7: exported const TARGET_CLUSTER should have comment or be unexported
pkg/dns/provider/controller.go:41:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/controller.go:41:7: exported const PROVIDER_CLUSTER should have comment or be unexported
pkg/dns/provider/controller.go:47:1: exported function DNSController should have comment or be unexported
pkg/dns/provider/controller.go:95:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/controller.go:95:7: exported const KEY_STATE should have comment or be unexported
pkg/dns/provider/controller.go:97:1: exported function DNSReconcilerType should have comment or be unexported
pkg/dns/provider/controller.go:105:1: exported function Create should have comment or be unexported
pkg/dns/provider/controller.go:124:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/controller.go:129:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/controller.go:134:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/controller.go:143:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/controller.go:148:10: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/provider/controller.go:154:10: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/provider/controller.go:160:10: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/provider/controller.go:169:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/controller.go:185:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/default.go:25:6: exported type DefaultDNSZoneState should have comment or be unexported
pkg/dns/provider/default.go:29:1: exported method DefaultDNSZoneState.GetDNSSets should have comment or be unexported
pkg/dns/provider/default.go:29:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/default.go:33:1: exported function NewDNSZoneState should have comment or be unexported
pkg/dns/provider/default.go:41:6: exported type DefaultDNSHostedZone should have comment or be unexported
pkg/dns/provider/default.go:50:1: exported method DefaultDNSHostedZone.Key should have comment or be unexported
pkg/dns/provider/default.go:50:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/default.go:57:1: exported method DefaultDNSHostedZone.ProviderType should have comment or be unexported
pkg/dns/provider/default.go:57:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/default.go:61:1: exported method DefaultDNSHostedZone.Id should have comment or be unexported
pkg/dns/provider/default.go:61:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/default.go:61:35: method Id should be ID
pkg/dns/provider/default.go:65:1: exported method DefaultDNSHostedZone.Domain should have comment or be unexported
pkg/dns/provider/default.go:65:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/default.go:69:1: exported method DefaultDNSHostedZone.ForwardedDomains should have comment or be unexported
pkg/dns/provider/default.go:69:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/default.go:73:1: exported method DefaultDNSHostedZone.IsPrivate should have comment or be unexported
pkg/dns/provider/default.go:73:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/default.go:77:1: exported function NewDNSHostedZone should have comment or be unexported
pkg/dns/provider/default.go:81:1: exported function CopyDNSHostedZone should have comment or be unexported
pkg/dns/provider/entry.go:43:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/entry.go:43:7: exported const MSG_PRESERVED should have comment or be unexported
pkg/dns/provider/entry.go:45:6: exported type EntryPremise should have comment or be unexported
pkg/dns/provider/entry.go:52:1: exported method EntryPremise.Equals should have comment or be unexported
pkg/dns/provider/entry.go:52:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:56:1: exported method EntryPremise.NotifyChange should have comment or be unexported
pkg/dns/provider/entry.go:56:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:73:6: exported type EntryVersion should have comment or be unexported
pkg/dns/provider/entry.go:88:1: exported function NewEntryVersion should have comment or be unexported
pkg/dns/provider/entry.go:103:1: exported method EntryVersion.RequiresUpdateFor should have comment or be unexported
pkg/dns/provider/entry.go:103:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:130:1: exported method EntryVersion.IsValid should have comment or be unexported
pkg/dns/provider/entry.go:130:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:134:1: exported method EntryVersion.IsDeleting should have comment or be unexported
pkg/dns/provider/entry.go:134:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:138:1: exported method EntryVersion.Object should have comment or be unexported
pkg/dns/provider/entry.go:138:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:142:1: exported method EntryVersion.Message should have comment or be unexported
pkg/dns/provider/entry.go:142:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:146:1: exported method EntryVersion.ZoneId should have comment or be unexported
pkg/dns/provider/entry.go:146:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:146:27: method ZoneId should be ZoneID
pkg/dns/provider/entry.go:150:1: exported method EntryVersion.State should have comment or be unexported
pkg/dns/provider/entry.go:150:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:154:1: exported method EntryVersion.ClusterKey should have comment or be unexported
pkg/dns/provider/entry.go:154:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:158:1: exported method EntryVersion.ObjectName should have comment or be unexported
pkg/dns/provider/entry.go:158:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:162:1: exported method EntryVersion.DNSName should have comment or be unexported
pkg/dns/provider/entry.go:162:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:166:1: exported method EntryVersion.Targets should have comment or be unexported
pkg/dns/provider/entry.go:166:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:170:1: exported method EntryVersion.Description should have comment or be unexported
pkg/dns/provider/entry.go:170:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:174:1: exported method EntryVersion.TTL should have comment or be unexported
pkg/dns/provider/entry.go:174:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:178:1: exported method EntryVersion.Interval should have comment or be unexported
pkg/dns/provider/entry.go:178:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:182:1: exported method EntryVersion.IsResponsible should have comment or be unexported
pkg/dns/provider/entry.go:182:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:186:1: exported method EntryVersion.ProviderType should have comment or be unexported
pkg/dns/provider/entry.go:186:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:190:1: exported method EntryVersion.OwnerId should have comment or be unexported
pkg/dns/provider/entry.go:190:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:190:27: method OwnerId should be OwnerID
pkg/dns/provider/entry.go:269:1: exported method EntryVersion.Setup should have comment or be unexported
pkg/dns/provider/entry.go:269:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:436:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:466:1: exported method EntryVersion.UpdateStatus should have comment or be unexported
pkg/dns/provider/entry.go:466:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:560:6: exported type Entry should have comment or be unexported
pkg/dns/provider/entry.go:571:1: exported function NewEntry should have comment or be unexported
pkg/dns/provider/entry.go:582:1: exported method Entry.Trigger should have comment or be unexported
pkg/dns/provider/entry.go:582:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:586:1: exported method Entry.IsActive should have comment or be unexported
pkg/dns/provider/entry.go:586:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:594:1: exported method Entry.IsModified should have comment or be unexported
pkg/dns/provider/entry.go:594:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:598:1: exported method Entry.CreatedAt should have comment or be unexported
pkg/dns/provider/entry.go:598:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:602:1: exported method Entry.Update should have comment or be unexported
pkg/dns/provider/entry.go:602:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:631:1: exported method Entry.Before should have comment or be unexported
pkg/dns/provider/entry.go:631:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:646:6: exported type Entries should have comment or be unexported
pkg/dns/provider/entry.go:648:1: exported method Entries.AddEntry should have comment or be unexported
pkg/dns/provider/entry.go:648:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:657:1: exported method Entries.Delete should have comment or be unexported
pkg/dns/provider/entry.go:657:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:674:6: exported type EntryList should have comment or be unexported
pkg/dns/provider/entry.go:676:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:680:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:684:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:688:1: exported method EntryList.Sort should have comment or be unexported
pkg/dns/provider/entry.go:688:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:692:1: exported method EntryList.Lock should have comment or be unexported
pkg/dns/provider/entry.go:692:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:699:1: exported method EntryList.Unlock should have comment or be unexported
pkg/dns/provider/entry.go:699:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/entry.go:705:1: exported function StatusMessage should have comment or be unexported
pkg/dns/provider/entry.go:708:1: exported function StatusMessagef should have comment or be unexported
pkg/dns/provider/entry.go:712:1: exported function Provider should have comment or be unexported
pkg/dns/provider/factory.go:26:6: exported type DNSHandlerCreatorFunction should have comment or be unexported
pkg/dns/provider/factory.go:28:6: exported type Factory should have comment or be unexported
pkg/dns/provider/factory.go:36:1: exported function NewDNSHandlerFactory should have comment or be unexported
pkg/dns/provider/factory.go:44:1: exported method Factory.IsResponsibleFor should have comment or be unexported
pkg/dns/provider/factory.go:44:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:48:1: exported method Factory.TypeCodes should have comment or be unexported
pkg/dns/provider/factory.go:48:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:52:1: exported method Factory.Name should have comment or be unexported
pkg/dns/provider/factory.go:52:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:56:1: exported method Factory.Create should have comment or be unexported
pkg/dns/provider/factory.go:56:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:63:1: exported method Factory.SupportZoneStateCache should have comment or be unexported
pkg/dns/provider/factory.go:63:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:72:6: exported type CompoundFactory should have comment or be unexported
pkg/dns/provider/factory.go:80:1: exported function NewDNSHandlerCompoundFactory should have comment or be unexported
pkg/dns/provider/factory.go:84:1: exported method CompoundFactory.Add should have comment or be unexported
pkg/dns/provider/factory.go:84:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:98:1: exported method CompoundFactory.IsResponsibleFor should have comment or be unexported
pkg/dns/provider/factory.go:98:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:103:1: exported method CompoundFactory.TypeCodes should have comment or be unexported
pkg/dns/provider/factory.go:103:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:107:1: exported method CompoundFactory.Name should have comment or be unexported
pkg/dns/provider/factory.go:107:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:111:1: exported method CompoundFactory.Create should have comment or be unexported
pkg/dns/provider/factory.go:111:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/factory.go:119:1: exported method CompoundFactory.SupportZoneStateCache should have comment or be unexported
pkg/dns/provider/factory.go:119:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/foreign.go:37:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/foreign.go:43:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/inmemory.go:31:6: exported type InMemory should have comment or be unexported
pkg/dns/provider/inmemory.go:36:1: exported function NewInMemory should have comment or be unexported
pkg/dns/provider/inmemory.go:40:1: exported method InMemory.GetZones should have comment or be unexported
pkg/dns/provider/inmemory.go:51:1: exported method InMemory.FindHostedZone should have comment or be unexported
pkg/dns/provider/inmemory.go:62:1: exported method InMemory.CloneZoneState should have comment or be unexported
pkg/dns/provider/inmemory.go:75:1: exported method InMemory.SetZone should have comment or be unexported
pkg/dns/provider/inmemory.go:83:1: exported method InMemory.DeleteZone should have comment or be unexported
pkg/dns/provider/inmemory.go:89:1: exported method InMemory.AddZone should have comment or be unexported
pkg/dns/provider/inmemory.go:102:1: exported method InMemory.Apply should have comment or be unexported
pkg/dns/provider/inmemory.go:102:26: method parameter zoneId should be zoneID
pkg/dns/provider/inmemory.go:136:6: exported type DumpDNSHostedZone should have comment or be unexported
pkg/dns/provider/inmemory.go:139:2: struct field Id should be ID
pkg/dns/provider/inmemory.go:144:6: exported type ZoneDump should have comment or be unexported
pkg/dns/provider/inmemory.go:148:6: exported type FullDump should have comment or be unexported
pkg/dns/provider/inmemory.go:152:1: exported method InMemory.BuildFullDump should have comment or be unexported
pkg/dns/provider/inmemory.go:158:6: range var zoneId should be zoneID
pkg/dns/provider/inmemory.go:164:34: method parameter zoneId should be zoneID
pkg/dns/provider/interface.go:34:6: exported type Config should have comment or be unexported
pkg/dns/provider/interface.go:47:1: exported function NewConfigForController should have comment or be unexported
pkg/dns/provider/interface.go:107:6: exported type DNSHostedZone should have comment or be unexported
pkg/dns/provider/interface.go:116:6: exported type DNSHostedZones should have comment or be unexported
pkg/dns/provider/interface.go:118:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/interface.go:134:6: exported type DNSHandlerConfig should have comment or be unexported
pkg/dns/provider/interface.go:144:6: exported type DNSZoneState should have comment or be unexported
pkg/dns/provider/interface.go:149:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:149:2: exported const M_LISTZONES should have comment (or a comment on this block) or be unexported
pkg/dns/provider/interface.go:150:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:152:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:153:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:155:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:156:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:158:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:159:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:161:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:162:2: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/provider/interface.go:165:6: exported type Metrics should have comment or be unexported
pkg/dns/provider/interface.go:166:14: don't use underscores in Go names; interface method parameter request_type should be requestType
pkg/dns/provider/interface.go:169:6: exported type DNSHandler should have comment or be unexported
pkg/dns/provider/interface.go:179:6: exported type DefaultDNSHandler should have comment or be unexported
pkg/dns/provider/interface.go:183:1: exported function NewDefaultDNSHandler should have comment or be unexported
pkg/dns/provider/interface.go:187:1: exported method DefaultDNSHandler.ProviderType should have comment or be unexported
pkg/dns/provider/interface.go:187:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/interface.go:191:1: exported method DefaultDNSHandler.MapTarget should have comment or be unexported
pkg/dns/provider/interface.go:191:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/interface.go:197:6: exported type DNSHandlerFactory should have comment or be unexported
pkg/dns/provider/interface.go:205:6: exported type DNSProviders should have comment or be unexported
pkg/dns/provider/interface.go:207:6: exported type DNSProvider should have comment or be unexported
pkg/dns/provider/interface.go:226:6: exported type DoneHandler should have comment or be unexported
pkg/dns/provider/ownercache.go:28:6: exported type OwnerInfo should have comment or be unexported
pkg/dns/provider/ownercache.go:33:6: exported type OwnerCache should have comment or be unexported
pkg/dns/provider/ownercache.go:41:1: exported function NewOwnerCache should have comment or be unexported
pkg/dns/provider/ownercache.go:49:1: exported method OwnerCache.IsResponsibleFor should have comment or be unexported
pkg/dns/provider/ownercache.go:49:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/ownercache.go:55:1: exported method OwnerCache.GetIds should have comment or be unexported
pkg/dns/provider/ownercache.go:55:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/ownercache.go:61:1: exported method OwnerCache.UpdateOwner should have comment or be unexported
pkg/dns/provider/ownercache.go:61:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/ownercache.go:65:1: exported method OwnerCache.UpdateOwnerData should have comment or be unexported
pkg/dns/provider/ownercache.go:65:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/ownercache.go:81:1: exported method OwnerCache.DeleteOwner should have comment or be unexported
pkg/dns/provider/ownercache.go:81:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/ownercache.go:93:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/ownercache.go:106:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:44:7: exported const ZoneCachePrefix should have comment or be unexported
pkg/dns/provider/provider.go:46:1: exported method DNSProviders.LookupFor should have comment or be unexported
pkg/dns/provider/provider.go:46:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:63:6: exported type DNSAccount should have comment or be unexported
pkg/dns/provider/provider.go:74:1: exported method DNSAccount.AddRequests should have comment or be unexported
pkg/dns/provider/provider.go:74:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:78:1: exported method DNSAccount.ProviderType should have comment or be unexported
pkg/dns/provider/provider.go:78:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:82:1: exported method DNSAccount.Hash should have comment or be unexported
pkg/dns/provider/provider.go:82:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:86:1: exported method DNSAccount.GetZones should have comment or be unexported
pkg/dns/provider/provider.go:86:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:90:1: exported method DNSAccount.GetZoneState should have comment or be unexported
pkg/dns/provider/provider.go:90:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:94:1: exported method DNSAccount.ReportZoneStateConflict should have comment or be unexported
pkg/dns/provider/provider.go:94:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:98:1: exported method DNSAccount.ExecuteRequests should have comment or be unexported
pkg/dns/provider/provider.go:98:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:102:1: exported method DNSAccount.MapTarget should have comment or be unexported
pkg/dns/provider/provider.go:102:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:106:1: exported method DNSAccount.Release should have comment or be unexported
pkg/dns/provider/provider.go:106:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:110:6: exported type AccountCache should have comment or be unexported
pkg/dns/provider/provider.go:117:1: exported function NewAccountCache should have comment or be unexported
pkg/dns/provider/provider.go:121:1: exported method AccountCache.Get should have comment or be unexported
pkg/dns/provider/provider.go:121:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:174:1: exported method AccountCache.Release should have comment or be unexported
pkg/dns/provider/provider.go:174:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:191:1: exported method AccountCache.Hash should have comment or be unexported
pkg/dns/provider/provider.go:191:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:226:2: don't use underscores in Go names; struct field def_include should be defInclude
pkg/dns/provider/provider.go:227:2: don't use underscores in Go names; struct field def_exclude should be defExclude
pkg/dns/provider/provider.go:230:2: don't use underscores in Go names; struct field included_zones should be includedZones
pkg/dns/provider/provider.go:231:2: don't use underscores in Go names; struct field excluded_zones should be excludedZones
pkg/dns/provider/provider.go:239:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:243:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:258:9: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/provider/provider.go:330:2: don't use underscores in Go names; var included_zones should be includedZones
pkg/dns/provider/provider.go:331:2: don't use underscores in Go names; var excluded_zones should be excludedZones
pkg/dns/provider/provider.go:422:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:426:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:430:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:434:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:438:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:442:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:446:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:450:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:459:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:463:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:473:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:499:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:510:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:519:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:523:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/provider.go:527:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:47:6: exported type DNSNames should have comment or be unexported
pkg/dns/provider/state.go:92:1: exported function NewDNSState should have comment or be unexported
pkg/dns/provider/state.go:92:75: exported func NewDNSState returns unexported type *provider.state, which can be annoying to use
pkg/dns/provider/state.go:130:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:134:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:159:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:170:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:183:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:187:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:191:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:195:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:199:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:203:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:207:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:211:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:217:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:223:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:227:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:232:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:247:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:256:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:266:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:270:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:276:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:300:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:318:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:375:11: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/provider/state.go:385:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:392:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:398:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:409:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:467:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:475:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:482:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:506:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:515:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:523:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:530:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:586:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:597:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:606:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:675:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:694:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:706:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:712:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:728:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:734:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:747:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:754:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:763:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:770:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:783:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:850:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:869:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:873:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:877:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:883:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:891:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:967:12: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/provider/state.go:987:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:994:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1009:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1052:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1058:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1066:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1088:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1126:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1137:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1158:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1175:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1212:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1241:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1299:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/state.go:1309:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/statusupdate.go:25:6: exported type FinalizerHandler should have comment or be unexported
pkg/dns/provider/statusupdate.go:30:6: exported type StatusUpdate should have comment or be unexported
pkg/dns/provider/statusupdate.go:38:1: exported function NewStatusUpdate should have comment or be unexported
pkg/dns/provider/statusupdate.go:43:1: exported method StatusUpdate.SetInvalid should have comment or be unexported
pkg/dns/provider/statusupdate.go:43:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/statusupdate.go:54:1: exported method StatusUpdate.Failed should have comment or be unexported
pkg/dns/provider/statusupdate.go:54:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/statusupdate.go:65:1: exported method StatusUpdate.Succeeded should have comment or be unexported
pkg/dns/provider/statusupdate.go:65:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/target.go:29:6: exported type Targets should have comment or be unexported
pkg/dns/provider/target.go:31:1: exported method Targets.Has should have comment or be unexported
pkg/dns/provider/target.go:31:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/target.go:41:1: exported method Targets.DifferFrom should have comment or be unexported
pkg/dns/provider/target.go:41:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/target.go:53:6: exported type Target should have comment or be unexported
pkg/dns/provider/target.go:66:1: exported function NewText should have comment or be unexported
pkg/dns/provider/target.go:70:1: exported function NewTarget should have comment or be unexported
pkg/dns/provider/target.go:74:1: exported function NewTargetFromEntryVersion should have comment or be unexported
pkg/dns/provider/utils.go:27:6: exported type NullMetrics should have comment or be unexported
pkg/dns/provider/utils.go:31:1: exported method NullMetrics.AddRequests should have comment or be unexported
pkg/dns/provider/utils.go:31:35: don't use underscores in Go names; method parameter request_type should be requestType
pkg/dns/provider/zone.go:41:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:45:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:49:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:62:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:73:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:78:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:84:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:90:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:94:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:94:28: method Id should be ID
pkg/dns/provider/zone.go:98:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:102:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zone.go:108:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/zonecache.go:36:6: exported type ZoneCacheConfig should have comment or be unexported
pkg/dns/provider/zonecache.go:45:1: exported method ZoneCacheConfig.CopyWithDisabledZoneStateCache should have comment or be unexported
pkg/dns/provider/zonecache.go:50:6: exported type ZoneCacheZoneUpdater should have comment or be unexported
pkg/dns/provider/zonecache.go:52:6: exported type ZoneCacheStateUpdater should have comment or be unexported
pkg/dns/provider/zonecache.go:54:6: exported type ZoneCache should have comment or be unexported
pkg/dns/provider/zonecache.go:63:6: exported type HandlerData should have comment or be unexported
pkg/dns/provider/zonecache.go:69:1: exported function NewZoneCache should have comment or be unexported
pkg/dns/provider/zonecache.go:75:9: if block ends with a return statement, so drop this else and outdent its block
pkg/dns/provider/zonecache.go:80:6: exported type ForwardedDomainsHandlerData should have comment or be unexported
pkg/dns/provider/zonecache.go:85:1: exported function NewForwardedDomainsHandlerData should have comment or be unexported
pkg/dns/provider/zonecache.go:91:1: exported method ForwardedDomainsHandlerData.GetForwardedDomains should have comment or be unexported
pkg/dns/provider/zonecache.go:97:1: exported method ForwardedDomainsHandlerData.SetForwardedDomains should have comment or be unexported
pkg/dns/provider/zonecache.go:108:1: exported method ForwardedDomainsHandlerData.Marshal should have comment or be unexported
pkg/dns/provider/zonecache.go:123:1: exported method ForwardedDomainsHandlerData.Unmarshal should have comment or be unexported
pkg/dns/provider/zonecache.go:146:1: exported method ForwardedDomainsHandlerData.DeleteZone should have comment or be unexported
pkg/dns/provider/zonecache.go:325:6: exported type PersistentZone should have comment or be unexported
pkg/dns/provider/zonecache.go:328:2: struct field Id should be ID
pkg/dns/provider/zonecache.go:334:1: exported method PersistentZone.ToDNSHostedZone should have comment or be unexported
pkg/dns/provider/zonecache.go:338:1: exported function NewPersistentZone should have comment or be unexported
pkg/dns/provider/zonecache.go:349:6: exported type PersistentZoneState should have comment or be unexported
pkg/dns/provider/zonecache.go:357:6: exported type PersistentHandlerData should have comment or be unexported
pkg/dns/provider/zonecache.go:363:7: exported const TempSuffix should have comment or be unexported
pkg/dns/provider/errors/errors.go:25:6: exported type AlreadyBusyForEntry should have comment or be unexported
pkg/dns/provider/errors/errors.go:34:6: exported type AlreadyBusyForOwner should have comment or be unexported
pkg/dns/provider/errors/errors.go:44:6: exported type NoSuchHostedZone should have comment or be unexported
pkg/dns/provider/errors/errors.go:45:2: struct field ZoneId should be ZoneID
pkg/dns/provider/raw/execution.go:28:6: exported type Executor should have comment or be unexported
pkg/dns/provider/raw/execution.go:41:6: exported type Execution should have comment or be unexported
pkg/dns/provider/raw/execution.go:55:1: exported function NewExecution should have comment or be unexported
pkg/dns/provider/raw/execution.go:68:1: exported method Execution.AddChange should have comment or be unexported
pkg/dns/provider/raw/execution.go:68:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/raw/execution.go:109:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/raw/execution.go:127:1: exported method Execution.SubmitChanges should have comment or be unexported
pkg/dns/provider/raw/execution.go:127:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/raw/execution.go:147:2: don't use underscores in Go names; var err_cnt should be errCnt
pkg/dns/provider/raw/execution.go:148:2: don't use underscores in Go names; var suc_cnt should be sucCnt
pkg/dns/provider/raw/execution.go:173:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/raw/execution.go:184:1: exported function ExecuteRequests should have comment or be unexported
pkg/dns/provider/raw/records.go:27:6: exported type Record should have comment or be unexported
pkg/dns/provider/raw/records.go:37:6: exported type RecordSet should have comment or be unexported
pkg/dns/provider/raw/records.go:38:6: exported type DNSSet should have comment or be unexported
pkg/dns/provider/raw/records.go:40:6: exported type ZoneState should have comment or be unexported
pkg/dns/provider/raw/records.go:47:1: exported function NewState should have comment or be unexported
pkg/dns/provider/raw/records.go:51:1: exported method ZoneState.GetDNSSets should have comment or be unexported
pkg/dns/provider/raw/records.go:51:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/raw/records.go:55:1: exported method ZoneState.AddRecord should have comment or be unexported
pkg/dns/provider/raw/records.go:55:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/raw/records.go:68:1: exported method ZoneState.GetRecord should have comment or be unexported
pkg/dns/provider/raw/records.go:68:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/raw/records.go:80:1: exported method ZoneState.CalculateDNSSets should have comment or be unexported
pkg/dns/provider/raw/records.go:80:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/provider/raw/records.go:93:1: exported function EnsureQuotedText should have comment or be unexported
pkg/dns/source/controller.go:32:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:32:7: exported const CONTROLLER_GROUP_DNS_SOURCES should have comment or be unexported
pkg/dns/source/controller.go:33:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:33:7: exported const TARGET_CLUSTER should have comment or be unexported
pkg/dns/source/controller.go:35:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:35:7: exported const DNS_ANNOTATION should have comment or be unexported
pkg/dns/source/controller.go:36:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:36:7: exported const TTL_ANNOTATION should have comment or be unexported
pkg/dns/source/controller.go:37:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:37:7: exported const PERIOD_ANNOTATION should have comment or be unexported
pkg/dns/source/controller.go:38:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:38:7: exported const CLASS_ANNOTATION should have comment or be unexported
pkg/dns/source/controller.go:40:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:40:7: exported const OPT_CLASS should have comment or be unexported
pkg/dns/source/controller.go:41:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:41:7: exported const OPT_TARGET_CLASS should have comment or be unexported
pkg/dns/source/controller.go:42:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:42:7: exported const OPT_EXCLUDE should have comment or be unexported
pkg/dns/source/controller.go:43:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:43:7: exported const OPT_KEY should have comment or be unexported
pkg/dns/source/controller.go:44:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:44:7: exported const OPT_NAMESPACE should have comment or be unexported
pkg/dns/source/controller.go:45:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:45:7: exported const OPT_NAMEPREFIX should have comment or be unexported
pkg/dns/source/controller.go:46:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:46:7: exported const OPT_TARGET_CREATOR_LABEL_NAME should have comment or be unexported
pkg/dns/source/controller.go:47:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:47:7: exported const OPT_TARGET_CREATOR_LABEL_VALUE should have comment or be unexported
pkg/dns/source/controller.go:48:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:48:7: exported const OPT_TARGET_OWNER_ID should have comment or be unexported
pkg/dns/source/controller.go:49:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:49:7: exported const OPT_TARGET_SET_IGNORE_OWNERS should have comment or be unexported
pkg/dns/source/controller.go:50:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:50:7: exported const OPT_TARGET_REALMS should have comment or be unexported
pkg/dns/source/controller.go:52:5: exported var ENTRY should have comment or be unexported
pkg/dns/source/controller.go:54:7: don't use ALL_CAPS in Go names; use CamelCase
pkg/dns/source/controller.go:54:7: exported const KEY_STATE should have comment or be unexported
pkg/dns/source/controller.go:60:1: exported function DNSSourceController should have comment or be unexported
pkg/dns/source/controller.go:86:5: exported var SlaveResources should have comment or be unexported
pkg/dns/source/controller.go:88:1: exported function MasterResourcesType should have comment or be unexported
pkg/dns/source/defaults.go:33:6: exported type Events should have comment or be unexported
pkg/dns/source/defaults.go:38:1: exported function NewEvents should have comment or be unexported
pkg/dns/source/defaults.go:42:1: exported method Events.HasEvents should have comment or be unexported
pkg/dns/source/defaults.go:42:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:48:1: exported method Events.GetEvents should have comment or be unexported
pkg/dns/source/defaults.go:48:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:59:1: exported method Events.Delete should have comment or be unexported
pkg/dns/source/defaults.go:59:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:64:1: exported method Events.Deleted should have comment or be unexported
pkg/dns/source/defaults.go:64:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:74:6: exported type DefaultDNSSource should have comment or be unexported
pkg/dns/source/defaults.go:81:1: exported function NewDefaultDNSSource should have comment or be unexported
pkg/dns/source/defaults.go:85:1: exported method DefaultDNSSource.Setup should have comment or be unexported
pkg/dns/source/defaults.go:85:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:88:1: exported method DefaultDNSSource.CreateDNSFeedback should have comment or be unexported
pkg/dns/source/defaults.go:88:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:92:1: exported method DefaultDNSSource.GetDNSInfo should have comment or be unexported
pkg/dns/source/defaults.go:92:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:103:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:107:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:111:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/defaults.go:115:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/dnsinfo.go:29:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/dnsinfo.go:47:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/feedback.go:31:6: exported type EventFeedback should have comment or be unexported
pkg/dns/source/feedback.go:36:1: exported function NewEventFeedback should have comment or be unexported
pkg/dns/source/feedback.go:40:1: exported method EventFeedback.Ready should have comment or be unexported
pkg/dns/source/feedback.go:40:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/feedback.go:47:1: exported method EventFeedback.Pending should have comment or be unexported
pkg/dns/source/feedback.go:47:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/feedback.go:54:1: exported method EventFeedback.Failed should have comment or be unexported
pkg/dns/source/feedback.go:54:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/feedback.go:61:1: exported method EventFeedback.Invalid should have comment or be unexported
pkg/dns/source/feedback.go:61:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/feedback.go:68:1: exported method EventFeedback.Deleted should have comment or be unexported
pkg/dns/source/feedback.go:68:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/feedback.go:75:1: exported method EventFeedback.Succeeded should have comment or be unexported
pkg/dns/source/feedback.go:75:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/feedback.go:78:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/interface.go:30:6: exported type DNSInfo should have comment or be unexported
pkg/dns/source/interface.go:38:6: exported type DNSFeedback should have comment or be unexported
pkg/dns/source/interface.go:47:6: exported type DNSSource should have comment or be unexported
pkg/dns/source/interface.go:57:6: exported type DNSSourceType should have comment or be unexported
pkg/dns/source/interface.go:63:6: exported type DNSTargetExtractor should have comment or be unexported
pkg/dns/source/interface.go:64:6: exported type DNSSourceCreator should have comment or be unexported
pkg/dns/source/interface.go:66:6: exported type DNSState should have comment or be unexported
pkg/dns/source/interface.go:71:6: exported type DNSCurrentState should have comment or be unexported
pkg/dns/source/interface.go:77:1: exported function NewDNSSouceTypeForExtractor should have comment or be unexported
pkg/dns/source/interface.go:81:1: exported function NewDNSSouceTypeForCreator should have comment or be unexported
pkg/dns/source/reconciler.go:40:1: exported function SourceReconciler should have comment or be unexported
pkg/dns/source/reconciler.go:40:6: func name will be used as source.SourceReconciler by other packages, and that stutters; consider calling this Reconciler
pkg/dns/source/reconciler.go:112:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/reconciler.go:117:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/reconciler.go:123:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/reconciler.go:163:2: don't use underscores in Go names; var obsolete_dns should be obsoleteDNS
pkg/dns/source/reconciler.go:277:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/reconciler.go:298:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/reconciler.go:334:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/reconciler.go:381:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/reconciler.go:436:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/slaves.go:34:1: exported function SlaveReconcilerType should have comment or be unexported
pkg/dns/source/slaves.go:55:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/slaves.go:71:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/slaves.go:129:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/slaves.go:147:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/state.go:31:1: exported function NewState should have comment or be unexported
pkg/dns/source/state.go:35:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/state.go:41:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/state.go:48:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/source/state.go:55:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/parallel.go:24:6: exported type Elements should have comment or be unexported
pkg/dns/utils/parallel.go:25:6: exported type Executor should have comment or be unexported
pkg/dns/utils/parallel.go:27:1: exported function ProcessElements should have comment or be unexported
pkg/dns/utils/utils.go:26:1: exported function Match should have comment or be unexported
pkg/dns/utils/utils.go:30:1: exported function MatchSet should have comment or be unexported
pkg/dns/utils/utils.go:40:6: exported type LogMessage should have comment or be unexported
pkg/dns/utils/utils.go:45:1: exported function NewLogMessage should have comment or be unexported
pkg/dns/utils/utils.go:49:1: exported method LogMessage.Get should have comment or be unexported
pkg/dns/utils/utils.go:49:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils.go:53:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils.go:71:1: exported method LogMessage.Infof should have comment or be unexported
pkg/dns/utils/utils.go:71:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils.go:75:1: exported method LogMessage.Errorf should have comment or be unexported
pkg/dns/utils/utils.go:75:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils.go:79:1: exported method LogMessage.Warnf should have comment or be unexported
pkg/dns/utils/utils.go:79:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils.go:83:1: exported method LogMessage.Debugf should have comment or be unexported
pkg/dns/utils/utils.go:83:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_entry.go:24:5: exported var DNSEntryType should have comment or be unexported
pkg/dns/utils/utils_entry.go:26:6: exported type DNSEntryObject should have comment or be unexported
pkg/dns/utils/utils_entry.go:30:1: exported method DNSEntryObject.DNSEntry should have comment or be unexported
pkg/dns/utils/utils_entry.go:30:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_entry.go:34:1: exported function DNSEntry should have comment or be unexported
pkg/dns/utils/utils_entry.go:41:1: exported method DNSEntryObject.Spec should have comment or be unexported
pkg/dns/utils/utils_entry.go:41:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_entry.go:44:1: exported method DNSEntryObject.Status should have comment or be unexported
pkg/dns/utils/utils_entry.go:44:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_entry.go:48:1: exported method DNSEntryObject.GetDNSName should have comment or be unexported
pkg/dns/utils/utils_entry.go:48:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_entry.go:51:1: exported method DNSEntryObject.GetTargets should have comment or be unexported
pkg/dns/utils/utils_entry.go:51:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_entry.go:54:1: exported method DNSEntryObject.GetOwnerId should have comment or be unexported
pkg/dns/utils/utils_entry.go:54:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_entry.go:54:29: method GetOwnerId should be GetOwnerID
pkg/dns/utils/utils_entry.go:57:1: exported method DNSEntryObject.GetTTL should have comment or be unexported
pkg/dns/utils/utils_entry.go:57:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_entry.go:60:1: exported method DNSEntryObject.GetCNameLookupInterval should have comment or be unexported
pkg/dns/utils/utils_entry.go:60:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_owner.go:24:5: exported var DNSOwnerType should have comment or be unexported
pkg/dns/utils/utils_owner.go:26:6: exported type DNSOwnerObject should have comment or be unexported
pkg/dns/utils/utils_owner.go:30:1: exported method DNSOwnerObject.DNSOwner should have comment or be unexported
pkg/dns/utils/utils_owner.go:30:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_owner.go:34:1: exported function DNSOwner should have comment or be unexported
pkg/dns/utils/utils_owner.go:41:1: exported method DNSOwnerObject.Spec should have comment or be unexported
pkg/dns/utils/utils_owner.go:41:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_owner.go:45:1: exported method DNSOwnerObject.GetOwnerId should have comment or be unexported
pkg/dns/utils/utils_owner.go:45:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_owner.go:45:29: method GetOwnerId should be GetOwnerID
pkg/dns/utils/utils_owner.go:49:1: exported method DNSOwnerObject.IsActive should have comment or be unexported
pkg/dns/utils/utils_owner.go:49:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_provider.go:31:5: exported var DNSProviderType should have comment or be unexported
pkg/dns/utils/utils_provider.go:33:6: exported type DNSProviderObject should have comment or be unexported
pkg/dns/utils/utils_provider.go:37:1: exported method DNSProviderObject.DNSProvider should have comment or be unexported
pkg/dns/utils/utils_provider.go:37:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_provider.go:41:1: exported function DNSProviderKey should have comment or be unexported
pkg/dns/utils/utils_provider.go:45:1: exported method DNSProviderObject.Spec should have comment or be unexported
pkg/dns/utils/utils_provider.go:45:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_provider.go:48:1: exported method DNSProviderObject.Status should have comment or be unexported
pkg/dns/utils/utils_provider.go:48:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_provider.go:52:1: exported method DNSProviderObject.TypeCode should have comment or be unexported
pkg/dns/utils/utils_provider.go:52:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_provider.go:56:1: exported method DNSProviderObject.SetStateWithError should have comment or be unexported
pkg/dns/utils/utils_provider.go:56:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_provider.go:74:1: exported method DNSProviderObject.SetState should have comment or be unexported
pkg/dns/utils/utils_provider.go:74:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_provider.go:87:1: exported method DNSProviderObject.SetSelection should have comment or be unexported
pkg/dns/utils/utils_provider.go:87:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/dns/utils/utils_provider.go:89:2: don't use underscores in Go names; var old_inc should be oldInc
pkg/dns/utils/utils_provider.go:94:2: don't use underscores in Go names; var old_exc should be oldExc
pkg/dns/utils/utils_provider.go:102:1: exported function DNSProvider should have comment or be unexported
pkg/dns/utils/utils_provider.go:109:1: exported function GetDNSProvider should have comment or be unexported
pkg/server/metrics/metrics.go:38:2: exported var Requests should have comment or be unexported
pkg/server/metrics/metrics.go:75:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/server/metrics/metrics.go:88:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/server/metrics/metrics.go:98:1: exported function DeleteAccount should have comment or be unexported
pkg/server/metrics/metrics.go:107:1: exported function ReportAccountProviders should have comment or be unexported
pkg/server/metrics/metrics.go:111:1: exported function AddRequests should have comment or be unexported
pkg/server/metrics/metrics.go:116:6: exported type ZoneProviderTypes should have comment or be unexported
pkg/server/metrics/metrics.go:121:1: exported method ZoneProviderTypes.Add should have comment or be unexported
pkg/server/metrics/metrics.go:121:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/server/metrics/metrics.go:127:1: exported method ZoneProviderTypes.Remove should have comment or be unexported
pkg/server/metrics/metrics.go:127:1: receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"
pkg/server/metrics/metrics.go:137:1: exported function ReportZoneEntries should have comment or be unexported
pkg/server/metrics/metrics.go:142:1: exported function DeleteZone should have comment or be unexported
cmd/compound/main.go:43:5: exported var Version should have comment or be unexported
cmd/dns/main.go:46:5: exported var Version should have comment or be unexported

The same finding are available under https://goreportcard.com/report/github.com/gardener/external-dns-management.

Anything else we need to know:

Environment:

dnsannotations.dns.gardener.cloud

Hi There

We are trying to install on rancher kubernetes cluster in one of the SAP internal datacenter cluster and getting this error.

Error: CustomResourceDefinition.apiextensions.k8s.io "dnsannotations.dns.gardener.cloud" is invalid: metadata.name: Invalid value: "dnsannotations.dns.gardener.cloud": must be spec.names.plural+"."+spec.group

Can someone help on this .

BR
Rushi.

ControllerRegistration tag is out of sync

What would you like to be added:
You can notice that for all of the extension controllers in the gardener org when you go to the example ControllerRegistration for given tag in git, the image tag in the ControllerRegistration will be the same as the git tag. For example see https://github.com/gardener/gardener-extension-provider-aws/blob/v1.7.1/example/controller-registration.yaml.

At least for me, this is convenient when applying ControllerRegistration. It is simply:

$ k apply -f https://github.com/gardener/gardener-extension-provider-aws/blob/v1.7.1/example/controller-registration.yaml

I tried the same for external-dns-management:

$ k apply -f https://raw.githubusercontent.com/gardener/external-dns-management/v0.7.11/examples/controller-registration.yaml

But you can notice that for https://raw.githubusercontent.com/gardener/external-dns-management/v0.7.11/examples/controller-registration.yaml, the image tag is v0.7.7-dev (the one I expect is to be v0.7.11, same as the git tag).

Why is this needed:
To make it easy when applying your ControllerRegistrations in your (local) setup.

DNSEntry cannot be created due to unknown owner

What happened:
The creation of new DNSEntrys sometimes leads to an undesirable error:

task "Ensuring nginx ingress DNS record" failed: Failed to create "ingress" DNS record: "DNS record \"ingress\" is not ready (status=Invalid, message=unknown owner id 'shoot--foo--bar-l18-b7247157-a5e4-4516-98e1-80d5aa0cc62b-gardener-ingress')" (status=Invalid, message=unknown owner id 'shoot--foo--bar-l18-b7247157-a5e4-4516-98e1-80d5aa0cc62b-gardener-ingress')

It self-heals after a short period of time.

What you expected to happen:
DNSEntry can be created without intermediate error.

How to reproduce it (as minimally and precisely as possible):
n/a, sorry

Anything else we need to know:
A quick chat with @MartinWeindel revealed that the root cause is probably that the control loops for DNSOwner and DNSEntry objects are independent of each other, leading to this race condition.

What are the TXT-records for?

Hi, when I add a new DNSEntry, it also creates 2 TXT-entries:

  • one containing "prefix=comment-"
  • one containing "owner=myprefix"

What are they for and can I disable this?

Sam

Static code analysis

Gardener informs its stakeholders in its CNCF CII Badge, that static code checks are applied by using Checkmarx. This repository has findings, which have to be assessed by the component owner(s). As required all prio high findings were already been immediately assessed. Please find the timeline until when to assess the remaining prio medium findings in the Wiki (restricted access). At the time being you can ignore the prio low findings. Please find background information and a link to the Checkmarx project for your repository in the Wiki (restricted access). In the Wiki (restricted access) you will as well find information how to get a Checkmarx user which is required to be able to do your assessment in the Checkmarx Web UI.

provide AWS Alias entry to reduce infra costs

Amazon Route 53 alias records provide a Route 53-specific extension to the DNS function. Alias records allow you to forward traffic to selected AWS resources, such as CloudFront distributions and Amazon S3 buckets. You can also forward traffic from one record in a hosted zone to another.

This reduces the cost of a cluster.

Right now - only entries for AWS LB are required....

Bildschirmfoto 2019-05-24 um 13 42 54

Static code analysis

Gardener informs its stakeholders in its CNCF CII Badge, that static code checks are applied by using Checkmarx. This repository has findings, which have to be assessed by the component owner(s). As required all prio high findings were already been immediately assessed. Please find the maximum processing times until when to assess the remaining prio medium findings in the SAP Security Response Team's Wiki (restricted access). At the time being you can ignore the prio low findings. Please find background information and a link to the Checkmarx project for your repository in the Wiki (restricted access). In the Wiki (restricted access) you will as well find information how to get a Checkmarx user which is required to be able to do your assessment in the Checkmarx Web UI.

Route53 provider doesn't correctly handle iam ACLs during the shoot removal

When a aws account has limited access to other zones, dns manager doesn't correctly handle the shoot deletion action:

task "Destroying internal domain DNS record" failed: retry failed with context deadline exceeded, last error: resource shoot--core--demo-reg/internal still exists

The zone is actually deleted, but logs contain error messages:

time="2019-08-20T07:36:04Z" level=info msg="aws-route53: dns: 5: cmd:hostedzone:Z2XJAY: too early (required delay between two reconcilations: 10s) -> skip and reschedule"
time="2019-08-20T07:36:04Z" level=info msg="aws-route53: dns: 5: cmd:hostedzone:Z2XJAY: reschedule \"cmd:hostedzone:Z2XJA\" after 9 seconds"
time="2019-08-20T07:36:04Z" level=info msg="aws-route53: dns: 0: cmd:hostedzone:Z1GALC: locking 0 entries for zone reconcilation"
time="2019-08-20T07:36:04Z" level=info msg="aws-route53: dns: 0: cmd:hostedzone:Z1GALC: reconcile ZONE Z1GALC (another.provate.zone) for 0 dns entries (0 stale)"
time="2019-08-20T07:36:04Z" level=info msg="aws-route53: dns: 0: cmd:hostedzone:Z1GALC: unlocking 0 entries"
time="2019-08-20T07:36:04Z" level=warning msg="aws-route53: dns: 0: cmd:hostedzone:Z1GALCI: AccessDenied: User: arn:aws:iam::123456789:user/gardener is not authorized to perform: route53:ListResourceRecordSets on resource: arn:aws:route53:::hostedzone/Z1GAL\n\tstatus code: 403, request id: dac459e4-1093-4459-8ff9-a581b6045196"
time="2019-08-20T07:36:04Z" level=error msg="aws-route53: dns: 0: cmd:hostedzone:Z1GALCI: command \"hostedzone:Z1GALCI\" failed: AccessDenied: User: arn:aws:iam::123456789:user/gardener is not authorized to perform: route53:ListResourceRecordSets on resource: arn:aws:route53:::hostedzone/Z1GALCI\n\tstatus code: 403, request id: dac459e4-1093-4459-8ff9-a581b6045196"
time="2019-08-20T07:36:04Z" level=warning msg="aws-route53: dns: 0: cmd:hostedzone:Z1GALC: add rate limited because of problem AccessDenied: User: arn:aws:iam::123456789:user/gardener is not authorized to perform: route53:ListResourceRecordSets on resource: arn:aws:route53:::hostedzone/Z1GAL\n\tstatus code: 403, request id: dac459e4-1093-4459-8ff9-a581b6045196: "
$ kubectl -n shoot--garden--soil get dnsprovider internal -o yaml
... ...
status:
  domains:
    included:
    - api.soil.foo.bar
  message: provider operational
  observedGeneration: 1
  state: Ready
  zones:
    included:
    - Z2XJAYE
    - Z3PKT9I
    - Z37GPQ
    - Z1GALC
    - Z2BPGM

The only zones, which have to be managed start with Z3* in our case. Other zones correspond to another project and must not be accessible by dns manager.

/cc @mandelsoft @afritzler

Add source controller for replicating DNSProviders

What would you like to be added:
Add a controller to replicate a DNSProvider from the source cluster to the target cluster, similar as it is already possible for DNSEntry. In the case of a DNSProvider the secret needs to be replicated, additionally.

Why is this needed:
In the context of Gardener you can an additional DNSProvider via the shoot manifest (see Manage DNS Providers). But this needs write permissions to the Gardener project, which is not always feasible from a shoot cluster.
If the DNSProvider can be created directly on the shoot cluster, RBAC permissions are only needed on the shoot cluster itself. The provider would be replicated to the control plane and handled like any other provider there.
This would simplify use cases like using kyma-runtime with Istio.

DNS entries without targets go to state stale and cannot be deleted anymore

What happened:
After deploying v0.8.2 we see a problem with DNS entries whose targets are removed (e.g. generated DNS entries for ingresses and services whose load balancer has been deleted). These entries go to state "Stale" and cannot be deleted anymore after changes introduced with PR #165 as the finalizer is not removed.

What you expected to happen:
These entries should go to state "invalid", the corresponding DNS records should be removed and it should be possible to delete them.

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know:

Environment:

Static code analysis

Gardener informs its stakeholders in its CNCF CII Badge, that static code checks are applied by using Checkmarx. This repository has findings, which have to be assessed by the component owner(s). As required all prio high findings were already been immediately assessed. Please find the timeline until when to assess the remaining prio medium findings in the Wiki (restricted access). At the time being you can ignore the prio low findings. Please find background information and a link to the Checkmarx project for your repository in the Wiki (restricted access). In the Wiki (restricted access) you will as well find information how to get a Checkmarx user which is required to be able to do your assessment in the Checkmarx Web UI.

DNS entry update target not work fine

What happened:

Name:         central
Namespace:    nightly
Labels:       app.kubernetes.io/managed-by=pulumi
Annotations:  API Version:  dns.gardener.cloud/v1alpha1
Kind:         DNSEntry
Metadata:
  Creation Timestamp:  2020-06-22T09:31:11Z
  Generation:          5
  Resource Version:    244664769
  Self Link:           /apis/dns.gardener.cloud/v1alpha1/namespaces/nightly/dnsentries/central
  UID:                 543e27b7-b57b-459b-83de-5c55caab58ba
Spec:
  Dns Name:  us-west-2.nightly.shared.EXAMPLE.com
  Targets:
    <new-target>
  Ttl:  120
Status:
  Message:              InvalidChangeBatch: [Tried to create resource record set [name='comment-us-west-2.nightly.shared.aws.EXAMPLE.com.', type='TXT'] but it already exists, Tried to create resource record set [name='us-west-2.nightly.shared.aws.EXAMPLE.com.', type='A'] but it already exists]
                        status code: 400, request id: 434c9c90-8aa8-4238-81dc-6def1ea3ef68
  Observed Generation:  2
  Provider:             nightly/external
  Provider Type:        aws-route53
  State:                Error
  Targets:
    <OLD-TARGET>
  Ttl:   120
  Zone:  -
Events:  <none>

I update target from an AWS nlb address to new AWS ALB address, but it will reporter InvalidChangeBatch...

What you expected to happen:
dns record will update successful

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know:

Environment:

Add lastUpdateTime to status fields

What would you like to be added:
As an operator I'd like to see a lastUpdateTime timestamp for the status sub resources of DNSEntry, DNSOwner, DNSProvider.

Example for DNSEntry:

status:
  lastUpdateTime: "2020-10-07T00:16:28Z"
  message: dns entry active
  observedGeneration: 1
  provider: provider-name
  providerType: provider-type
  state: Ready
  targets:
  - 8.8.4.4
  ttl: 600
  zone: xyz

The lastUpdateTime is only supposed to be updated if the DNS record itself is update or the state or message changes.

Why is this needed:
Exposing a lastUpdateTime timestamp provides essential information for troubleshooting.

Prometheus Metrics?

Are there any prometheus metrics available at the moment?

Information about the number of dns entries would be helpful and in particular number of dns entries with status "Error".

Empty target breaks the controller

If one of the DNSEntry has an empty target record it breaks reconciliation for all DNSEntries in the cluster

apiVersion: dns.gardener.cloud/v1alpha1
kind: DNSEntry
metadata:
  name: internal
spec:
  dnsName: foo.bar
  targets:
  - ""
  ttl: 120
status:
  message: "InvalidChangeBatch: [Invalid Resource Record: FATAL problem: DomainNameEmpty
    (Domain name is empty) encountered with '', Unparseable CNAME encountered, Invalid
    Resource Record: FATAL problem: DomainNameEmpty (Domain name is empty) encountered
    with '', Unparseable CNAME encountered]\n\tstatus code: 400, request id: 7f81ce33-74be-4941-a4f1-244290b4ac6f"
  observedGeneration: 2
  provider: SOME-PROVIDER
  providerType: aws-route53
  state: Error
  targets:
  - ""
  ttl: 120

I would recommend to not reconcile such DNS entries until all of their targets are DNS labels / IPv{4|6} addresses.

Static code analysis

Gardener informs its stakeholders in its CNCF CII Badge, that static code checks are applied by using Checkmarx. This repository has findings, which have to be assessed by the component owner(s). As required all prio high findings were already been immediately assessed. Please find the timeline until when to assess the remaining prio medium findings in the Wiki (restricted access). At the time being you can ignore the prio low findings. Please find background information and a link to the Checkmarx project for your repository in the Wiki (restricted access). In the Wiki (restricted access) you will as well find information how to get a Checkmarx user which is required to be able to do your assessment in the Checkmarx Web UI.

Alicloud provider crashes on wildcard domain on zone domain

What happened:
You have a hosted zone in the provider alicloud-dns with base domain of the zone e.g. base.of.hosted.zone.
If you now try to add a DNSEntry for the wildcard domain *.base.of.hosted.zone, the dns-controller-manager crashes with

E0916 11:04:58.994584       1 runtime.go:76] Observed a panic: OOPS: dnsname "*.comment-base.of.hosted.zone" does not match zone "base.of.hosted.zone"

What you expected to happen:
It should accept the DNSEntry and create the corresponding DNS records

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know:

Environment:

Option for creating DNSEntry without ingress annotation

Currently, it is required to add an annotation into ingress definition. The annotation also requires the host which is already in the spec. This is duplication and error-prone.

Is it possible to add an option so that the DNSEntry will be created without an annotation?

Align Helm and example resources with release

This repository offers a Helm Chart as well as an ControllerRegistration example file which are supposed to follow release cycles.

Therefore, the following fields should be updated during the release:

  • deployment.providerConfig.chart and deployment.providerConfig.values.image.tag in examples/gardener-controllerregistration.yaml
  • image.tag in charts/external-dns-management/values.yaml

Similar challenges were already tackled in gardener/controller-extensions and can serve as a reference:

Cannot run "golangci-lint run ./..."

What happened:
I have no success running "golangci-lint run ./..." for this repo.

How to reproduce it (as minimally and precisely as possible):

  1. Run golangci-lint run ./... and ensure it fails:
$ golangci-lint run ./...
WARN [runner] Can't run linter unused: buildir: analysis skipped: errors in package: [/Users/foo/go/src/github.com/gardener/external-dns-management/test/integration/helpers.go:25:9: undeclared name: testEnv /Users/foo/go/src/github.com/gardener/external-dns-management/test/integration/helpers.go:30:9: undeclared name: testEnv /Users/foo/go/src/github.com/gardener/external-dns-management/test/integration/helpers.go:37:9: undeclared name: testEnv /Users/foo/go/src/github.com/gardener/external-dns-management/test/integration/helpers.go:42:19: undeclared name: testEnv]
ERRO Running error: buildir: analysis skipped: errors in package: [/Users/foo/go/src/github.com/gardener/external-dns-management/test/integration/helpers.go:25:9: undeclared name: testEnv /Users/foo/go/src/github.com/gardener/external-dns-management/test/integration/helpers.go:30:9: undeclared name: testEnv /Users/foo/go/src/github.com/gardener/external-dns-management/test/integration/helpers.go:37:9: undeclared name: testEnv /Users/foo/go/src/github.com/gardener/external-dns-management/test/integration/helpers.go:42:19: undeclared name: testEnv]

go build also fails for ./test/...

$ go build ./test/...
# github.com/gardener/external-dns-management/test/integration
test/integration/helpers.go:25:9: undefined: testEnv
test/integration/helpers.go:30:9: undefined: testEnv
test/integration/helpers.go:37:9: undefined: testEnv
test/integration/helpers.go:42:19: undefined: testEnv

Anything else we need to know:

Environment:

$ golangci-lint --version
golangci-lint has version 1.24.0 built from 6fd4383 on 2020-03-15T11:30:52Z

$ go version
go version go1.13.6 darwin/amd64

wildcard dns entry directly on domain name of hosted zone produces wrong metadata dns name

What happened:
You have a hosted zone with a dns name like a.b.c and want to create a wildcard DNS entry *.a.b.c. With the dns provider openstack-designate, this DNS entry cannot be created, as the metadata DNS record is tried to be stored with the domain name *.comment-.a.b.c which is not allowed, as the second part ends with a dash.

What you expected to happen:

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know:

Environment:

Stale DNS entries are not getting ready after provider recovers

What happened:
In the Alicloud provider the GetZone method was throttled and failed always with errors. As a side effect the state of DNS entries have been set to Stale. After the throttled problem was resolved, the DNS entries were not getting ready, even as the DNS provider worked normally again and new DNS entries were dealt correctly.

What you expected to happen:

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know:

Environment:

Static code analysis

Gardener informs its stakeholders in its CNCF CII Badge, that static code checks are applied by using Checkmarx. This repository has findings, which have to be assessed by the component owner(s). As required all prio high findings were already been immediately assessed. Please find the maximum processing times until when to assess the remaining prio medium findings in the SAP Security Response Team's Wiki. At the time being you can ignore the prio low findings. Please find background information and a link to the Checkmarx project for your repository in the Wiki (restricted access). In the Wiki (restricted access) you will as well find information how to get a Checkmarx user which is required to be able to do your assessment in the Checkmarx Web UI.

DNSEntry cannot be created because of duplicates?

How to categorize this issue?

/area usability
/kind bug
/priority normal

What happened:
The creation of new DNSEntrys is sometimes erroneous with the following message:

task "Deploying external domain DNS record" failed: Failed to create "external" DNS record: "DNS record \"external\" is not ready (status=Error, message=InvalidChangeBatch: [Tried to create resource record set [name='comment-api.cluster.example.com.', type='TXT'] but it already exists, Tried to create resource record set [name='api.cluster.example.com.', type='A'] but it already exists]\n\tstatus code: 400, request id: dac27459-c70c-46f5-83b3-165d430de657)" (status=Error, message=InvalidChangeBatch: [Tried to create resource record set [name='comment-api.cluster.example.com.', type='TXT'] but it already exists, Tried to create resource record set [name='api.cluster.example.com.', type='A'] but it already exists]
    status code: 400, request id: dac27459-c70c-46f5-83b3-165d430de657)

After some time this error self-heals again and the DNSEntry comes up.

What you expected to happen:
DNSEntry can be created successfully without intermediate error

How to reproduce it (as minimally and precisely as possible):
n/a, sorry

VerticalPodAutoscaler defintion is missing

What would you like to be added:
The external-dns-management is the de-facto standard DNS extension for Gardener.
However, it lacks a VerticalPodAutoscaler definition and is thus not scaled at all, i.e, the resource limits are only defined statically. This increases ops effort and costs.
Please add a VPA definition to the Helm chart similar like most other extensions, e.g. https://github.com/gardener/gardener-extension-provider-aws/blob/master/charts/gardener-extension-provider-aws/templates/vpa.yaml.

/cc @MartinWeindel

Why is this needed:
Reduce ops-effort, improve scalability.

Add Cloudflare as a DNS provider

What would you like to be added:
I would like to see Cloudflare as a DNS provider
Why is this needed:
Cloudflare is one of the biggest names in the internet and is one of the largest DNS providers. We ourselves are using Cloudflare as our DNS provider and the cert-manager project itself has Cloudflare as a supported provider for ACME deployments.

Static code analysis

Gardener informs its stakeholders in its CNCF CII Badge, that static code checks are applied by using Checkmarx. This repository has findings, which have to be assessed by the component owner(s). As required all prio high findings were already been immediately assessed. Please find the timeline until when to assess the remaining prio medium findings in the Wiki (restricted access). At the time being you can ignore the prio low findings. Please find background information and a link to the Checkmarx project for your repository in the Wiki (restricted access). In the Wiki (restricted access) you will as well find information how to get a Checkmarx user which is required to be able to do your assessment in the Checkmarx Web UI.

Netlify Provisioner

What would you like to be added:

Iโ€™d be interested in a Netlify provisioner - they have a REST api with golang bindings: https://open-api.netlify.com/?_ga=2.248895943.1196130319.1608648345-501004096.1603318164#operation/deleteDnsRecord

Why is this needed:

The Tekton project uses Netlify for DNS - we would like to automate the creation of ingresses and provisioning of the DNS record for the subdomain to be associated with the ingress: tektoncd/plumbing#387

Go client: https://github.com/netlify/open-api#go-client

failed to install on openshift

With this error message in the log:

time="2019-10-29T17:34:38Z" level=warning msg="service-dns: default: 1: obj:default:/Service/kube-system/nginx-ingress-controller: reconcile failed: cannot create dns entry object for *.ing.xxxxx: dnsentries.dns.gardener.cloud \"nginx-ingress-controller-service-q4md5\" is forbidden: cannot set blockOwnerDeletion if an ownerReference refers to a resource you can't set finalizers on: , <nil> "

@rfranzke

DNS failures wrongly detected as non-retriable

What happened:
According to @vpnachev: DNS issues are detected as non-retriable errors. The DNS controller on the other hand does not respect shoot.tatus.lastOperation.state=Failed and updates the DNS records after a while, but the shoot will be in failed state as long as somebody manually retry the operation.

What you expected to happen:
Retry operation until it finishes or hits a time limit.

DNSEntry has no finalizer

The DNSEntry object has no finalizer although it creates infrastructure resources. This is dangerous when it comes to deletion of DNS entries.

Add Support For Service With Type: ClusterIP

What would you like to be added:

For current DNSAnnotation it only trace Type: LoadBalancer resource. If Type: ClusterIP can also be traced would be great.

Why is this needed:

The worker node in some k8s distribution do not resolve through core-dns, it may cause some problem like nfs service discovery.

Using external dns is a relative good workaround.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.