Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: update kubebuilder version to 3.13.0 #26

Merged
merged 48 commits into from
Nov 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
54c397d
Remove all files to upgrade versions (v3.13.0)
nakamasato Nov 23, 2023
4cf853e
[kubebuilder] Init project
nakamasato Nov 23, 2023
853dcc8
[kubebuilder] Create API Password (Controller & Resource)
nakamasato Nov 23, 2023
d6a93e0
[Controller] Add log in Reconcile function
nakamasato Nov 23, 2023
66a8b61
[API] Remove Foo field from custom resource Password
nakamasato Nov 23, 2023
a5f83b1
[Controller] Fetch Password object
nakamasato Nov 23, 2023
b6e74fd
[Controller] Create Secret object if not exists
nakamasato Nov 23, 2023
a6d021a
[Controller] Clean up Secret when Password is deleted
nakamasato Nov 23, 2023
7eee28d
[Controller] Generate random password
nakamasato Nov 23, 2023
dc4d8ab
[API&Controller] Make password configurable with CRD fields
nakamasato Nov 23, 2023
8b1b9cc
[API&Controller] Add Password Status
nakamasato Nov 23, 2023
8c93bdf
[API] Add AdditionalPrinterColumns
nakamasato Nov 23, 2023
779a02e
[kubebuilder] Create validating admission webhook
nakamasato Nov 23, 2023
fce687e
[API] Implement validating admission webhook
nakamasato Nov 23, 2023
10eb863
Update README
nakamasato Nov 23, 2023
4a37bf0
add golangci-lint
nakamasato Nov 23, 2023
7d13fe2
Merge branch 'main' into update-kubebuilder-version-to-3.13.0
nakamasato Nov 23, 2023
0e59614
fix
nakamasato Nov 23, 2023
a3f888b
Remove all files to upgrade versions (v3.13.0)
nakamasato Nov 23, 2023
fcfc3cc
[kubebuilder] Init project
nakamasato Nov 23, 2023
0f25f2a
[kubebuilder] Create API Password (Controller & Resource)
nakamasato Nov 23, 2023
6b7b8e3
[Controller] Add log in Reconcile function
nakamasato Nov 23, 2023
ab59cf9
[API] Remove Foo field from custom resource Password
nakamasato Nov 23, 2023
193d10d
[Controller] Fetch Password object
nakamasato Nov 23, 2023
eb5c67c
[Controller] Create Secret object if not exists
nakamasato Nov 23, 2023
bca1c5d
[Controller] Clean up Secret when Password is deleted
nakamasato Nov 23, 2023
6f4e38e
[Controller] Generate random password
nakamasato Nov 23, 2023
b735ce8
[API&Controller] Make password configurable with CRD fields
nakamasato Nov 23, 2023
6d7a0a7
[API&Controller] Add Password Status
nakamasato Nov 23, 2023
92adbe7
[API] Add AdditionalPrinterColumns
nakamasato Nov 23, 2023
c519d88
[kubebuilder] Create validating admission webhook
nakamasato Nov 23, 2023
0597686
Remove all files to upgrade versions (v3.13.0)
nakamasato Nov 23, 2023
09d4a04
[kubebuilder] Init project
nakamasato Nov 23, 2023
67b3548
[kubebuilder] Create API Password (Controller & Resource)
nakamasato Nov 23, 2023
0df1ad2
[Controller] Add log in Reconcile function
nakamasato Nov 23, 2023
aa8b07f
[API] Remove Foo field from custom resource Password
nakamasato Nov 23, 2023
a96bab7
[Controller] Fetch Password object
nakamasato Nov 23, 2023
f5e2e8e
[Controller] Create Secret object if not exists
nakamasato Nov 23, 2023
d65a663
[Controller] Clean up Secret when Password is deleted
nakamasato Nov 23, 2023
e01a4d8
[Controller] Generate random password
nakamasato Nov 23, 2023
5657063
[API&Controller] Make password configurable with CRD fields
nakamasato Nov 23, 2023
64a53e0
[API&Controller] Add Password Status
nakamasato Nov 23, 2023
179a7ad
[API] Add AdditionalPrinterColumns
nakamasato Nov 23, 2023
9a71cef
[kubebuilder] Create validating admission webhook
nakamasato Nov 23, 2023
15e9a20
[API] Implement validating admission webhook
nakamasato Nov 23, 2023
63a0ea0
fix
nakamasato Nov 23, 2023
33eb170
update
nakamasato Nov 23, 2023
6f8b2af
fix readme
nakamasato Nov 23, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: golangci-lint
on:
pull_request:
paths:
- '*.go'
- 'go.*'
- .github/workflows/golangci-lint.yml
permissions:
contents: read
# Optional: allow read access to pull request. Use with `only-new-issues` option.
# pull-requests: read
jobs:
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version-file: go.mod
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
# Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version
version: latest

# Optional: working directory, useful for monorepos
# working-directory: somedir

# Optional: golangci-lint command line arguments.
args: --timeout 5m

# Optional: show only new issues if it's a pull request. The default value is `false`.
# only-new-issues: true

# Optional: if set to true then the all caching functionality will be complete disabled,
# takes precedence over all other caching options.
# skip-cache: true

# Optional: if set to true then the action don't cache or restore ~/go/pkg.
# skip-pkg-cache: true

# Optional: if set to true then the action don't cache or restore ~/.cache/go-build.
# skip-build-cache: true
40 changes: 40 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
run:
deadline: 5m
allow-parallel-runners: true

issues:
# don't skip warning about doc comments
# don't exclude the default set of lint
exclude-use-default: false
# restore some of the defaults
# (fill in the rest as needed)
exclude-rules:
- path: "api/*"
linters:
- lll
- path: "internal/*"
linters:
- dupl
- lll
linters:
disable-all: true
enable:
- dupl
- errcheck
- exportloopref
- goconst
- gocyclo
- gofmt
- goimports
- gosimple
- govet
- ineffassign
- lll
- misspell
- nakedret
- prealloc
- staticcheck
- typecheck
- unconvert
- unparam
- unused
1 change: 1 addition & 0 deletions .upgrade-version.sh
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,7 @@ make undeploy
kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/$CERT_MANAGER_VERSION/cert-manager.yaml

git add .
make lint-fix
pre-commit run -a || true
git add . && git commit -am "[API] Implement validating admission webhook"

Expand Down
18 changes: 17 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,22 @@ vet: ## Run go vet against code.
test: manifests generate fmt vet envtest ## Run tests.
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test ./... -coverprofile cover.out

GOLANGCI_LINT = $(shell pwd)/bin/golangci-lint
GOLANGCI_LINT_VERSION ?= v1.54.2
golangci-lint:
@[ -f $(GOLANGCI_LINT) ] || { \
set -e ;\
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell dirname $(GOLANGCI_LINT)) $(GOLANGCI_LINT_VERSION) ;\
}

.PHONY: lint
lint: golangci-lint ## Run golangci-lint linter & yamllint
$(GOLANGCI_LINT) run

.PHONY: lint-fix
lint-fix: golangci-lint ## Run golangci-lint linter and perform fixes
$(GOLANGCI_LINT) run --fix

##@ Build

.PHONY: build
Expand Down Expand Up @@ -139,7 +155,7 @@ CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
ENVTEST ?= $(LOCALBIN)/setup-envtest

## Tool Versions
KUSTOMIZE_VERSION ?= v5.1.1
KUSTOMIZE_VERSION ?= v5.2.1
CONTROLLER_TOOLS_VERSION ?= v0.13.0

.PHONY: kustomize
Expand Down
73 changes: 63 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Example Kubernetes Operator project created with kubebuilder, which manages a CR
## Versions
1. Docker Engine: 24.0.2
1. [go](https://github.com/golang/go): [go1.20](https://github.com/golang/go/releases/go1.20)
1. [kubebuilder](https://github.com/kubernetes-sigs/kubebuilder): [v3.12.0](https://github.com/kubernetes-sigs/kubebuilder/releases/v3.12.0)
1. [kubebuilder](https://github.com/kubernetes-sigs/kubebuilder): [v3.13.0](https://github.com/kubernetes-sigs/kubebuilder/releases/v3.13.0)
1. [Kubernetes](https://github.com/kubernetes/kubernetes): [v1.27.3](https://github.com/kubernetes/kubernetes/releases/tag/v1.27.3)
1. [kind](https://github.com/kubernetes-sigs/kind): [v0.20.0](https://github.com/kubernetes-sigs/kind/releases/tag/v0.20.0)
1. [kustomize](https://github.com/kubernetes-sigs/kustomize): [(devel)](https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2F(devel))
Expand Down Expand Up @@ -57,19 +57,72 @@ It uses [Controllers](https://kubernetes.io/docs/concepts/architecture/controlle
which provides a reconcile function responsible for synchronizing resources untile the desired state is reached on the cluster

### Test It Out
1. Install the CRDs into the cluster:

```sh
make install
```
1. Start kind cluster

2. Run your controller (this will run in the foreground, so switch to a new terminal if you want to leave it running):
```sh
kind create cluster
```

```sh
make run
```
1. Install the CRDs into the cluster:

**NOTE:** You can also run this in one step by running: `make install run`
```sh
make install
```

1. Run cert manager

```
CERT_MANAGER_VERSION=v1.8.0
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/$CERT_MANAGER_VERSION/cert-manager.yaml
```

1. Run your controller (this will run in the foreground, so switch to a new terminal if you want to leave it running):

```sh
IMG=password-operator:webhook
make docker-build IMG=$IMG
kind load docker-image $IMG
make deploy IMG=$IMG
```

1. Create `Password` CR

```sh
kubectl apply -f config/samples/secret_v1alpha1_password.yaml
```

1. Check Secret

```sh
kubectl get secret
NAME TYPE DATA AGE
password-sample Opaque 1 5s
```

1. Check invalid CR (denied by admission webhook)

```yaml
apiVersion: secret.example.com/v1alpha1
kind: Password
metadata:
labels:
app.kubernetes.io/name: password
app.kubernetes.io/instance: password-sample
app.kubernetes.io/part-of: password-operator
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/created-by: password-operator
name: password-sample
spec:
length: 20
digit: 10
symbol: 15
```

```sh
kubectl apply -f config/samples/secret_v1alpha1_password.yaml
Error from server (Forbidden): error when creating "config/samples/secret_v1alpha1_password.yaml": admission webhook "vpassword.kb.io" denied the request: Number of digits and symbols must be less than total length
```

### Modifying the API definitions
If you are editing the API definitions, generate the manifests such as CRs or CRDs using:
Expand Down
2 changes: 2 additions & 0 deletions api/v1alpha1/password_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package v1alpha1

import (
"errors"

"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
logf "sigs.k8s.io/controller-runtime/pkg/log"
Expand All @@ -28,6 +29,7 @@ import (
// log is for logging in this package.
var passwordlog = logf.Log.WithName("password-resource")

// SetupWebhookWithManager will setup the manager to manage the webhooks
func (r *Password) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(r).
Expand Down
5 changes: 2 additions & 3 deletions api/v1alpha1/webhook_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ var _ = BeforeSuite(func() {
// Note that you must have the required binaries setup under the bin directory to perform
// the tests directly. When we run make test it will be setup and used automatically.
BinaryAssetsDirectory: filepath.Join("..", "..", "bin", "k8s",
fmt.Sprintf("1.28.0-%s-%s", runtime.GOOS, runtime.GOARCH)),
fmt.Sprintf("1.28.3-%s-%s", runtime.GOOS, runtime.GOARCH)),

WebhookInstallOptions: envtest.WebhookInstallOptions{
Paths: []string{filepath.Join("..", "..", "config", "webhook")},
Expand Down Expand Up @@ -132,8 +132,7 @@ var _ = BeforeSuite(func() {
if err != nil {
return err
}
conn.Close()
return nil
return conn.Close()
}).Should(Succeed())

})
Expand Down
2 changes: 2 additions & 0 deletions config/crd/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ patches:
- path: patches/cainjection_in_passwords.yaml
#+kubebuilder:scaffold:crdkustomizecainjectionpatch

# [WEBHOOK] To enable webhook, uncomment the following section
# the following config is for teaching kustomize how to do kustomization for CRDs.

configurations:
- kustomizeconfig.yaml
10 changes: 4 additions & 6 deletions config/default/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,20 @@ resources:
# [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'.
#- ../prometheus

patchesStrategicMerge:
patches:
# Protect the /metrics endpoint by putting it behind auth.
# If you want your controller-manager to expose the /metrics
# endpoint w/o any authn/z, please comment the following line.
- manager_auth_proxy_patch.yaml


- path: manager_auth_proxy_patch.yaml

# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in
# crd/kustomization.yaml
- manager_webhook_patch.yaml
- path: manager_webhook_patch.yaml

# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'.
# Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks.
# 'CERTMANAGER' needs to be enabled to use ca injection
- webhookcainjection_patch.yaml
#- path: webhookcainjection_patch.yaml

# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix.
# Uncomment the following replacements to add the cert-manager CA injection annotations
Expand Down
4 changes: 2 additions & 2 deletions config/default/manager_auth_proxy_patch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ spec:
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
image: gcr.io/kubebuilder/kube-rbac-proxy:v0.14.1
- "ALL"
image: gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0
args:
- "--secure-listen-address=0.0.0.0:8443"
- "--upstream=http://127.0.0.1:8080/"
Expand Down
2 changes: 1 addition & 1 deletion config/manager/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ spec:
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
- "ALL"
livenessProbe:
httpGet:
path: /healthz
Expand Down
1 change: 0 additions & 1 deletion config/prometheus/monitor.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

# Prometheus Monitor Service (Metrics)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
Expand Down
1 change: 0 additions & 1 deletion config/webhook/service.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

apiVersion: v1
kind: Service
metadata:
Expand Down
22 changes: 11 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ require (
github.com/onsi/ginkgo/v2 v2.11.0
github.com/onsi/gomega v1.27.10
github.com/sethvargo/go-password v0.2.0
k8s.io/api v0.28.0
k8s.io/apimachinery v0.28.0
k8s.io/client-go v0.28.0
sigs.k8s.io/controller-runtime v0.16.0
k8s.io/api v0.28.3
k8s.io/apimachinery v0.28.3
k8s.io/client-go v0.28.3
sigs.k8s.io/controller-runtime v0.16.3
)

require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-logr/logr v1.2.4 // indirect
Expand Down Expand Up @@ -50,11 +50,11 @@ require (
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.25.0 // indirect
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
golang.org/x/net v0.13.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/oauth2 v0.8.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/term v0.10.0 // indirect
golang.org/x/text v0.11.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/term v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.9.3 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
Expand All @@ -63,8 +63,8 @@ require (
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.28.0 // indirect
k8s.io/component-base v0.28.0 // indirect
k8s.io/apiextensions-apiserver v0.28.3 // indirect
k8s.io/component-base v0.28.3 // indirect
k8s.io/klog/v2 v2.100.1 // indirect
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect
Expand Down
Loading
Loading