chore: define common aliases for k8s packages (#8672)
Run the E2E test on kind / build (push) Failing after 6m48s
Run the E2E test on kind / setup-test-matrix (push) Successful in 3s
Run the E2E test on kind / run-e2e-test (push) Has been skipped
Main CI / Build (push) Failing after 35s
Close stale issues and PRs / stale (push) Successful in 8s
Trivy Nightly Scan / Trivy nightly scan (velero, main) (push) Failing after 1m11s
Trivy Nightly Scan / Trivy nightly scan (velero-plugin-for-aws, main) (push) Failing after 47s
Trivy Nightly Scan / Trivy nightly scan (velero-plugin-for-gcp, main) (push) Failing after 49s
Trivy Nightly Scan / Trivy nightly scan (velero-plugin-for-microsoft-azure, main) (push) Failing after 43s

* lchore: define common alias for k8s packages

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>

* Update .golangci.yaml

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>

* Update .golangci.yaml

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>

* Update .golangci.yaml

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>

---------

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
This commit is contained in:
Matthieu MOREL
2025-04-22 06:14:47 -04:00
committed by GitHub
parent f0fde6e1d4
commit c6a420bd3a
139 changed files with 1968 additions and 1954 deletions
+5 -5
View File
@@ -20,7 +20,7 @@ import (
"context"
"github.com/pkg/errors"
rbac "k8s.io/api/rbac/v1"
rbacv1 "k8s.io/api/rbac/v1"
rbacbeta "k8s.io/api/rbac/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
@@ -81,7 +81,7 @@ func (v1beta1 V1beta1ClusterRoleBindingLister) List() ([]ClusterRoleBinding, err
// Necessary so that callers to the ClusterRoleBindingLister interfaces don't need the kubernetes.Interface.
func NewClusterRoleBindingListerMap(clientset kubernetes.Interface) map[string]ClusterRoleBindingLister {
return map[string]ClusterRoleBindingLister{
rbac.SchemeGroupVersion.Version: V1ClusterRoleBindingLister{client: clientset.RbacV1().ClusterRoleBindings()},
rbacv1.SchemeGroupVersion.Version: V1ClusterRoleBindingLister{client: clientset.RbacV1().ClusterRoleBindings()},
rbacbeta.SchemeGroupVersion.Version: V1beta1ClusterRoleBindingLister{client: clientset.RbacV1beta1().ClusterRoleBindings()},
"": NoopClusterRoleBindingLister{},
}
@@ -98,7 +98,7 @@ type ClusterRoleBinding interface {
}
type V1ClusterRoleBinding struct {
Crb rbac.ClusterRoleBinding
Crb rbacv1.ClusterRoleBinding
}
func (c V1ClusterRoleBinding) Name() string {
@@ -112,7 +112,7 @@ func (c V1ClusterRoleBinding) RoleRefName() string {
func (c V1ClusterRoleBinding) ServiceAccountSubjects(namespace string) []string {
var saSubjects []string
for _, s := range c.Crb.Subjects {
if s.Kind == rbac.ServiceAccountKind && s.Namespace == namespace {
if s.Kind == rbacv1.ServiceAccountKind && s.Namespace == namespace {
saSubjects = append(saSubjects, s.Name)
}
}
@@ -134,7 +134,7 @@ func (c V1beta1ClusterRoleBinding) RoleRefName() string {
func (c V1beta1ClusterRoleBinding) ServiceAccountSubjects(namespace string) []string {
var saSubjects []string
for _, s := range c.Crb.Subjects {
if s.Kind == rbac.ServiceAccountKind && s.Namespace == namespace {
if s.Kind == rbacv1.ServiceAccountKind && s.Namespace == namespace {
saSubjects = append(saSubjects, s.Name)
}
}
@@ -18,7 +18,7 @@ package actionhelpers
import (
"github.com/sirupsen/logrus"
rbac "k8s.io/api/rbac/v1"
rbacv1 "k8s.io/api/rbac/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
@@ -31,7 +31,7 @@ func ClusterRoleBindingsForAction(clusterRoleBindingListers map[string]ClusterRo
// Look up the supported RBAC version
var supportedAPI metav1.GroupVersionForDiscovery
for _, ag := range discoveryHelper.APIGroups() {
if ag.Name == rbac.GroupName {
if ag.Name == rbacv1.GroupName {
supportedAPI = ag.PreferredVersion
break
}
+11 -11
View File
@@ -27,7 +27,7 @@ import (
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
v1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -879,29 +879,29 @@ func TestGetVolumeSnapshotClass(t *testing.T) {
}
// pvcs
pvcFoo := &v1.PersistentVolumeClaim{
pvcFoo := &corev1api.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Annotations: map[string]string{
"velero.io/csi-volumesnapshot-class": "foowithoutlabel",
},
},
Spec: v1.PersistentVolumeClaimSpec{},
Spec: corev1api.PersistentVolumeClaimSpec{},
}
pvcFoo2 := &v1.PersistentVolumeClaim{
pvcFoo2 := &corev1api.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Annotations: map[string]string{
"velero.io/csi-volumesnapshot-class": "foo2",
},
},
Spec: v1.PersistentVolumeClaimSpec{},
Spec: corev1api.PersistentVolumeClaimSpec{},
}
pvcNone := &v1.PersistentVolumeClaim{
pvcNone := &corev1api.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "none",
},
Spec: v1.PersistentVolumeClaimSpec{},
Spec: corev1api.PersistentVolumeClaimSpec{},
}
// vsclasses
@@ -957,7 +957,7 @@ func TestGetVolumeSnapshotClass(t *testing.T) {
testCases := []struct {
name string
driverName string
pvc *v1.PersistentVolumeClaim
pvc *corev1api.PersistentVolumeClaim
backup *velerov1api.Backup
expectedVSC *snapshotv1api.VolumeSnapshotClass
expectError bool
@@ -1535,7 +1535,7 @@ func TestWaitUntilVSCHandleIsReady(t *testing.T) {
Name: vscName,
},
Spec: snapshotv1api.VolumeSnapshotContentSpec{
VolumeSnapshotRef: v1.ObjectReference{
VolumeSnapshotRef: corev1api.ObjectReference{
Name: "vol-snap-1",
APIVersion: snapshotv1api.SchemeGroupVersion.String(),
},
@@ -1588,7 +1588,7 @@ func TestWaitUntilVSCHandleIsReady(t *testing.T) {
Name: nilStatusVsc,
},
Spec: snapshotv1api.VolumeSnapshotContentSpec{
VolumeSnapshotRef: v1.ObjectReference{
VolumeSnapshotRef: corev1api.ObjectReference{
Name: "vol-snap-1",
APIVersion: snapshotv1api.SchemeGroupVersion.String(),
},
@@ -1611,7 +1611,7 @@ func TestWaitUntilVSCHandleIsReady(t *testing.T) {
Name: nilStatusFieldVsc,
},
Spec: snapshotv1api.VolumeSnapshotContentSpec{
VolumeSnapshotRef: v1.ObjectReference{
VolumeSnapshotRef: corev1api.ObjectReference{
Name: "vol-snap-1",
APIVersion: snapshotv1api.SchemeGroupVersion.String(),
},
+10 -10
View File
@@ -22,7 +22,7 @@ import (
"github.com/google/uuid"
"github.com/sirupsen/logrus"
v1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/kubernetes"
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -65,7 +65,7 @@ func NewEventRecorder(kubeClient kubernetes.Interface, scheme *runtime.Scheme, e
// The callers (i.e., data mover pods) have controlled the rate and total number outside. E.g., the progress is designed to be updated every 10 seconds and is changeable.
BurstSize: math.MaxInt32,
MaxEvents: 1,
MessageFunc: func(event *v1.Event) string {
MessageFunc: func(event *corev1api.Event) string {
return event.Message
},
})
@@ -75,7 +75,7 @@ func NewEventRecorder(kubeClient kubernetes.Interface, scheme *runtime.Scheme, e
sink: kubeClient.CoreV1().Events(""),
})
res.recorder = res.broadcaster.NewRecorder(scheme, v1.EventSource{
res.recorder = res.broadcaster.NewRecorder(scheme, corev1api.EventSource{
Component: eventSource,
Host: eventNode,
})
@@ -88,9 +88,9 @@ func (er *eventRecorder) Event(object runtime.Object, warning bool, reason strin
return
}
eventType := v1.EventTypeNormal
eventType := corev1api.EventTypeNormal
if warning {
eventType = v1.EventTypeWarning
eventType = corev1api.EventTypeWarning
}
if len(a) > 0 {
@@ -113,7 +113,7 @@ func (er *eventRecorder) EndingEvent(object runtime.Object, warning bool, reason
if er.endingSentinel == nil {
sentinelEvent = uuid.NewString()
er.endingSentinel = &eventElement{
t: v1.EventTypeNormal,
t: corev1api.EventTypeNormal,
r: sentinelEvent,
m: sentinelEvent,
sinked: make(chan struct{}),
@@ -161,7 +161,7 @@ func (er *eventRecorder) Shutdown() {
er.lock.Unlock()
}
func (er *eventRecorder) sentinelWatch(event *v1.Event) bool {
func (er *eventRecorder) sentinelWatch(event *corev1api.Event) bool {
er.lock.Lock()
defer er.lock.Unlock()
@@ -177,7 +177,7 @@ func (er *eventRecorder) sentinelWatch(event *v1.Event) bool {
return false
}
func (es *eventSink) Create(event *v1.Event) (*v1.Event, error) {
func (es *eventSink) Create(event *corev1api.Event) (*corev1api.Event, error) {
if es.recorder.sentinelWatch(event) {
return event, nil
}
@@ -185,10 +185,10 @@ func (es *eventSink) Create(event *v1.Event) (*v1.Event, error) {
return es.sink.CreateWithEventNamespace(event)
}
func (es *eventSink) Update(event *v1.Event) (*v1.Event, error) {
func (es *eventSink) Update(event *corev1api.Event) (*corev1api.Event, error) {
return es.sink.UpdateWithEventNamespace(event)
}
func (es *eventSink) Patch(event *v1.Event, data []byte) (*v1.Event, error) {
func (es *eventSink) Patch(event *corev1api.Event, data []byte) (*corev1api.Event, error) {
return es.sink.PatchWithEventNamespace(event, data)
}
+4 -4
View File
@@ -29,7 +29,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes/fake"
corev1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
velerotest "github.com/vmware-tanzu/velero/pkg/test"
)
@@ -139,18 +139,18 @@ func TestEvent(t *testing.T) {
t.Run(tc.name, func(t *testing.T) {
client := fake.NewSimpleClientset()
scheme := runtime.NewScheme()
err := corev1.AddToScheme(scheme)
err := corev1api.AddToScheme(scheme)
require.NoError(t, err)
recorder := NewEventRecorder(client, scheme, "source-1", "fake-node", velerotest.NewLogger())
pod := &corev1.Pod{
pod := &corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Namespace: "fake-ns",
Name: "fake-pod",
UID: types.UID("fake-uid"),
},
Spec: corev1.PodSpec{
Spec: corev1api.PodSpec{
NodeName: "fake-node",
},
}
+5 -5
View File
@@ -22,7 +22,7 @@ import (
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"github.com/vmware-tanzu/velero/pkg/builder"
@@ -40,7 +40,7 @@ func TestIsLinuxNode(t *testing.T) {
nodeLinux := builder.ForNode("fake-node").Labels(map[string]string{"kubernetes.io/os": "linux"}).Result()
scheme := runtime.NewScheme()
corev1.AddToScheme(scheme)
corev1api.AddToScheme(scheme)
tests := []struct {
name string
@@ -95,7 +95,7 @@ func TestWithLinuxNode(t *testing.T) {
nodeLinux := builder.ForNode("fake-node-2").Labels(map[string]string{"kubernetes.io/os": "linux"}).Result()
scheme := runtime.NewScheme()
corev1.AddToScheme(scheme)
corev1api.AddToScheme(scheme)
tests := []struct {
name string
@@ -139,7 +139,7 @@ func TestGetNodeOSType(t *testing.T) {
nodeWindows := builder.ForNode("fake-node").Labels(map[string]string{"kubernetes.io/os": "windows"}).Result()
nodeLinux := builder.ForNode("fake-node").Labels(map[string]string{"kubernetes.io/os": "linux"}).Result()
scheme := runtime.NewScheme()
corev1.AddToScheme(scheme)
corev1api.AddToScheme(scheme)
tests := []struct {
name string
kubeClientObj []runtime.Object
@@ -190,7 +190,7 @@ func TestHasNodeWithOS(t *testing.T) {
nodeLinux := builder.ForNode("fake-node-3").Labels(map[string]string{"kubernetes.io/os": "linux"}).Result()
scheme := runtime.NewScheme()
corev1.AddToScheme(scheme)
corev1api.AddToScheme(scheme)
tests := []struct {
name string
+9 -9
View File
@@ -18,17 +18,17 @@ package kube
import (
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
)
// ParseResourceRequirements takes a set of CPU and memory requests and limit string
// values and returns a ResourceRequirements struct to be used in a Container.
// An error is returned if we cannot parse the request/limit.
func ParseResourceRequirements(cpuRequest, memRequest, cpuLimit, memLimit string) (corev1.ResourceRequirements, error) {
resources := corev1.ResourceRequirements{
Requests: corev1.ResourceList{},
Limits: corev1.ResourceList{},
func ParseResourceRequirements(cpuRequest, memRequest, cpuLimit, memLimit string) (corev1api.ResourceRequirements, error) {
resources := corev1api.ResourceRequirements{
Requests: corev1api.ResourceList{},
Limits: corev1api.ResourceList{},
}
parsedCPURequest, err := resource.ParseQuantity(cpuRequest)
@@ -64,16 +64,16 @@ func ParseResourceRequirements(cpuRequest, memRequest, cpuLimit, memLimit string
// Only set resources if they are not unbounded
if parsedCPURequest != unbounded {
resources.Requests[corev1.ResourceCPU] = parsedCPURequest
resources.Requests[corev1api.ResourceCPU] = parsedCPURequest
}
if parsedMemRequest != unbounded {
resources.Requests[corev1.ResourceMemory] = parsedMemRequest
resources.Requests[corev1api.ResourceMemory] = parsedMemRequest
}
if parsedCPULimit != unbounded {
resources.Limits[corev1.ResourceCPU] = parsedCPULimit
resources.Limits[corev1api.ResourceCPU] = parsedCPULimit
}
if parsedMemLimit != unbounded {
resources.Limits[corev1.ResourceMemory] = parsedMemLimit
resources.Limits[corev1api.ResourceMemory] = parsedMemLimit
}
return resources, nil
+30 -30
View File
@@ -20,7 +20,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
)
@@ -35,37 +35,37 @@ func TestParseResourceRequirements(t *testing.T) {
name string
args args
wantErr bool
expected *corev1.ResourceRequirements
expected *corev1api.ResourceRequirements
}{
{"unbounded quantities", args{"0", "0", "0", "0"}, false, &corev1.ResourceRequirements{
Requests: corev1.ResourceList{},
Limits: corev1.ResourceList{},
{"unbounded quantities", args{"0", "0", "0", "0"}, false, &corev1api.ResourceRequirements{
Requests: corev1api.ResourceList{},
Limits: corev1api.ResourceList{},
}},
{"valid quantities", args{"100m", "128Mi", "200m", "256Mi"}, false, nil},
{"CPU request with unbounded limit", args{"100m", "128Mi", "0", "256Mi"}, false, &corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("100m"),
corev1.ResourceMemory: resource.MustParse("128Mi"),
{"CPU request with unbounded limit", args{"100m", "128Mi", "0", "256Mi"}, false, &corev1api.ResourceRequirements{
Requests: corev1api.ResourceList{
corev1api.ResourceCPU: resource.MustParse("100m"),
corev1api.ResourceMemory: resource.MustParse("128Mi"),
},
Limits: corev1.ResourceList{
corev1.ResourceMemory: resource.MustParse("256Mi"),
Limits: corev1api.ResourceList{
corev1api.ResourceMemory: resource.MustParse("256Mi"),
},
}},
{"Mem request with unbounded limit", args{"100m", "128Mi", "200m", "0"}, false, &corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("100m"),
corev1.ResourceMemory: resource.MustParse("128Mi"),
{"Mem request with unbounded limit", args{"100m", "128Mi", "200m", "0"}, false, &corev1api.ResourceRequirements{
Requests: corev1api.ResourceList{
corev1api.ResourceCPU: resource.MustParse("100m"),
corev1api.ResourceMemory: resource.MustParse("128Mi"),
},
Limits: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("200m"),
Limits: corev1api.ResourceList{
corev1api.ResourceCPU: resource.MustParse("200m"),
},
}},
{"CPU/Mem requests with unbounded limits", args{"100m", "128Mi", "0", "0"}, false, &corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("100m"),
corev1.ResourceMemory: resource.MustParse("128Mi"),
{"CPU/Mem requests with unbounded limits", args{"100m", "128Mi", "0", "0"}, false, &corev1api.ResourceRequirements{
Requests: corev1api.ResourceList{
corev1api.ResourceCPU: resource.MustParse("100m"),
corev1api.ResourceMemory: resource.MustParse("128Mi"),
},
Limits: corev1.ResourceList{},
Limits: corev1api.ResourceList{},
}},
{"invalid quantity", args{"100m", "invalid", "200m", "256Mi"}, true, nil},
{"CPU request greater than limit", args{"300m", "128Mi", "200m", "256Mi"}, true, nil},
@@ -80,16 +80,16 @@ func TestParseResourceRequirements(t *testing.T) {
}
assert.NoError(t, err)
var expected corev1.ResourceRequirements
var expected corev1api.ResourceRequirements
if tt.expected == nil {
expected = corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse(tt.args.cpuRequest),
corev1.ResourceMemory: resource.MustParse(tt.args.memRequest),
expected = corev1api.ResourceRequirements{
Requests: corev1api.ResourceList{
corev1api.ResourceCPU: resource.MustParse(tt.args.cpuRequest),
corev1api.ResourceMemory: resource.MustParse(tt.args.memRequest),
},
Limits: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse(tt.args.cpuLimit),
corev1.ResourceMemory: resource.MustParse(tt.args.memLimit),
Limits: corev1api.ResourceList{
corev1api.ResourceCPU: resource.MustParse(tt.args.cpuLimit),
corev1api.ResourceMemory: resource.MustParse(tt.args.memLimit),
},
}
} else {
+3 -3
View File
@@ -20,12 +20,12 @@ import (
"strconv"
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
"sigs.k8s.io/yaml"
)
func ParseSecurityContext(runAsUser string, runAsGroup string, allowPrivilegeEscalation string, secCtx string) (corev1.SecurityContext, error) {
securityContext := corev1.SecurityContext{}
func ParseSecurityContext(runAsUser string, runAsGroup string, allowPrivilegeEscalation string, secCtx string) (corev1api.SecurityContext, error) {
securityContext := corev1api.SecurityContext{}
if runAsUser != "" {
parsedRunAsUser, err := strconv.ParseInt(runAsUser, 10, 64)
+24 -24
View File
@@ -20,7 +20,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
"github.com/vmware-tanzu/velero/pkg/util/boolptr"
)
@@ -36,13 +36,13 @@ func TestParseSecurityContext(t *testing.T) {
name string
args args
wantErr bool
expected *corev1.SecurityContext
expected *corev1api.SecurityContext
}{
{
"valid security context",
args{"1001", "999", "true", ``},
false,
&corev1.SecurityContext{
&corev1api.SecurityContext{
RunAsUser: pointInt64(1001),
RunAsGroup: pointInt64(999),
AllowPrivilegeEscalation: boolptr.True(),
@@ -52,7 +52,7 @@ func TestParseSecurityContext(t *testing.T) {
"valid security context with override runAsUser",
args{"1001", "999", "true", `runAsUser: 2000`},
false,
&corev1.SecurityContext{
&corev1api.SecurityContext{
RunAsUser: pointInt64(2000),
RunAsGroup: pointInt64(999),
AllowPrivilegeEscalation: boolptr.True(),
@@ -80,14 +80,14 @@ runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false`},
false,
&corev1.SecurityContext{
&corev1api.SecurityContext{
RunAsUser: pointInt64(3333),
RunAsGroup: pointInt64(3333),
Capabilities: &corev1.Capabilities{
Drop: []corev1.Capability{"ALL"},
Add: []corev1.Capability{"cap1", "cap2"},
Capabilities: &corev1api.Capabilities{
Drop: []corev1api.Capability{"ALL"},
Add: []corev1api.Capability{"cap1", "cap2"},
},
SELinuxOptions: &corev1.SELinuxOptions{
SELinuxOptions: &corev1api.SELinuxOptions{
User: "userLabel",
Role: "roleLabel",
Type: "typeLabel",
@@ -120,14 +120,14 @@ runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false`},
true,
&corev1.SecurityContext{
&corev1api.SecurityContext{
RunAsUser: pointInt64(3333),
RunAsGroup: pointInt64(3333),
Capabilities: &corev1.Capabilities{
Drop: []corev1.Capability{"ALL"},
Add: []corev1.Capability{"cap1", "cap2"},
Capabilities: &corev1api.Capabilities{
Drop: []corev1api.Capability{"ALL"},
Add: []corev1api.Capability{"cap1", "cap2"},
},
SELinuxOptions: &corev1.SELinuxOptions{
SELinuxOptions: &corev1api.SELinuxOptions{
User: "userLabel",
Role: "roleLabel",
Type: "typeLabel",
@@ -160,14 +160,14 @@ runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false`},
false,
&corev1.SecurityContext{
&corev1api.SecurityContext{
RunAsUser: pointInt64(3333),
RunAsGroup: pointInt64(3333),
Capabilities: &corev1.Capabilities{
Drop: []corev1.Capability{"ALL"},
Add: []corev1.Capability{"cap1", "cap2"},
Capabilities: &corev1api.Capabilities{
Drop: []corev1api.Capability{"ALL"},
Add: []corev1api.Capability{"cap1", "cap2"},
},
SELinuxOptions: &corev1.SELinuxOptions{
SELinuxOptions: &corev1api.SELinuxOptions{
User: "userLabel",
Role: "roleLabel",
Type: "typeLabel",
@@ -182,19 +182,19 @@ allowPrivilegeEscalation: false`},
"another valid security context",
args{"1001", "999", "false", ""},
false,
&corev1.SecurityContext{
&corev1api.SecurityContext{
RunAsUser: pointInt64(1001),
RunAsGroup: pointInt64(999),
AllowPrivilegeEscalation: boolptr.False(),
},
},
{"security context without runAsGroup", args{"1001", "", "", ""}, false, &corev1.SecurityContext{
{"security context without runAsGroup", args{"1001", "", "", ""}, false, &corev1api.SecurityContext{
RunAsUser: pointInt64(1001),
}},
{"security context without runAsUser", args{"", "999", "", ""}, false, &corev1.SecurityContext{
{"security context without runAsUser", args{"", "999", "", ""}, false, &corev1api.SecurityContext{
RunAsGroup: pointInt64(999),
}},
{"empty context without runAsUser", args{"", "", "", ""}, false, &corev1.SecurityContext{}},
{"empty context without runAsUser", args{"", "", "", ""}, false, &corev1api.SecurityContext{}},
{
"invalid securityContext secCtx unknown key",
args{"", "", "", `
@@ -263,7 +263,7 @@ allowPrivilegeEscalation: false`},
assert.NoError(t, err)
if tt.expected == nil {
tt.expected = &corev1.SecurityContext{}
tt.expected = &corev1api.SecurityContext{}
}
if tt.wantErr {
+18 -18
View File
@@ -25,11 +25,11 @@ import (
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
corev1 "k8s.io/api/core/v1"
corev1api "k8s.io/api/core/v1"
storagev1api "k8s.io/api/storage/v1"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
@@ -49,7 +49,7 @@ func TestEnsureNamespaceExistsAndIsReady(t *testing.T) {
tests := []struct {
name string
expectNSFound bool
nsPhase corev1.NamespacePhase
nsPhase corev1api.NamespacePhase
nsDeleting bool
expectCreate bool
alreadyExists bool
@@ -67,7 +67,7 @@ func TestEnsureNamespaceExistsAndIsReady(t *testing.T) {
{
name: "namespace found, terminating phase",
expectNSFound: true,
nsPhase: corev1.NamespaceTerminating,
nsPhase: corev1api.NamespaceTerminating,
expectedResult: false,
expectedCreatedResult: false,
},
@@ -93,14 +93,14 @@ func TestEnsureNamespaceExistsAndIsReady(t *testing.T) {
{
name: "namespace not found initially, create returns already exists error, returned namespace is terminating",
alreadyExists: true,
nsPhase: corev1.NamespaceTerminating,
nsPhase: corev1api.NamespaceTerminating,
expectedResult: false,
expectedCreatedResult: false,
},
{
name: "same namespace found earlier, terminating phase already tracked",
expectNSFound: true,
nsPhase: corev1.NamespaceTerminating,
nsPhase: corev1api.NamespaceTerminating,
expectedResult: false,
expectedCreatedResult: false,
nsAlreadyInTerminationTracker: true,
@@ -110,7 +110,7 @@ func TestEnsureNamespaceExistsAndIsReady(t *testing.T) {
resourceDeletionStatusTracker := NewResourceDeletionStatusTracker()
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
namespace := &corev1.Namespace{
namespace := &corev1api.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: "test",
},
@@ -132,11 +132,11 @@ func TestEnsureNamespaceExistsAndIsReady(t *testing.T) {
if test.expectNSFound {
nsClient.On("Get", "test", metav1.GetOptions{}).Return(namespace, nil)
} else {
nsClient.On("Get", "test", metav1.GetOptions{}).Return(&corev1.Namespace{}, k8serrors.NewNotFound(schema.GroupResource{Resource: "namespaces"}, "test"))
nsClient.On("Get", "test", metav1.GetOptions{}).Return(&corev1api.Namespace{}, apierrors.NewNotFound(schema.GroupResource{Resource: "namespaces"}, "test"))
}
if test.alreadyExists {
nsClient.On("Create", namespace).Return(namespace, k8serrors.NewAlreadyExists(schema.GroupResource{Resource: "namespaces"}, "test"))
nsClient.On("Create", namespace).Return(namespace, apierrors.NewAlreadyExists(schema.GroupResource{Resource: "namespaces"}, "test"))
}
if test.expectCreate {
@@ -160,9 +160,9 @@ func TestEnsureNamespaceExistsAndIsReady(t *testing.T) {
func TestGetVolumeDirectorySuccess(t *testing.T) {
tests := []struct {
name string
pod *corev1.Pod
pvc *corev1.PersistentVolumeClaim
pv *corev1.PersistentVolume
pod *corev1api.Pod
pvc *corev1api.PersistentVolumeClaim
pv *corev1api.PersistentVolume
want string
}{
{
@@ -183,7 +183,7 @@ func TestGetVolumeDirectorySuccess(t *testing.T) {
name: "Block CSI volume with a PVC/PV does not append '/mount' to the volume name",
pod: builder.ForPod("ns-1", "my-pod").Volumes(builder.ForVolume("my-vol").PersistentVolumeClaimSource("my-pvc").Result()).Result(),
pvc: builder.ForPersistentVolumeClaim("ns-1", "my-pvc").VolumeName("a-pv").Result(),
pv: builder.ForPersistentVolume("a-pv").CSI("csi.test.com", "provider-volume-id").VolumeMode(corev1.PersistentVolumeBlock).Result(),
pv: builder.ForPersistentVolume("a-pv").CSI("csi.test.com", "provider-volume-id").VolumeMode(corev1api.PersistentVolumeBlock).Result(),
want: "a-pv",
},
{
@@ -237,23 +237,23 @@ func TestGetVolumeDirectorySuccess(t *testing.T) {
func TestGetVolumeModeSuccess(t *testing.T) {
tests := []struct {
name string
pod *corev1.Pod
pvc *corev1.PersistentVolumeClaim
pv *corev1.PersistentVolume
pod *corev1api.Pod
pvc *corev1api.PersistentVolumeClaim
pv *corev1api.PersistentVolume
want uploader.PersistentVolumeMode
}{
{
name: "Filesystem PVC volume",
pod: builder.ForPod("ns-1", "my-pod").Volumes(builder.ForVolume("my-vol").PersistentVolumeClaimSource("my-pvc").Result()).Result(),
pvc: builder.ForPersistentVolumeClaim("ns-1", "my-pvc").VolumeName("a-pv").Result(),
pv: builder.ForPersistentVolume("a-pv").VolumeMode(corev1.PersistentVolumeFilesystem).Result(),
pv: builder.ForPersistentVolume("a-pv").VolumeMode(corev1api.PersistentVolumeFilesystem).Result(),
want: uploader.PersistentVolumeFilesystem,
},
{
name: "Block PVC volume",
pod: builder.ForPod("ns-1", "my-pod").Volumes(builder.ForVolume("my-vol").PersistentVolumeClaimSource("my-pvc").Result()).Result(),
pvc: builder.ForPersistentVolumeClaim("ns-1", "my-pvc").VolumeName("a-pv").Result(),
pv: builder.ForPersistentVolume("a-pv").VolumeMode(corev1.PersistentVolumeBlock).Result(),
pv: builder.ForPersistentVolume("a-pv").VolumeMode(corev1api.PersistentVolumeBlock).Result(),
want: uploader.PersistentVolumeBlock,
},
{
+77 -78
View File
@@ -22,7 +22,6 @@ import (
"github.com/stretchr/testify/assert"
corev1api "k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
@@ -384,17 +383,17 @@ func TestGetVolumesByPod(t *testing.T) {
func TestIsPVCDefaultToFSBackup(t *testing.T) {
objs := []runtime.Object{
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "default",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
@@ -402,7 +401,7 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "default",
@@ -410,12 +409,12 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
"backup.velero.io/backup-volumes": "csi-vol1",
},
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
@@ -423,33 +422,33 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod3",
Namespace: "default",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
EmptyDir: &v1.EmptyDirVolumeSource{},
VolumeSource: corev1api.VolumeSource{
EmptyDir: &corev1api.EmptyDirVolumeSource{},
},
},
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "awesome-pod-1",
Namespace: "awesome-ns",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "awesome-csi-pvc1",
},
},
@@ -457,17 +456,17 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "awesome-pod-2",
Namespace: "awesome-ns",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "awesome-csi-pvc1",
},
},
@@ -475,7 +474,7 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "uploader-ns",
@@ -483,12 +482,12 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
"backup.velero.io/backup-volumes": "csi-vol1",
},
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
@@ -496,7 +495,7 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "uploader-ns",
@@ -504,12 +503,12 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
"backup.velero.io/backup-volumes": "csi-vol1",
},
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
@@ -575,36 +574,36 @@ func TestIsPVCDefaultToFSBackup(t *testing.T) {
func TestGetPodVolumeNameForPVC(t *testing.T) {
testCases := []struct {
name string
pod v1.Pod
pod corev1api.Pod
pvcName string
expectError bool
expectedVolumeName string
}{
{
name: "should get volume name for pod with multiple PVCs",
pod: v1.Pod{
Spec: v1.PodSpec{
Volumes: []v1.Volume{
pod: corev1api.Pod{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
},
{
Name: "csi-vol2",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc2",
},
},
},
{
Name: "csi-vol3",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc3",
},
},
@@ -618,13 +617,13 @@ func TestGetPodVolumeNameForPVC(t *testing.T) {
},
{
name: "should get volume name from pod using exactly one PVC",
pod: v1.Pod{
Spec: v1.PodSpec{
Volumes: []v1.Volume{
pod: corev1api.Pod{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
@@ -638,21 +637,21 @@ func TestGetPodVolumeNameForPVC(t *testing.T) {
},
{
name: "should return error for pod with no PVCs",
pod: v1.Pod{
Spec: v1.PodSpec{},
pod: corev1api.Pod{
Spec: corev1api.PodSpec{},
},
pvcName: "csi-pvc2",
expectError: true,
},
{
name: "should return error for pod with no matching PVC",
pod: v1.Pod{
Spec: v1.PodSpec{
Volumes: []v1.Volume{
pod: corev1api.Pod{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
@@ -679,17 +678,17 @@ func TestGetPodVolumeNameForPVC(t *testing.T) {
func TestGetPodsUsingPVC(t *testing.T) {
objs := []runtime.Object{
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "default",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
@@ -697,17 +696,17 @@ func TestGetPodsUsingPVC(t *testing.T) {
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "default",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
@@ -715,33 +714,33 @@ func TestGetPodsUsingPVC(t *testing.T) {
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod3",
Namespace: "default",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
EmptyDir: &v1.EmptyDirVolumeSource{},
VolumeSource: corev1api.VolumeSource{
EmptyDir: &corev1api.EmptyDirVolumeSource{},
},
},
},
},
},
&v1.Pod{
&corev1api.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "awesome-ns",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "csi-vol1",
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
VolumeSource: corev1api.VolumeSource{
PersistentVolumeClaim: &corev1api.PersistentVolumeClaimVolumeSource{
ClaimName: "csi-pvc1",
},
},
+15 -15
View File
@@ -17,27 +17,27 @@ limitations under the License.
package velero
import (
appsv1 "k8s.io/api/apps/v1"
v1 "k8s.io/api/core/v1"
appsv1api "k8s.io/api/apps/v1"
corev1api "k8s.io/api/core/v1"
)
// GetNodeSelectorFromVeleroServer get the node selector from the Velero server deployment
func GetNodeSelectorFromVeleroServer(deployment *appsv1.Deployment) map[string]string {
func GetNodeSelectorFromVeleroServer(deployment *appsv1api.Deployment) map[string]string {
return deployment.Spec.Template.Spec.NodeSelector
}
// GetTolerationsFromVeleroServer get the tolerations from the Velero server deployment
func GetTolerationsFromVeleroServer(deployment *appsv1.Deployment) []v1.Toleration {
func GetTolerationsFromVeleroServer(deployment *appsv1api.Deployment) []corev1api.Toleration {
return deployment.Spec.Template.Spec.Tolerations
}
// GetAffinityFromVeleroServer get the affinity from the Velero server deployment
func GetAffinityFromVeleroServer(deployment *appsv1.Deployment) *v1.Affinity {
func GetAffinityFromVeleroServer(deployment *appsv1api.Deployment) *corev1api.Affinity {
return deployment.Spec.Template.Spec.Affinity
}
// GetEnvVarsFromVeleroServer get the environment variables from the Velero server deployment
func GetEnvVarsFromVeleroServer(deployment *appsv1.Deployment) []v1.EnvVar {
func GetEnvVarsFromVeleroServer(deployment *appsv1api.Deployment) []corev1api.EnvVar {
for _, container := range deployment.Spec.Template.Spec.Containers {
// We only have one container in the Velero server deployment
return container.Env
@@ -46,7 +46,7 @@ func GetEnvVarsFromVeleroServer(deployment *appsv1.Deployment) []v1.EnvVar {
}
// GetEnvFromSourcesFromVeleroServer get the environment sources from the Velero server deployment
func GetEnvFromSourcesFromVeleroServer(deployment *appsv1.Deployment) []v1.EnvFromSource {
func GetEnvFromSourcesFromVeleroServer(deployment *appsv1api.Deployment) []corev1api.EnvFromSource {
for _, container := range deployment.Spec.Template.Spec.Containers {
// We only have one container in the Velero server deployment
return container.EnvFrom
@@ -55,7 +55,7 @@ func GetEnvFromSourcesFromVeleroServer(deployment *appsv1.Deployment) []v1.EnvFr
}
// GetVolumeMountsFromVeleroServer get the volume mounts from the Velero server deployment
func GetVolumeMountsFromVeleroServer(deployment *appsv1.Deployment) []v1.VolumeMount {
func GetVolumeMountsFromVeleroServer(deployment *appsv1api.Deployment) []corev1api.VolumeMount {
for _, container := range deployment.Spec.Template.Spec.Containers {
// We only have one container in the Velero server deployment
return container.VolumeMounts
@@ -64,32 +64,32 @@ func GetVolumeMountsFromVeleroServer(deployment *appsv1.Deployment) []v1.VolumeM
}
// GetVolumesFromVeleroServer get the volumes from the Velero server deployment
func GetVolumesFromVeleroServer(deployment *appsv1.Deployment) []v1.Volume {
func GetVolumesFromVeleroServer(deployment *appsv1api.Deployment) []corev1api.Volume {
return deployment.Spec.Template.Spec.Volumes
}
// GetServiceAccountFromVeleroServer get the service account from the Velero server deployment
func GetServiceAccountFromVeleroServer(deployment *appsv1.Deployment) string {
func GetServiceAccountFromVeleroServer(deployment *appsv1api.Deployment) string {
return deployment.Spec.Template.Spec.ServiceAccountName
}
// getVeleroServerImage get the image of the Velero server deployment
func GetVeleroServerImage(deployment *appsv1.Deployment) string {
func GetVeleroServerImage(deployment *appsv1api.Deployment) string {
return deployment.Spec.Template.Spec.Containers[0].Image
}
// GetVeleroServerLables get the labels of the Velero server deployment
func GetVeleroServerLables(deployment *appsv1.Deployment) map[string]string {
func GetVeleroServerLables(deployment *appsv1api.Deployment) map[string]string {
return deployment.Spec.Template.Labels
}
// GetVeleroServerAnnotations get the annotations of the Velero server deployment
func GetVeleroServerAnnotations(deployment *appsv1.Deployment) map[string]string {
func GetVeleroServerAnnotations(deployment *appsv1api.Deployment) map[string]string {
return deployment.Spec.Template.Annotations
}
// GetVeleroServerLabelValue returns the value of specified label of Velero server deployment
func GetVeleroServerLabelValue(deployment *appsv1.Deployment, key string) string {
func GetVeleroServerLabelValue(deployment *appsv1api.Deployment, key string) string {
if deployment.Spec.Template.Labels == nil {
return ""
}
@@ -98,7 +98,7 @@ func GetVeleroServerLabelValue(deployment *appsv1.Deployment, key string) string
}
// GetVeleroServerAnnotationValue returns the value of specified annotation of Velero server deployment
func GetVeleroServerAnnotationValue(deployment *appsv1.Deployment, key string) string {
func GetVeleroServerAnnotationValue(deployment *appsv1api.Deployment, key string) string {
if deployment.Spec.Template.Annotations == nil {
return ""
}
+159 -159
View File
@@ -21,23 +21,23 @@ import (
"testing"
"github.com/stretchr/testify/assert"
appsv1 "k8s.io/api/apps/v1"
v1 "k8s.io/api/core/v1"
appsv1api "k8s.io/api/apps/v1"
corev1api "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func TestGetNodeSelectorFromVeleroServer(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
deploy *appsv1api.Deployment
want map[string]string
}{
{
name: "no node selector",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
NodeSelector: map[string]string{},
},
},
@@ -47,10 +47,10 @@ func TestGetNodeSelectorFromVeleroServer(t *testing.T) {
},
{
name: "node selector",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
NodeSelector: map[string]string{
"foo": "bar",
},
@@ -82,29 +82,29 @@ func TestGetNodeSelectorFromVeleroServer(t *testing.T) {
func TestGetTolerationsFromVeleroServer(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
want []v1.Toleration
deploy *appsv1api.Deployment
want []corev1api.Toleration
}{
{
name: "no tolerations",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Tolerations: []v1.Toleration{},
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Tolerations: []corev1api.Toleration{},
},
},
},
},
want: []v1.Toleration{},
want: []corev1api.Toleration{},
},
{
name: "tolerations",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Tolerations: []v1.Toleration{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Tolerations: []corev1api.Toleration{
{
Key: "foo",
Operator: "Exists",
@@ -114,7 +114,7 @@ func TestGetTolerationsFromVeleroServer(t *testing.T) {
},
},
},
want: []v1.Toleration{
want: []corev1api.Toleration{
{
Key: "foo",
Operator: "Exists",
@@ -141,15 +141,15 @@ func TestGetTolerationsFromVeleroServer(t *testing.T) {
func TestGetAffinityFromVeleroServer(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
want *v1.Affinity
deploy *appsv1api.Deployment
want *corev1api.Affinity
}{
{
name: "no affinity",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Affinity: nil,
},
},
@@ -159,16 +159,16 @@ func TestGetAffinityFromVeleroServer(t *testing.T) {
},
{
name: "affinity",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Affinity: &v1.Affinity{
NodeAffinity: &v1.NodeAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{
NodeSelectorTerms: []v1.NodeSelectorTerm{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Affinity: &corev1api.Affinity{
NodeAffinity: &corev1api.NodeAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: &corev1api.NodeSelector{
NodeSelectorTerms: []corev1api.NodeSelectorTerm{
{
MatchExpressions: []v1.NodeSelectorRequirement{
MatchExpressions: []corev1api.NodeSelectorRequirement{
{
Key: "foo",
Operator: "In",
@@ -184,12 +184,12 @@ func TestGetAffinityFromVeleroServer(t *testing.T) {
},
},
},
want: &v1.Affinity{
NodeAffinity: &v1.NodeAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{
NodeSelectorTerms: []v1.NodeSelectorTerm{
want: &corev1api.Affinity{
NodeAffinity: &corev1api.NodeAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: &corev1api.NodeSelector{
NodeSelectorTerms: []corev1api.NodeSelectorTerm{
{
MatchExpressions: []v1.NodeSelectorRequirement{
MatchExpressions: []corev1api.NodeSelectorRequirement{
{
Key: "foo",
Operator: "In",
@@ -248,35 +248,35 @@ func TestGetAffinityFromVeleroServer(t *testing.T) {
func TestGetEnvVarsFromVeleroServer(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
want []v1.EnvVar
deploy *appsv1api.Deployment
want []corev1api.EnvVar
}{
{
name: "no env vars",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Containers: []corev1api.Container{
{
Env: []v1.EnvVar{},
Env: []corev1api.EnvVar{},
},
},
},
},
},
},
want: []v1.EnvVar{},
want: []corev1api.EnvVar{},
},
{
name: "env vars",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Containers: []corev1api.Container{
{
Env: []v1.EnvVar{
Env: []corev1api.EnvVar{
{
Name: "foo",
Value: "bar",
@@ -288,7 +288,7 @@ func TestGetEnvVarsFromVeleroServer(t *testing.T) {
},
},
},
want: []v1.EnvVar{
want: []corev1api.EnvVar{
{
Name: "foo",
Value: "bar",
@@ -315,38 +315,38 @@ func TestGetEnvVarsFromVeleroServer(t *testing.T) {
func TestGetEnvFromSourcesFromVeleroServer(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
expected []v1.EnvFromSource
deploy *appsv1api.Deployment
expected []corev1api.EnvFromSource
}{
{
name: "no env vars",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Containers: []corev1api.Container{
{
EnvFrom: []v1.EnvFromSource{},
EnvFrom: []corev1api.EnvFromSource{},
},
},
},
},
},
},
expected: []v1.EnvFromSource{},
expected: []corev1api.EnvFromSource{},
},
{
name: "configmap",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Containers: []corev1api.Container{
{
EnvFrom: []v1.EnvFromSource{
EnvFrom: []corev1api.EnvFromSource{
{
ConfigMapRef: &v1.ConfigMapEnvSource{
LocalObjectReference: v1.LocalObjectReference{
ConfigMapRef: &corev1api.ConfigMapEnvSource{
LocalObjectReference: corev1api.LocalObjectReference{
Name: "foo",
},
},
@@ -358,10 +358,10 @@ func TestGetEnvFromSourcesFromVeleroServer(t *testing.T) {
},
},
},
expected: []v1.EnvFromSource{
expected: []corev1api.EnvFromSource{
{
ConfigMapRef: &v1.ConfigMapEnvSource{
LocalObjectReference: v1.LocalObjectReference{
ConfigMapRef: &corev1api.ConfigMapEnvSource{
LocalObjectReference: corev1api.LocalObjectReference{
Name: "foo",
},
},
@@ -370,16 +370,16 @@ func TestGetEnvFromSourcesFromVeleroServer(t *testing.T) {
},
{
name: "secret",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Containers: []corev1api.Container{
{
EnvFrom: []v1.EnvFromSource{
EnvFrom: []corev1api.EnvFromSource{
{
SecretRef: &v1.SecretEnvSource{
LocalObjectReference: v1.LocalObjectReference{
SecretRef: &corev1api.SecretEnvSource{
LocalObjectReference: corev1api.LocalObjectReference{
Name: "foo",
},
},
@@ -391,10 +391,10 @@ func TestGetEnvFromSourcesFromVeleroServer(t *testing.T) {
},
},
},
expected: []v1.EnvFromSource{
expected: []corev1api.EnvFromSource{
{
SecretRef: &v1.SecretEnvSource{
LocalObjectReference: v1.LocalObjectReference{
SecretRef: &corev1api.SecretEnvSource{
LocalObjectReference: corev1api.LocalObjectReference{
Name: "foo",
},
},
@@ -414,35 +414,35 @@ func TestGetEnvFromSourcesFromVeleroServer(t *testing.T) {
func TestGetVolumeMountsFromVeleroServer(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
want []v1.VolumeMount
deploy *appsv1api.Deployment
want []corev1api.VolumeMount
}{
{
name: "no volume mounts",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Containers: []corev1api.Container{
{
VolumeMounts: []v1.VolumeMount{},
VolumeMounts: []corev1api.VolumeMount{},
},
},
},
},
},
},
want: []v1.VolumeMount{},
want: []corev1api.VolumeMount{},
},
{
name: "volume mounts",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Containers: []corev1api.Container{
{
VolumeMounts: []v1.VolumeMount{
VolumeMounts: []corev1api.VolumeMount{
{
Name: "foo",
MountPath: "/bar",
@@ -454,7 +454,7 @@ func TestGetVolumeMountsFromVeleroServer(t *testing.T) {
},
},
},
want: []v1.VolumeMount{
want: []corev1api.VolumeMount{
{
Name: "foo",
MountPath: "/bar",
@@ -481,29 +481,29 @@ func TestGetVolumeMountsFromVeleroServer(t *testing.T) {
func TestGetVolumesFromVeleroServer(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
want []v1.Volume
deploy *appsv1api.Deployment
want []corev1api.Volume
}{
{
name: "no volumes",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Volumes: []v1.Volume{},
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{},
},
},
},
},
want: []v1.Volume{},
want: []corev1api.Volume{},
},
{
name: "volumes",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Volumes: []v1.Volume{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Volumes: []corev1api.Volume{
{
Name: "foo",
},
@@ -512,7 +512,7 @@ func TestGetVolumesFromVeleroServer(t *testing.T) {
},
},
},
want: []v1.Volume{
want: []corev1api.Volume{
{
Name: "foo",
},
@@ -538,15 +538,15 @@ func TestGetVolumesFromVeleroServer(t *testing.T) {
func TestGetServiceAccountFromVeleroServer(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
deploy *appsv1api.Deployment
want string
}{
{
name: "no service account",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
ServiceAccountName: "",
},
},
@@ -556,10 +556,10 @@ func TestGetServiceAccountFromVeleroServer(t *testing.T) {
},
{
name: "service account",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
ServiceAccountName: "foo",
},
},
@@ -582,16 +582,16 @@ func TestGetServiceAccountFromVeleroServer(t *testing.T) {
func TestGetVeleroServerImage(t *testing.T) {
tests := []struct {
name string
deploy *appsv1.Deployment
deploy *appsv1api.Deployment
want string
}{
{
name: "velero server image",
deploy: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
deploy: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
Spec: corev1api.PodSpec{
Containers: []corev1api.Container{
{
Image: "velero/velero:latest",
},
@@ -617,14 +617,14 @@ func TestGetVeleroServerImage(t *testing.T) {
func TestGetVeleroServerLables(t *testing.T) {
tests := []struct {
name string
deployment *appsv1.Deployment
deployment *appsv1api.Deployment
expected map[string]string
}{
{
name: "Empty Labels",
deployment: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
deployment: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{},
},
@@ -635,9 +635,9 @@ func TestGetVeleroServerLables(t *testing.T) {
},
{
name: "Non-empty Labels",
deployment: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
deployment: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
"app": "velero",
@@ -666,14 +666,14 @@ func TestGetVeleroServerLables(t *testing.T) {
func TestGetVeleroServerAnnotations(t *testing.T) {
tests := []struct {
name string
deployment *appsv1.Deployment
deployment *appsv1api.Deployment
expected map[string]string
}{
{
name: "Empty Labels",
deployment: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
deployment: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{},
},
@@ -684,9 +684,9 @@ func TestGetVeleroServerAnnotations(t *testing.T) {
},
{
name: "Non-empty Labels",
deployment: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
deployment: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{
"app": "velero",
@@ -715,19 +715,19 @@ func TestGetVeleroServerAnnotations(t *testing.T) {
func TestGetVeleroServerLabelValue(t *testing.T) {
tests := []struct {
name string
deployment *appsv1.Deployment
deployment *appsv1api.Deployment
expected string
}{
{
name: "nil Labels",
deployment: &appsv1.Deployment{},
deployment: &appsv1api.Deployment{},
expected: "",
},
{
name: "no label key",
deployment: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
deployment: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{},
},
@@ -738,9 +738,9 @@ func TestGetVeleroServerLabelValue(t *testing.T) {
},
{
name: "with label key",
deployment: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: v1.PodTemplateSpec{
deployment: &appsv1api.Deployment{
Spec: appsv1api.DeploymentSpec{
Template: corev1api.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{"fake-key": "fake-value"},
},