Skip to content

Commit

Permalink
update deps to use k8s 1.22
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Camila Macedo committed Sep 20, 2021
1 parent 9817db7 commit 6766994
Show file tree
Hide file tree
Showing 119 changed files with 2,259 additions and 269 deletions.
17 changes: 9 additions & 8 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@ go 1.16

require (
github.com/cloudflare/cfssl v1.5.0 // for `kubebuilder alpha config-gen`
github.com/gobuffalo/flect v0.2.2
github.com/gobuffalo/flect v0.2.3
github.com/joelanford/go-apidiff v0.1.0
github.com/onsi/ginkgo v1.16.4
github.com/onsi/gomega v1.13.0
github.com/spf13/afero v1.2.2
github.com/spf13/cobra v1.1.3
github.com/onsi/gomega v1.15.0
github.com/sirupsen/logrus v1.8.1
github.com/spf13/afero v1.6.0
github.com/spf13/cobra v1.2.1
github.com/spf13/pflag v1.0.5
golang.org/x/tools v0.1.2
k8s.io/apimachinery v0.21.2 // for `kubebuilder alpha config-gen`
sigs.k8s.io/controller-runtime v0.9.2
sigs.k8s.io/controller-tools v0.6.0 // for `kubebuilder alpha config-gen`
golang.org/x/tools v0.1.5
k8s.io/apimachinery v0.22.2 // for `kubebuilder alpha config-gen`
sigs.k8s.io/controller-runtime v0.10.0
sigs.k8s.io/controller-tools v0.7.0 // for `kubebuilder alpha config-gen`
sigs.k8s.io/kustomize/kyaml v0.10.21 // for `kubebuilder alpha config-gen`
sigs.k8s.io/yaml v1.2.0
)
376 changes: 278 additions & 98 deletions go.sum

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion pkg/cli/alpha/config-gen/controller-gen-filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ func (cgr ControllerGenFilter) Filter(input []*yaml.RNode) ([]*yaml.RNode, error
// generate CRD definitions
desclen := 40
crdGen := genall.Generator(crd.Generator{
TrivialVersions: true,
MaxDescLen: &desclen,
})
gens = append(gens, &crdGen)
Expand Down
5 changes: 4 additions & 1 deletion pkg/model/resource/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@ import (
"github.com/gobuffalo/flect"
)

const V1beta1 = "v1beta1"
const V1 = "v1"

// validateAPIVersion validates CRD or Webhook versions
func validateAPIVersion(version string) error {
switch version {
case "v1beta1", "v1":
case V1beta1, V1:
return nil
default:
return fmt.Errorf("API version must be one of: v1beta1, v1")
Expand Down
81 changes: 76 additions & 5 deletions test/e2e/utils/util.go → pkg/plugin/util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,18 @@ See the License for the specific language governing permissions and
limitations under the License.
*/

package utils
package util

import (
"bufio"
"bytes"
"crypto/rand"
"errors"
"fmt"
"io/ioutil"
"math/big"
"os"
"regexp"
"strings"
)

Expand Down Expand Up @@ -61,6 +65,8 @@ func GetNonEmptyLines(output string) []string {

// InsertCode searches target content in the file and insert `toInsert` after the target.
func InsertCode(filename, target, code string) error {
// false positive
// nolint:gosec
contents, err := ioutil.ReadFile(filename)
if err != nil {
return err
Expand All @@ -75,6 +81,8 @@ func InsertCode(filename, target, code string) error {
// UncommentCode searches for target in the file and remove the comment prefix
// of the target content. The target content may span multiple lines.
func UncommentCode(filename, target, prefix string) error {
// false positive
// nolint:gosec
content, err := ioutil.ReadFile(filename)
if err != nil {
return err
Expand All @@ -83,7 +91,7 @@ func UncommentCode(filename, target, prefix string) error {

idx := strings.Index(strContent, target)
if idx < 0 {
return nil
return fmt.Errorf("unable to find the code %s to be uncomment", target)
}

out := new(bytes.Buffer)
Expand All @@ -92,12 +100,22 @@ func UncommentCode(filename, target, prefix string) error {
return err
}

strs := strings.Split(target, "\n")
for _, str := range strs {
_, err := out.WriteString(strings.TrimPrefix(str, prefix) + "\n")
scanner := bufio.NewScanner(bytes.NewBufferString(target))
if !scanner.Scan() {
return nil
}
for {
_, err := out.WriteString(strings.TrimPrefix(scanner.Text(), prefix))
if err != nil {
return err
}
// Avoid writing a newline in case the previous line was the last in target.
if !scanner.Scan() {
break
}
if _, err := out.WriteString("\n"); err != nil {
return err
}
}

_, err = out.Write(content[idx+len(target):])
Expand All @@ -111,6 +129,8 @@ func UncommentCode(filename, target, prefix string) error {

// ImplementWebhooks will mock an webhook data
func ImplementWebhooks(filename string) error {
// false positive
// nolint:gosec
bs, err := ioutil.ReadFile(filename)
if err != nil {
return err
Expand Down Expand Up @@ -168,3 +188,54 @@ func EnsureExistAndReplace(input, match, replace string) (string, error) {
}
return strings.Replace(input, match, replace, -1), nil
}

// ReplaceInFile replaces all instances of old with new in the file at path.
func ReplaceInFile(path, old, new string) error {
info, err := os.Stat(path)
if err != nil {
return err
}
// false positive
// nolint:gosec
b, err := ioutil.ReadFile(path)
if err != nil {
return err
}
if !strings.Contains(string(b), old) {
return errors.New("unable to find the content to be replaced")
}
s := strings.Replace(string(b), old, new, -1)
err = ioutil.WriteFile(path, []byte(s), info.Mode())
if err != nil {
return err
}
return nil
}

// ReplaceRegexInFile finds all strings that match `match` and replaces them
// with `replace` in the file at path.
func ReplaceRegexInFile(path, match, replace string) error {
matcher, err := regexp.Compile(match)
if err != nil {
return err
}
info, err := os.Stat(path)
if err != nil {
return err
}
// false positive
// nolint:gosec
b, err := ioutil.ReadFile(path)
if err != nil {
return err
}
s := matcher.ReplaceAllString(string(b), replace)
if s == string(b) {
return errors.New("unable to find the content to be replaced")
}
err = ioutil.WriteFile(path, []byte(s), info.Mode())
if err != nil {
return err
}
return nil
}
14 changes: 14 additions & 0 deletions pkg/plugins/golang/v3/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) {
fs.BoolVar(&p.options.DoController, "controller", true,
"if set, generate the controller without prompting the user")
p.controllerFlag = fs.Lookup("controller")

// (not required raise an error in this case)
// nolint:errcheck,gosec
fs.MarkDeprecated("crd-version", deprecateMsg)
}

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

func (p *createAPISubcommand) PostScaffold() error {

// Update the makefile to allow generate Webhooks to ensure backwards compatibility
// todo: it should be removed for go/v4
// nolint:lll,gosec
if p.resource.API.CRDVersion == "v1beta1" {
if err := applyScaffoldCustomizationsForVbeta1(); err != nil {
return err
}
}

err := util.RunCmd("Update dependencies", "go", "mod", "tidy")
if err != nil {
return err
Expand Down
121 changes: 121 additions & 0 deletions pkg/plugins/golang/v3/commons.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
/*
Copyright 2021 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.
*/

package v3

import (
"fmt"
"io/ioutil"
"path/filepath"
"strings"

log "github.com/sirupsen/logrus"

"sigs.k8s.io/kubebuilder/v3/pkg/plugin/util"
"sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds"
)

const deprecateMsg = "The v1beta1 API version for CRDs and Webhooks are deprecated and are no longer supported since " +
"the Kubernetes release 1.22. This flag no longer required to exist in future releases. Also, we would like to " +
"recommend you no longer use these API versions." +
"More info: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-22"

// Update the makefile to allow generate CRDs/Webhooks with v1beta1 to ensure backwards compatibility
// nolint:lll,gosec
func applyScaffoldCustomizationsForVbeta1() error {
makefilePath := filepath.Join("Makefile")
bs, err := ioutil.ReadFile(makefilePath)
if err != nil {
return err
}
if !strings.Contains(string(bs), "CRD_OPTIONS") {

log.Warn("The v1beta1 API version for CRDs and Webhooks are deprecated and are no longer supported " +
"since the Kubernetes release 1.22. In order to help you out use these versions" +
"we will need to try to update the Makefile and go.mod files of this project. Please," +
"ensure that these changes were done accordingly with your customizations.\n" +
"Also, we would like to recommend you no longer use these API versions." +
"More info: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-22")

const makefileTarget = `$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases`
const makefileTargetForV1beta1 = `$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases`

if err := util.ReplaceInFile("Makefile", makefileTarget, makefileTargetForV1beta1); err != nil {
fmt.Printf("unable to update the makefile to allow the usage of v1beta1: %s", err)
}

const makegentarget = `
manifests: controller-gen`
const makegenV1beta1Options = `# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
CRD_OPTIONS ?= "crd:crdVersions={v1beta1},trivialVersions=true,preserveUnknownFields=false"
manifests: controller-gen`

if err := util.ReplaceInFile("Makefile", makegentarget, makegenV1beta1Options); err != nil {
log.Warnf("unable to update the Makefile with %s: %s", makegenV1beta1Options, err)
}

// latest version of controller-tools where v1beta1 is supported
const controllerToolsVersionForVBeta1 = "v0.6.2"
if err := util.ReplaceInFile("Makefile",
fmt.Sprintf("controller-gen@%s",
scaffolds.ControllerToolsVersion),
fmt.Sprintf("controller-gen@%s",
controllerToolsVersionForVBeta1)); err != nil {
log.Warnf("unable to update the Makefile with %s: %s", fmt.Sprintf("controller-gen@%s",
controllerToolsVersionForVBeta1), err)
}

if err := util.ReplaceInFile("Makefile",
"ENVTEST_K8S_VERSION = 1.22",
"ENVTEST_K8S_VERSION = 1.21"); err != nil {
log.Warnf("unable to update the Makefile with %s: %s", "ENVTEST_K8S_VERSION = 1.21", err)
}

// latest version of controller-runtime where v1beta1 is supported
const controllerRuntimeVersionForVBeta1 = "v0.9.2"

if err := util.ReplaceInFile("go.mod",
fmt.Sprintf("sigs.k8s.io/controller-runtime %s", scaffolds.ControllerRuntimeVersion),
fmt.Sprintf("sigs.k8s.io/controller-runtime %s", controllerRuntimeVersionForVBeta1)); err != nil {
log.Warnf("unable to update the go.mod with sigs.k8s.io/controller-runtime %s: %s",
controllerRuntimeVersionForVBeta1, err)
}

if err := util.ReplaceInFile("go.mod",
"k8s.io/api v0.22.1",
"k8s.io/api v0.21.2"); err != nil {
log.Warnf("unable to update the go.mod with k8s.io/api v0.21.2: %s", err)
}

if err := util.ReplaceInFile("go.mod",
"k8s.io/apimachinery v0.22.1",
"k8s.io/apimachinery v0.21.2"); err != nil {
log.Warnf("unable to update the go.mod with k8s.io/apimachinery v0.21.2: %s", err)
}

if err := util.ReplaceInFile("go.mod",
"k8s.io/apimachinery v0.22.1",
"k8s.io/apimachinery v0.21.2"); err != nil {
log.Warnf("unable to update the go.mod with k8s.io/apimachinery v0.21.2: %s", err)
}

err = util.RunCmd("Update dependencies", "go", "mod", "tidy")
if err != nil {
return err
}
}
return nil
}
8 changes: 5 additions & 3 deletions pkg/plugins/golang/v3/scaffolds/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ import (

const (
// ControllerRuntimeVersion is the kubernetes-sigs/controller-runtime version to be used in the project
ControllerRuntimeVersion = "v0.9.2"
ControllerRuntimeVersion = "v0.10.0"
// ControllerToolsVersion is the kubernetes-sigs/controller-tools version to be used in the project
ControllerToolsVersion = "v0.6.1"
ControllerToolsVersion = "v0.7.0"
// KustomizeVersion is the kubernetes-sigs/kustomize version to be used in the project
KustomizeVersion = "v3.8.7"

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

return scaffold.Execute(
&templates.Main{},
&templates.GoMod{ControllerRuntimeVersion: ControllerRuntimeVersion},
&templates.GoMod{
ControllerRuntimeVersion: ControllerRuntimeVersion,
},
&templates.GitIgnore{},
&templates.Makefile{
Image: imageName,
Expand Down
Loading

0 comments on commit 6766994

Please sign in to comment.