Promote `HelmRelease` API to v2 (GA)
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
This commit is contained in:
parent
739d0a9cf9
commit
00785fbfa3
2
Makefile
2
Makefile
|
@ -92,7 +92,7 @@ manifests: controller-gen
|
|||
|
||||
# Generate API reference documentation
|
||||
api-docs: gen-crd-api-reference-docs
|
||||
$(GEN_CRD_API_REFERENCE_DOCS) -api-dir=./api/v2beta2 -config=./hack/api-docs/config.json -template-dir=./hack/api-docs/template -out-file=./docs/api/v2beta2/helm.md
|
||||
$(GEN_CRD_API_REFERENCE_DOCS) -api-dir=./api/v2 -config=./hack/api-docs/config.json -template-dir=./hack/api-docs/template -out-file=./docs/api/v2/helm.md
|
||||
|
||||
# Run go mod tidy
|
||||
tidy:
|
||||
|
|
5
PROJECT
5
PROJECT
|
@ -7,5 +7,8 @@ resources:
|
|||
- group: helm
|
||||
kind: HelmRelease
|
||||
version: v2beta2
|
||||
storageVersion: v2beta2
|
||||
- group: helm
|
||||
kind: HelmRelease
|
||||
version: v2
|
||||
storageVersion: v2
|
||||
version: "2"
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
Copyright 2023 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
import "github.com/fluxcd/pkg/apis/meta"
|
||||
|
||||
const (
|
||||
// ForceRequestAnnotation is the annotation used for triggering a one-off forced
|
||||
// Helm release, even when there are no new changes in the HelmRelease.
|
||||
// The value is interpreted as a token, and must equal the value of
|
||||
// meta.ReconcileRequestAnnotation in order to trigger a release.
|
||||
ForceRequestAnnotation string = "reconcile.fluxcd.io/forceAt"
|
||||
|
||||
// ResetRequestAnnotation is the annotation used for resetting the failure counts
|
||||
// of a HelmRelease, so that it can be retried again.
|
||||
// The value is interpreted as a token, and must equal the value of
|
||||
// meta.ReconcileRequestAnnotation in order to reset the failure counts.
|
||||
ResetRequestAnnotation string = "reconcile.fluxcd.io/resetAt"
|
||||
)
|
||||
|
||||
// ShouldHandleResetRequest returns true if the HelmRelease has a reset request
|
||||
// annotation, and the value of the annotation matches the value of the
|
||||
// meta.ReconcileRequestAnnotation annotation.
|
||||
//
|
||||
// To ensure that the reset request is handled only once, the value of
|
||||
// HelmReleaseStatus.LastHandledResetAt is updated to match the value of the
|
||||
// reset request annotation (even if the reset request is not handled because
|
||||
// the value of the meta.ReconcileRequestAnnotation annotation does not match).
|
||||
func ShouldHandleResetRequest(obj *HelmRelease) bool {
|
||||
return handleRequest(obj, ResetRequestAnnotation, &obj.Status.LastHandledResetAt)
|
||||
}
|
||||
|
||||
// ShouldHandleForceRequest returns true if the HelmRelease has a force request
|
||||
// annotation, and the value of the annotation matches the value of the
|
||||
// meta.ReconcileRequestAnnotation annotation.
|
||||
//
|
||||
// To ensure that the force request is handled only once, the value of
|
||||
// HelmReleaseStatus.LastHandledForceAt is updated to match the value of the
|
||||
// force request annotation (even if the force request is not handled because
|
||||
// the value of the meta.ReconcileRequestAnnotation annotation does not match).
|
||||
func ShouldHandleForceRequest(obj *HelmRelease) bool {
|
||||
return handleRequest(obj, ForceRequestAnnotation, &obj.Status.LastHandledForceAt)
|
||||
}
|
||||
|
||||
// handleRequest returns true if the HelmRelease has a request annotation, and
|
||||
// the value of the annotation matches the value of the meta.ReconcileRequestAnnotation
|
||||
// annotation.
|
||||
//
|
||||
// The lastHandled argument is used to ensure that the request is handled only
|
||||
// once, and is updated to match the value of the request annotation (even if
|
||||
// the request is not handled because the value of the meta.ReconcileRequestAnnotation
|
||||
// annotation does not match).
|
||||
func handleRequest(obj *HelmRelease, annotation string, lastHandled *string) bool {
|
||||
requestAt, requestOk := obj.GetAnnotations()[annotation]
|
||||
reconcileAt, reconcileOk := meta.ReconcileAnnotationValue(obj.GetAnnotations())
|
||||
|
||||
var lastHandledRequest string
|
||||
if requestOk {
|
||||
lastHandledRequest = *lastHandled
|
||||
*lastHandled = requestAt
|
||||
}
|
||||
|
||||
if requestOk && reconcileOk && requestAt == reconcileAt {
|
||||
lastHandledReconcile := obj.Status.GetLastHandledReconcileRequest()
|
||||
if lastHandledReconcile != reconcileAt && lastHandledRequest != requestAt {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
|
@ -0,0 +1,165 @@
|
|||
/*
|
||||
Copyright 2023 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
"github.com/fluxcd/pkg/apis/meta"
|
||||
)
|
||||
|
||||
func TestShouldHandleResetRequest(t *testing.T) {
|
||||
t.Run("should handle reset request", func(t *testing.T) {
|
||||
obj := &HelmRelease{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Annotations: map[string]string{
|
||||
meta.ReconcileRequestAnnotation: "b",
|
||||
ResetRequestAnnotation: "b",
|
||||
},
|
||||
},
|
||||
Status: HelmReleaseStatus{
|
||||
LastHandledResetAt: "a",
|
||||
ReconcileRequestStatus: meta.ReconcileRequestStatus{
|
||||
LastHandledReconcileAt: "a",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if !ShouldHandleResetRequest(obj) {
|
||||
t.Error("ShouldHandleResetRequest() = false")
|
||||
}
|
||||
|
||||
if obj.Status.LastHandledResetAt != "b" {
|
||||
t.Error("ShouldHandleResetRequest did not update LastHandledResetAt")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestShouldHandleForceRequest(t *testing.T) {
|
||||
t.Run("should handle force request", func(t *testing.T) {
|
||||
obj := &HelmRelease{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Annotations: map[string]string{
|
||||
meta.ReconcileRequestAnnotation: "b",
|
||||
ForceRequestAnnotation: "b",
|
||||
},
|
||||
},
|
||||
Status: HelmReleaseStatus{
|
||||
LastHandledForceAt: "a",
|
||||
ReconcileRequestStatus: meta.ReconcileRequestStatus{
|
||||
LastHandledReconcileAt: "a",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if !ShouldHandleForceRequest(obj) {
|
||||
t.Error("ShouldHandleForceRequest() = false")
|
||||
}
|
||||
|
||||
if obj.Status.LastHandledForceAt != "b" {
|
||||
t.Error("ShouldHandleForceRequest did not update LastHandledForceAt")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func Test_handleRequest(t *testing.T) {
|
||||
const requestAnnotation = "requestAnnotation"
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
annotations map[string]string
|
||||
lastHandledReconcile string
|
||||
lastHandledRequest string
|
||||
want bool
|
||||
expectLastHandledRequest string
|
||||
}{
|
||||
{
|
||||
name: "valid request and reconcile annotations",
|
||||
annotations: map[string]string{
|
||||
meta.ReconcileRequestAnnotation: "b",
|
||||
requestAnnotation: "b",
|
||||
},
|
||||
want: true,
|
||||
expectLastHandledRequest: "b",
|
||||
},
|
||||
{
|
||||
name: "mismatched annotations",
|
||||
annotations: map[string]string{
|
||||
meta.ReconcileRequestAnnotation: "b",
|
||||
requestAnnotation: "c",
|
||||
},
|
||||
want: false,
|
||||
expectLastHandledRequest: "c",
|
||||
},
|
||||
{
|
||||
name: "reconcile matches previous request",
|
||||
annotations: map[string]string{
|
||||
meta.ReconcileRequestAnnotation: "b",
|
||||
requestAnnotation: "b",
|
||||
},
|
||||
lastHandledReconcile: "a",
|
||||
lastHandledRequest: "b",
|
||||
want: false,
|
||||
expectLastHandledRequest: "b",
|
||||
},
|
||||
{
|
||||
name: "request matches previous reconcile",
|
||||
annotations: map[string]string{
|
||||
meta.ReconcileRequestAnnotation: "b",
|
||||
requestAnnotation: "b",
|
||||
},
|
||||
lastHandledReconcile: "b",
|
||||
lastHandledRequest: "a",
|
||||
want: false,
|
||||
expectLastHandledRequest: "b",
|
||||
},
|
||||
{
|
||||
name: "missing annotations",
|
||||
annotations: map[string]string{},
|
||||
lastHandledRequest: "a",
|
||||
want: false,
|
||||
expectLastHandledRequest: "a",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
obj := &HelmRelease{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Annotations: tt.annotations,
|
||||
},
|
||||
Status: HelmReleaseStatus{
|
||||
ReconcileRequestStatus: meta.ReconcileRequestStatus{
|
||||
LastHandledReconcileAt: tt.lastHandledReconcile,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
lastHandled := tt.lastHandledRequest
|
||||
result := handleRequest(obj, requestAnnotation, &lastHandled)
|
||||
|
||||
if result != tt.want {
|
||||
t.Errorf("handleRequest() = %v, want %v", result, tt.want)
|
||||
}
|
||||
if lastHandled != tt.expectLastHandledRequest {
|
||||
t.Errorf("lastHandledRequest = %v, want %v", lastHandled, tt.expectLastHandledRequest)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
Copyright 2022 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
const (
|
||||
// ReleasedCondition represents the status of the last release attempt
|
||||
// (install/upgrade/test) against the latest desired state.
|
||||
ReleasedCondition string = "Released"
|
||||
|
||||
// TestSuccessCondition represents the status of the last test attempt against
|
||||
// the latest desired state.
|
||||
TestSuccessCondition string = "TestSuccess"
|
||||
|
||||
// RemediatedCondition represents the status of the last remediation attempt
|
||||
// (uninstall/rollback) due to a failure of the last release attempt against the
|
||||
// latest desired state.
|
||||
RemediatedCondition string = "Remediated"
|
||||
)
|
||||
|
||||
const (
|
||||
// InstallSucceededReason represents the fact that the Helm install for the
|
||||
// HelmRelease succeeded.
|
||||
InstallSucceededReason string = "InstallSucceeded"
|
||||
|
||||
// InstallFailedReason represents the fact that the Helm install for the
|
||||
// HelmRelease failed.
|
||||
InstallFailedReason string = "InstallFailed"
|
||||
|
||||
// UpgradeSucceededReason represents the fact that the Helm upgrade for the
|
||||
// HelmRelease succeeded.
|
||||
UpgradeSucceededReason string = "UpgradeSucceeded"
|
||||
|
||||
// UpgradeFailedReason represents the fact that the Helm upgrade for the
|
||||
// HelmRelease failed.
|
||||
UpgradeFailedReason string = "UpgradeFailed"
|
||||
|
||||
// TestSucceededReason represents the fact that the Helm tests for the
|
||||
// HelmRelease succeeded.
|
||||
TestSucceededReason string = "TestSucceeded"
|
||||
|
||||
// TestFailedReason represents the fact that the Helm tests for the HelmRelease
|
||||
// failed.
|
||||
TestFailedReason string = "TestFailed"
|
||||
|
||||
// RollbackSucceededReason represents the fact that the Helm rollback for the
|
||||
// HelmRelease succeeded.
|
||||
RollbackSucceededReason string = "RollbackSucceeded"
|
||||
|
||||
// RollbackFailedReason represents the fact that the Helm test for the
|
||||
// HelmRelease failed.
|
||||
RollbackFailedReason string = "RollbackFailed"
|
||||
|
||||
// UninstallSucceededReason represents the fact that the Helm uninstall for the
|
||||
// HelmRelease succeeded.
|
||||
UninstallSucceededReason string = "UninstallSucceeded"
|
||||
|
||||
// UninstallFailedReason represents the fact that the Helm uninstall for the
|
||||
// HelmRelease failed.
|
||||
UninstallFailedReason string = "UninstallFailed"
|
||||
|
||||
// ArtifactFailedReason represents the fact that the artifact download for the
|
||||
// HelmRelease failed.
|
||||
ArtifactFailedReason string = "ArtifactFailed"
|
||||
|
||||
// InitFailedReason represents the fact that the initialization of the Helm
|
||||
// configuration failed.
|
||||
InitFailedReason string = "InitFailed"
|
||||
|
||||
// GetLastReleaseFailedReason represents the fact that observing the last
|
||||
// release failed.
|
||||
GetLastReleaseFailedReason string = "GetLastReleaseFailed"
|
||||
|
||||
// DependencyNotReadyReason represents the fact that
|
||||
// one of the dependencies is not ready.
|
||||
DependencyNotReadyReason string = "DependencyNotReady"
|
||||
|
||||
// ReconciliationSucceededReason represents the fact that
|
||||
// the reconciliation succeeded.
|
||||
ReconciliationSucceededReason string = "ReconciliationSucceeded"
|
||||
|
||||
// ReconciliationFailedReason represents the fact that
|
||||
// the reconciliation failed.
|
||||
ReconciliationFailedReason string = "ReconciliationFailed"
|
||||
)
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
Copyright 2022 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Package v2 contains API Schema definitions for the helm v2beta2 API group
|
||||
// +kubebuilder:object:generate=true
|
||||
// +groupName=helm.toolkit.fluxcd.io
|
||||
package v2
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
Copyright 2022 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
import (
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"sigs.k8s.io/controller-runtime/pkg/scheme"
|
||||
)
|
||||
|
||||
var (
|
||||
// GroupVersion is group version used to register these objects
|
||||
GroupVersion = schema.GroupVersion{Group: "helm.toolkit.fluxcd.io", Version: "v2beta2"}
|
||||
|
||||
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
|
||||
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
|
||||
|
||||
// AddToScheme adds the types in this group-version to the given scheme.
|
||||
AddToScheme = SchemeBuilder.AddToScheme
|
||||
)
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
Copyright 2022 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
// CrossNamespaceObjectReference contains enough information to let you locate
|
||||
// the typed referenced object at cluster level.
|
||||
type CrossNamespaceObjectReference struct {
|
||||
// APIVersion of the referent.
|
||||
// +optional
|
||||
APIVersion string `json:"apiVersion,omitempty"`
|
||||
|
||||
// Kind of the referent.
|
||||
// +kubebuilder:validation:Enum=HelmRepository;GitRepository;Bucket
|
||||
// +required
|
||||
Kind string `json:"kind,omitempty"`
|
||||
|
||||
// Name of the referent.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
// +kubebuilder:validation:MaxLength=253
|
||||
// +required
|
||||
Name string `json:"name"`
|
||||
|
||||
// Namespace of the referent.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
// +kubebuilder:validation:MaxLength=63
|
||||
// +kubebuilder:validation:Optional
|
||||
// +optional
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
}
|
||||
|
||||
// CrossNamespaceSourceReference contains enough information to let you locate
|
||||
// the typed referenced object at cluster level.
|
||||
type CrossNamespaceSourceReference struct {
|
||||
// APIVersion of the referent.
|
||||
// +optional
|
||||
APIVersion string `json:"apiVersion,omitempty"`
|
||||
|
||||
// Kind of the referent.
|
||||
// +kubebuilder:validation:Enum=OCIRepository;HelmChart
|
||||
// +required
|
||||
Kind string `json:"kind"`
|
||||
|
||||
// Name of the referent.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
// +kubebuilder:validation:MaxLength=253
|
||||
// +required
|
||||
Name string `json:"name"`
|
||||
|
||||
// Namespace of the referent, defaults to the namespace of the Kubernetes
|
||||
// resource object that contains the reference.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
// +kubebuilder:validation:MaxLength=63
|
||||
// +kubebuilder:validation:Optional
|
||||
// +optional
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
}
|
||||
|
||||
// ValuesReference contains a reference to a resource containing Helm values,
|
||||
// and optionally the key they can be found at.
|
||||
type ValuesReference struct {
|
||||
// Kind of the values referent, valid values are ('Secret', 'ConfigMap').
|
||||
// +kubebuilder:validation:Enum=Secret;ConfigMap
|
||||
// +required
|
||||
Kind string `json:"kind"`
|
||||
|
||||
// Name of the values referent. Should reside in the same namespace as the
|
||||
// referring resource.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
// +kubebuilder:validation:MaxLength=253
|
||||
// +required
|
||||
Name string `json:"name"`
|
||||
|
||||
// ValuesKey is the data key where the values.yaml or a specific value can be
|
||||
// found at. Defaults to 'values.yaml'.
|
||||
// +kubebuilder:validation:MaxLength=253
|
||||
// +kubebuilder:validation:Pattern=`^[\-._a-zA-Z0-9]+$`
|
||||
// +optional
|
||||
ValuesKey string `json:"valuesKey,omitempty"`
|
||||
|
||||
// TargetPath is the YAML dot notation path the value should be merged at. When
|
||||
// set, the ValuesKey is expected to be a single flat value. Defaults to 'None',
|
||||
// which results in the values getting merged at the root.
|
||||
// +kubebuilder:validation:MaxLength=250
|
||||
// +kubebuilder:validation:Pattern=`^([a-zA-Z0-9_\-.\\\/]|\[[0-9]{1,5}\])+$`
|
||||
// +optional
|
||||
TargetPath string `json:"targetPath,omitempty"`
|
||||
|
||||
// Optional marks this ValuesReference as optional. When set, a not found error
|
||||
// for the values reference is ignored, but any ValuesKey, TargetPath or
|
||||
// transient error will still result in a reconciliation failure.
|
||||
// +optional
|
||||
Optional bool `json:"optional,omitempty"`
|
||||
}
|
||||
|
||||
// GetValuesKey returns the defined ValuesKey, or the default ('values.yaml').
|
||||
func (in ValuesReference) GetValuesKey() string {
|
||||
if in.ValuesKey == "" {
|
||||
return "values.yaml"
|
||||
}
|
||||
return in.ValuesKey
|
||||
}
|
|
@ -0,0 +1,236 @@
|
|||
/*
|
||||
Copyright 2023 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
const (
|
||||
// snapshotStatusDeployed indicates that the release the snapshot was taken
|
||||
// from is currently deployed.
|
||||
snapshotStatusDeployed = "deployed"
|
||||
// snapshotStatusSuperseded indicates that the release the snapshot was taken
|
||||
// from has been superseded by a newer release.
|
||||
snapshotStatusSuperseded = "superseded"
|
||||
|
||||
// snapshotTestPhaseFailed indicates that the test of the release the snapshot
|
||||
// was taken from has failed.
|
||||
snapshotTestPhaseFailed = "Failed"
|
||||
)
|
||||
|
||||
// Snapshots is a list of Snapshot objects.
|
||||
type Snapshots []*Snapshot
|
||||
|
||||
// Len returns the number of Snapshots.
|
||||
func (in Snapshots) Len() int {
|
||||
return len(in)
|
||||
}
|
||||
|
||||
// SortByVersion sorts the Snapshots by version, in descending order.
|
||||
func (in Snapshots) SortByVersion() {
|
||||
sort.Slice(in, func(i, j int) bool {
|
||||
return in[i].Version > in[j].Version
|
||||
})
|
||||
}
|
||||
|
||||
// Latest returns the most recent Snapshot.
|
||||
func (in Snapshots) Latest() *Snapshot {
|
||||
if len(in) == 0 {
|
||||
return nil
|
||||
}
|
||||
in.SortByVersion()
|
||||
return in[0]
|
||||
}
|
||||
|
||||
// Previous returns the most recent Snapshot before the Latest that has a
|
||||
// status of "deployed" or "superseded", or nil if there is no such Snapshot.
|
||||
// Unless ignoreTests is true, Snapshots with a test in the "Failed" phase are
|
||||
// ignored.
|
||||
func (in Snapshots) Previous(ignoreTests bool) *Snapshot {
|
||||
if len(in) < 2 {
|
||||
return nil
|
||||
}
|
||||
in.SortByVersion()
|
||||
for i := range in[1:] {
|
||||
s := in[i+1]
|
||||
if s.Status == snapshotStatusDeployed || s.Status == snapshotStatusSuperseded {
|
||||
if ignoreTests || !s.HasTestInPhase(snapshotTestPhaseFailed) {
|
||||
return s
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Truncate removes all Snapshots up to the Previous deployed Snapshot.
|
||||
// If there is no previous-deployed Snapshot, the most recent 5 Snapshots are
|
||||
// retained.
|
||||
func (in *Snapshots) Truncate(ignoreTests bool) {
|
||||
if in.Len() < 2 {
|
||||
return
|
||||
}
|
||||
|
||||
in.SortByVersion()
|
||||
for i := range (*in)[1:] {
|
||||
s := (*in)[i+1]
|
||||
if s.Status == snapshotStatusDeployed || s.Status == snapshotStatusSuperseded {
|
||||
if ignoreTests || !s.HasTestInPhase(snapshotTestPhaseFailed) {
|
||||
*in = (*in)[:i+2]
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if in.Len() > defaultMaxHistory {
|
||||
// If none of the Snapshots are deployed or superseded, and there
|
||||
// are more than the defaultMaxHistory, truncate to the most recent
|
||||
// Snapshots.
|
||||
*in = (*in)[:defaultMaxHistory]
|
||||
}
|
||||
}
|
||||
|
||||
// Snapshot captures a point-in-time copy of the status information for a Helm release,
|
||||
// as managed by the controller.
|
||||
type Snapshot struct {
|
||||
// APIVersion is the API version of the Snapshot.
|
||||
// Provisional: when the calculation method of the Digest field is changed,
|
||||
// this field will be used to distinguish between the old and new methods.
|
||||
// +optional
|
||||
APIVersion string `json:"apiVersion,omitempty"`
|
||||
// Digest is the checksum of the release object in storage.
|
||||
// It has the format of `<algo>:<checksum>`.
|
||||
// +required
|
||||
Digest string `json:"digest"`
|
||||
// Name is the name of the release.
|
||||
// +required
|
||||
Name string `json:"name"`
|
||||
// Namespace is the namespace the release is deployed to.
|
||||
// +required
|
||||
Namespace string `json:"namespace"`
|
||||
// Version is the version of the release object in storage.
|
||||
// +required
|
||||
Version int `json:"version"`
|
||||
// Status is the current state of the release.
|
||||
// +required
|
||||
Status string `json:"status"`
|
||||
// ChartName is the chart name of the release object in storage.
|
||||
// +required
|
||||
ChartName string `json:"chartName"`
|
||||
// ChartVersion is the chart version of the release object in
|
||||
// storage.
|
||||
// +required
|
||||
ChartVersion string `json:"chartVersion"`
|
||||
// ConfigDigest is the checksum of the config (better known as
|
||||
// "values") of the release object in storage.
|
||||
// It has the format of `<algo>:<checksum>`.
|
||||
// +required
|
||||
ConfigDigest string `json:"configDigest"`
|
||||
// FirstDeployed is when the release was first deployed.
|
||||
// +required
|
||||
FirstDeployed metav1.Time `json:"firstDeployed"`
|
||||
// LastDeployed is when the release was last deployed.
|
||||
// +required
|
||||
LastDeployed metav1.Time `json:"lastDeployed"`
|
||||
// Deleted is when the release was deleted.
|
||||
// +optional
|
||||
Deleted metav1.Time `json:"deleted,omitempty"`
|
||||
// TestHooks is the list of test hooks for the release as observed to be
|
||||
// run by the controller.
|
||||
// +optional
|
||||
TestHooks *map[string]*TestHookStatus `json:"testHooks,omitempty"`
|
||||
// OCIDigest is the digest of the OCI artifact associated with the release.
|
||||
// +optional
|
||||
OCIDigest string `json:"ociDigest,omitempty"`
|
||||
}
|
||||
|
||||
// FullReleaseName returns the full name of the release in the format
|
||||
// of '<namespace>/<name>.<version>
|
||||
func (in *Snapshot) FullReleaseName() string {
|
||||
if in == nil {
|
||||
return ""
|
||||
}
|
||||
return fmt.Sprintf("%s/%s.v%d", in.Namespace, in.Name, in.Version)
|
||||
}
|
||||
|
||||
// VersionedChartName returns the full name of the chart in the format of
|
||||
// '<name>@<version>'.
|
||||
func (in *Snapshot) VersionedChartName() string {
|
||||
if in == nil {
|
||||
return ""
|
||||
}
|
||||
return fmt.Sprintf("%s@%s", in.ChartName, in.ChartVersion)
|
||||
}
|
||||
|
||||
// HasBeenTested returns true if TestHooks is not nil. This includes an empty
|
||||
// map, which indicates the chart has no tests.
|
||||
func (in *Snapshot) HasBeenTested() bool {
|
||||
return in != nil && in.TestHooks != nil
|
||||
}
|
||||
|
||||
// GetTestHooks returns the TestHooks for the release if not nil.
|
||||
func (in *Snapshot) GetTestHooks() map[string]*TestHookStatus {
|
||||
if in == nil || in.TestHooks == nil {
|
||||
return nil
|
||||
}
|
||||
return *in.TestHooks
|
||||
}
|
||||
|
||||
// HasTestInPhase returns true if any of the TestHooks is in the given phase.
|
||||
func (in *Snapshot) HasTestInPhase(phase string) bool {
|
||||
if in != nil {
|
||||
for _, h := range in.GetTestHooks() {
|
||||
if h.Phase == phase {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// SetTestHooks sets the TestHooks for the release.
|
||||
func (in *Snapshot) SetTestHooks(hooks map[string]*TestHookStatus) {
|
||||
if in == nil || hooks == nil {
|
||||
return
|
||||
}
|
||||
in.TestHooks = &hooks
|
||||
}
|
||||
|
||||
// Targets returns true if the Snapshot targets the given release data.
|
||||
func (in *Snapshot) Targets(name, namespace string, version int) bool {
|
||||
if in != nil {
|
||||
return in.Name == name && in.Namespace == namespace && in.Version == version
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// TestHookStatus holds the status information for a test hook as observed
|
||||
// to be run by the controller.
|
||||
type TestHookStatus struct {
|
||||
// LastStarted is the time the test hook was last started.
|
||||
// +optional
|
||||
LastStarted metav1.Time `json:"lastStarted,omitempty"`
|
||||
// LastCompleted is the time the test hook last completed.
|
||||
// +optional
|
||||
LastCompleted metav1.Time `json:"lastCompleted,omitempty"`
|
||||
// Phase the test hook was observed to be in.
|
||||
// +optional
|
||||
Phase string `json:"phase,omitempty"`
|
||||
}
|
|
@ -0,0 +1,298 @@
|
|||
/*
|
||||
Copyright 2023 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSnapshots_Sort(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
in Snapshots
|
||||
want Snapshots
|
||||
}{
|
||||
{
|
||||
name: "sorts by descending version",
|
||||
in: Snapshots{
|
||||
{Version: 1},
|
||||
{Version: 3},
|
||||
{Version: 2},
|
||||
},
|
||||
want: Snapshots{
|
||||
{Version: 3},
|
||||
{Version: 2},
|
||||
{Version: 1},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "already sorted",
|
||||
in: Snapshots{
|
||||
{Version: 3},
|
||||
{Version: 2},
|
||||
{Version: 1},
|
||||
},
|
||||
want: Snapshots{
|
||||
{Version: 3},
|
||||
{Version: 2},
|
||||
{Version: 1},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tt.in.SortByVersion()
|
||||
|
||||
if !reflect.DeepEqual(tt.in, tt.want) {
|
||||
t.Errorf("SortByVersion() got %v, want %v", tt.in, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSnapshots_Latest(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
in Snapshots
|
||||
want *Snapshot
|
||||
}{
|
||||
{
|
||||
name: "returns most recent snapshot",
|
||||
in: Snapshots{
|
||||
{Version: 1},
|
||||
{Version: 3},
|
||||
{Version: 2},
|
||||
},
|
||||
want: &Snapshot{Version: 3},
|
||||
},
|
||||
{
|
||||
name: "returns nil if empty",
|
||||
in: Snapshots{},
|
||||
want: nil,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := tt.in.Latest(); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("Latest() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSnapshots_Previous(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
in Snapshots
|
||||
ignoreTests bool
|
||||
want *Snapshot
|
||||
}{
|
||||
{
|
||||
name: "returns previous snapshot",
|
||||
in: Snapshots{
|
||||
{Version: 2, Status: "deployed"},
|
||||
{Version: 3, Status: "failed"},
|
||||
{Version: 1, Status: "superseded"},
|
||||
},
|
||||
want: &Snapshot{Version: 2, Status: "deployed"},
|
||||
},
|
||||
{
|
||||
name: "includes snapshots with failed tests",
|
||||
in: Snapshots{
|
||||
{Version: 4, Status: "deployed"},
|
||||
{Version: 1, Status: "superseded"},
|
||||
{Version: 2, Status: "superseded"},
|
||||
{Version: 3, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"test": {Phase: "Failed"},
|
||||
}},
|
||||
},
|
||||
ignoreTests: true,
|
||||
want: &Snapshot{Version: 3, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"test": {Phase: "Failed"},
|
||||
}},
|
||||
},
|
||||
{
|
||||
name: "ignores snapshots with failed tests",
|
||||
in: Snapshots{
|
||||
{Version: 4, Status: "deployed"},
|
||||
{Version: 1, Status: "superseded"},
|
||||
{Version: 2, Status: "superseded"},
|
||||
{Version: 3, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"test": {Phase: "Failed"},
|
||||
}},
|
||||
},
|
||||
ignoreTests: false,
|
||||
want: &Snapshot{Version: 2, Status: "superseded"},
|
||||
},
|
||||
{
|
||||
name: "returns nil without previous snapshot",
|
||||
in: Snapshots{
|
||||
{Version: 1, Status: "deployed"},
|
||||
},
|
||||
want: nil,
|
||||
},
|
||||
{
|
||||
name: "returns nil without snapshot matching criteria",
|
||||
in: Snapshots{
|
||||
{Version: 4, Status: "deployed"},
|
||||
{Version: 3, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"test": {Phase: "Failed"},
|
||||
}},
|
||||
},
|
||||
ignoreTests: false,
|
||||
want: nil,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := tt.in.Previous(tt.ignoreTests); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("Previous() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSnapshots_Truncate(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
in Snapshots
|
||||
ignoreTests bool
|
||||
want Snapshots
|
||||
}{
|
||||
{
|
||||
name: "keeps previous snapshot",
|
||||
in: Snapshots{
|
||||
{Version: 1, Status: "superseded"},
|
||||
{Version: 3, Status: "failed"},
|
||||
{Version: 2, Status: "superseded"},
|
||||
{Version: 4, Status: "deployed"},
|
||||
},
|
||||
want: Snapshots{
|
||||
{Version: 4, Status: "deployed"},
|
||||
{Version: 3, Status: "failed"},
|
||||
{Version: 2, Status: "superseded"},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "ignores snapshots with failed tests",
|
||||
in: Snapshots{
|
||||
{Version: 4, Status: "deployed"},
|
||||
{Version: 3, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"upgrade-test-fail-podinfo-fault-test-tiz9x": {Phase: "Failed"},
|
||||
"upgrade-test-fail-podinfo-grpc-test-gddcw": {},
|
||||
}},
|
||||
{Version: 2, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"upgrade-test-fail-podinfo-grpc-test-h0tc2": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
"upgrade-test-fail-podinfo-jwt-test-vzusa": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
"upgrade-test-fail-podinfo-service-test-b647e": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
}},
|
||||
},
|
||||
ignoreTests: false,
|
||||
want: Snapshots{
|
||||
{Version: 4, Status: "deployed"},
|
||||
{Version: 3, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"upgrade-test-fail-podinfo-fault-test-tiz9x": {Phase: "Failed"},
|
||||
"upgrade-test-fail-podinfo-grpc-test-gddcw": {},
|
||||
}},
|
||||
{Version: 2, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"upgrade-test-fail-podinfo-grpc-test-h0tc2": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
"upgrade-test-fail-podinfo-jwt-test-vzusa": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
"upgrade-test-fail-podinfo-service-test-b647e": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "keeps previous snapshot with failed tests",
|
||||
in: Snapshots{
|
||||
{Version: 4, Status: "deployed"},
|
||||
{Version: 3, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"upgrade-test-fail-podinfo-fault-test-tiz9x": {Phase: "Failed"},
|
||||
"upgrade-test-fail-podinfo-grpc-test-gddcw": {},
|
||||
}},
|
||||
{Version: 2, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"upgrade-test-fail-podinfo-grpc-test-h0tc2": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
"upgrade-test-fail-podinfo-jwt-test-vzusa": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
"upgrade-test-fail-podinfo-service-test-b647e": {
|
||||
Phase: "Succeeded",
|
||||
},
|
||||
}},
|
||||
{Version: 1, Status: "superseded"},
|
||||
},
|
||||
ignoreTests: true,
|
||||
want: Snapshots{
|
||||
{Version: 4, Status: "deployed"},
|
||||
{Version: 3, Status: "superseded", TestHooks: &map[string]*TestHookStatus{
|
||||
"upgrade-test-fail-podinfo-fault-test-tiz9x": {Phase: "Failed"},
|
||||
"upgrade-test-fail-podinfo-grpc-test-gddcw": {},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "retains most recent snapshots when all have failed",
|
||||
in: Snapshots{
|
||||
{Version: 6, Status: "deployed"},
|
||||
{Version: 5, Status: "failed"},
|
||||
{Version: 4, Status: "failed"},
|
||||
{Version: 3, Status: "failed"},
|
||||
{Version: 2, Status: "failed"},
|
||||
{Version: 1, Status: "failed"},
|
||||
},
|
||||
want: Snapshots{
|
||||
{Version: 6, Status: "deployed"},
|
||||
{Version: 5, Status: "failed"},
|
||||
{Version: 4, Status: "failed"},
|
||||
{Version: 3, Status: "failed"},
|
||||
{Version: 2, Status: "failed"},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "without previous snapshot",
|
||||
in: Snapshots{
|
||||
{Version: 1, Status: "deployed"},
|
||||
},
|
||||
want: Snapshots{
|
||||
{Version: 1, Status: "deployed"},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tt.in.Truncate(tt.ignoreTests)
|
||||
|
||||
if !reflect.DeepEqual(tt.in, tt.want) {
|
||||
t.Errorf("Truncate() got %v, want %v", tt.in, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,744 @@
|
|||
//go:build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
Copyright 2022 The Flux authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by controller-gen. DO NOT EDIT.
|
||||
|
||||
package v2
|
||||
|
||||
import (
|
||||
"github.com/fluxcd/pkg/apis/kustomize"
|
||||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *CrossNamespaceObjectReference) DeepCopyInto(out *CrossNamespaceObjectReference) {
|
||||
*out = *in
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CrossNamespaceObjectReference.
|
||||
func (in *CrossNamespaceObjectReference) DeepCopy() *CrossNamespaceObjectReference {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(CrossNamespaceObjectReference)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *CrossNamespaceSourceReference) DeepCopyInto(out *CrossNamespaceSourceReference) {
|
||||
*out = *in
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CrossNamespaceSourceReference.
|
||||
func (in *CrossNamespaceSourceReference) DeepCopy() *CrossNamespaceSourceReference {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(CrossNamespaceSourceReference)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *DriftDetection) DeepCopyInto(out *DriftDetection) {
|
||||
*out = *in
|
||||
if in.Ignore != nil {
|
||||
in, out := &in.Ignore, &out.Ignore
|
||||
*out = make([]IgnoreRule, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DriftDetection.
|
||||
func (in *DriftDetection) DeepCopy() *DriftDetection {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(DriftDetection)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Filter) DeepCopyInto(out *Filter) {
|
||||
*out = *in
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Filter.
|
||||
func (in *Filter) DeepCopy() *Filter {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Filter)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *HelmChartTemplate) DeepCopyInto(out *HelmChartTemplate) {
|
||||
*out = *in
|
||||
if in.ObjectMeta != nil {
|
||||
in, out := &in.ObjectMeta, &out.ObjectMeta
|
||||
*out = new(HelmChartTemplateObjectMeta)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
in.Spec.DeepCopyInto(&out.Spec)
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartTemplate.
|
||||
func (in *HelmChartTemplate) DeepCopy() *HelmChartTemplate {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(HelmChartTemplate)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *HelmChartTemplateObjectMeta) DeepCopyInto(out *HelmChartTemplateObjectMeta) {
|
||||
*out = *in
|
||||
if in.Labels != nil {
|
||||
in, out := &in.Labels, &out.Labels
|
||||
*out = make(map[string]string, len(*in))
|
||||
for key, val := range *in {
|
||||
(*out)[key] = val
|
||||
}
|
||||
}
|
||||
if in.Annotations != nil {
|
||||
in, out := &in.Annotations, &out.Annotations
|
||||
*out = make(map[string]string, len(*in))
|
||||
for key, val := range *in {
|
||||
(*out)[key] = val
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartTemplateObjectMeta.
|
||||
func (in *HelmChartTemplateObjectMeta) DeepCopy() *HelmChartTemplateObjectMeta {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(HelmChartTemplateObjectMeta)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *HelmChartTemplateSpec) DeepCopyInto(out *HelmChartTemplateSpec) {
|
||||
*out = *in
|
||||
out.SourceRef = in.SourceRef
|
||||
if in.Interval != nil {
|
||||
in, out := &in.Interval, &out.Interval
|
||||
*out = new(metav1.Duration)
|
||||
**out = **in
|
||||
}
|
||||
if in.ValuesFiles != nil {
|
||||
in, out := &in.ValuesFiles, &out.ValuesFiles
|
||||
*out = make([]string, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
if in.Verify != nil {
|
||||
in, out := &in.Verify, &out.Verify
|
||||
*out = new(HelmChartTemplateVerification)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartTemplateSpec.
|
||||
func (in *HelmChartTemplateSpec) DeepCopy() *HelmChartTemplateSpec {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(HelmChartTemplateSpec)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *HelmChartTemplateVerification) DeepCopyInto(out *HelmChartTemplateVerification) {
|
||||
*out = *in
|
||||
if in.SecretRef != nil {
|
||||
in, out := &in.SecretRef, &out.SecretRef
|
||||
*out = new(meta.LocalObjectReference)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartTemplateVerification.
|
||||
func (in *HelmChartTemplateVerification) DeepCopy() *HelmChartTemplateVerification {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(HelmChartTemplateVerification)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *HelmRelease) DeepCopyInto(out *HelmRelease) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||
in.Spec.DeepCopyInto(&out.Spec)
|
||||
in.Status.DeepCopyInto(&out.Status)
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRelease.
|
||||
func (in *HelmRelease) DeepCopy() *HelmRelease {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(HelmRelease)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *HelmRelease) DeepCopyObject() runtime.Object {
|
||||
if c := in.DeepCopy(); c != nil {
|
||||
return c
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *HelmReleaseList) DeepCopyInto(out *HelmReleaseList) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||
if in.Items != nil {
|
||||
in, out := &in.Items, &out.Items
|
||||
*out = make([]HelmRelease, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmReleaseList.
|
||||
func (in *HelmReleaseList) DeepCopy() *HelmReleaseList {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(HelmReleaseList)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *HelmReleaseList) DeepCopyObject() runtime.Object {
|
||||
if c := in.DeepCopy(); c != nil {
|
||||
return c
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *HelmReleaseSpec) DeepCopyInto(out *HelmReleaseSpec) {
|
||||
*out = *in
|
||||
in.Chart.DeepCopyInto(&out.Chart)
|
||||
if in.ChartRef != nil {
|
||||
in, out := &in.ChartRef, &out.ChartRef
|
||||
*out = new(CrossNamespaceSourceReference)
|
||||
**out = **in
|
||||
}
|
||||
out.Interval = in.Interval
|
||||
if in.KubeConfig != nil {
|
||||
in, out := &in.KubeConfig, &out.KubeConfig
|
||||
*out = new(meta.KubeConfigReference)
|
||||
**out = **in
|
||||
}
|
||||
if in.DependsOn != nil {
|
||||
in, out := &in.DependsOn, &out.DependsOn
|
||||
*out = make([]meta.NamespacedObjectReference, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
if in.Timeout != nil {
|
||||
in, out := &in.Timeout, &out.Timeout
|
||||
*out = new(metav1.Duration)
|
||||
**out = **in
|
||||
}
|
||||
if in.MaxHistory != nil {
|
||||
in, out := &in.MaxHistory, &out.MaxHistory
|
||||
*out = new(int)
|
||||
**out = **in
|
||||
}
|
||||
if in.PersistentClient != nil {
|
||||
in, out := &in.PersistentClient, &out.PersistentClient
|
||||
*out = new(bool)
|
||||
**out = **in
|
||||
}
|
||||
if in.DriftDetection != nil {
|
||||
in, out := &in.DriftDetection, &out.DriftDetection
|
||||
*out = new(DriftDetection)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
if in.Install != nil {
|
||||
in, out := &in.Install, &out.Install
|
||||
*out = new(Install)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
if in.Upgrade != nil {
|
||||
in, out := &in.Upgrade, &out.Upgrade
|
||||
*out = new(Upgrade)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
if in.Test != nil {
|
||||
in, out := &in.Test, &out.Test
|
||||
*out = new(Test)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
if in.Rollback != nil {
|
||||
in, out := &in.Rollback, &out.Rollback
|
||||
*out = new(Rollback)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
if in.Uninstall != nil {
|
||||
in, out := &in.Uninstall, &out.Uninstall
|
||||
*out = new(Uninstall)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
if in.ValuesFrom != nil {
|
||||
in, out := &in.ValuesFrom, &out.ValuesFrom
|
||||
*out = make([]ValuesReference, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
if in.Values != nil {
|
||||
in, out := &in.Values, &out.Values
|
||||
*out = new(v1.JSON)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
if in.PostRenderers != nil {
|
||||
in, out := &in.PostRenderers, &out.PostRenderers
|
||||
*out = make([]PostRenderer, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmReleaseSpec.
|
||||
func (in *HelmReleaseSpec) DeepCopy() *HelmReleaseSpec {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(HelmReleaseSpec)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *HelmReleaseStatus) DeepCopyInto(out *HelmReleaseStatus) {
|
||||
*out = *in
|
||||
if in.Conditions != nil {
|
||||
in, out := &in.Conditions, &out.Conditions
|
||||
*out = make([]metav1.Condition, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
if in.History != nil {
|
||||
in, out := &in.History, &out.History
|
||||
*out = make(Snapshots, len(*in))
|
||||
for i := range *in {
|
||||
if (*in)[i] != nil {
|
||||
in, out := &(*in)[i], &(*out)[i]
|
||||
*out = new(Snapshot)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
}
|
||||
}
|
||||
out.ReconcileRequestStatus = in.ReconcileRequestStatus
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmReleaseStatus.
|
||||
func (in *HelmReleaseStatus) DeepCopy() *HelmReleaseStatus {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(HelmReleaseStatus)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *IgnoreRule) DeepCopyInto(out *IgnoreRule) {
|
||||
*out = *in
|
||||
if in.Paths != nil {
|
||||
in, out := &in.Paths, &out.Paths
|
||||
*out = make([]string, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
if in.Target != nil {
|
||||
in, out := &in.Target, &out.Target
|
||||
*out = new(kustomize.Selector)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnoreRule.
|
||||
func (in *IgnoreRule) DeepCopy() *IgnoreRule {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(IgnoreRule)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Install) DeepCopyInto(out *Install) {
|
||||
*out = *in
|
||||
if in.Timeout != nil {
|
||||
in, out := &in.Timeout, &out.Timeout
|
||||
*out = new(metav1.Duration)
|
||||
**out = **in
|
||||
}
|
||||
if in.Remediation != nil {
|
||||
in, out := &in.Remediation, &out.Remediation
|
||||
*out = new(InstallRemediation)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Install.
|
||||
func (in *Install) DeepCopy() *Install {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Install)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *InstallRemediation) DeepCopyInto(out *InstallRemediation) {
|
||||
*out = *in
|
||||
if in.IgnoreTestFailures != nil {
|
||||
in, out := &in.IgnoreTestFailures, &out.IgnoreTestFailures
|
||||
*out = new(bool)
|
||||
**out = **in
|
||||
}
|
||||
if in.RemediateLastFailure != nil {
|
||||
in, out := &in.RemediateLastFailure, &out.RemediateLastFailure
|
||||
*out = new(bool)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstallRemediation.
|
||||
func (in *InstallRemediation) DeepCopy() *InstallRemediation {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(InstallRemediation)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Kustomize) DeepCopyInto(out *Kustomize) {
|
||||
*out = *in
|
||||
if in.Patches != nil {
|
||||
in, out := &in.Patches, &out.Patches
|
||||
*out = make([]kustomize.Patch, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
if in.PatchesStrategicMerge != nil {
|
||||
in, out := &in.PatchesStrategicMerge, &out.PatchesStrategicMerge
|
||||
*out = make([]v1.JSON, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
if in.PatchesJSON6902 != nil {
|
||||
in, out := &in.PatchesJSON6902, &out.PatchesJSON6902
|
||||
*out = make([]kustomize.JSON6902Patch, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
if in.Images != nil {
|
||||
in, out := &in.Images, &out.Images
|
||||
*out = make([]kustomize.Image, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Kustomize.
|
||||
func (in *Kustomize) DeepCopy() *Kustomize {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Kustomize)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *PostRenderer) DeepCopyInto(out *PostRenderer) {
|
||||
*out = *in
|
||||
if in.Kustomize != nil {
|
||||
in, out := &in.Kustomize, &out.Kustomize
|
||||
*out = new(Kustomize)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PostRenderer.
|
||||
func (in *PostRenderer) DeepCopy() *PostRenderer {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(PostRenderer)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Rollback) DeepCopyInto(out *Rollback) {
|
||||
*out = *in
|
||||
if in.Timeout != nil {
|
||||
in, out := &in.Timeout, &out.Timeout
|
||||
*out = new(metav1.Duration)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Rollback.
|
||||
func (in *Rollback) DeepCopy() *Rollback {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Rollback)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Snapshot) DeepCopyInto(out *Snapshot) {
|
||||
*out = *in
|
||||
in.FirstDeployed.DeepCopyInto(&out.FirstDeployed)
|
||||
in.LastDeployed.DeepCopyInto(&out.LastDeployed)
|
||||
in.Deleted.DeepCopyInto(&out.Deleted)
|
||||
if in.TestHooks != nil {
|
||||
in, out := &in.TestHooks, &out.TestHooks
|
||||
*out = new(map[string]*TestHookStatus)
|
||||
if **in != nil {
|
||||
in, out := *in, *out
|
||||
*out = make(map[string]*TestHookStatus, len(*in))
|
||||
for key, val := range *in {
|
||||
var outVal *TestHookStatus
|
||||
if val == nil {
|
||||
(*out)[key] = nil
|
||||
} else {
|
||||
inVal := (*in)[key]
|
||||
in, out := &inVal, &outVal
|
||||
*out = new(TestHookStatus)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
(*out)[key] = outVal
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Snapshot.
|
||||
func (in *Snapshot) DeepCopy() *Snapshot {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Snapshot)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in Snapshots) DeepCopyInto(out *Snapshots) {
|
||||
{
|
||||
in := &in
|
||||
*out = make(Snapshots, len(*in))
|
||||
for i := range *in {
|
||||
if (*in)[i] != nil {
|
||||
in, out := &(*in)[i], &(*out)[i]
|
||||
*out = new(Snapshot)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Snapshots.
|
||||
func (in Snapshots) DeepCopy() Snapshots {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Snapshots)
|
||||
in.DeepCopyInto(out)
|
||||
return *out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Test) DeepCopyInto(out *Test) {
|
||||
*out = *in
|
||||
if in.Timeout != nil {
|
||||
in, out := &in.Timeout, &out.Timeout
|
||||
*out = new(metav1.Duration)
|
||||
**out = **in
|
||||
}
|
||||
if in.Filters != nil {
|
||||
in, out := &in.Filters, &out.Filters
|
||||
*out = new([]Filter)
|
||||
if **in != nil {
|
||||
in, out := *in, *out
|
||||
*out = make([]Filter, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Test.
|
||||
func (in *Test) DeepCopy() *Test {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Test)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *TestHookStatus) DeepCopyInto(out *TestHookStatus) {
|
||||
*out = *in
|
||||
in.LastStarted.DeepCopyInto(&out.LastStarted)
|
||||
in.LastCompleted.DeepCopyInto(&out.LastCompleted)
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TestHookStatus.
|
||||
func (in *TestHookStatus) DeepCopy() *TestHookStatus {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(TestHookStatus)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Uninstall) DeepCopyInto(out *Uninstall) {
|
||||
*out = *in
|
||||
if in.Timeout != nil {
|
||||
in, out := &in.Timeout, &out.Timeout
|
||||
*out = new(metav1.Duration)
|
||||
**out = **in
|
||||
}
|
||||
if in.DeletionPropagation != nil {
|
||||
in, out := &in.DeletionPropagation, &out.DeletionPropagation
|
||||
*out = new(string)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Uninstall.
|
||||
func (in *Uninstall) DeepCopy() *Uninstall {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Uninstall)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Upgrade) DeepCopyInto(out *Upgrade) {
|
||||
*out = *in
|
||||
if in.Timeout != nil {
|
||||
in, out := &in.Timeout, &out.Timeout
|
||||
*out = new(metav1.Duration)
|
||||
**out = **in
|
||||
}
|
||||
if in.Remediation != nil {
|
||||
in, out := &in.Remediation, &out.Remediation
|
||||
*out = new(UpgradeRemediation)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Upgrade.
|
||||
func (in *Upgrade) DeepCopy() *Upgrade {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Upgrade)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *UpgradeRemediation) DeepCopyInto(out *UpgradeRemediation) {
|
||||
*out = *in
|
||||
if in.IgnoreTestFailures != nil {
|
||||
in, out := &in.IgnoreTestFailures, &out.IgnoreTestFailures
|
||||
*out = new(bool)
|
||||
**out = **in
|
||||
}
|
||||
if in.RemediateLastFailure != nil {
|
||||
in, out := &in.RemediateLastFailure, &out.RemediateLastFailure
|
||||
*out = new(bool)
|
||||
**out = **in
|
||||
}
|
||||
if in.Strategy != nil {
|
||||
in, out := &in.Strategy, &out.Strategy
|
||||
*out = new(RemediationStrategy)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpgradeRemediation.
|
||||
func (in *UpgradeRemediation) DeepCopy() *UpgradeRemediation {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(UpgradeRemediation)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *ValuesReference) DeepCopyInto(out *ValuesReference) {
|
||||
*out = *in
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValuesReference.
|
||||
func (in *ValuesReference) DeepCopy() *ValuesReference {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ValuesReference)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
|
@ -1087,7 +1087,7 @@ const (
|
|||
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description=""
|
||||
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].status",description=""
|
||||
// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].message",description=""
|
||||
// +kubebuilder:deprecatedversion:warning="v2beta1 HelmRelease is deprecated, upgrade to v2beta2"
|
||||
// +kubebuilder:deprecatedversion:warning="v2beta1 HelmRelease is deprecated, upgrade to v2"
|
||||
|
||||
// HelmRelease is the Schema for the helmreleases API
|
||||
type HelmRelease struct {
|
||||
|
|
|
@ -1081,11 +1081,11 @@ const (
|
|||
// +genclient
|
||||
// +kubebuilder:object:root=true
|
||||
// +kubebuilder:resource:shortName=hr
|
||||
// +kubebuilder:storageversion
|
||||
// +kubebuilder:subresource:status
|
||||
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp",description=""
|
||||
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].status",description=""
|
||||
// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].message",description=""
|
||||
// +kubebuilder:deprecatedversion:warning="v2beta2 HelmRelease is deprecated, upgrade to v2"
|
||||
|
||||
// HelmRelease is the Schema for the helmreleases API
|
||||
type HelmRelease struct {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -17,11 +17,13 @@ limitations under the License.
|
|||
package acl
|
||||
|
||||
import (
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
"testing"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"testing"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func TestAllowsAccessTo(t *testing.T) {
|
||||
|
|
|
@ -33,7 +33,7 @@ import (
|
|||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/cli-runtime/pkg/resource"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -39,7 +39,7 @@ import (
|
|||
ssanormalize "github.com/fluxcd/pkg/ssa/normalize"
|
||||
ssautil "github.com/fluxcd/pkg/ssa/utils"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/diff"
|
||||
)
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ import (
|
|||
ssanormalize "github.com/fluxcd/pkg/ssa/normalize"
|
||||
ssautil "github.com/fluxcd/pkg/ssa/utils"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/kube"
|
||||
)
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ import (
|
|||
helmchartutil "helm.sh/helm/v3/pkg/chartutil"
|
||||
helmrelease "helm.sh/helm/v3/pkg/release"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/features"
|
||||
"github.com/fluxcd/helm-controller/internal/postrender"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
|
|
|
@ -24,7 +24,7 @@ import (
|
|||
helmaction "helm.sh/helm/v3/pkg/action"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func Test_newInstall(t *testing.T) {
|
||||
|
|
|
@ -21,7 +21,7 @@ import (
|
|||
"helm.sh/helm/v3/pkg/chart"
|
||||
"helm.sh/helm/v3/pkg/chartutil"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
intchartutil "github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
)
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ import (
|
|||
|
||||
"github.com/fluxcd/pkg/apis/meta"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func TestMustResetFailures(t *testing.T) {
|
||||
|
|
|
@ -19,7 +19,7 @@ package action
|
|||
import (
|
||||
helmaction "helm.sh/helm/v3/pkg/action"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
// RollbackOption can be used to modify Helm's action.Rollback after the
|
||||
|
|
|
@ -24,7 +24,7 @@ import (
|
|||
helmaction "helm.sh/helm/v3/pkg/action"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func Test_newRollback(t *testing.T) {
|
||||
|
|
|
@ -22,7 +22,7 @@ import (
|
|||
helmaction "helm.sh/helm/v3/pkg/action"
|
||||
helmrelease "helm.sh/helm/v3/pkg/release"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
// TestOption can be used to modify Helm's action.ReleaseTesting after the
|
||||
|
|
|
@ -24,7 +24,7 @@ import (
|
|||
helmaction "helm.sh/helm/v3/pkg/action"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func Test_newTest(t *testing.T) {
|
||||
|
|
|
@ -22,7 +22,7 @@ import (
|
|||
helmaction "helm.sh/helm/v3/pkg/action"
|
||||
helmrelease "helm.sh/helm/v3/pkg/release"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
// UninstallOption can be used to modify Helm's action.Uninstall after the
|
||||
|
|
|
@ -24,7 +24,7 @@ import (
|
|||
helmaction "helm.sh/helm/v3/pkg/action"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func Test_newUninstall(t *testing.T) {
|
||||
|
|
|
@ -25,7 +25,7 @@ import (
|
|||
helmchartutil "helm.sh/helm/v3/pkg/chartutil"
|
||||
helmrelease "helm.sh/helm/v3/pkg/release"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/features"
|
||||
"github.com/fluxcd/helm-controller/internal/postrender"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
|
|
|
@ -24,7 +24,7 @@ import (
|
|||
helmaction "helm.sh/helm/v3/pkg/action"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func Test_newUpgrade(t *testing.T) {
|
||||
|
|
|
@ -27,7 +27,7 @@ import (
|
|||
|
||||
helmdriver "helm.sh/helm/v3/pkg/storage/driver"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
)
|
||||
|
|
|
@ -29,7 +29,7 @@ import (
|
|||
"helm.sh/helm/v3/pkg/storage/driver"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
"github.com/fluxcd/helm-controller/internal/storage"
|
||||
"github.com/fluxcd/helm-controller/internal/testutil"
|
||||
|
|
|
@ -32,7 +32,7 @@ import (
|
|||
|
||||
"github.com/fluxcd/pkg/runtime/transform"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
// ErrValuesRefReason is the descriptive reason for an ErrValuesReference.
|
||||
|
|
|
@ -30,7 +30,7 @@ import (
|
|||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/fake"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func FuzzChartValuesFromReferences(f *testing.F) {
|
||||
|
|
|
@ -28,7 +28,7 @@ import (
|
|||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/fake"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func TestChartValuesFromReferences(t *testing.T) {
|
||||
|
|
|
@ -58,7 +58,7 @@ import (
|
|||
sourcev1 "github.com/fluxcd/source-controller/api/v1"
|
||||
sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
intacl "github.com/fluxcd/helm-controller/internal/acl"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
|
|
|
@ -35,7 +35,7 @@ import (
|
|||
"github.com/fluxcd/pkg/runtime/patch"
|
||||
sourcev1 "github.com/fluxcd/source-controller/api/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
func FuzzHelmReleaseReconciler_reconcile(f *testing.F) {
|
||||
|
|
|
@ -54,7 +54,7 @@ import (
|
|||
sourcev1 "github.com/fluxcd/source-controller/api/v1"
|
||||
sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
intacl "github.com/fluxcd/helm-controller/internal/acl"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
|
|
|
@ -34,7 +34,7 @@ import (
|
|||
sourcev1 "github.com/fluxcd/source-controller/api/v1"
|
||||
sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
// +kubebuilder:scaffold:imports
|
||||
)
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ package postrender
|
|||
import (
|
||||
helmpostrender "helm.sh/helm/v3/pkg/postrender"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
// BuildPostRenderers creates the post-renderer instances from a HelmRelease
|
||||
|
|
|
@ -27,7 +27,7 @@ import (
|
|||
|
||||
"github.com/fluxcd/pkg/apis/kustomize"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
const replaceImageMock = `apiVersion: v1
|
||||
|
|
|
@ -35,7 +35,7 @@ import (
|
|||
"github.com/fluxcd/pkg/runtime/patch"
|
||||
"github.com/fluxcd/pkg/ssa/jsondiff"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/diff"
|
||||
interrors "github.com/fluxcd/helm-controller/internal/errors"
|
||||
|
|
|
@ -41,7 +41,7 @@ import (
|
|||
"github.com/fluxcd/pkg/runtime/patch"
|
||||
"github.com/fluxcd/pkg/ssa/jsondiff"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/kube"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
|
|
|
@ -29,7 +29,7 @@ import (
|
|||
"github.com/fluxcd/pkg/ssa"
|
||||
"github.com/fluxcd/pkg/ssa/jsondiff"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
)
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ import (
|
|||
"github.com/fluxcd/pkg/ssa"
|
||||
"github.com/fluxcd/pkg/ssa/jsondiff"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/testutil"
|
||||
)
|
||||
|
|
|
@ -34,7 +34,7 @@ import (
|
|||
"github.com/fluxcd/pkg/ssa"
|
||||
sourcev1 "github.com/fluxcd/source-controller/api/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/acl"
|
||||
"github.com/fluxcd/helm-controller/internal/strings"
|
||||
)
|
||||
|
|
|
@ -34,7 +34,7 @@ import (
|
|||
sourcev1 "github.com/fluxcd/source-controller/api/v1"
|
||||
sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/acl"
|
||||
)
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ import (
|
|||
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -38,7 +38,7 @@ import (
|
|||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -22,7 +22,7 @@ import (
|
|||
helmchart "helm.sh/helm/v3/pkg/chart"
|
||||
helmchartutil "helm.sh/helm/v3/pkg/chartutil"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -26,7 +26,7 @@ import (
|
|||
helmrelease "helm.sh/helm/v3/pkg/release"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
"github.com/fluxcd/helm-controller/internal/storage"
|
||||
|
|
|
@ -28,7 +28,7 @@ import (
|
|||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
)
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ import (
|
|||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
"github.com/fluxcd/pkg/runtime/logger"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -37,7 +37,7 @@ import (
|
|||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -33,7 +33,7 @@ import (
|
|||
ssanormalize "github.com/fluxcd/pkg/ssa/normalize"
|
||||
ssautil "github.com/fluxcd/pkg/ssa/utils"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/kube"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
|
|
|
@ -42,7 +42,7 @@ import (
|
|||
sourcev1 "github.com/fluxcd/source-controller/api/v1"
|
||||
sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
)
|
||||
|
||||
const testFieldManager = "helm-controller"
|
||||
|
|
|
@ -29,7 +29,7 @@ import (
|
|||
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
"github.com/fluxcd/helm-controller/internal/storage"
|
||||
|
|
|
@ -36,7 +36,7 @@ import (
|
|||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -31,7 +31,7 @@ import (
|
|||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
"github.com/fluxcd/pkg/runtime/logger"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
"github.com/fluxcd/helm-controller/internal/storage"
|
||||
|
|
|
@ -29,7 +29,7 @@ import (
|
|||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
"github.com/fluxcd/pkg/runtime/logger"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
)
|
||||
|
|
|
@ -35,7 +35,7 @@ import (
|
|||
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -36,7 +36,7 @@ import (
|
|||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -28,7 +28,7 @@ import (
|
|||
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/release"
|
||||
"github.com/fluxcd/helm-controller/internal/storage"
|
||||
|
|
|
@ -36,7 +36,7 @@ import (
|
|||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -28,7 +28,7 @@ import (
|
|||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
"github.com/fluxcd/pkg/runtime/logger"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -38,7 +38,7 @@ import (
|
|||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"github.com/fluxcd/pkg/runtime/conditions"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/action"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
|
|
|
@ -25,7 +25,7 @@ import (
|
|||
helmrelease "helm.sh/helm/v3/pkg/release"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/chartutil"
|
||||
"github.com/fluxcd/helm-controller/internal/digest"
|
||||
)
|
||||
|
|
|
@ -25,7 +25,7 @@ import (
|
|||
helmrelease "helm.sh/helm/v3/pkg/release"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2beta2"
|
||||
v2 "github.com/fluxcd/helm-controller/api/v2"
|
||||
"github.com/fluxcd/helm-controller/internal/testutil"
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue