mirror of
https://github.com/cloudnative-pg/plugin-barman-cloud.git
synced 2026-07-08 18:52:20 +02:00
Compare commits
2 Commits
cf5b1ef243
...
d2292e1648
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2292e1648 | ||
|
|
55a47cf57d |
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -44,7 +44,7 @@ jobs:
|
|||||||
- name: Install Dagger
|
- name: Install Dagger
|
||||||
env:
|
env:
|
||||||
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
||||||
DAGGER_VERSION: 0.21.7
|
DAGGER_VERSION: 0.21.6
|
||||||
run: |
|
run: |
|
||||||
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
||||||
- name: Run CI task
|
- name: Run CI task
|
||||||
|
|||||||
2
.github/workflows/release-please.yml
vendored
2
.github/workflows/release-please.yml
vendored
@ -31,7 +31,7 @@ jobs:
|
|||||||
- name: Install Dagger
|
- name: Install Dagger
|
||||||
env:
|
env:
|
||||||
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
||||||
DAGGER_VERSION: 0.21.7
|
DAGGER_VERSION: 0.21.6
|
||||||
run: |
|
run: |
|
||||||
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
||||||
- name: Create image and manifest
|
- name: Create image and manifest
|
||||||
|
|||||||
2
.github/workflows/release-publish.yml
vendored
2
.github/workflows/release-publish.yml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
- name: Install Dagger
|
- name: Install Dagger
|
||||||
env:
|
env:
|
||||||
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
||||||
DAGGER_VERSION: 0.21.7
|
DAGGER_VERSION: 0.21.6
|
||||||
run: |
|
run: |
|
||||||
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
||||||
- name: Create image and manifest
|
- name: Create image and manifest
|
||||||
|
|||||||
@ -206,7 +206,7 @@ tasks:
|
|||||||
- start-build-network
|
- start-build-network
|
||||||
vars:
|
vars:
|
||||||
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
||||||
DAGGER_VERSION: 0.21.7
|
DAGGER_VERSION: 0.21.6
|
||||||
DAGGER_ENGINE_IMAGE: registry.dagger.io/engine:v{{ .DAGGER_VERSION }}
|
DAGGER_ENGINE_IMAGE: registry.dagger.io/engine:v{{ .DAGGER_VERSION }}
|
||||||
cmds:
|
cmds:
|
||||||
- >
|
- >
|
||||||
|
|||||||
4
go.mod
4
go.mod
@ -5,7 +5,7 @@ go 1.26.3
|
|||||||
require (
|
require (
|
||||||
github.com/cert-manager/cert-manager v1.20.2
|
github.com/cert-manager/cert-manager v1.20.2
|
||||||
github.com/cloudnative-pg/api v1.29.1
|
github.com/cloudnative-pg/api v1.29.1
|
||||||
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260618100956-53ffbf09b567
|
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260616073548-263818883a1c
|
||||||
github.com/cloudnative-pg/cloudnative-pg v1.29.1
|
github.com/cloudnative-pg/cloudnative-pg v1.29.1
|
||||||
github.com/cloudnative-pg/cnpg-i v0.5.0
|
github.com/cloudnative-pg/cnpg-i v0.5.0
|
||||||
github.com/cloudnative-pg/cnpg-i-machinery v0.4.2
|
github.com/cloudnative-pg/cnpg-i-machinery v0.4.2
|
||||||
@ -20,7 +20,7 @@ require (
|
|||||||
k8s.io/apiextensions-apiserver v0.36.2
|
k8s.io/apiextensions-apiserver v0.36.2
|
||||||
k8s.io/apimachinery v0.36.2
|
k8s.io/apimachinery v0.36.2
|
||||||
k8s.io/client-go v0.36.2
|
k8s.io/client-go v0.36.2
|
||||||
k8s.io/utils v0.0.0-20260617174310-a95e086a2553
|
k8s.io/utils v0.0.0-20260507154919-ff6756f316d2
|
||||||
sigs.k8s.io/controller-runtime v0.24.1
|
sigs.k8s.io/controller-runtime v0.24.1
|
||||||
sigs.k8s.io/kustomize/api v0.21.1
|
sigs.k8s.io/kustomize/api v0.21.1
|
||||||
sigs.k8s.io/kustomize/kyaml v0.21.1
|
sigs.k8s.io/kustomize/kyaml v0.21.1
|
||||||
|
|||||||
8
go.sum
8
go.sum
@ -20,8 +20,8 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
|
|||||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/cloudnative-pg/api v1.29.1 h1:FWr8S7EQeOfdhYXyr2cof8wUXLARZiiQt5Qa6ltED7w=
|
github.com/cloudnative-pg/api v1.29.1 h1:FWr8S7EQeOfdhYXyr2cof8wUXLARZiiQt5Qa6ltED7w=
|
||||||
github.com/cloudnative-pg/api v1.29.1/go.mod h1:QtWF3yzSvIfORMHaSkPAk/o3bhCJwEHJgN3riyRiz3o=
|
github.com/cloudnative-pg/api v1.29.1/go.mod h1:QtWF3yzSvIfORMHaSkPAk/o3bhCJwEHJgN3riyRiz3o=
|
||||||
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260618100956-53ffbf09b567 h1:vqyRgqs1qDhOO2ZUEx3X4PKJGRnfwXN5xU5KSdjrnps=
|
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260616073548-263818883a1c h1:5ILvYitKJ3+yT+bDGQM+21QOpa/a8ayCdTqtbWpYJtk=
|
||||||
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260618100956-53ffbf09b567/go.mod h1:vmW7blcg0BECd/9YKqn7NdiF7jz9BlXCWJcGJpzzBCg=
|
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260616073548-263818883a1c/go.mod h1:vmW7blcg0BECd/9YKqn7NdiF7jz9BlXCWJcGJpzzBCg=
|
||||||
github.com/cloudnative-pg/cloudnative-pg v1.29.1 h1:ZNEt1TMlnQKXI1kho2UqQuqdfvIvjGln4kN7C1lsmGA=
|
github.com/cloudnative-pg/cloudnative-pg v1.29.1 h1:ZNEt1TMlnQKXI1kho2UqQuqdfvIvjGln4kN7C1lsmGA=
|
||||||
github.com/cloudnative-pg/cloudnative-pg v1.29.1/go.mod h1:Sbgx9jVmkle4/gR2U5JHrzDd74sRPOBHDtPkvncg5v8=
|
github.com/cloudnative-pg/cloudnative-pg v1.29.1/go.mod h1:Sbgx9jVmkle4/gR2U5JHrzDd74sRPOBHDtPkvncg5v8=
|
||||||
github.com/cloudnative-pg/cnpg-i v0.5.0 h1:/TOzpNT6cwNgrpftTtrnLKdoHgMwd+88vZgXjlVgXeE=
|
github.com/cloudnative-pg/cnpg-i v0.5.0 h1:/TOzpNT6cwNgrpftTtrnLKdoHgMwd+88vZgXjlVgXeE=
|
||||||
@ -326,8 +326,8 @@ k8s.io/kube-openapi v0.0.0-20260502001324-b7f5293f4787 h1:kHv8PETbPIVHfqKBYwTNNS
|
|||||||
k8s.io/kube-openapi v0.0.0-20260502001324-b7f5293f4787/go.mod h1:Cyq7UE0QtGe+Zo+/6XFrxiS4Mq0tLyQEONkFzSkfp9o=
|
k8s.io/kube-openapi v0.0.0-20260502001324-b7f5293f4787/go.mod h1:Cyq7UE0QtGe+Zo+/6XFrxiS4Mq0tLyQEONkFzSkfp9o=
|
||||||
k8s.io/streaming v0.36.2 h1:NSKthPPg9UFSKsRauVJUVGH2Dvn8fhKmY4qrMkw/p98=
|
k8s.io/streaming v0.36.2 h1:NSKthPPg9UFSKsRauVJUVGH2Dvn8fhKmY4qrMkw/p98=
|
||||||
k8s.io/streaming v0.36.2/go.mod h1:z6fV3D+NVkoeqRMtWwlUZK6U17SY/LqNzOxWL6GyR/s=
|
k8s.io/streaming v0.36.2/go.mod h1:z6fV3D+NVkoeqRMtWwlUZK6U17SY/LqNzOxWL6GyR/s=
|
||||||
k8s.io/utils v0.0.0-20260617174310-a95e086a2553 h1:hmGqDecjc8d7HVzWzRFl0QD9bYuYKbBEG7t8xwnVxfI=
|
k8s.io/utils v0.0.0-20260507154919-ff6756f316d2 h1:wU4tMEhLGgIbLvXQb1cfN+EcM0wf7zC6CPF+C79jroc=
|
||||||
k8s.io/utils v0.0.0-20260617174310-a95e086a2553/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
|
k8s.io/utils v0.0.0-20260507154919-ff6756f316d2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
|
||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 h1:hSfpvjjTQXQY2Fol2CS0QHMNs/WI1MOSGzCm1KhM5ec=
|
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 h1:hSfpvjjTQXQY2Fol2CS0QHMNs/WI1MOSGzCm1KhM5ec=
|
||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
|
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
|
||||||
sigs.k8s.io/controller-runtime v0.24.1 h1:miPEwrmirImAvgME1L9qebGHrOnGJoVmVdtOU9fRfo4=
|
sigs.k8s.io/controller-runtime v0.24.1 h1:miPEwrmirImAvgME1L9qebGHrOnGJoVmVdtOU9fRfo4=
|
||||||
|
|||||||
@ -20,13 +20,8 @@ SPDX-License-Identifier: Apache-2.0
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo/v2"
|
. "github.com/onsi/ginkgo/v2"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
"github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/metadata"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = Describe("PluginConfiguration.Validate", func() {
|
var _ = Describe("PluginConfiguration.Validate", func() {
|
||||||
@ -50,77 +45,3 @@ var _ = Describe("PluginConfiguration.Validate", func() {
|
|||||||
Expect(cfg.Validate()).To(Succeed())
|
Expect(cfg.Validate()).To(Succeed())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
var _ = Describe("NewFromCluster", func() {
|
|
||||||
enabled := true
|
|
||||||
|
|
||||||
It("derives the replica source object store for a pg_basebackup replica cluster", func() {
|
|
||||||
cluster := &cnpgv1.Cluster{
|
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "cluster-replica", Namespace: "test-ns"},
|
|
||||||
Spec: cnpgv1.ClusterSpec{
|
|
||||||
Bootstrap: &cnpgv1.BootstrapConfiguration{
|
|
||||||
PgBaseBackup: &cnpgv1.BootstrapPgBaseBackup{Source: "source"},
|
|
||||||
},
|
|
||||||
ReplicaCluster: &cnpgv1.ReplicaClusterConfiguration{
|
|
||||||
Enabled: &enabled,
|
|
||||||
Source: "source",
|
|
||||||
},
|
|
||||||
ExternalClusters: []cnpgv1.ExternalCluster{
|
|
||||||
{
|
|
||||||
Name: "source",
|
|
||||||
PluginConfiguration: &cnpgv1.PluginConfiguration{
|
|
||||||
Name: metadata.PluginName,
|
|
||||||
Parameters: map[string]string{
|
|
||||||
"barmanObjectName": "minio-store",
|
|
||||||
"serverName": "cluster-example",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg := NewFromCluster(cluster)
|
|
||||||
|
|
||||||
// The replica source object store is derived from the external cluster plugin,
|
|
||||||
// while the backup/archive and recovery object stores remain empty: this is the
|
|
||||||
// distinguishing trait of a pg_basebackup replica cluster (a recovery-bootstrapped
|
|
||||||
// replica would also populate RecoveryBarmanObjectName).
|
|
||||||
Expect(cfg.ReplicaSourceBarmanObjectName).To(Equal("minio-store"))
|
|
||||||
Expect(cfg.ReplicaSourceServerName).To(Equal("cluster-example"))
|
|
||||||
Expect(cfg.BarmanObjectName).To(BeEmpty())
|
|
||||||
Expect(cfg.RecoveryBarmanObjectName).To(BeEmpty())
|
|
||||||
|
|
||||||
// Validate must accept it, otherwise the lifecycle hook skips sidecar injection.
|
|
||||||
Expect(cfg.Validate()).To(Succeed())
|
|
||||||
})
|
|
||||||
|
|
||||||
It("ignores a replica source backed by a different plugin", func() {
|
|
||||||
cluster := &cnpgv1.Cluster{
|
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "cluster-replica", Namespace: "test-ns"},
|
|
||||||
Spec: cnpgv1.ClusterSpec{
|
|
||||||
Bootstrap: &cnpgv1.BootstrapConfiguration{
|
|
||||||
PgBaseBackup: &cnpgv1.BootstrapPgBaseBackup{Source: "source"},
|
|
||||||
},
|
|
||||||
ReplicaCluster: &cnpgv1.ReplicaClusterConfiguration{
|
|
||||||
Enabled: &enabled,
|
|
||||||
Source: "source",
|
|
||||||
},
|
|
||||||
ExternalClusters: []cnpgv1.ExternalCluster{
|
|
||||||
{
|
|
||||||
Name: "source",
|
|
||||||
PluginConfiguration: &cnpgv1.PluginConfiguration{
|
|
||||||
Name: "some-other-plugin.cloudnative-pg.io",
|
|
||||||
Parameters: map[string]string{"barmanObjectName": "minio-store"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg := NewFromCluster(cluster)
|
|
||||||
|
|
||||||
Expect(cfg.ReplicaSourceBarmanObjectName).To(BeEmpty())
|
|
||||||
Expect(cfg.Validate()).NotTo(Succeed())
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|||||||
@ -273,10 +273,8 @@ func (impl LifecycleImplementation) collectAdditionalInstanceArgs(
|
|||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only one object store provides the sidecar arguments, with precedence:
|
// Prefer the cluster object store (backup/archive). If not set, fallback to the recovery object store.
|
||||||
// BarmanObjectName (backup/archive) > RecoveryBarmanObjectName (recovery
|
// If neither is configured, no additional args are provided.
|
||||||
// bootstrap) > ReplicaSourceBarmanObjectName (pg_basebackup replica).
|
|
||||||
// If none is configured, no additional args are provided.
|
|
||||||
if len(pluginConfiguration.BarmanObjectName) > 0 {
|
if len(pluginConfiguration.BarmanObjectName) > 0 {
|
||||||
var barmanObjectStore barmancloudv1.ObjectStore
|
var barmanObjectStore barmancloudv1.ObjectStore
|
||||||
if err := impl.Client.Get(ctx, pluginConfiguration.GetBarmanObjectKey(), &barmanObjectStore); err != nil {
|
if err := impl.Client.Get(ctx, pluginConfiguration.GetBarmanObjectKey(), &barmanObjectStore); err != nil {
|
||||||
@ -305,20 +303,6 @@ func (impl LifecycleImplementation) collectAdditionalInstanceArgs(
|
|||||||
return args, nil
|
return args, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(pluginConfiguration.ReplicaSourceBarmanObjectName) > 0 {
|
|
||||||
key := pluginConfiguration.GetReplicaSourceBarmanObjectKey()
|
|
||||||
var barmanObjectStore barmancloudv1.ObjectStore
|
|
||||||
if err := impl.Client.Get(ctx, key, &barmanObjectStore); err != nil {
|
|
||||||
return nil, fmt.Errorf("while getting replica source barman object store %s: %w", key.String(), err)
|
|
||||||
}
|
|
||||||
args := barmanObjectStore.Spec.InstanceSidecarConfiguration.AdditionalContainerArgs
|
|
||||||
args = append(
|
|
||||||
args,
|
|
||||||
collectTypedAdditionalArgs(&barmanObjectStore)...,
|
|
||||||
)
|
|
||||||
return args, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -48,9 +48,6 @@ func (impl LifecycleImplementation) collectSidecarResourcesForPod(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
configuration *config.PluginConfiguration,
|
configuration *config.PluginConfiguration,
|
||||||
) (corev1.ResourceRequirements, error) {
|
) (corev1.ResourceRequirements, error) {
|
||||||
// Only one object store provides the sidecar resources, with precedence:
|
|
||||||
// BarmanObjectName (backup/archive) > RecoveryBarmanObjectName (recovery
|
|
||||||
// bootstrap) > ReplicaSourceBarmanObjectName (pg_basebackup replica).
|
|
||||||
if len(configuration.BarmanObjectName) > 0 {
|
if len(configuration.BarmanObjectName) > 0 {
|
||||||
// On a replica cluster that also archives, the designated primary
|
// On a replica cluster that also archives, the designated primary
|
||||||
// will use both the replica source object store and the object store
|
// will use both the replica source object store and the object store
|
||||||
@ -67,10 +64,10 @@ func (impl LifecycleImplementation) collectSidecarResourcesForPod(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(configuration.RecoveryBarmanObjectName) > 0 {
|
if len(configuration.RecoveryBarmanObjectName) > 0 {
|
||||||
// On a cluster recovering from an object store (including log-shipping
|
// On a replica cluster that doesn't archive, the designated primary
|
||||||
// replica clusters, where the recovery and replica source object stores
|
// uses only the replica source object store.
|
||||||
// coincide), we use the recovery object store for configuring the
|
// In this case, we use the replica source object store for configuring
|
||||||
// resources of the sidecar container.
|
// the resources of the sidecar container.
|
||||||
var barmanObjectStore barmancloudv1.ObjectStore
|
var barmanObjectStore barmancloudv1.ObjectStore
|
||||||
if err := impl.Client.Get(ctx, configuration.GetRecoveryBarmanObjectKey(), &barmanObjectStore); err != nil {
|
if err := impl.Client.Get(ctx, configuration.GetRecoveryBarmanObjectKey(), &barmanObjectStore); err != nil {
|
||||||
return corev1.ResourceRequirements{}, err
|
return corev1.ResourceRequirements{}, err
|
||||||
@ -79,18 +76,5 @@ func (impl LifecycleImplementation) collectSidecarResourcesForPod(
|
|||||||
return barmanObjectStore.Spec.InstanceSidecarConfiguration.Resources, nil
|
return barmanObjectStore.Spec.InstanceSidecarConfiguration.Resources, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(configuration.ReplicaSourceBarmanObjectName) > 0 {
|
|
||||||
// On a replica cluster bootstrapped via pg_basebackup, the designated
|
|
||||||
// primary uses only the replica source object store.
|
|
||||||
// In this case, we use the replica source object store for configuring
|
|
||||||
// the resources of the sidecar container.
|
|
||||||
var barmanObjectStore barmancloudv1.ObjectStore
|
|
||||||
if err := impl.Client.Get(ctx, configuration.GetReplicaSourceBarmanObjectKey(), &barmanObjectStore); err != nil {
|
|
||||||
return corev1.ResourceRequirements{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return barmanObjectStore.Spec.InstanceSidecarConfiguration.Resources, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return corev1.ResourceRequirements{}, nil
|
return corev1.ResourceRequirements{}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,7 +28,6 @@ import (
|
|||||||
barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
|
barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
|
||||||
batchv1 "k8s.io/api/batch/v1"
|
batchv1 "k8s.io/api/batch/v1"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"sigs.k8s.io/controller-runtime/pkg/client/fake"
|
"sigs.k8s.io/controller-runtime/pkg/client/fake"
|
||||||
@ -294,24 +293,6 @@ var _ = Describe("LifecycleImplementation", func() {
|
|||||||
Expect(args).To(Equal(recoveryArgs))
|
Expect(args).To(Equal(recoveryArgs))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("falls back to replica source object store when primary and recovery not set", func(ctx SpecContext) {
|
|
||||||
ns := "test-ns"
|
|
||||||
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
|
||||||
pc := &config.PluginConfiguration{
|
|
||||||
Cluster: cluster,
|
|
||||||
ReplicaSourceBarmanObjectName: "replica-source-store",
|
|
||||||
}
|
|
||||||
replicaArgs := []string{"--replica-a", "--replica-b"}
|
|
||||||
cli := buildClientFunc(
|
|
||||||
makeStoreFunc(ns, pc.ReplicaSourceBarmanObjectName, replicaArgs),
|
|
||||||
).Build()
|
|
||||||
|
|
||||||
impl := LifecycleImplementation{Client: cli}
|
|
||||||
args, err := impl.collectAdditionalInstanceArgs(ctx, pc)
|
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
Expect(args).To(Equal(replicaArgs))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("returns nil when neither object name is configured", func(ctx SpecContext) {
|
It("returns nil when neither object name is configured", func(ctx SpecContext) {
|
||||||
ns := "test-ns"
|
ns := "test-ns"
|
||||||
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
||||||
@ -405,117 +386,6 @@ var _ = Describe("LifecycleImplementation", func() {
|
|||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(args).To(Equal([]string{"--log-level=info"}))
|
Expect(args).To(Equal([]string{"--log-level=info"}))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("includes --log-level from replica source object store when only replica source set", func(ctx SpecContext) {
|
|
||||||
ns := "test-ns"
|
|
||||||
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
|
||||||
pc := &config.PluginConfiguration{
|
|
||||||
Cluster: cluster,
|
|
||||||
ReplicaSourceBarmanObjectName: "replica-source-store",
|
|
||||||
}
|
|
||||||
store := &barmancloudv1.ObjectStore{
|
|
||||||
TypeMeta: metav1.TypeMeta{Kind: "ObjectStore", APIVersion: barmancloudv1.GroupVersion.String()},
|
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: pc.ReplicaSourceBarmanObjectName, Namespace: ns},
|
|
||||||
Spec: barmancloudv1.ObjectStoreSpec{
|
|
||||||
InstanceSidecarConfiguration: barmancloudv1.InstanceSidecarConfiguration{
|
|
||||||
LogLevel: "warning",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
s := runtime.NewScheme()
|
|
||||||
barmancloudv1.AddKnownTypes(s)
|
|
||||||
cli := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(store).Build()
|
|
||||||
|
|
||||||
impl := LifecycleImplementation{Client: cli}
|
|
||||||
args, err := impl.collectAdditionalInstanceArgs(ctx, pc)
|
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
Expect(args).To(Equal([]string{"--log-level=warning"}))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("collectSidecarResourcesForPod", func() {
|
|
||||||
makeStoreWithResourcesFunc := func(ns, name string, res corev1.ResourceRequirements) *barmancloudv1.ObjectStore {
|
|
||||||
return &barmancloudv1.ObjectStore{
|
|
||||||
TypeMeta: metav1.TypeMeta{Kind: "ObjectStore", APIVersion: barmancloudv1.GroupVersion.String()},
|
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: ns},
|
|
||||||
Spec: barmancloudv1.ObjectStoreSpec{
|
|
||||||
InstanceSidecarConfiguration: barmancloudv1.InstanceSidecarConfiguration{
|
|
||||||
Resources: res,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
It("uses the cluster object store resources when set", func(ctx SpecContext) {
|
|
||||||
ns := "test-ns"
|
|
||||||
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
|
||||||
pc := &config.PluginConfiguration{Cluster: cluster, BarmanObjectName: "primary-store"}
|
|
||||||
res := corev1.ResourceRequirements{
|
|
||||||
Requests: corev1.ResourceList{corev1.ResourceMemory: resource.MustParse("64Mi")},
|
|
||||||
}
|
|
||||||
cli := buildClientFunc(makeStoreWithResourcesFunc(ns, pc.BarmanObjectName, res)).Build()
|
|
||||||
|
|
||||||
impl := LifecycleImplementation{Client: cli}
|
|
||||||
got, err := impl.collectSidecarResourcesForPod(ctx, pc)
|
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
gotMem := got.Requests[corev1.ResourceMemory]
|
|
||||||
Expect(gotMem.String()).To(Equal("64Mi"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("uses the recovery object store resources when only recovery is set", func(ctx SpecContext) {
|
|
||||||
ns := "test-ns"
|
|
||||||
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
|
||||||
pc := &config.PluginConfiguration{Cluster: cluster, RecoveryBarmanObjectName: "recovery-store"}
|
|
||||||
res := corev1.ResourceRequirements{
|
|
||||||
Requests: corev1.ResourceList{corev1.ResourceMemory: resource.MustParse("128Mi")},
|
|
||||||
}
|
|
||||||
cli := buildClientFunc(makeStoreWithResourcesFunc(ns, pc.RecoveryBarmanObjectName, res)).Build()
|
|
||||||
|
|
||||||
impl := LifecycleImplementation{Client: cli}
|
|
||||||
got, err := impl.collectSidecarResourcesForPod(ctx, pc)
|
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
gotMem := got.Requests[corev1.ResourceMemory]
|
|
||||||
Expect(gotMem.String()).To(Equal("128Mi"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("uses the replica source object store resources when only replica source is set", func(ctx SpecContext) {
|
|
||||||
ns := "test-ns"
|
|
||||||
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
|
||||||
pc := &config.PluginConfiguration{Cluster: cluster, ReplicaSourceBarmanObjectName: "replica-source-store"}
|
|
||||||
res := corev1.ResourceRequirements{
|
|
||||||
Requests: corev1.ResourceList{corev1.ResourceMemory: resource.MustParse("256Mi")},
|
|
||||||
}
|
|
||||||
cli := buildClientFunc(makeStoreWithResourcesFunc(ns, pc.ReplicaSourceBarmanObjectName, res)).Build()
|
|
||||||
|
|
||||||
impl := LifecycleImplementation{Client: cli}
|
|
||||||
got, err := impl.collectSidecarResourcesForPod(ctx, pc)
|
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
gotMem := got.Requests[corev1.ResourceMemory]
|
|
||||||
Expect(gotMem.String()).To(Equal("256Mi"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("returns empty resources when no object store is configured", func(ctx SpecContext) {
|
|
||||||
ns := "test-ns"
|
|
||||||
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
|
||||||
pc := &config.PluginConfiguration{Cluster: cluster}
|
|
||||||
cli := buildClientFunc().Build()
|
|
||||||
|
|
||||||
impl := LifecycleImplementation{Client: cli}
|
|
||||||
got, err := impl.collectSidecarResourcesForPod(ctx, pc)
|
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
Expect(got).To(Equal(corev1.ResourceRequirements{}))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("returns an error if the replica source object store cannot be retrieved", func(ctx SpecContext) {
|
|
||||||
ns := "test-ns"
|
|
||||||
cluster := &cnpgv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "c", Namespace: ns}}
|
|
||||||
pc := &config.PluginConfiguration{Cluster: cluster, ReplicaSourceBarmanObjectName: "missing-store"}
|
|
||||||
cli := buildClientFunc().Build()
|
|
||||||
|
|
||||||
impl := LifecycleImplementation{Client: cli}
|
|
||||||
_, err := impl.collectSidecarResourcesForPod(ctx, pc)
|
|
||||||
Expect(err).To(HaveOccurred())
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,7 @@ func WithIgnoreExistingResources(ignore bool) InstallOption {
|
|||||||
// DefaultVersion is the default version of cert-manager to install.
|
// DefaultVersion is the default version of cert-manager to install.
|
||||||
//
|
//
|
||||||
// renovate: datasource=github-releases depName=cert-manager/cert-manager
|
// renovate: datasource=github-releases depName=cert-manager/cert-manager
|
||||||
const DefaultVersion = "v1.20.2"
|
const DefaultVersion = "v1.15.1"
|
||||||
|
|
||||||
// Install installs cert-manager using kubectl.
|
// Install installs cert-manager using kubectl.
|
||||||
func Install(ctx context.Context, cl client.Client, opts ...InstallOption) error {
|
func Install(ctx context.Context, cl client.Client, opts ...InstallOption) error {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user