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

K8SPG-729: add pgv2.percona.com/version label to the crd.yaml #1106

Merged
merged 5 commits into from
Apr 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 14 additions & 0 deletions .github/workflows/reviewdog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,20 @@ jobs:
only-new-issues: true
args: --timeout 5m

goimports-reviser:
name: runner / suggester / goimports-reviser
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '^1.23'
- run: go install -v github.com/incu6us/goimports-reviser/v3@latest
- run: $(go env GOPATH)/bin/goimports-reviser -imports-order "std,general,company,project" -company-prefixes "github.com/percona" ./...
- uses: reviewdog/action-suggester@v1
with:
tool_name: goimports-reviser

gofmt:
name: runner / suggester / gofmt
runs-on: ubuntu-latest
Expand Down
4 changes: 1 addition & 3 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ linters:
- errchkjson
- gci
- gofumpt
- goimports
enable:
- depguard
- gomodguard
Expand Down Expand Up @@ -49,9 +50,6 @@ linters-settings:
exhaustive:
default-signifies-exhaustive: true

goimports:
local-prefixes: github.com/percona/percona-postgresql-operator

gomodguard:
blocked:
modules:
Expand Down
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ generate-crd: generate-crunchy-crd generate-percona-crd
$(KUSTOMIZE) build ./config/crd/ > ./deploy/crd.yaml

generate-percona-crd:
go generate ./percona/...
GOBIN='$(CURDIR)/hack/tools' ./hack/controller-generator.sh \
crd:crdVersions='v1' \
paths='./pkg/apis/pgv2.percona.com/...' \
Expand Down
5 changes: 5 additions & 0 deletions config/crd/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,8 @@ resources:
- bases/pgv2.percona.com_perconapgclusters.yaml
- bases/postgres-operator.crunchydata.com_pgupgrades.yaml
- bases/postgres-operator.crunchydata.com_pgadmins.yaml

patchesStrategicMerge:
- patches/versionlabel_in_perconapgclusters.yaml
- patches/versionlabel_in_perconapgbackups.yaml
- patches/versionlabel_in_perconapgrestores.yaml
6 changes: 6 additions & 0 deletions config/crd/patches/versionlabel_in_perconapgbackups.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: perconapgbackups.pgv2.percona.com
labels:
pgv2.percona.com/version: v2.7.0
6 changes: 6 additions & 0 deletions config/crd/patches/versionlabel_in_perconapgclusters.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: perconapgclusters.pgv2.percona.com
labels:
pgv2.percona.com/version: v2.7.0
6 changes: 6 additions & 0 deletions config/crd/patches/versionlabel_in_perconapgrestores.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: perconapgrestores.pgv2.percona.com
labels:
pgv2.percona.com/version: v2.7.0
6 changes: 6 additions & 0 deletions deploy/bundle.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgbackups.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down Expand Up @@ -702,6 +704,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgclusters.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down Expand Up @@ -18272,6 +18276,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgrestores.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down
6 changes: 6 additions & 0 deletions deploy/crd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgbackups.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down Expand Up @@ -702,6 +704,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgclusters.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down Expand Up @@ -18272,6 +18276,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgrestores.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down
6 changes: 6 additions & 0 deletions deploy/cw-bundle.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgbackups.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down Expand Up @@ -702,6 +704,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgclusters.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down Expand Up @@ -18272,6 +18276,8 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
labels:
pgv2.percona.com/version: v2.7.0
name: perconapgrestores.pgv2.percona.com
spec:
group: pgv2.percona.com
Expand Down
4 changes: 2 additions & 2 deletions percona/controller/pgcluster/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,14 +172,14 @@ func (vs *fakeVS) Apply(_ context.Context, req any) (any, error) {
DatabaseVersion: "14",
KubeVersion: rec.KubeVersion,
NamespaceUid: "",
OperatorVersion: v2.Version,
OperatorVersion: version.Version(),
Platform: rec.Platform,
PmmVersion: "",
PmmEnabled: true,
HelmDeployCr: true,
HelmDeployOperator: true,
SidecarsUsed: true,
Product: v2.ProductName,
Product: version.ProductName,
}

if !reflect.DeepEqual(have, want) {
Expand Down
5 changes: 5 additions & 0 deletions percona/naming/label.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package naming

const (
LabelOperatorVersion = PrefixPerconaPGV2 + "version"
)
35 changes: 31 additions & 4 deletions percona/version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,33 @@ package version

import (
"context"
_ "embed"
"fmt"
"net/http"
"net/url"
"os"
"strings"
"time"

"github.com/pkg/errors"

"github.com/percona/percona-postgresql-operator/percona/version/service/client"
"github.com/percona/percona-postgresql-operator/percona/version/service/client/version_service"
v2 "github.com/percona/percona-postgresql-operator/pkg/apis/pgv2.percona.com/v2"
)

//go:generate sh -c "yq -i '.metadata.labels.\"pgv2.percona.com/version\" = \"v\" + load(\"version.txt\")' ../../config/crd/patches/versionlabel_in_perconapgclusters.yaml"
//go:generate sh -c "yq -i '.metadata.labels.\"pgv2.percona.com/version\" = \"v\" + load(\"version.txt\")' ../../config/crd/patches/versionlabel_in_perconapgbackups.yaml"
//go:generate sh -c "yq -i '.metadata.labels.\"pgv2.percona.com/version\" = \"v\" + load(\"version.txt\")' ../../config/crd/patches/versionlabel_in_perconapgrestores.yaml"

//go:embed version.txt
var version string

func Version() string {
return strings.TrimSpace(version)
}

const ProductName = "pg-operator"

type Meta struct {
Apply string
OperatorVersion string
Expand All @@ -30,10 +45,22 @@ type Meta struct {
Extensions string
}

const DefaultVersionServiceEndpoint = "https://check.percona.com"

func getDefaultVersionServiceEndpoint() string {
endpoint := os.Getenv("PERCONA_VS_FALLBACK_URI")

if len(endpoint) != 0 {
return endpoint
}

return DefaultVersionServiceEndpoint
}

func EnsureVersion(ctx context.Context, meta Meta) error {
err := fetchVersions(ctx, v2.GetDefaultVersionServiceEndpoint(), meta)
err := fetchVersions(ctx, getDefaultVersionServiceEndpoint(), meta)
if err != nil {
return errors.Wrap(err, fmt.Sprintf("failed to send telemetry to %s", v2.GetDefaultVersionServiceEndpoint()))
return errors.Wrap(err, fmt.Sprintf("failed to send telemetry to %s", getDefaultVersionServiceEndpoint()))
}

return nil
Expand All @@ -54,7 +81,7 @@ func fetchVersions(ctx context.Context, endpoint string, vm Meta) error {
applyParams := &version_service.VersionServiceApplyParams{
Context: ctx,
HTTPClient: &http.Client{Timeout: 10 * time.Second},
Product: v2.ProductName,
Product: ProductName,
Apply: vm.Apply,
BackupVersion: &vm.BackupVersion,
CustomResourceUID: &vm.CRUID,
Expand Down
1 change: 1 addition & 0 deletions percona/version/version.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2.7.0
55 changes: 55 additions & 0 deletions percona/version/version_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package version_test

import (
"bytes"
"os"
"path/filepath"
"runtime"
"slices"
"testing"

"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"sigs.k8s.io/yaml"

"github.com/percona/percona-postgresql-operator/percona/naming"
"github.com/percona/percona-postgresql-operator/percona/version"
)

func TestCRDVersionLabel(t *testing.T) {
crdNames := []string{
"perconapgbackups.pgv2.percona.com",
"perconapgclusters.pgv2.percona.com",
"perconapgrestores.pgv2.percona.com",
}

_, filename, _, ok := runtime.Caller(0)
if !ok {
t.Fatalf("Failed to get caller information")
}
dir := filepath.Dir(filename)
crdPath := filepath.Join(dir, "..", "..", "deploy", "crd.yaml")

data, err := os.ReadFile(crdPath)
if err != nil {
t.Fatalf("Failed to read file: %s", err.Error())
}
yamlDocs := bytes.Split(data, []byte("\n---\n"))
for _, doc := range yamlDocs {
if len(doc) == 0 {
continue
}
crd := new(v1.CustomResourceDefinition)
if err := yaml.Unmarshal(doc, crd); err != nil {
t.Fatalf("Failed to unmarshal crd: %s", err.Error())
}
if !slices.Contains(crdNames, crd.Name) {
continue
}
expected := "v" + version.Version()
if crd.Labels[naming.LabelOperatorVersion] != expected {
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)
t.Log([]byte(crd.Labels[naming.LabelOperatorVersion]), []byte(expected))
t.Fail()
}
}
}
21 changes: 2 additions & 19 deletions pkg/apis/pgv2.percona.com/v2/perconapgcluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package v2

import (
"context"
"os"

gover "github.com/hashicorp/go-version"
corev1 "k8s.io/api/core/v1"
Expand All @@ -14,18 +13,14 @@ import (
"github.com/percona/percona-postgresql-operator/internal/logging"
"github.com/percona/percona-postgresql-operator/internal/naming"
pNaming "github.com/percona/percona-postgresql-operator/percona/naming"
"github.com/percona/percona-postgresql-operator/percona/version"
crunchyv1beta1 "github.com/percona/percona-postgresql-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
)

func init() {
SchemeBuilder.Register(&PerconaPGCluster{}, &PerconaPGClusterList{})
}

const (
Version = "2.7.0"
ProductName = "pg-operator"
)

// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:shortName=pg
Expand Down Expand Up @@ -178,7 +173,7 @@ type PerconaPGClusterSpec struct {

func (cr *PerconaPGCluster) Default() {
if len(cr.Spec.CRVersion) == 0 {
cr.Spec.CRVersion = Version
cr.Spec.CRVersion = version.Version()
}

for i := range cr.Spec.InstanceSets {
Expand Down Expand Up @@ -979,18 +974,6 @@ const (
LabelPMMSecret = labelPrefix + "pmm-secret"
)

const DefaultVersionServiceEndpoint = "https://check.percona.com"

func GetDefaultVersionServiceEndpoint() string {
endpoint := os.Getenv("PERCONA_VS_FALLBACK_URI")

if len(endpoint) != 0 {
return endpoint
}

return DefaultVersionServiceEndpoint
}

const (
UserMonitoring = "monitor"
)
Expand Down
Loading