Skip to content

Commit 85da3c4

Browse files
authored
Update CRD version (#169)
1 parent 43931c3 commit 85da3c4

Some content is hidden

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

55 files changed

+2272
-465
lines changed

.github/workflows/build-and-test.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ on:
1010

1111
env:
1212
product_name: db-operator
13-
go_version: "1.17"
13+
go_version: "1.18"
1414
go_os: linux
1515
go_arch: amd64
1616
main_go_path: .
@@ -20,10 +20,10 @@ jobs:
2020
runs-on: ubuntu-latest
2121
steps:
2222
- name: Checkout
23-
uses: actions/checkout@v2
23+
uses: actions/checkout@v3
2424

2525
- name: Check Code Style
26-
uses: golangci/golangci-lint-action@v2
26+
uses: golangci/golangci-lint-action@v3
2727
with:
2828
version: v1.49.0 ## https://github.com/golangci/golangci-lint/releases
2929
args: --timeout 3m0s
@@ -33,23 +33,23 @@ jobs:
3333
needs: lint
3434
steps:
3535
- name: Checkout
36-
uses: actions/checkout@v2
36+
uses: actions/checkout@v3
3737

3838
- name: Set up QEMU
39-
uses: docker/setup-qemu-action@v1
39+
uses: docker/setup-qemu-action@v2
4040

4141
- name: Set up Docker Buildx
42-
uses: docker/setup-buildx-action@v1
42+
uses: docker/setup-buildx-action@v2
4343

4444
- name: Login to GitHub Container Registry
45-
uses: docker/login-action@v1
45+
uses: docker/login-action@v2
4646
with:
4747
registry: ghcr.io
4848
username: ${{ github.actor }}
4949
password: ${{ secrets.GITHUB_TOKEN }}
5050

5151
- name: Set up Go
52-
uses: actions/setup-go@v2
52+
uses: actions/setup-go@v3
5353
with:
5454
go-version: ${{ env.go_version }}
5555

.github/workflows/image-publish.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ jobs:
2424
docker_arch: "arm64/v8"
2525
steps:
2626
- name: Checkout
27-
uses: actions/checkout@v2
27+
uses: actions/checkout@v3
2828

2929
- name: Setup go
30-
uses: actions/setup-go@v2
30+
uses: actions/setup-go@v3
3131
with:
3232
go-version: ${{ env.go_version }}
3333

@@ -43,14 +43,14 @@ jobs:
4343
uses: docker/setup-buildx-action@v2
4444

4545
- name: Login to GitHub Container Registry
46-
uses: docker/login-action@v1
46+
uses: docker/login-action@v2
4747
with:
4848
registry: ghcr.io
4949
username: ${{ github.actor }}
5050
password: ${{ secrets.GITHUB_TOKEN }}
5151

5252
- name: Login to Dockerhub
53-
uses: docker/login-action@v1
53+
uses: docker/login-action@v2
5454
with:
5555
username: ${{ secrets.DOCKERHUB_USER }}
5656
password: ${{ secrets.DOCKERHUB_TOKEN }}

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM golang:1.17.4-alpine3.15 as builder
1+
FROM golang:1.18.10-alpine3.17 as builder
22

33
RUN apk update && apk upgrade && \
44
apk add --no-cache bash build-base

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ generate: controller-gen ## generate supporting code for custom resource types
7474

7575
CONTROLLER_GEN = $(shell pwd)/bin/controller-gen
7676
controller-gen: ## Download controller-gen locally if necessary.
77-
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0)
77+
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.11.3)
7878

7979
# go-get-tool will 'go get' any package $2 and install it to $1.
8080
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))

PROJECT

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# Code generated by tool. DO NOT EDIT.
2+
# This file is used to track the info used to scaffold your project
3+
# and allow the plugins properly work.
4+
# More info: https://book.kubebuilder.io/reference/project-config.html
15
domain: kci.rocks
26
layout:
37
- go.kubebuilder.io/v3
@@ -19,4 +23,27 @@ resources:
1923
kind: Database
2024
path: github.com/kloeckner-i/db-operator/api/v1alpha1
2125
version: v1alpha1
26+
- api:
27+
crdVersion: v1
28+
namespaced: true
29+
domain: kci.rocks
30+
kind: Database
31+
path: github.com/kloeckner-i/db-operator/api/v1beta1
32+
version: v1beta1
33+
webhooks:
34+
conversion: true
35+
defaulting: true
36+
validation: true
37+
webhookVersion: v1
38+
- api:
39+
crdVersion: v1
40+
domain: kci.rocks
41+
kind: DbInstance
42+
path: github.com/kloeckner-i/db-operator/api/v1beta1
43+
version: v1beta1
44+
webhooks:
45+
conversion: true
46+
defaulting: true
47+
validation: true
48+
webhookVersion: v1
2249
version: "3"

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ DB Operator provides following features:
2121
The repository contains helm charts for db-operator is moved to https://github.com/kloeckner-i/charts
2222
New chart after db-operator > 1.2.7, db-instances > 1.3.0 will be only available in new repository.
2323

24+
## CRD Versions are upgraded!
25+
Now both `DbInstance` and `Database` resources are upgraded to `v1beta1`.
26+
In case you were using `connectionStringTemplate`, make sure I've migrated to `secretsTempaltes` before upgrading, because `connectionStringTemplate` is removed in this version. Everything else should go seamless. We've added `Webhooks` that will take care of resources with an old API version and convert them to the newer one.
27+
2428
### Downloading old charts
2529

2630
Installing older version of charts is still possible.

api/v1alpha1/database_types.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ package v1alpha1
1919
import (
2020
"errors"
2121

22+
"github.com/kloeckner-i/db-operator/api/v1beta1"
23+
"sigs.k8s.io/controller-runtime/pkg/conversion"
24+
2225
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2326
)
2427

@@ -150,3 +153,40 @@ func (db *Database) IsMonitoringEnabled() (bool, error) {
150153
func (db *Database) InstanceAccessSecretName() string {
151154
return "dbin-" + db.Spec.Instance + "-access-secret"
152155
}
156+
157+
// ConvertTo converts this v1alpha1 to v1beta1. (upgrade)
158+
func (db *Database) ConvertTo(dstRaw conversion.Hub) error {
159+
160+
dst := dstRaw.(*v1beta1.Database)
161+
dst.ObjectMeta = db.ObjectMeta
162+
163+
dst.Spec.Backup = v1beta1.DatabaseBackup(db.Spec.Backup)
164+
dst.Spec.Cleanup = db.Spec.Cleanup
165+
dst.Spec.DeletionProtected = db.Spec.DeletionProtected
166+
dst.Spec.Instance = db.Spec.Instance
167+
dst.Spec.Postgres.DropPublicSchema = db.Spec.Postgres.DropPublicSchema
168+
dst.Spec.Postgres.Extensions = db.Spec.Extensions
169+
dst.Spec.Postgres.Schemas = db.Spec.Postgres.Schemas
170+
dst.Spec.SecretName = db.Spec.SecretName
171+
dst.Spec.SecretsTemplates = db.Spec.SecretsTemplates
172+
173+
return nil
174+
}
175+
176+
// ConvertFrom converts from the Hub version (v1beta1) to (v1alpha1). (downgrade)
177+
func (dst *Database) ConvertFrom(srcRaw conversion.Hub) error {
178+
db := srcRaw.(*v1beta1.Database)
179+
dst.ObjectMeta = db.ObjectMeta
180+
181+
dst.Spec.Backup = DatabaseBackup(db.Spec.Backup)
182+
dst.Spec.Cleanup = db.Spec.Cleanup
183+
dst.Spec.DeletionProtected = db.Spec.DeletionProtected
184+
dst.Spec.Instance = db.Spec.Instance
185+
dst.Spec.Postgres.DropPublicSchema = db.Spec.Postgres.DropPublicSchema
186+
dst.Spec.Extensions = db.Spec.Postgres.Extensions
187+
dst.Spec.Postgres.Schemas = db.Spec.Postgres.Schemas
188+
dst.Spec.SecretName = db.Spec.SecretName
189+
dst.Spec.SecretsTemplates = db.Spec.SecretsTemplates
190+
191+
return nil
192+
}

api/v1alpha1/dbinstance_types.go

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ package v1alpha1
1919
import (
2020
"errors"
2121

22+
"github.com/kloeckner-i/db-operator/api/v1beta1"
2223
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24+
"sigs.k8s.io/controller-runtime/pkg/conversion"
2325
)
2426

2527
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
@@ -188,6 +190,47 @@ func (dbin *DbInstance) IsMonitoringEnabled() bool {
188190
if dbin.Spec.Monitoring.Enabled == false {
189191
return false
190192
}
191-
192193
return true
193194
}
195+
196+
// ConvertTo converts this v1alpha1 to v1beta1. (upgrade)
197+
func (dbin *DbInstance) ConvertTo(dstRaw conversion.Hub) error {
198+
dst := dstRaw.(*v1beta1.DbInstance)
199+
dst.ObjectMeta = dbin.ObjectMeta
200+
dst.Spec.AdminUserSecret = v1beta1.NamespacedName(dbin.Spec.AdminUserSecret)
201+
dst.Spec.Backup = v1beta1.DbInstanceBackup(dbin.Spec.Backup)
202+
if dbin.Spec.DbInstanceSource.Generic != nil {
203+
dst.Spec.DbInstanceSource.Generic = (*v1beta1.GenericInstance)(dbin.Spec.DbInstanceSource.Generic)
204+
} else if dbin.Spec.DbInstanceSource.Google != nil {
205+
206+
dst.Spec.DbInstanceSource.Google.APIEndpoint = dbin.Spec.DbInstanceSource.Google.APIEndpoint
207+
dst.Spec.DbInstanceSource.Google.InstanceName = dbin.Spec.DbInstanceSource.Google.InstanceName
208+
dst.Spec.DbInstanceSource.Google.ClientSecret = v1beta1.NamespacedName(dbin.Spec.DbInstanceSource.Google.ClientSecret)
209+
dst.Spec.DbInstanceSource.Google.ConfigmapName = v1beta1.NamespacedName(dbin.Spec.Google.ConfigmapName)
210+
}
211+
dst.Spec.Engine = dbin.Spec.Engine
212+
dst.Spec.Monitoring = v1beta1.DbInstanceMonitoring(dbin.Spec.Monitoring)
213+
dst.Spec.SSLConnection = v1beta1.DbInstanceSSLConnection(dbin.Spec.SSLConnection)
214+
return nil
215+
}
216+
217+
// ConvertFrom converts from the Hub version (v1beta1) to (v1alpha1). (downgrade)
218+
func (dst *DbInstance) ConvertFrom(srcRaw conversion.Hub) error {
219+
dbin := srcRaw.(*v1beta1.DbInstance)
220+
dst.ObjectMeta = dbin.ObjectMeta
221+
dst.Spec.AdminUserSecret = NamespacedName(dbin.Spec.AdminUserSecret)
222+
dst.Spec.Backup = DbInstanceBackup(dbin.Spec.Backup)
223+
if dbin.Spec.DbInstanceSource.Generic != nil {
224+
dst.Spec.DbInstanceSource.Generic = (*GenericInstance)(dbin.Spec.DbInstanceSource.Generic)
225+
} else if dbin.Spec.DbInstanceSource.Google != nil {
226+
227+
dst.Spec.DbInstanceSource.Google.APIEndpoint = dbin.Spec.DbInstanceSource.Google.APIEndpoint
228+
dst.Spec.DbInstanceSource.Google.InstanceName = dbin.Spec.DbInstanceSource.Google.InstanceName
229+
dst.Spec.DbInstanceSource.Google.ClientSecret = NamespacedName(dbin.Spec.DbInstanceSource.Google.ClientSecret)
230+
dst.Spec.DbInstanceSource.Google.ConfigmapName = NamespacedName(dbin.Spec.Google.ConfigmapName)
231+
}
232+
dst.Spec.Engine = dbin.Spec.Engine
233+
dst.Spec.Monitoring = DbInstanceMonitoring(dbin.Spec.Monitoring)
234+
dst.Spec.SSLConnection = DbInstanceSSLConnection(dbin.Spec.SSLConnection)
235+
return nil
236+
}

0 commit comments

Comments
 (0)