Skip to content

Commit 70b163d

Browse files
update deps to use k8s 1.22
Description Update deps to use k8s 1.22 Update controller-tools to 0.7.0 Update sigs.k8s.io/controller-runtime to 0.10.0 Update ENV TEST to 1.22
1 parent 9817db7 commit 70b163d

File tree

118 files changed

+2093
-189
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+2093
-189
lines changed

go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ require (
77
github.com/gobuffalo/flect v0.2.2
88
github.com/joelanford/go-apidiff v0.1.0
99
github.com/onsi/ginkgo v1.16.4
10-
github.com/onsi/gomega v1.13.0
10+
github.com/onsi/gomega v1.15.0
11+
github.com/sirupsen/logrus v1.8.1
1112
github.com/spf13/afero v1.2.2
1213
github.com/spf13/cobra v1.1.3
1314
github.com/spf13/pflag v1.0.5
1415
golang.org/x/tools v0.1.2
15-
k8s.io/apimachinery v0.21.2 // for `kubebuilder alpha config-gen`
16-
sigs.k8s.io/controller-runtime v0.9.2
16+
k8s.io/apimachinery v0.22.1 // for `kubebuilder alpha config-gen`
17+
sigs.k8s.io/controller-runtime v0.10.0
1718
sigs.k8s.io/controller-tools v0.6.0 // for `kubebuilder alpha config-gen`
1819
sigs.k8s.io/kustomize/kyaml v0.10.21 // for `kubebuilder alpha config-gen`
1920
sigs.k8s.io/yaml v1.2.0

go.sum

Lines changed: 117 additions & 27 deletions
Large diffs are not rendered by default.

pkg/model/resource/utils.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@ import (
2424
"github.com/gobuffalo/flect"
2525
)
2626

27+
const V1beta1 = "v1beta1"
28+
const V1 = "v1"
29+
2730
// validateAPIVersion validates CRD or Webhook versions
2831
func validateAPIVersion(version string) error {
2932
switch version {
30-
case "v1beta1", "v1":
33+
case V1beta1, V1:
3134
return nil
3235
default:
3336
return fmt.Errorf("API version must be one of: v1beta1, v1")

pkg/plugins/golang/v3/api.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) {
113113
fs.BoolVar(&p.options.DoController, "controller", true,
114114
"if set, generate the controller without prompting the user")
115115
p.controllerFlag = fs.Lookup("controller")
116+
117+
// (not required raise an error in this case)
118+
// nolint:errcheck,gosec
119+
fs.MarkDeprecated("crd-version", deprecateMsg)
116120
}
117121

118122
func (p *createAPISubcommand) InjectConfig(c config.Config) error {
@@ -182,6 +186,16 @@ func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error {
182186
}
183187

184188
func (p *createAPISubcommand) PostScaffold() error {
189+
190+
// Update the makefile to allow generate Webhooks to ensure backwards compatibility
191+
// todo: it should be removed for go/v4
192+
// nolint:lll,gosec
193+
if p.resource.API.CRDVersion == "v1beta1" {
194+
if err := applyScaffoldCustomizationsForVbeta1(); err != nil {
195+
return err
196+
}
197+
}
198+
185199
err := util.RunCmd("Update dependencies", "go", "mod", "tidy")
186200
if err != nil {
187201
return err

pkg/plugins/golang/v3/commons.go

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/*
2+
Copyright 2021 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package v3
18+
19+
import (
20+
"fmt"
21+
"io/ioutil"
22+
"path/filepath"
23+
"strings"
24+
25+
log "github.com/sirupsen/logrus"
26+
27+
"sigs.k8s.io/kubebuilder/v3/pkg/plugin/util"
28+
"sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds"
29+
"sigs.k8s.io/kubebuilder/v3/pkg/utils"
30+
)
31+
32+
const deprecateMsg = "The v1beta1 API version for CRDs and Webhooks are deprecated and are no longer supported since " +
33+
"the Kubernetes release 1.22. This flag no longer required to exist in future releases. Also, we would like to " +
34+
"recommend you no longer use these API versions." +
35+
"More info: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-22"
36+
37+
// Update the makefile to allow generate CRDs/Webhooks with v1beta1 to ensure backwards compatibility
38+
// nolint:lll,gosec
39+
func applyScaffoldCustomizationsForVbeta1() error {
40+
makefilePath := filepath.Join("Makefile")
41+
bs, err := ioutil.ReadFile(makefilePath)
42+
if err != nil {
43+
return err
44+
}
45+
if !strings.Contains(string(bs), "CRD_OPTIONS") {
46+
47+
log.Warn("The v1beta1 API version for CRDs and Webhooks are deprecated and are no longer supported " +
48+
"since the Kubernetes release 1.22. In order to help you out use these versions" +
49+
"we will need to try to update the Makefile and go.mod files of this project. Please," +
50+
"ensure that these changes were done accordingly with your customizations.\n" +
51+
"Also, we would like to recommend you no longer use these API versions." +
52+
"More info: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-22")
53+
54+
const makefileTarget = `$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases`
55+
const makefileTargetForV1beta1 = `$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases`
56+
57+
if err := utils.ReplaceInFile("Makefile", makefileTarget, makefileTargetForV1beta1); err != nil {
58+
fmt.Printf("unable to update the makefile to allow the usage of v1beta1: %s", err)
59+
}
60+
61+
const makegentarget = `
62+
manifests: controller-gen`
63+
const makegenV1beta1Options = `# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
64+
CRD_OPTIONS ?= "crd:crdVersions={v1beta1},trivialVersions=true,preserveUnknownFields=false"
65+
manifests: controller-gen`
66+
67+
if err := utils.ReplaceInFile("Makefile", makegentarget, makegenV1beta1Options); err != nil {
68+
log.Warnf("unable to update the Makefile with %s: %s", makegenV1beta1Options, err)
69+
}
70+
71+
// latest version of controller-tools where v1beta1 is supported
72+
const controllerToolsVersionForVBeta1 = "v0.6.2"
73+
if err := utils.ReplaceInFile("Makefile",
74+
fmt.Sprintf("controller-gen@%s",
75+
scaffolds.ControllerToolsVersion),
76+
fmt.Sprintf("controller-gen@%s",
77+
controllerToolsVersionForVBeta1)); err != nil {
78+
log.Warnf("unable to update the Makefile with %s: %s", fmt.Sprintf("controller-gen@%s",
79+
controllerToolsVersionForVBeta1), err)
80+
}
81+
82+
if err := utils.ReplaceInFile("Makefile",
83+
"ENVTEST_K8S_VERSION = 1.22",
84+
"ENVTEST_K8S_VERSION = 1.21"); err != nil {
85+
log.Warnf("unable to update the Makefile with %s: %s", "ENVTEST_K8S_VERSION = 1.21", err)
86+
}
87+
88+
// latest version of controller-runtime where v1beta1 is supported
89+
const controllerRuntimeVersionForVBeta1 = "v0.9.2"
90+
91+
if err := utils.ReplaceInFile("go.mod",
92+
fmt.Sprintf("sigs.k8s.io/controller-runtime %s", scaffolds.ControllerRuntimeVersion),
93+
fmt.Sprintf("sigs.k8s.io/controller-runtime %s", controllerRuntimeVersionForVBeta1)); err != nil {
94+
log.Warnf("unable to update the go.mod with sigs.k8s.io/controller-runtime %s: %s",
95+
controllerRuntimeVersionForVBeta1, err)
96+
}
97+
98+
if err := utils.ReplaceInFile("go.mod",
99+
"k8s.io/api v0.22.1",
100+
"k8s.io/api v0.21.2"); err != nil {
101+
log.Warnf("unable to update the go.mod with k8s.io/api v0.21.2: %s", err)
102+
}
103+
104+
if err := utils.ReplaceInFile("go.mod",
105+
"k8s.io/apimachinery v0.22.1",
106+
"k8s.io/apimachinery v0.21.2"); err != nil {
107+
log.Warnf("unable to update the go.mod with k8s.io/apimachinery v0.21.2: %s", err)
108+
}
109+
110+
if err := utils.ReplaceInFile("go.mod",
111+
"k8s.io/apimachinery v0.22.1",
112+
"k8s.io/apimachinery v0.21.2"); err != nil {
113+
log.Warnf("unable to update the go.mod with k8s.io/apimachinery v0.21.2: %s", err)
114+
}
115+
116+
err = util.RunCmd("Update dependencies", "go", "mod", "tidy")
117+
if err != nil {
118+
return err
119+
}
120+
}
121+
return nil
122+
}

pkg/plugins/golang/v3/scaffolds/init.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ import (
3030

3131
const (
3232
// ControllerRuntimeVersion is the kubernetes-sigs/controller-runtime version to be used in the project
33-
ControllerRuntimeVersion = "v0.9.2"
33+
ControllerRuntimeVersion = "v0.10.0"
3434
// ControllerToolsVersion is the kubernetes-sigs/controller-tools version to be used in the project
35-
ControllerToolsVersion = "v0.6.1"
35+
ControllerToolsVersion = "v0.7.0"
3636
// KustomizeVersion is the kubernetes-sigs/kustomize version to be used in the project
3737
KustomizeVersion = "v3.8.7"
3838

@@ -99,7 +99,9 @@ func (s *initScaffolder) Scaffold() error {
9999

100100
return scaffold.Execute(
101101
&templates.Main{},
102-
&templates.GoMod{ControllerRuntimeVersion: ControllerRuntimeVersion},
102+
&templates.GoMod{
103+
ControllerRuntimeVersion: ControllerRuntimeVersion,
104+
},
103105
&templates.GitIgnore{},
104106
&templates.Makefile{
105107
Image: imageName,

pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ type Webhook struct { // nolint:maligned
3636
// Is the Group domain for the Resource replacing '.' with '-'
3737
QualifiedGroupWithDash string
3838

39+
// Define value for AdmissionReviewVersions marker
40+
AdmissionReviewVersions string
41+
3942
Force bool
4043
}
4144

@@ -70,6 +73,11 @@ func (f *Webhook) SetTemplateDefaults() error {
7073
f.IfExistsAction = machinery.Error
7174
}
7275

76+
f.AdmissionReviewVersions = "v1"
77+
if f.Resource.Webhooks.WebhookVersion == "v1beta1" {
78+
f.AdmissionReviewVersions = "{v1,v1beta1}"
79+
}
80+
7381
f.QualifiedGroupWithDash = strings.Replace(f.Resource.QualifiedGroup(), ".", "-", -1)
7482

7583
return nil
@@ -103,10 +111,9 @@ func (r *{{ .Resource.Kind }}) SetupWebhookWithManager(mgr ctrl.Manager) error {
103111
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
104112
`
105113

106-
// TODO(estroz): update admissionReviewVersions to include v1 when controller-runtime supports that version.
107114
//nolint:lll
108115
defaultingWebhookTemplate = `
109-
//+kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/mutate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=true,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=m{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={v1,v1beta1}
116+
//+kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/mutate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=true,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=m{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={{ .AdmissionReviewVersions }}
110117
111118
var _ webhook.Defaulter = &{{ .Resource.Kind }}{}
112119
@@ -118,11 +125,10 @@ func (r *{{ .Resource.Kind }}) Default() {
118125
}
119126
`
120127

121-
// TODO(estroz): update admissionReviewVersions to include v1 when controller-runtime supports that version.
122128
//nolint:lll
123129
validatingWebhookTemplate = `
124130
// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation.
125-
//+kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/validate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=false,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=v{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={v1,v1beta1}
131+
//+kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/validate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=false,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=v{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={{ .AdmissionReviewVersions }}
126132
127133
var _ webhook.Validator = &{{ .Resource.Kind }}{}
128134

pkg/plugins/golang/v3/scaffolds/internal/templates/makefile.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,8 @@ func (f *Makefile) SetTemplateDefaults() error {
6060
const makefileTemplate = `
6161
# Image URL to use all building/pushing image targets
6262
IMG ?= {{ .Image }}
63-
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
64-
CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=false"
6563
# ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary.
66-
ENVTEST_K8S_VERSION = 1.21
64+
ENVTEST_K8S_VERSION = 1.22
6765
6866
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
6967
ifeq (,$(shell go env GOBIN))
@@ -99,7 +97,7 @@ help: ## Display this help.
9997
##@ Development
10098
10199
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
102-
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
100+
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
103101
104102
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
105103
$(CONTROLLER_GEN) object:headerFile={{printf "%q" .BoilerplatePath}} paths="./..."

pkg/plugins/golang/v3/webhook.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ func (p *createWebhookSubcommand) BindFlags(fs *pflag.FlagSet) {
8080

8181
fs.BoolVar(&p.force, "force", false,
8282
"attempt to create resource even if it already exists")
83+
84+
// (not required raise an error in this case)
85+
// nolint:errcheck,gosec
86+
fs.MarkDeprecated("webhook-version", deprecateMsg)
8387
}
8488

8589
func (p *createWebhookSubcommand) InjectConfig(c config.Config) error {
@@ -122,3 +126,24 @@ func (p *createWebhookSubcommand) Scaffold(fs machinery.Filesystem) error {
122126
scaffolder.InjectFS(fs)
123127
return scaffolder.Scaffold()
124128
}
129+
130+
func (p *createWebhookSubcommand) PostScaffold() error {
131+
if p.resource.Webhooks.WebhookVersion == "v1beta1" {
132+
if err := applyScaffoldCustomizationsForVbeta1(); err != nil {
133+
return err
134+
}
135+
}
136+
137+
err := pluginutil.RunCmd("Update dependencies", "go", "mod", "tidy")
138+
if err != nil {
139+
return err
140+
}
141+
142+
err = pluginutil.RunCmd("Running make", "make", "generate")
143+
if err != nil {
144+
return err
145+
}
146+
fmt.Print("Next: implement your new Webhook and generate the manifests with:\n$ make manifests\n")
147+
148+
return nil
149+
}

0 commit comments

Comments
 (0)