Skip to content

Commit f078cc2

Browse files
removed acceptEULA parameter support
1 parent cb76e6a commit f078cc2

File tree

19 files changed

+1255
-1237
lines changed

19 files changed

+1255
-1237
lines changed

api/operator/v1beta1/vmcluster_types.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -468,13 +468,6 @@ type VMStorage struct {
468468
}
469469

470470
type VMBackup struct {
471-
// AcceptEULA accepts enterprise feature usage, must be set to true.
472-
// otherwise backupmanager cannot be added to single/cluster version.
473-
// https://victoriametrics.com/legal/esa/
474-
// Deprecated: use license.key or license.keyRef instead
475-
// +deprecated
476-
// +optional
477-
AcceptEULA bool `json:"acceptEULA"`
478471
// SnapshotCreateURL overwrites url for snapshot create
479472
// +optional
480473
SnapshotCreateURL string `json:"snapshotCreateURL,omitempty"`
@@ -552,7 +545,7 @@ type VMBackup struct {
552545
}
553546

554547
func (cr *VMBackup) validate(l *License) error {
555-
if !l.IsProvided() && !cr.AcceptEULA {
548+
if !l.IsProvided() {
556549
return fmt.Errorf("it is required to provide license key. See [here](https://docs.victoriametrics.com/victoriametrics/enterprise/)")
557550
}
558551

config/crd/overlay/crd.yaml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27737,13 +27737,6 @@ spec:
2773727737
vmBackup:
2773827738
description: VMBackup configuration for backup
2773927739
properties:
27740-
acceptEULA:
27741-
description: |-
27742-
AcceptEULA accepts enterprise feature usage, must be set to true.
27743-
otherwise backupmanager cannot be added to single/cluster version.
27744-
https://victoriametrics.com/legal/esa/
27745-
Deprecated: use license.key or license.keyRef instead
27746-
type: boolean
2774727740
concurrency:
2774827741
description: Defines number of concurrent workers. Higher
2774927742
concurrency may reduce backup duration (default 10)
@@ -37261,13 +37254,6 @@ spec:
3726137254
vmBackup:
3726237255
description: VMBackup configuration for backup
3726337256
properties:
37264-
acceptEULA:
37265-
description: |-
37266-
AcceptEULA accepts enterprise feature usage, must be set to true.
37267-
otherwise backupmanager cannot be added to single/cluster version.
37268-
https://victoriametrics.com/legal/esa/
37269-
Deprecated: use license.key or license.keyRef instead
37270-
type: boolean
3727137257
concurrency:
3727237258
description: Defines number of concurrent workers. Higher concurrency
3727337259
may reduce backup duration (default 10)

docs/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ aliases:
1313

1414
## tip
1515

16+
* FEATURE: [vmoperator](https://docs.victoriametrics.com/operator/): remove deprecated acceptEULA. Replaced it with license in tests. See [#1319](https://github.com/VictoriaMetrics/operator/issues/1319).
17+
1618
## [v0.61.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.61.0)
1719

1820
**Release date:** 15 July 2025

docs/api.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3668,7 +3668,6 @@ Appears in: [VMSingleSpec](#vmsinglespec), [VMStorage](#vmstorage)
36683668

36693669
| Field | Description |
36703670
| --- | --- |
3671-
| acceptEULA<a href="#vmbackup-accepteula" id="vmbackup-accepteula">#</a><br/>_boolean_ | _(Optional)_<br/>AcceptEULA accepts enterprise feature usage, must be set to true.<br />otherwise backupmanager cannot be added to single/cluster version.<br />https://victoriametrics.com/legal/esa/<br />Deprecated: use license.key or license.keyRef instead |
36723671
| concurrency<a href="#vmbackup-concurrency" id="vmbackup-concurrency">#</a><br/>_integer_ | _(Optional)_<br/>Defines number of concurrent workers. Higher concurrency may reduce backup duration (default 10) |
36733672
| credentialsSecret<a href="#vmbackup-credentialssecret" id="vmbackup-credentialssecret">#</a><br/>_[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | _(Optional)_<br/>CredentialsSecret is secret in the same namespace for access to remote storage<br />The secret is mounted into /etc/vm/creds. |
36743673
| customS3Endpoint<a href="#vmbackup-customs3endpoint" id="vmbackup-customs3endpoint">#</a><br/>_string_ | _(Optional)_<br/>Custom S3 endpoint for use with S3-compatible storages (e.g. MinIO). S3 is used if not set |

internal/controller/operator/factory/build/backup.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ func VMBackupManager(
2626
isCluster bool,
2727
license *vmv1beta1.License,
2828
) (*corev1.Container, error) {
29-
if !cr.AcceptEULA && !license.IsProvided() {
30-
logger.WithContext(ctx).Info("EULA or license wasn't defined, update your backup settings." +
31-
" Follow https://docs.victoriametrics.com/enterprise.html for further instructions.")
29+
if !license.IsProvided() {
30+
logger.WithContext(ctx).Info("license wasn't defined, update your backup settings." +
31+
" Follow https://docs.victoriametrics.com/victoriametrics/enterprise/ for further instructions.")
3232
return nil, nil
3333
}
3434
snapshotCreateURL := cr.SnapshotCreateURL

internal/controller/operator/factory/vmcluster/vmcluster_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,9 @@ spec:
550550
f("storage", &vmv1beta1.VMCluster{
551551
ObjectMeta: metav1.ObjectMeta{Name: "test", Namespace: "default-1"},
552552
Spec: vmv1beta1.VMClusterSpec{
553+
License: &vmv1beta1.License{
554+
Key: ptr.To("test-key"),
555+
},
553556
VMStorage: &vmv1beta1.VMStorage{
554557
ServiceSpec: &vmv1beta1.AdditionalServiceSpec{
555558
UseAsDefault: true,
@@ -564,9 +567,7 @@ spec:
564567
},
565568
},
566569
},
567-
VMBackup: &vmv1beta1.VMBackup{
568-
AcceptEULA: true,
569-
},
570+
VMBackup: &vmv1beta1.VMBackup{},
570571
},
571572
},
572573
}, `

internal/webhook/operator/v1beta1/vmcluster_webhook.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,6 @@ func (*VMClusterCustomValidator) ValidateCreate(ctx context.Context, obj runtime
5656
if err = r.Validate(); err != nil {
5757
return
5858
}
59-
if r.Spec.VMStorage != nil && r.Spec.VMStorage.VMBackup != nil && r.Spec.VMStorage.VMBackup.AcceptEULA {
60-
warnings = append(warnings, "deprecated property is defined `spec.vmstorage.vmbackup.acceptEula`, use `spec.license.key` or `spec.license.keyRef` instead.")
61-
logger.WithContext(ctx).Info("deprecated property is defined `spec.vmstorage.vmbackup.acceptEula`, use `spec.license.key` or `spec.license.keyRef` instead.")
62-
}
6359
if r.Spec.VMSelect != nil && r.Spec.VMSelect.StorageSpec != nil {
6460
warnings = append(warnings, "deprecated property is defined `spec.vmselect.persistentVolume`, use `storage` instead.")
6561
logger.WithContext(ctx).Info("deprecated property is defined `spec.vmselect.persistentVolume`, use `storage` instead.")
@@ -81,10 +77,6 @@ func (*VMClusterCustomValidator) ValidateUpdate(ctx context.Context, _, newObj r
8177
if err = r.Validate(); err != nil {
8278
return
8379
}
84-
if r.Spec.VMStorage != nil && r.Spec.VMStorage.VMBackup != nil && r.Spec.VMStorage.VMBackup.AcceptEULA {
85-
warnings = append(warnings, "deprecated property is defined `spec.vmbackup.acceptEula`, use `spec.license.key` or `spec.license.keyRef` instead.")
86-
logger.WithContext(ctx).Info("deprecated property is defined `spec.vmbackup.acceptEula`, use `spec.license.key` or `spec.license.keyRef` instead.")
87-
}
8880
if r.Spec.VMSelect != nil && r.Spec.VMSelect.StorageSpec != nil {
8981
warnings = append(warnings, "deprecated property is defined `vmcluster.spec.vmselect.persistentVolume`, use `storage` instead.")
9082
logger.WithContext(ctx).Info("deprecated property is defined `vmcluster.spec.vmselect.persistentVolume`, use `storage` instead.")

internal/webhook/operator/v1beta1/vmsingle_webhook.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
2727

2828
vmv1beta1 "github.com/VictoriaMetrics/operator/api/operator/v1beta1"
29-
"github.com/VictoriaMetrics/operator/internal/controller/operator/factory/logger"
3029
)
3130

3231
// SetupVMSingleWebhookWithManager will setup the manager to manage the webhooks
@@ -56,10 +55,6 @@ func (*VMSingleCustomValidator) ValidateCreate(ctx context.Context, obj runtime.
5655
if err = r.Validate(); err != nil {
5756
return
5857
}
59-
if r.Spec.VMBackup != nil && r.Spec.VMBackup.AcceptEULA {
60-
warnings = append(warnings, "deprecated property is defined `spec.vmbackup.acceptEula`, use `spec.license.key` or `spec.license.keyRef` instead.")
61-
logger.WithContext(ctx).Info("deprecated property is defined `spec.vmbackup.acceptEula`, use `spec.license.key` or `spec.license.keyRef` instead.")
62-
}
6358
return
6459
}
6560

@@ -77,10 +72,6 @@ func (*VMSingleCustomValidator) ValidateUpdate(ctx context.Context, _, newObj ru
7772
if err = r.Validate(); err != nil {
7873
return
7974
}
80-
if r.Spec.VMBackup != nil && r.Spec.VMBackup.AcceptEULA {
81-
warnings = append(warnings, "deprecated property is defined `spec.vmbackup.acceptEula`, use `spec.license.key` or `spec.license.keyRef` instead.")
82-
logger.WithContext(ctx).Info("deprecated property is defined `spec.vmbackup.acceptEula`, use `spec.license.key` or `spec.license.keyRef` instead.")
83-
}
8475
return
8576
}
8677

test/e2e/prometheus_converter_test.go

Lines changed: 80 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ var (
3939
Scheme: ptr.To("HTTPS"),
4040
StaticConfigs: []promv1alpha1.StaticConfig{
4141
{
42-
4342
Targets: []promv1alpha1.Target{
4443
"localhost:9100",
4544
},
@@ -61,7 +60,6 @@ var (
6160
return nil
6261
},
6362
},
64-
6563
{
6664
name: "PrometheusScrapeConfig",
6765
source: &promv1alpha1.ScrapeConfig{
@@ -297,106 +295,98 @@ func getObject(ctx context.Context, obj client.Object) (client.Object, error) {
297295
return obj, err
298296
}
299297

300-
var _ = Describe("test prometheusConverter Controller", func() {
301-
Context("e2e prome converter", func() {
302-
for _, testCaseIt := range testCases {
303-
testCase := testCaseIt
298+
var _ = Describe("prometheus converter", Label("vm", "prom"), func() {
299+
for _, tc := range testCases {
300+
Context(fmt.Sprintf("crud %s", tc.name), func() {
304301
// adapt test for parallel execution
305302
// https://onsi.github.io/ginkgo/#patterns-for-parallel-integration-specs
306303
procSuffix := fmt.Sprintf("-%d", GinkgoParallelProcess())
307-
testCase.source.SetName(testCase.source.GetName() + procSuffix)
308-
testCase.targetTpl.SetName(testCase.targetTpl.GetName() + procSuffix)
304+
tc.source.SetName(tc.source.GetName() + procSuffix)
305+
tc.targetTpl.SetName(tc.targetTpl.GetName() + procSuffix)
309306
ctx := context.Background()
310-
Context(fmt.Sprintf("crud %s", testCase.name), func() {
311-
AfterEach(func() {
312-
k8sClient.Delete(ctx, testCase.source) // nolint:errcheck
313-
Eventually(func() error {
314-
_, err := getObject(ctx, testCase.source)
307+
AfterEach(func() {
308+
k8sClient.Delete(ctx, tc.source) // nolint:errcheck
309+
Eventually(func() error {
310+
_, err := getObject(ctx, tc.source)
311+
return err
312+
}, eventualDeletionTimeout, 1).Should(MatchError(k8serrors.IsNotFound, "IsNotFound"))
313+
k8sClient.Delete(ctx, tc.targetTpl) // nolint:errcheck
314+
Eventually(func() error {
315+
_, err := getObject(ctx, tc.targetTpl)
316+
if err == nil {
317+
return fmt.Errorf("Should be deleted")
318+
}
319+
return nil
320+
}, 60, 1).Should(Succeed())
321+
})
322+
It("Should convert the object", func() {
323+
source := tc.source.DeepCopyObject().(client.Object)
324+
Expect(k8sClient.Create(ctx, source)).To(Succeed())
325+
Eventually(func() error {
326+
target, err := getObject(ctx, tc.targetTpl)
327+
if err != nil {
315328
return err
316-
}, eventualDeletionTimeout, 1).Should(MatchError(k8serrors.IsNotFound, "IsNotFound"))
317-
318-
k8sClient.Delete(ctx, testCase.targetTpl) // nolint:errcheck
319-
Eventually(func() error {
320-
_, err := getObject(ctx, testCase.targetTpl)
321-
if err == nil {
322-
return fmt.Errorf("Should be deleted")
323-
}
324-
return nil
325-
}, 60, 1).Should(Succeed())
326-
})
327-
328-
It("Should convert the object", func() {
329-
source := testCase.source.DeepCopyObject().(client.Object)
329+
}
330+
return tc.targetValidator(target)
331+
}, 60, 1).Should(Succeed())
332+
})
330333

331-
Expect(k8sClient.Create(ctx, source)).To(Succeed())
332-
Eventually(func() error {
333-
target, err := getObject(ctx, testCase.targetTpl)
334-
if err != nil {
335-
return err
336-
}
337-
return testCase.targetValidator(target)
338-
}, 60, 1).Should(Succeed())
339-
})
334+
It("Should update the converted object", func() {
335+
source := tc.source.DeepCopyObject().(client.Object)
336+
Expect(k8sClient.Create(ctx, source)).To(Succeed())
337+
Eventually(func() error {
338+
_, err := getObject(ctx, tc.targetTpl)
339+
return err
340+
}, 60, 1).Should(Succeed())
340341

341-
It("Should update the converted object", func() {
342-
source := testCase.source.DeepCopyObject().(client.Object)
342+
labels := source.GetLabels()
343+
if labels == nil {
344+
labels = make(map[string]string)
345+
}
346+
// Use this hack to trigger update manually for GenerationChange predicate
347+
// It's not a problem for production workloads
348+
// Since operator performs period syncs for parent objects
349+
source.SetGeneration(source.GetGeneration() + 1)
350+
labels["testKey"] = "testValue"
351+
source.SetLabels(labels)
343352

344-
Expect(k8sClient.Create(ctx, source)).To(Succeed())
345-
Eventually(func() error {
346-
_, err := getObject(ctx, testCase.targetTpl)
353+
Expect(k8sClient.Update(ctx, source)).To(Succeed())
354+
Eventually(func() error {
355+
target, err := getObject(ctx, tc.targetTpl)
356+
if err != nil {
347357
return err
348-
}, 60, 1).Should(Succeed())
349-
350-
labels := source.GetLabels()
351-
if labels == nil {
352-
labels = make(map[string]string)
353358
}
354-
// Use this hack to trigger update manually for GenerationChange predicate
355-
// It's not a problem for production workloads
356-
// Since operator performs period syncs for parent objects
357-
source.SetGeneration(source.GetGeneration() + 1)
358-
labels["testKey"] = "testValue"
359-
source.SetLabels(labels)
360-
361-
Expect(k8sClient.Update(ctx, source)).To(Succeed())
362-
Eventually(func() error {
363-
target, err := getObject(ctx, testCase.targetTpl)
364-
if err != nil {
365-
return err
366-
}
367-
if target.GetLabels() == nil || target.GetLabels()["testKey"] != "testValue" {
368-
return fmt.Errorf("unexpected labels, want testKey=testValue, got: %v", target.GetLabels())
369-
}
370-
return nil
371-
}, 60, 1).Should(Succeed())
372-
})
359+
if target.GetLabels() == nil || target.GetLabels()["testKey"] != "testValue" {
360+
return fmt.Errorf("unexpected labels, want testKey=testValue, got: %v", target.GetLabels())
361+
}
362+
return nil
363+
}, 60, 1).Should(Succeed())
364+
})
373365

374-
It("Should delete the converted object", func() {
375-
source := testCase.source.DeepCopyObject().(client.Object)
366+
It("Should delete the converted object", func() {
367+
source := tc.source.DeepCopyObject().(client.Object)
368+
Expect(k8sClient.Create(ctx, source)).To(Succeed())
369+
Eventually(func() error {
370+
_, err := getObject(ctx, tc.targetTpl)
371+
return err
372+
}, 60, 1).Should(Succeed())
376373

377-
Expect(k8sClient.Create(ctx, source)).To(Succeed())
378-
Eventually(func() error {
379-
_, err := getObject(ctx, testCase.targetTpl)
374+
Expect(func() error {
375+
target, err := getObject(ctx, tc.targetTpl)
376+
if err != nil {
380377
return err
381-
}, 60, 1).Should(Succeed())
382-
383-
Expect(func() error {
384-
target, err := getObject(ctx, testCase.targetTpl)
385-
if err != nil {
386-
return err
387-
}
388-
if target.GetOwnerReferences() == nil {
389-
return fmt.Errorf("expected owner reference to be non nil, object :%s", target.GetName())
390-
}
391-
return nil
392-
}()).To(Succeed())
393-
Expect(k8sClient.Delete(ctx, source)).To(Succeed())
394-
Eventually(func() error {
395-
_, err := getObject(ctx, testCase.targetTpl)
396-
return err
397-
}, eventualDeletionTimeout, 1).Should(MatchError(k8serrors.IsNotFound, "IsNotFound"))
398-
})
378+
}
379+
if target.GetOwnerReferences() == nil {
380+
return fmt.Errorf("expected owner reference to be non nil, object: %s", target.GetName())
381+
}
382+
return nil
383+
}()).To(Succeed())
384+
Expect(k8sClient.Delete(ctx, source)).To(Succeed())
385+
Eventually(func() error {
386+
_, err := getObject(ctx, tc.targetTpl)
387+
return err
388+
}, eventualDeletionTimeout, 1).Should(MatchError(k8serrors.IsNotFound, "IsNotFound"))
399389
})
400-
}
401-
})
390+
})
391+
}
402392
})

test/e2e/suite/suite.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929
"github.com/VictoriaMetrics/operator/internal/manager"
3030
)
3131

32-
// var cfg *rest.Config
3332
var testEnv *envtest.Environment
3433
var cancelManager context.CancelFunc
3534
var stopped = make(chan struct{})

0 commit comments

Comments
 (0)