Skip to content

Commit 2cf9409

Browse files
pooknullhors
andauthored
K8SPG-729: add pgv2.percona.com/version label to the crd.yaml (#1106)
* K8SPG-729: add `pgv2.percona.com/version` label to the `crd.yaml` https://perconadev.atlassian.net/browse/K8SPG-729 * fix test * use goimports-reviser * disable goimports --------- Co-authored-by: Viacheslav Sarzhan <[email protected]>
1 parent 9c18a2d commit 2cf9409

16 files changed

+153
-28
lines changed

.github/workflows/reviewdog.yml

+14
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,20 @@ jobs:
1616
only-new-issues: true
1717
args: --timeout 5m
1818

19+
goimports-reviser:
20+
name: runner / suggester / goimports-reviser
21+
runs-on: ubuntu-latest
22+
steps:
23+
- uses: actions/checkout@v4
24+
- uses: actions/setup-go@v5
25+
with:
26+
go-version: '^1.23'
27+
- run: go install -v github.com/incu6us/goimports-reviser/v3@latest
28+
- run: $(go env GOPATH)/bin/goimports-reviser -imports-order "std,general,company,project" -company-prefixes "github.com/percona" ./...
29+
- uses: reviewdog/action-suggester@v1
30+
with:
31+
tool_name: goimports-reviser
32+
1933
gofmt:
2034
name: runner / suggester / gofmt
2135
runs-on: ubuntu-latest

.golangci.yaml

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ linters:
66
- errchkjson
77
- gci
88
- gofumpt
9+
- goimports
910
enable:
1011
- depguard
1112
- gomodguard
@@ -49,9 +50,6 @@ linters-settings:
4950
exhaustive:
5051
default-signifies-exhaustive: true
5152

52-
goimports:
53-
local-prefixes: github.com/percona/percona-postgresql-operator
54-
5553
gomodguard:
5654
blocked:
5755
modules:

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ generate-crd: generate-crunchy-crd generate-percona-crd
326326
$(KUSTOMIZE) build ./config/crd/ > ./deploy/crd.yaml
327327

328328
generate-percona-crd:
329+
go generate ./percona/...
329330
GOBIN='$(CURDIR)/hack/tools' ./hack/controller-generator.sh \
330331
crd:crdVersions='v1' \
331332
paths='./pkg/apis/pgv2.percona.com/...' \

config/crd/kustomization.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,8 @@ resources:
77
- bases/pgv2.percona.com_perconapgclusters.yaml
88
- bases/postgres-operator.crunchydata.com_pgupgrades.yaml
99
- bases/postgres-operator.crunchydata.com_pgadmins.yaml
10+
11+
patchesStrategicMerge:
12+
- patches/versionlabel_in_perconapgclusters.yaml
13+
- patches/versionlabel_in_perconapgbackups.yaml
14+
- patches/versionlabel_in_perconapgrestores.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: perconapgbackups.pgv2.percona.com
5+
labels:
6+
pgv2.percona.com/version: v2.7.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: perconapgclusters.pgv2.percona.com
5+
labels:
6+
pgv2.percona.com/version: v2.7.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: perconapgrestores.pgv2.percona.com
5+
labels:
6+
pgv2.percona.com/version: v2.7.0

deploy/bundle.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,8 @@ kind: CustomResourceDefinition
296296
metadata:
297297
annotations:
298298
controller-gen.kubebuilder.io/version: v0.16.5
299+
labels:
300+
pgv2.percona.com/version: v2.7.0
299301
name: perconapgbackups.pgv2.percona.com
300302
spec:
301303
group: pgv2.percona.com
@@ -702,6 +704,8 @@ kind: CustomResourceDefinition
702704
metadata:
703705
annotations:
704706
controller-gen.kubebuilder.io/version: v0.16.5
707+
labels:
708+
pgv2.percona.com/version: v2.7.0
705709
name: perconapgclusters.pgv2.percona.com
706710
spec:
707711
group: pgv2.percona.com
@@ -18272,6 +18276,8 @@ kind: CustomResourceDefinition
1827218276
metadata:
1827318277
annotations:
1827418278
controller-gen.kubebuilder.io/version: v0.16.5
18279+
labels:
18280+
pgv2.percona.com/version: v2.7.0
1827518281
name: perconapgrestores.pgv2.percona.com
1827618282
spec:
1827718283
group: pgv2.percona.com

deploy/crd.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,8 @@ kind: CustomResourceDefinition
296296
metadata:
297297
annotations:
298298
controller-gen.kubebuilder.io/version: v0.16.5
299+
labels:
300+
pgv2.percona.com/version: v2.7.0
299301
name: perconapgbackups.pgv2.percona.com
300302
spec:
301303
group: pgv2.percona.com
@@ -702,6 +704,8 @@ kind: CustomResourceDefinition
702704
metadata:
703705
annotations:
704706
controller-gen.kubebuilder.io/version: v0.16.5
707+
labels:
708+
pgv2.percona.com/version: v2.7.0
705709
name: perconapgclusters.pgv2.percona.com
706710
spec:
707711
group: pgv2.percona.com
@@ -18272,6 +18276,8 @@ kind: CustomResourceDefinition
1827218276
metadata:
1827318277
annotations:
1827418278
controller-gen.kubebuilder.io/version: v0.16.5
18279+
labels:
18280+
pgv2.percona.com/version: v2.7.0
1827518281
name: perconapgrestores.pgv2.percona.com
1827618282
spec:
1827718283
group: pgv2.percona.com

deploy/cw-bundle.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,8 @@ kind: CustomResourceDefinition
296296
metadata:
297297
annotations:
298298
controller-gen.kubebuilder.io/version: v0.16.5
299+
labels:
300+
pgv2.percona.com/version: v2.7.0
299301
name: perconapgbackups.pgv2.percona.com
300302
spec:
301303
group: pgv2.percona.com
@@ -702,6 +704,8 @@ kind: CustomResourceDefinition
702704
metadata:
703705
annotations:
704706
controller-gen.kubebuilder.io/version: v0.16.5
707+
labels:
708+
pgv2.percona.com/version: v2.7.0
705709
name: perconapgclusters.pgv2.percona.com
706710
spec:
707711
group: pgv2.percona.com
@@ -18272,6 +18276,8 @@ kind: CustomResourceDefinition
1827218276
metadata:
1827318277
annotations:
1827418278
controller-gen.kubebuilder.io/version: v0.16.5
18279+
labels:
18280+
pgv2.percona.com/version: v2.7.0
1827518281
name: perconapgrestores.pgv2.percona.com
1827618282
spec:
1827718283
group: pgv2.percona.com

percona/controller/pgcluster/version_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -172,14 +172,14 @@ func (vs *fakeVS) Apply(_ context.Context, req any) (any, error) {
172172
DatabaseVersion: "14",
173173
KubeVersion: rec.KubeVersion,
174174
NamespaceUid: "",
175-
OperatorVersion: v2.Version,
175+
OperatorVersion: version.Version(),
176176
Platform: rec.Platform,
177177
PmmVersion: "",
178178
PmmEnabled: true,
179179
HelmDeployCr: true,
180180
HelmDeployOperator: true,
181181
SidecarsUsed: true,
182-
Product: v2.ProductName,
182+
Product: version.ProductName,
183183
}
184184

185185
if !reflect.DeepEqual(have, want) {

percona/naming/label.go

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package naming
2+
3+
const (
4+
LabelOperatorVersion = PrefixPerconaPGV2 + "version"
5+
)

percona/version/version.go

+31-4
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,33 @@ package version
22

33
import (
44
"context"
5+
_ "embed"
56
"fmt"
67
"net/http"
78
"net/url"
9+
"os"
10+
"strings"
811
"time"
912

1013
"github.com/pkg/errors"
1114

1215
"github.com/percona/percona-postgresql-operator/percona/version/service/client"
1316
"github.com/percona/percona-postgresql-operator/percona/version/service/client/version_service"
14-
v2 "github.com/percona/percona-postgresql-operator/pkg/apis/pgv2.percona.com/v2"
1517
)
1618

19+
//go:generate sh -c "yq -i '.metadata.labels.\"pgv2.percona.com/version\" = \"v\" + load(\"version.txt\")' ../../config/crd/patches/versionlabel_in_perconapgclusters.yaml"
20+
//go:generate sh -c "yq -i '.metadata.labels.\"pgv2.percona.com/version\" = \"v\" + load(\"version.txt\")' ../../config/crd/patches/versionlabel_in_perconapgbackups.yaml"
21+
//go:generate sh -c "yq -i '.metadata.labels.\"pgv2.percona.com/version\" = \"v\" + load(\"version.txt\")' ../../config/crd/patches/versionlabel_in_perconapgrestores.yaml"
22+
23+
//go:embed version.txt
24+
var version string
25+
26+
func Version() string {
27+
return strings.TrimSpace(version)
28+
}
29+
30+
const ProductName = "pg-operator"
31+
1732
type Meta struct {
1833
Apply string
1934
OperatorVersion string
@@ -30,10 +45,22 @@ type Meta struct {
3045
Extensions string
3146
}
3247

48+
const DefaultVersionServiceEndpoint = "https://check.percona.com"
49+
50+
func getDefaultVersionServiceEndpoint() string {
51+
endpoint := os.Getenv("PERCONA_VS_FALLBACK_URI")
52+
53+
if len(endpoint) != 0 {
54+
return endpoint
55+
}
56+
57+
return DefaultVersionServiceEndpoint
58+
}
59+
3360
func EnsureVersion(ctx context.Context, meta Meta) error {
34-
err := fetchVersions(ctx, v2.GetDefaultVersionServiceEndpoint(), meta)
61+
err := fetchVersions(ctx, getDefaultVersionServiceEndpoint(), meta)
3562
if err != nil {
36-
return errors.Wrap(err, fmt.Sprintf("failed to send telemetry to %s", v2.GetDefaultVersionServiceEndpoint()))
63+
return errors.Wrap(err, fmt.Sprintf("failed to send telemetry to %s", getDefaultVersionServiceEndpoint()))
3764
}
3865

3966
return nil
@@ -54,7 +81,7 @@ func fetchVersions(ctx context.Context, endpoint string, vm Meta) error {
5481
applyParams := &version_service.VersionServiceApplyParams{
5582
Context: ctx,
5683
HTTPClient: &http.Client{Timeout: 10 * time.Second},
57-
Product: v2.ProductName,
84+
Product: ProductName,
5885
Apply: vm.Apply,
5986
BackupVersion: &vm.BackupVersion,
6087
CustomResourceUID: &vm.CRUID,

percona/version/version.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2.7.0

percona/version/version_test.go

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package version_test
2+
3+
import (
4+
"bytes"
5+
"os"
6+
"path/filepath"
7+
"runtime"
8+
"slices"
9+
"testing"
10+
11+
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
12+
"sigs.k8s.io/yaml"
13+
14+
"github.com/percona/percona-postgresql-operator/percona/naming"
15+
"github.com/percona/percona-postgresql-operator/percona/version"
16+
)
17+
18+
func TestCRDVersionLabel(t *testing.T) {
19+
crdNames := []string{
20+
"perconapgbackups.pgv2.percona.com",
21+
"perconapgclusters.pgv2.percona.com",
22+
"perconapgrestores.pgv2.percona.com",
23+
}
24+
25+
_, filename, _, ok := runtime.Caller(0)
26+
if !ok {
27+
t.Fatalf("Failed to get caller information")
28+
}
29+
dir := filepath.Dir(filename)
30+
crdPath := filepath.Join(dir, "..", "..", "deploy", "crd.yaml")
31+
32+
data, err := os.ReadFile(crdPath)
33+
if err != nil {
34+
t.Fatalf("Failed to read file: %s", err.Error())
35+
}
36+
yamlDocs := bytes.Split(data, []byte("\n---\n"))
37+
for _, doc := range yamlDocs {
38+
if len(doc) == 0 {
39+
continue
40+
}
41+
crd := new(v1.CustomResourceDefinition)
42+
if err := yaml.Unmarshal(doc, crd); err != nil {
43+
t.Fatalf("Failed to unmarshal crd: %s", err.Error())
44+
}
45+
if !slices.Contains(crdNames, crd.Name) {
46+
continue
47+
}
48+
expected := "v" + version.Version()
49+
if crd.Labels[naming.LabelOperatorVersion] != expected {
50+
t.Logf("invalid version is specified in %s label of %s CustomResourceDefinition: have: %s, expected: %s", naming.LabelOperatorVersion, crd.Name, crd.Labels[naming.LabelOperatorVersion], expected)
51+
t.Log([]byte(crd.Labels[naming.LabelOperatorVersion]), []byte(expected))
52+
t.Fail()
53+
}
54+
}
55+
}

pkg/apis/pgv2.percona.com/v2/perconapgcluster_types.go

+2-19
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package v2
22

33
import (
44
"context"
5-
"os"
65

76
gover "github.com/hashicorp/go-version"
87
corev1 "k8s.io/api/core/v1"
@@ -14,18 +13,14 @@ import (
1413
"github.com/percona/percona-postgresql-operator/internal/logging"
1514
"github.com/percona/percona-postgresql-operator/internal/naming"
1615
pNaming "github.com/percona/percona-postgresql-operator/percona/naming"
16+
"github.com/percona/percona-postgresql-operator/percona/version"
1717
crunchyv1beta1 "github.com/percona/percona-postgresql-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
1818
)
1919

2020
func init() {
2121
SchemeBuilder.Register(&PerconaPGCluster{}, &PerconaPGClusterList{})
2222
}
2323

24-
const (
25-
Version = "2.7.0"
26-
ProductName = "pg-operator"
27-
)
28-
2924
// +kubebuilder:object:root=true
3025
// +kubebuilder:subresource:status
3126
// +kubebuilder:resource:shortName=pg
@@ -178,7 +173,7 @@ type PerconaPGClusterSpec struct {
178173

179174
func (cr *PerconaPGCluster) Default() {
180175
if len(cr.Spec.CRVersion) == 0 {
181-
cr.Spec.CRVersion = Version
176+
cr.Spec.CRVersion = version.Version()
182177
}
183178

184179
for i := range cr.Spec.InstanceSets {
@@ -979,18 +974,6 @@ const (
979974
LabelPMMSecret = labelPrefix + "pmm-secret"
980975
)
981976

982-
const DefaultVersionServiceEndpoint = "https://check.percona.com"
983-
984-
func GetDefaultVersionServiceEndpoint() string {
985-
endpoint := os.Getenv("PERCONA_VS_FALLBACK_URI")
986-
987-
if len(endpoint) != 0 {
988-
return endpoint
989-
}
990-
991-
return DefaultVersionServiceEndpoint
992-
}
993-
994977
const (
995978
UserMonitoring = "monitor"
996979
)

0 commit comments

Comments
 (0)