diff --git a/Makefile b/Makefile index 74ee98737..d8b7a74e5 100644 --- a/Makefile +++ b/Makefile @@ -32,10 +32,6 @@ else CONTROLLER_GEN=$(shell which controller-gen) endif -#? controller-gen-install: download controller-gen if necessary -controller-gen-install: - @scripts/install-tools.sh --generator - #? golangci-lint-install: Install golangci-lint tool golangci-lint-install: @scripts/install-tools.sh --golangci @@ -67,10 +63,11 @@ oas-lint: .PHONY: lint lint: licensecheck go-lint oas-lint -#? crd: Generates CRD using controller-gen +#? crd: Generates CRD using controller-gen and copy it into chart .PHONY: crd crd: controller-gen-install - ${CONTROLLER_GEN} crd:crdVersions=v1 paths="./endpoint/..." output:crd:stdout > docs/contributing/crd-source/crd-manifest.yaml + ${CONTROLLER_GEN} crd:crdVersions=v1 paths="./endpoint/..." output:crd:stdout > config/crd/standard/dnsendpoint.yaml + cp -f config/crd/standard/dnsendpoint.yaml charts/external-dns/crds/dnsendpoint.yaml #? test: The verify target runs tasks similar to the CI tasks, but without code coverage .PHONY: test diff --git a/charts/external-dns/crds/dnsendpoint.yaml b/charts/external-dns/crds/dnsendpoint.yaml index 822cd8503..88845aaae 100644 --- a/charts/external-dns/crds/dnsendpoint.yaml +++ b/charts/external-dns/crds/dnsendpoint.yaml @@ -1,9 +1,11 @@ +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: dnsendpoints.externaldns.k8s.io annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/external-dns/pull/2007 + controller-gen.kubebuilder.io/version: v0.17.2 + name: dnsendpoints.externaldns.k8s.io spec: group: externaldns.k8s.io names: @@ -13,90 +15,86 @@ spec: singular: dnsendpoint scope: Namespaced versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: DNSEndpointSpec defines the desired state of DNSEndpoint - properties: - endpoints: - items: - description: - Endpoint is a high-level way of a connection between - a service and an IP - properties: - dnsName: - description: The hostname of the DNS record + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: DNSEndpointSpec defines the desired state of DNSEndpoint + properties: + endpoints: + items: + description: Endpoint is a high-level way of a connection between + a service and an IP + properties: + dnsName: + description: The hostname of the DNS record + type: string + labels: + additionalProperties: type: string - labels: - additionalProperties: - type: string - description: Labels stores labels defined for the Endpoint + description: Labels stores labels defined for the Endpoint + type: object + providerSpecific: + description: ProviderSpecific stores provider specific config + items: + description: ProviderSpecificProperty holds the name and value + of a configuration which is specific to individual DNS providers + properties: + name: + type: string + value: + type: string type: object - providerSpecific: - description: ProviderSpecific stores provider specific config - items: - description: - ProviderSpecificProperty holds the name and value - of a configuration which is specific to individual DNS providers - properties: - name: - type: string - value: - type: string - type: object - type: array - recordTTL: - description: TTL for the record - format: int64 - type: integer - recordType: - description: - RecordType type of record, e.g. CNAME, A, AAAA, - SRV, TXT etc + type: array + recordTTL: + description: TTL for the record + format: int64 + type: integer + recordType: + description: RecordType type of record, e.g. CNAME, A, AAAA, + SRV, TXT etc + type: string + setIdentifier: + description: Identifier to distinguish multiple records with + the same name and type (e.g. Route53 records with routing + policies other than 'simple') + type: string + targets: + description: The targets the DNS record points to + items: type: string - setIdentifier: - description: - Identifier to distinguish multiple records with - the same name and type (e.g. Route53 records with routing - policies other than 'simple') - type: string - targets: - description: The targets the DNS record points to - items: - type: string - type: array - type: object - type: array - type: object - status: - description: DNSEndpointStatus defines the observed state of DNSEndpoint - properties: - observedGeneration: - description: The generation observed by the external-dns controller. - format: int64 - type: integer - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: array + type: object + type: array + type: object + status: + description: DNSEndpointStatus defines the observed state of DNSEndpoint + properties: + observedGeneration: + description: The generation observed by the external-dns controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/docs/sources/crd/crd-manifest.yaml b/config/crd/standard/dnsendpoint.yaml similarity index 98% rename from docs/sources/crd/crd-manifest.yaml rename to config/crd/standard/dnsendpoint.yaml index 5d4a44159..88845aaae 100644 --- a/docs/sources/crd/crd-manifest.yaml +++ b/config/crd/standard/dnsendpoint.yaml @@ -4,7 +4,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/external-dns/pull/2007 - controller-gen.kubebuilder.io/version: v0.15.0 + controller-gen.kubebuilder.io/version: v0.17.2 name: dnsendpoints.externaldns.k8s.io spec: group: externaldns.k8s.io diff --git a/docs/sources/crd.md b/docs/sources/crd.md index a7332f6b5..bd21ef005 100644 --- a/docs/sources/crd.md +++ b/docs/sources/crd.md @@ -81,11 +81,11 @@ Create the objects of CRD type by filling in the fields of CRD and DNS record wo ### Example -Here is an example [CRD manifest](crd/crd-manifest.yaml) generated by kubebuilder. +Here is an example [CRD manifest](https://github.com/kubernetes-sigs/external-dns/blob/HEAD/charts/external-dns/crds/dnsendpoint.yaml) generated by kubebuilder. Apply this to register the CRD ```sh -$ kubectl apply --validate=false -f docs/sources/crd/crd-manifest.yaml +$ kubectl apply --server-side=true -f "https://raw.githubusercontent.com/kubernetes-sigs/external-dns/master/config/crd/standard/dnsendpoint.yaml" customresourcedefinition.apiextensions.k8s.io "dnsendpoints.externaldns.k8s.io" created ``` diff --git a/endpoint/endpoint.go b/endpoint/endpoint.go index a8a385c57..bbf67f641 100644 --- a/endpoint/endpoint.go +++ b/endpoint/endpoint.go @@ -204,6 +204,7 @@ type EndpointKey struct { } // Endpoint is a high-level way of a connection between a service and an IP +// +kubebuilder:object:generate=true type Endpoint struct { // The hostname of the DNS record DNSName string `json:"dnsName,omitempty"` @@ -337,6 +338,7 @@ func FilterEndpointsByOwnerID(ownerID string, eps []*Endpoint) []*Endpoint { } // DNSEndpointSpec defines the desired state of DNSEndpoint +// +kubebuilder:object:generate=true type DNSEndpointSpec struct { Endpoints []*Endpoint `json:"endpoints,omitempty"` } diff --git a/endpoint/zz_generated.deepcopy.go b/endpoint/zz_generated.deepcopy.go index aaa69927d..ec07dace1 100644 --- a/endpoint/zz_generated.deepcopy.go +++ b/endpoint/zz_generated.deepcopy.go @@ -1,28 +1,11 @@ //go:build !ignore_autogenerated -// +build !ignore_autogenerated -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. +// Code generated by controller-gen. DO NOT EDIT. package endpoint import ( - "k8s.io/apimachinery/pkg/runtime" + runtime "k8s.io/apimachinery/pkg/runtime" ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. @@ -32,7 +15,6 @@ func (in *DNSEndpoint) DeepCopyInto(out *DNSEndpoint) { in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) out.Status = in.Status - return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSEndpoint. @@ -57,7 +39,7 @@ func (in *DNSEndpoint) DeepCopyObject() runtime.Object { func (in *DNSEndpointList) DeepCopyInto(out *DNSEndpointList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]DNSEndpoint, len(*in)) @@ -65,7 +47,6 @@ func (in *DNSEndpointList) DeepCopyInto(out *DNSEndpointList) { (*in)[i].DeepCopyInto(&(*out)[i]) } } - return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSEndpointList. @@ -93,15 +74,13 @@ func (in *DNSEndpointSpec) DeepCopyInto(out *DNSEndpointSpec) { in, out := &in.Endpoints, &out.Endpoints *out = make([]*Endpoint, len(*in)) for i := range *in { - if (*in)[i] == nil { - (*out)[i] = nil - } else { - (*out)[i] = new(Endpoint) - (*in)[i].DeepCopyInto((*out)[i]) + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(Endpoint) + (*in).DeepCopyInto(*out) } } } - return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSEndpointSpec. @@ -114,22 +93,6 @@ func (in *DNSEndpointSpec) DeepCopy() *DNSEndpointSpec { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DNSEndpointStatus) DeepCopyInto(out *DNSEndpointStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSEndpointStatus. -func (in *DNSEndpointStatus) DeepCopy() *DNSEndpointStatus { - if in == nil { - return nil - } - out := new(DNSEndpointStatus) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Endpoint) DeepCopyInto(out *Endpoint) { *out = *in @@ -148,11 +111,8 @@ func (in *Endpoint) DeepCopyInto(out *Endpoint) { if in.ProviderSpecific != nil { in, out := &in.ProviderSpecific, &out.ProviderSpecific *out = make(ProviderSpecific, len(*in)) - for key, val := range *in { - (*out)[key] = val - } + copy(*out, *in) } - return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Endpoint. @@ -164,67 +124,3 @@ func (in *Endpoint) DeepCopy() *Endpoint { in.DeepCopyInto(out) return out } - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in Labels) DeepCopyInto(out *Labels) { - { - in := &in - *out = make(Labels, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - return - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Labels. -func (in Labels) DeepCopy() Labels { - if in == nil { - return nil - } - out := new(Labels) - in.DeepCopyInto(out) - return *out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in ProviderSpecific) DeepCopyInto(out *ProviderSpecific) { - { - in := &in - *out = make(ProviderSpecific, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - return - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderSpecific. -func (in ProviderSpecific) DeepCopy() ProviderSpecific { - if in == nil { - return nil - } - out := new(ProviderSpecific) - in.DeepCopyInto(out) - return *out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in Targets) DeepCopyInto(out *Targets) { - { - in := &in - *out = make(Targets, len(*in)) - copy(*out, *in) - return - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Targets. -func (in Targets) DeepCopy() Targets { - if in == nil { - return nil - } - out := new(Targets) - in.DeepCopyInto(out) - return *out -} diff --git a/scripts/install-tools.sh b/scripts/install-tools.sh index 56b440778..54c8f2c40 100755 --- a/scripts/install-tools.sh +++ b/scripts/install-tools.sh @@ -15,7 +15,7 @@ # limitations under the License. # renovate: datasource=github-releases depName=kubernetes-sigs/controller-tools -CONTROLLER_TOOLS_GENERATOR_VERSION=v0.15.0 +CONTROLLER_TOOLS_GENERATOR_VERSION=v0.17.2 # renovate: datasource=github-releases depName=golangci/golangci-lint GOLANG_CI_LINTER_VERSION=v2.0.2