mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-13 10:33:35 +00:00
vendor files
This commit is contained in:
65
vendor/k8s.io/kubernetes/pkg/kubelet/pod/BUILD
generated
vendored
Normal file
65
vendor/k8s.io/kubernetes/pkg/kubelet/pod/BUILD
generated
vendored
Normal file
@ -0,0 +1,65 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
"go_test",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"mirror_client.go",
|
||||
"pod_manager.go",
|
||||
],
|
||||
importpath = "k8s.io/kubernetes/pkg/kubelet/pod",
|
||||
deps = [
|
||||
"//pkg/kubelet/checkpoint:go_default_library",
|
||||
"//pkg/kubelet/configmap:go_default_library",
|
||||
"//pkg/kubelet/container:go_default_library",
|
||||
"//pkg/kubelet/secret:go_default_library",
|
||||
"//pkg/kubelet/types:go_default_library",
|
||||
"//vendor/github.com/golang/glog:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = [
|
||||
"mirror_client_test.go",
|
||||
"pod_manager_test.go",
|
||||
],
|
||||
importpath = "k8s.io/kubernetes/pkg/kubelet/pod",
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/kubelet/configmap:go_default_library",
|
||||
"//pkg/kubelet/container:go_default_library",
|
||||
"//pkg/kubelet/pod/testing:go_default_library",
|
||||
"//pkg/kubelet/secret:go_default_library",
|
||||
"//pkg/kubelet/types:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [
|
||||
":package-srcs",
|
||||
"//pkg/kubelet/pod/testing:all-srcs",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
)
|
111
vendor/k8s.io/kubernetes/pkg/kubelet/pod/mirror_client.go
generated
vendored
Normal file
111
vendor/k8s.io/kubernetes/pkg/kubelet/pod/mirror_client.go
generated
vendored
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
Copyright 2015 The Kubernetes 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 pod
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||
)
|
||||
|
||||
// MirrorClient knows how to create/delete a mirror pod in the API server.
|
||||
type MirrorClient interface {
|
||||
// CreateMirrorPod creates a mirror pod in the API server for the given
|
||||
// pod or returns an error. The mirror pod will have the same annotations
|
||||
// as the given pod as well as an extra annotation containing the hash of
|
||||
// the static pod.
|
||||
CreateMirrorPod(pod *v1.Pod) error
|
||||
// DeleteMirrorPod deletes the mirror pod with the given full name from
|
||||
// the API server or returns an error.
|
||||
DeleteMirrorPod(podFullName string) error
|
||||
}
|
||||
|
||||
// basicMirrorClient is a functional MirrorClient. Mirror pods are stored in
|
||||
// the kubelet directly because they need to be in sync with the internal
|
||||
// pods.
|
||||
type basicMirrorClient struct {
|
||||
apiserverClient clientset.Interface
|
||||
}
|
||||
|
||||
// NewBasicMirrorClient returns a new MirrorClient.
|
||||
func NewBasicMirrorClient(apiserverClient clientset.Interface) MirrorClient {
|
||||
return &basicMirrorClient{apiserverClient: apiserverClient}
|
||||
}
|
||||
|
||||
func (mc *basicMirrorClient) CreateMirrorPod(pod *v1.Pod) error {
|
||||
if mc.apiserverClient == nil {
|
||||
return nil
|
||||
}
|
||||
// Make a copy of the pod.
|
||||
copyPod := *pod
|
||||
copyPod.Annotations = make(map[string]string)
|
||||
|
||||
for k, v := range pod.Annotations {
|
||||
copyPod.Annotations[k] = v
|
||||
}
|
||||
hash := getPodHash(pod)
|
||||
copyPod.Annotations[kubetypes.ConfigMirrorAnnotationKey] = hash
|
||||
apiPod, err := mc.apiserverClient.CoreV1().Pods(copyPod.Namespace).Create(©Pod)
|
||||
if err != nil && errors.IsAlreadyExists(err) {
|
||||
// Check if the existing pod is the same as the pod we want to create.
|
||||
if h, ok := apiPod.Annotations[kubetypes.ConfigMirrorAnnotationKey]; ok && h == hash {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (mc *basicMirrorClient) DeleteMirrorPod(podFullName string) error {
|
||||
if mc.apiserverClient == nil {
|
||||
return nil
|
||||
}
|
||||
name, namespace, err := kubecontainer.ParsePodFullName(podFullName)
|
||||
if err != nil {
|
||||
glog.Errorf("Failed to parse a pod full name %q", podFullName)
|
||||
return err
|
||||
}
|
||||
glog.V(2).Infof("Deleting a mirror pod %q", podFullName)
|
||||
// TODO(random-liu): Delete the mirror pod with uid precondition in mirror pod manager
|
||||
if err := mc.apiserverClient.CoreV1().Pods(namespace).Delete(name, metav1.NewDeleteOptions(0)); err != nil && !errors.IsNotFound(err) {
|
||||
glog.Errorf("Failed deleting a mirror pod %q: %v", podFullName, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func IsStaticPod(pod *v1.Pod) bool {
|
||||
source, err := kubetypes.GetPodSource(pod)
|
||||
return err == nil && source != kubetypes.ApiserverSource
|
||||
}
|
||||
|
||||
func IsMirrorPod(pod *v1.Pod) bool {
|
||||
_, ok := pod.Annotations[kubetypes.ConfigMirrorAnnotationKey]
|
||||
return ok
|
||||
}
|
||||
|
||||
func getHashFromMirrorPod(pod *v1.Pod) (string, bool) {
|
||||
hash, ok := pod.Annotations[kubetypes.ConfigMirrorAnnotationKey]
|
||||
return hash, ok
|
||||
}
|
||||
|
||||
func getPodHash(pod *v1.Pod) string {
|
||||
// The annotation exists for all static pods.
|
||||
return pod.Annotations[kubetypes.ConfigHashAnnotationKey]
|
||||
}
|
54
vendor/k8s.io/kubernetes/pkg/kubelet/pod/mirror_client_test.go
generated
vendored
Normal file
54
vendor/k8s.io/kubernetes/pkg/kubelet/pod/mirror_client_test.go
generated
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
Copyright 2015 The Kubernetes 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 pod
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
)
|
||||
|
||||
func TestParsePodFullName(t *testing.T) {
|
||||
type nameTuple struct {
|
||||
Name string
|
||||
Namespace string
|
||||
}
|
||||
successfulCases := map[string]nameTuple{
|
||||
"bar_foo": {Name: "bar", Namespace: "foo"},
|
||||
"bar.org_foo.com": {Name: "bar.org", Namespace: "foo.com"},
|
||||
"bar-bar_foo": {Name: "bar-bar", Namespace: "foo"},
|
||||
}
|
||||
failedCases := []string{"barfoo", "bar_foo_foo", "", "bar_", "_foo"}
|
||||
|
||||
for podFullName, expected := range successfulCases {
|
||||
name, namespace, err := kubecontainer.ParsePodFullName(podFullName)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error when parsing the full name: %v", err)
|
||||
continue
|
||||
}
|
||||
if name != expected.Name || namespace != expected.Namespace {
|
||||
t.Errorf("expected name %q, namespace %q; got name %q, namespace %q",
|
||||
expected.Name, expected.Namespace, name, namespace)
|
||||
}
|
||||
}
|
||||
for _, podFullName := range failedCases {
|
||||
_, _, err := kubecontainer.ParsePodFullName(podFullName)
|
||||
if err == nil {
|
||||
t.Errorf("expected error when parsing the full name, got none")
|
||||
}
|
||||
}
|
||||
}
|
364
vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go
generated
vendored
Normal file
364
vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go
generated
vendored
Normal file
@ -0,0 +1,364 @@
|
||||
/*
|
||||
Copyright 2015 The Kubernetes 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 pod
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/golang/glog"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/kubernetes/pkg/kubelet/checkpoint"
|
||||
"k8s.io/kubernetes/pkg/kubelet/configmap"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
"k8s.io/kubernetes/pkg/kubelet/secret"
|
||||
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||
)
|
||||
|
||||
// Manager stores and manages access to pods, maintaining the mappings
|
||||
// between static pods and mirror pods.
|
||||
//
|
||||
// The kubelet discovers pod updates from 3 sources: file, http, and
|
||||
// apiserver. Pods from non-apiserver sources are called static pods, and API
|
||||
// server is not aware of the existence of static pods. In order to monitor
|
||||
// the status of such pods, the kubelet creates a mirror pod for each static
|
||||
// pod via the API server.
|
||||
//
|
||||
// A mirror pod has the same pod full name (name and namespace) as its static
|
||||
// counterpart (albeit different metadata such as UID, etc). By leveraging the
|
||||
// fact that the kubelet reports the pod status using the pod full name, the
|
||||
// status of the mirror pod always reflects the actual status of the static
|
||||
// pod. When a static pod gets deleted, the associated orphaned mirror pod
|
||||
// will also be removed.
|
||||
type Manager interface {
|
||||
// GetPods returns the regular pods bound to the kubelet and their spec.
|
||||
GetPods() []*v1.Pod
|
||||
// GetPodByFullName returns the (non-mirror) pod that matches full name, as well as
|
||||
// whether the pod was found.
|
||||
GetPodByFullName(podFullName string) (*v1.Pod, bool)
|
||||
// GetPodByName provides the (non-mirror) pod that matches namespace and
|
||||
// name, as well as whether the pod was found.
|
||||
GetPodByName(namespace, name string) (*v1.Pod, bool)
|
||||
// GetPodByUID provides the (non-mirror) pod that matches pod UID, as well as
|
||||
// whether the pod is found.
|
||||
GetPodByUID(types.UID) (*v1.Pod, bool)
|
||||
// GetPodByMirrorPod returns the static pod for the given mirror pod and
|
||||
// whether it was known to the pod manger.
|
||||
GetPodByMirrorPod(*v1.Pod) (*v1.Pod, bool)
|
||||
// GetMirrorPodByPod returns the mirror pod for the given static pod and
|
||||
// whether it was known to the pod manager.
|
||||
GetMirrorPodByPod(*v1.Pod) (*v1.Pod, bool)
|
||||
// GetPodsAndMirrorPods returns the both regular and mirror pods.
|
||||
GetPodsAndMirrorPods() ([]*v1.Pod, []*v1.Pod)
|
||||
// SetPods replaces the internal pods with the new pods.
|
||||
// It is currently only used for testing.
|
||||
SetPods(pods []*v1.Pod)
|
||||
// AddPod adds the given pod to the manager.
|
||||
AddPod(pod *v1.Pod)
|
||||
// UpdatePod updates the given pod in the manager.
|
||||
UpdatePod(pod *v1.Pod)
|
||||
// DeletePod deletes the given pod from the manager. For mirror pods,
|
||||
// this means deleting the mappings related to mirror pods. For non-
|
||||
// mirror pods, this means deleting from indexes for all non-mirror pods.
|
||||
DeletePod(pod *v1.Pod)
|
||||
// DeleteOrphanedMirrorPods deletes all mirror pods which do not have
|
||||
// associated static pods. This method sends deletion requests to the API
|
||||
// server, but does NOT modify the internal pod storage in basicManager.
|
||||
DeleteOrphanedMirrorPods()
|
||||
// TranslatePodUID returns the actual UID of a pod. If the UID belongs to
|
||||
// a mirror pod, returns the UID of its static pod. Otherwise, returns the
|
||||
// original UID.
|
||||
//
|
||||
// All public-facing functions should perform this translation for UIDs
|
||||
// because user may provide a mirror pod UID, which is not recognized by
|
||||
// internal Kubelet functions.
|
||||
TranslatePodUID(uid types.UID) kubetypes.ResolvedPodUID
|
||||
// GetUIDTranslations returns the mappings of static pod UIDs to mirror pod
|
||||
// UIDs and mirror pod UIDs to static pod UIDs.
|
||||
GetUIDTranslations() (podToMirror map[kubetypes.ResolvedPodUID]kubetypes.MirrorPodUID, mirrorToPod map[kubetypes.MirrorPodUID]kubetypes.ResolvedPodUID)
|
||||
// IsMirrorPodOf returns true if mirrorPod is a correct representation of
|
||||
// pod; false otherwise.
|
||||
IsMirrorPodOf(mirrorPod, pod *v1.Pod) bool
|
||||
|
||||
MirrorClient
|
||||
}
|
||||
|
||||
// basicManager is a functional Manager.
|
||||
//
|
||||
// All fields in basicManager are read-only and are updated calling SetPods,
|
||||
// AddPod, UpdatePod, or DeletePod.
|
||||
type basicManager struct {
|
||||
// Protects all internal maps.
|
||||
lock sync.RWMutex
|
||||
|
||||
// Regular pods indexed by UID.
|
||||
podByUID map[kubetypes.ResolvedPodUID]*v1.Pod
|
||||
// Mirror pods indexed by UID.
|
||||
mirrorPodByUID map[kubetypes.MirrorPodUID]*v1.Pod
|
||||
|
||||
// Pods indexed by full name for easy access.
|
||||
podByFullName map[string]*v1.Pod
|
||||
mirrorPodByFullName map[string]*v1.Pod
|
||||
|
||||
// Mirror pod UID to pod UID map.
|
||||
translationByUID map[kubetypes.MirrorPodUID]kubetypes.ResolvedPodUID
|
||||
|
||||
// basicManager is keeping secretManager and configMapManager up-to-date.
|
||||
secretManager secret.Manager
|
||||
configMapManager configmap.Manager
|
||||
checkpointManager checkpoint.Manager
|
||||
|
||||
// A mirror pod client to create/delete mirror pods.
|
||||
MirrorClient
|
||||
}
|
||||
|
||||
// NewBasicPodManager returns a functional Manager.
|
||||
func NewBasicPodManager(client MirrorClient, secretManager secret.Manager, configMapManager configmap.Manager) Manager {
|
||||
pm := &basicManager{}
|
||||
pm.secretManager = secretManager
|
||||
pm.configMapManager = configMapManager
|
||||
pm.checkpointManager = checkpoint.GetInstance()
|
||||
pm.MirrorClient = client
|
||||
pm.SetPods(nil)
|
||||
return pm
|
||||
}
|
||||
|
||||
// Set the internal pods based on the new pods.
|
||||
func (pm *basicManager) SetPods(newPods []*v1.Pod) {
|
||||
pm.lock.Lock()
|
||||
defer pm.lock.Unlock()
|
||||
|
||||
pm.podByUID = make(map[kubetypes.ResolvedPodUID]*v1.Pod)
|
||||
pm.podByFullName = make(map[string]*v1.Pod)
|
||||
pm.mirrorPodByUID = make(map[kubetypes.MirrorPodUID]*v1.Pod)
|
||||
pm.mirrorPodByFullName = make(map[string]*v1.Pod)
|
||||
pm.translationByUID = make(map[kubetypes.MirrorPodUID]kubetypes.ResolvedPodUID)
|
||||
|
||||
pm.updatePodsInternal(newPods...)
|
||||
}
|
||||
|
||||
func (pm *basicManager) AddPod(pod *v1.Pod) {
|
||||
pm.UpdatePod(pod)
|
||||
}
|
||||
|
||||
func (pm *basicManager) UpdatePod(pod *v1.Pod) {
|
||||
pm.lock.Lock()
|
||||
defer pm.lock.Unlock()
|
||||
pm.updatePodsInternal(pod)
|
||||
if pm.checkpointManager != nil {
|
||||
if err := pm.checkpointManager.WritePod(pod); err != nil {
|
||||
glog.Errorf("Error writing checkpoint for pod: %v", pod.GetName())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// updatePodsInternal replaces the given pods in the current state of the
|
||||
// manager, updating the various indices. The caller is assumed to hold the
|
||||
// lock.
|
||||
func (pm *basicManager) updatePodsInternal(pods ...*v1.Pod) {
|
||||
for _, pod := range pods {
|
||||
if pm.secretManager != nil {
|
||||
// TODO: Consider detecting only status update and in such case do
|
||||
// not register pod, as it doesn't really matter.
|
||||
pm.secretManager.RegisterPod(pod)
|
||||
}
|
||||
if pm.configMapManager != nil {
|
||||
// TODO: Consider detecting only status update and in such case do
|
||||
// not register pod, as it doesn't really matter.
|
||||
pm.configMapManager.RegisterPod(pod)
|
||||
}
|
||||
podFullName := kubecontainer.GetPodFullName(pod)
|
||||
// This logic relies on a static pod and its mirror to have the same name.
|
||||
// It is safe to type convert here due to the IsMirrorPod guard.
|
||||
if IsMirrorPod(pod) {
|
||||
mirrorPodUID := kubetypes.MirrorPodUID(pod.UID)
|
||||
pm.mirrorPodByUID[mirrorPodUID] = pod
|
||||
pm.mirrorPodByFullName[podFullName] = pod
|
||||
if p, ok := pm.podByFullName[podFullName]; ok {
|
||||
pm.translationByUID[mirrorPodUID] = kubetypes.ResolvedPodUID(p.UID)
|
||||
}
|
||||
} else {
|
||||
resolvedPodUID := kubetypes.ResolvedPodUID(pod.UID)
|
||||
pm.podByUID[resolvedPodUID] = pod
|
||||
pm.podByFullName[podFullName] = pod
|
||||
if mirror, ok := pm.mirrorPodByFullName[podFullName]; ok {
|
||||
pm.translationByUID[kubetypes.MirrorPodUID(mirror.UID)] = resolvedPodUID
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (pm *basicManager) DeletePod(pod *v1.Pod) {
|
||||
pm.lock.Lock()
|
||||
defer pm.lock.Unlock()
|
||||
if pm.secretManager != nil {
|
||||
pm.secretManager.UnregisterPod(pod)
|
||||
}
|
||||
if pm.configMapManager != nil {
|
||||
pm.configMapManager.UnregisterPod(pod)
|
||||
}
|
||||
podFullName := kubecontainer.GetPodFullName(pod)
|
||||
// It is safe to type convert here due to the IsMirrorPod guard.
|
||||
if IsMirrorPod(pod) {
|
||||
mirrorPodUID := kubetypes.MirrorPodUID(pod.UID)
|
||||
delete(pm.mirrorPodByUID, mirrorPodUID)
|
||||
delete(pm.mirrorPodByFullName, podFullName)
|
||||
delete(pm.translationByUID, mirrorPodUID)
|
||||
} else {
|
||||
delete(pm.podByUID, kubetypes.ResolvedPodUID(pod.UID))
|
||||
delete(pm.podByFullName, podFullName)
|
||||
}
|
||||
if pm.checkpointManager != nil {
|
||||
if err := pm.checkpointManager.DeletePod(pod); err != nil {
|
||||
glog.Errorf("Error deleting checkpoint for pod: %v", pod.GetName())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (pm *basicManager) GetPods() []*v1.Pod {
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
return podsMapToPods(pm.podByUID)
|
||||
}
|
||||
|
||||
func (pm *basicManager) GetPodsAndMirrorPods() ([]*v1.Pod, []*v1.Pod) {
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
pods := podsMapToPods(pm.podByUID)
|
||||
mirrorPods := mirrorPodsMapToMirrorPods(pm.mirrorPodByUID)
|
||||
return pods, mirrorPods
|
||||
}
|
||||
|
||||
func (pm *basicManager) GetPodByUID(uid types.UID) (*v1.Pod, bool) {
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
pod, ok := pm.podByUID[kubetypes.ResolvedPodUID(uid)] // Safe conversion, map only holds non-mirrors.
|
||||
return pod, ok
|
||||
}
|
||||
|
||||
func (pm *basicManager) GetPodByName(namespace, name string) (*v1.Pod, bool) {
|
||||
podFullName := kubecontainer.BuildPodFullName(name, namespace)
|
||||
return pm.GetPodByFullName(podFullName)
|
||||
}
|
||||
|
||||
func (pm *basicManager) GetPodByFullName(podFullName string) (*v1.Pod, bool) {
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
pod, ok := pm.podByFullName[podFullName]
|
||||
return pod, ok
|
||||
}
|
||||
|
||||
func (pm *basicManager) TranslatePodUID(uid types.UID) kubetypes.ResolvedPodUID {
|
||||
// It is safe to type convert to a resolved UID because type conversion is idempotent.
|
||||
if uid == "" {
|
||||
return kubetypes.ResolvedPodUID(uid)
|
||||
}
|
||||
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
if translated, ok := pm.translationByUID[kubetypes.MirrorPodUID(uid)]; ok {
|
||||
return translated
|
||||
}
|
||||
return kubetypes.ResolvedPodUID(uid)
|
||||
}
|
||||
|
||||
func (pm *basicManager) GetUIDTranslations() (podToMirror map[kubetypes.ResolvedPodUID]kubetypes.MirrorPodUID,
|
||||
mirrorToPod map[kubetypes.MirrorPodUID]kubetypes.ResolvedPodUID) {
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
|
||||
podToMirror = make(map[kubetypes.ResolvedPodUID]kubetypes.MirrorPodUID, len(pm.translationByUID))
|
||||
mirrorToPod = make(map[kubetypes.MirrorPodUID]kubetypes.ResolvedPodUID, len(pm.translationByUID))
|
||||
// Insert empty translation mapping for all static pods.
|
||||
for uid, pod := range pm.podByUID {
|
||||
if !IsStaticPod(pod) {
|
||||
continue
|
||||
}
|
||||
podToMirror[uid] = ""
|
||||
}
|
||||
// Fill in translations. Notice that if there is no mirror pod for a
|
||||
// static pod, its uid will be translated into empty string "". This
|
||||
// is WAI, from the caller side we can know that the static pod doesn't
|
||||
// have a corresponding mirror pod instead of using static pod uid directly.
|
||||
for k, v := range pm.translationByUID {
|
||||
mirrorToPod[k] = v
|
||||
podToMirror[v] = k
|
||||
}
|
||||
return podToMirror, mirrorToPod
|
||||
}
|
||||
|
||||
func (pm *basicManager) getOrphanedMirrorPodNames() []string {
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
var podFullNames []string
|
||||
for podFullName := range pm.mirrorPodByFullName {
|
||||
if _, ok := pm.podByFullName[podFullName]; !ok {
|
||||
podFullNames = append(podFullNames, podFullName)
|
||||
}
|
||||
}
|
||||
return podFullNames
|
||||
}
|
||||
|
||||
func (pm *basicManager) DeleteOrphanedMirrorPods() {
|
||||
podFullNames := pm.getOrphanedMirrorPodNames()
|
||||
for _, podFullName := range podFullNames {
|
||||
pm.MirrorClient.DeleteMirrorPod(podFullName)
|
||||
}
|
||||
}
|
||||
|
||||
func (pm *basicManager) IsMirrorPodOf(mirrorPod, pod *v1.Pod) bool {
|
||||
// Check name and namespace first.
|
||||
if pod.Name != mirrorPod.Name || pod.Namespace != mirrorPod.Namespace {
|
||||
return false
|
||||
}
|
||||
hash, ok := getHashFromMirrorPod(mirrorPod)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
return hash == getPodHash(pod)
|
||||
}
|
||||
|
||||
func podsMapToPods(UIDMap map[kubetypes.ResolvedPodUID]*v1.Pod) []*v1.Pod {
|
||||
pods := make([]*v1.Pod, 0, len(UIDMap))
|
||||
for _, pod := range UIDMap {
|
||||
pods = append(pods, pod)
|
||||
}
|
||||
return pods
|
||||
}
|
||||
|
||||
func mirrorPodsMapToMirrorPods(UIDMap map[kubetypes.MirrorPodUID]*v1.Pod) []*v1.Pod {
|
||||
pods := make([]*v1.Pod, 0, len(UIDMap))
|
||||
for _, pod := range UIDMap {
|
||||
pods = append(pods, pod)
|
||||
}
|
||||
return pods
|
||||
}
|
||||
|
||||
func (pm *basicManager) GetMirrorPodByPod(pod *v1.Pod) (*v1.Pod, bool) {
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
mirrorPod, ok := pm.mirrorPodByFullName[kubecontainer.GetPodFullName(pod)]
|
||||
return mirrorPod, ok
|
||||
}
|
||||
|
||||
func (pm *basicManager) GetPodByMirrorPod(mirrorPod *v1.Pod) (*v1.Pod, bool) {
|
||||
pm.lock.RLock()
|
||||
defer pm.lock.RUnlock()
|
||||
pod, ok := pm.podByFullName[kubecontainer.GetPodFullName(mirrorPod)]
|
||||
return pod, ok
|
||||
}
|
171
vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager_test.go
generated
vendored
Normal file
171
vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager_test.go
generated
vendored
Normal file
@ -0,0 +1,171 @@
|
||||
/*
|
||||
Copyright 2015 The Kubernetes 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 pod
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/kubernetes/pkg/kubelet/configmap"
|
||||
podtest "k8s.io/kubernetes/pkg/kubelet/pod/testing"
|
||||
"k8s.io/kubernetes/pkg/kubelet/secret"
|
||||
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||
)
|
||||
|
||||
// Stub out mirror client for testing purpose.
|
||||
func newTestManager() (*basicManager, *podtest.FakeMirrorClient) {
|
||||
fakeMirrorClient := podtest.NewFakeMirrorClient()
|
||||
secretManager := secret.NewFakeManager()
|
||||
configMapManager := configmap.NewFakeManager()
|
||||
manager := NewBasicPodManager(fakeMirrorClient, secretManager, configMapManager).(*basicManager)
|
||||
return manager, fakeMirrorClient
|
||||
}
|
||||
|
||||
// Tests that pods/maps are properly set after the pod update, and the basic
|
||||
// methods work correctly.
|
||||
func TestGetSetPods(t *testing.T) {
|
||||
mirrorPod := &v1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
UID: "987654321",
|
||||
Name: "bar",
|
||||
Namespace: "default",
|
||||
Annotations: map[string]string{
|
||||
kubetypes.ConfigSourceAnnotationKey: "api",
|
||||
kubetypes.ConfigMirrorAnnotationKey: "mirror",
|
||||
},
|
||||
},
|
||||
}
|
||||
staticPod := &v1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
UID: "123456789",
|
||||
Name: "bar",
|
||||
Namespace: "default",
|
||||
Annotations: map[string]string{kubetypes.ConfigSourceAnnotationKey: "file"},
|
||||
},
|
||||
}
|
||||
|
||||
expectedPods := []*v1.Pod{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
UID: "999999999",
|
||||
Name: "taco",
|
||||
Namespace: "default",
|
||||
Annotations: map[string]string{kubetypes.ConfigSourceAnnotationKey: "api"},
|
||||
},
|
||||
},
|
||||
staticPod,
|
||||
}
|
||||
updates := append(expectedPods, mirrorPod)
|
||||
podManager, _ := newTestManager()
|
||||
podManager.SetPods(updates)
|
||||
|
||||
// Tests that all regular pods are recorded correctly.
|
||||
actualPods := podManager.GetPods()
|
||||
if len(actualPods) != len(expectedPods) {
|
||||
t.Errorf("expected %d pods, got %d pods; expected pods %#v, got pods %#v", len(expectedPods), len(actualPods),
|
||||
expectedPods, actualPods)
|
||||
}
|
||||
for _, expected := range expectedPods {
|
||||
found := false
|
||||
for _, actual := range actualPods {
|
||||
if actual.UID == expected.UID {
|
||||
if !reflect.DeepEqual(&expected, &actual) {
|
||||
t.Errorf("pod was recorded incorrectly. expect: %#v, got: %#v", expected, actual)
|
||||
}
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Errorf("pod %q was not found in %#v", expected.UID, actualPods)
|
||||
}
|
||||
}
|
||||
// Tests UID translation works as expected. Convert static pod UID for comparison only.
|
||||
if uid := podManager.TranslatePodUID(mirrorPod.UID); uid != kubetypes.ResolvedPodUID(staticPod.UID) {
|
||||
t.Errorf("unable to translate UID %q to the static POD's UID %q; %#v",
|
||||
mirrorPod.UID, staticPod.UID, podManager.mirrorPodByUID)
|
||||
}
|
||||
|
||||
// Test the basic Get methods.
|
||||
actualPod, ok := podManager.GetPodByFullName("bar_default")
|
||||
if !ok || !reflect.DeepEqual(actualPod, staticPod) {
|
||||
t.Errorf("unable to get pod by full name; expected: %#v, got: %#v", staticPod, actualPod)
|
||||
}
|
||||
actualPod, ok = podManager.GetPodByName("default", "bar")
|
||||
if !ok || !reflect.DeepEqual(actualPod, staticPod) {
|
||||
t.Errorf("unable to get pod by name; expected: %#v, got: %#v", staticPod, actualPod)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestDeletePods(t *testing.T) {
|
||||
mirrorPod := &v1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
UID: types.UID("mirror-pod-uid"),
|
||||
Name: "mirror-static-pod-name",
|
||||
Namespace: metav1.NamespaceDefault,
|
||||
Annotations: map[string]string{
|
||||
kubetypes.ConfigSourceAnnotationKey: "api",
|
||||
kubetypes.ConfigMirrorAnnotationKey: "mirror",
|
||||
},
|
||||
},
|
||||
}
|
||||
staticPod := &v1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
UID: types.UID("static-pod-uid"),
|
||||
Name: "mirror-static-pod-name",
|
||||
Namespace: metav1.NamespaceDefault,
|
||||
Annotations: map[string]string{kubetypes.ConfigSourceAnnotationKey: "file"},
|
||||
},
|
||||
}
|
||||
|
||||
expectedPods := []*v1.Pod{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
UID: types.UID("extra-pod-uid"),
|
||||
Name: "extra-pod-name",
|
||||
Namespace: metav1.NamespaceDefault,
|
||||
Annotations: map[string]string{kubetypes.ConfigSourceAnnotationKey: "api"},
|
||||
},
|
||||
},
|
||||
staticPod,
|
||||
}
|
||||
updates := append(expectedPods, mirrorPod)
|
||||
podManager, _ := newTestManager()
|
||||
podManager.SetPods(updates)
|
||||
|
||||
podManager.DeletePod(staticPod)
|
||||
|
||||
actualPods := podManager.GetPods()
|
||||
if len(actualPods) == len(expectedPods) {
|
||||
t.Fatalf("Run DeletePod() error, expected %d pods, got %d pods; ", len(expectedPods)-1, len(actualPods))
|
||||
}
|
||||
|
||||
orphanedMirrorPodNames := podManager.getOrphanedMirrorPodNames()
|
||||
expectedOrphanedMirrorPodNameNum := 1
|
||||
if len(orphanedMirrorPodNames) != expectedOrphanedMirrorPodNameNum {
|
||||
t.Fatalf("Run getOrphanedMirrorPodNames() error, expected %d orphaned mirror pods, got %d orphaned mirror pods; ", expectedOrphanedMirrorPodNameNum, len(orphanedMirrorPodNames))
|
||||
}
|
||||
|
||||
expectedOrphanedMirrorPodName := mirrorPod.Name + "_" + mirrorPod.Namespace
|
||||
if orphanedMirrorPodNames[0] != expectedOrphanedMirrorPodName {
|
||||
t.Fatalf("Run getOrphanedMirrorPodNames() error, expected orphaned mirror pod name : %s, got orphaned mirror pod name %s; ", expectedOrphanedMirrorPodName, orphanedMirrorPodNames[0])
|
||||
}
|
||||
}
|
36
vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/BUILD
generated
vendored
Normal file
36
vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/BUILD
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"fake_mirror_client.go",
|
||||
"mock_manager.go",
|
||||
],
|
||||
importpath = "k8s.io/kubernetes/pkg/kubelet/pod/testing",
|
||||
deps = [
|
||||
"//pkg/kubelet/container:go_default_library",
|
||||
"//pkg/kubelet/types:go_default_library",
|
||||
"//vendor/github.com/stretchr/testify/mock:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
)
|
83
vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/fake_mirror_client.go
generated
vendored
Normal file
83
vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/fake_mirror_client.go
generated
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
/*
|
||||
Copyright 2015 The Kubernetes 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 testing
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
)
|
||||
|
||||
type FakeMirrorClient struct {
|
||||
mirrorPodLock sync.RWMutex
|
||||
// Note that a real mirror manager does not store the mirror pods in
|
||||
// itself. This fake manager does this to track calls.
|
||||
mirrorPods sets.String
|
||||
createCounts map[string]int
|
||||
deleteCounts map[string]int
|
||||
}
|
||||
|
||||
func NewFakeMirrorClient() *FakeMirrorClient {
|
||||
m := FakeMirrorClient{}
|
||||
m.mirrorPods = sets.NewString()
|
||||
m.createCounts = make(map[string]int)
|
||||
m.deleteCounts = make(map[string]int)
|
||||
return &m
|
||||
}
|
||||
|
||||
func (fmc *FakeMirrorClient) CreateMirrorPod(pod *v1.Pod) error {
|
||||
fmc.mirrorPodLock.Lock()
|
||||
defer fmc.mirrorPodLock.Unlock()
|
||||
podFullName := kubecontainer.GetPodFullName(pod)
|
||||
fmc.mirrorPods.Insert(podFullName)
|
||||
fmc.createCounts[podFullName]++
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fmc *FakeMirrorClient) DeleteMirrorPod(podFullName string) error {
|
||||
fmc.mirrorPodLock.Lock()
|
||||
defer fmc.mirrorPodLock.Unlock()
|
||||
fmc.mirrorPods.Delete(podFullName)
|
||||
fmc.deleteCounts[podFullName]++
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fmc *FakeMirrorClient) HasPod(podFullName string) bool {
|
||||
fmc.mirrorPodLock.RLock()
|
||||
defer fmc.mirrorPodLock.RUnlock()
|
||||
return fmc.mirrorPods.Has(podFullName)
|
||||
}
|
||||
|
||||
func (fmc *FakeMirrorClient) NumOfPods() int {
|
||||
fmc.mirrorPodLock.RLock()
|
||||
defer fmc.mirrorPodLock.RUnlock()
|
||||
return fmc.mirrorPods.Len()
|
||||
}
|
||||
|
||||
func (fmc *FakeMirrorClient) GetPods() []string {
|
||||
fmc.mirrorPodLock.RLock()
|
||||
defer fmc.mirrorPodLock.RUnlock()
|
||||
return fmc.mirrorPods.List()
|
||||
}
|
||||
|
||||
func (fmc *FakeMirrorClient) GetCounts(podFullName string) (int, int) {
|
||||
fmc.mirrorPodLock.RLock()
|
||||
defer fmc.mirrorPodLock.RUnlock()
|
||||
return fmc.createCounts[podFullName], fmc.deleteCounts[podFullName]
|
||||
}
|
291
vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/mock_manager.go
generated
vendored
Normal file
291
vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/mock_manager.go
generated
vendored
Normal file
@ -0,0 +1,291 @@
|
||||
/*
|
||||
Copyright 2017 The Kubernetes 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 mockery v1.0.0
|
||||
package testing
|
||||
|
||||
import kubelettypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||
import mock "github.com/stretchr/testify/mock"
|
||||
|
||||
import types "k8s.io/apimachinery/pkg/types"
|
||||
import v1 "k8s.io/api/core/v1"
|
||||
|
||||
// MockManager is an autogenerated mock type for the Manager type
|
||||
type MockManager struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// AddPod provides a mock function with given fields: _a0
|
||||
func (_m *MockManager) AddPod(_a0 *v1.Pod) {
|
||||
_m.Called(_a0)
|
||||
}
|
||||
|
||||
// CreateMirrorPod provides a mock function with given fields: _a0
|
||||
func (_m *MockManager) CreateMirrorPod(_a0 *v1.Pod) error {
|
||||
ret := _m.Called(_a0)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(*v1.Pod) error); ok {
|
||||
r0 = rf(_a0)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// DeleteMirrorPod provides a mock function with given fields: podFullName
|
||||
func (_m *MockManager) DeleteMirrorPod(podFullName string) error {
|
||||
ret := _m.Called(podFullName)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(string) error); ok {
|
||||
r0 = rf(podFullName)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// DeleteOrphanedMirrorPods provides a mock function with given fields:
|
||||
func (_m *MockManager) DeleteOrphanedMirrorPods() {
|
||||
_m.Called()
|
||||
}
|
||||
|
||||
// DeletePod provides a mock function with given fields: _a0
|
||||
func (_m *MockManager) DeletePod(_a0 *v1.Pod) {
|
||||
_m.Called(_a0)
|
||||
}
|
||||
|
||||
// GetMirrorPodByPod provides a mock function with given fields: _a0
|
||||
func (_m *MockManager) GetMirrorPodByPod(_a0 *v1.Pod) (*v1.Pod, bool) {
|
||||
ret := _m.Called(_a0)
|
||||
|
||||
var r0 *v1.Pod
|
||||
if rf, ok := ret.Get(0).(func(*v1.Pod) *v1.Pod); ok {
|
||||
r0 = rf(_a0)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*v1.Pod)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 bool
|
||||
if rf, ok := ret.Get(1).(func(*v1.Pod) bool); ok {
|
||||
r1 = rf(_a0)
|
||||
} else {
|
||||
r1 = ret.Get(1).(bool)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetPodByFullName provides a mock function with given fields: podFullName
|
||||
func (_m *MockManager) GetPodByFullName(podFullName string) (*v1.Pod, bool) {
|
||||
ret := _m.Called(podFullName)
|
||||
|
||||
var r0 *v1.Pod
|
||||
if rf, ok := ret.Get(0).(func(string) *v1.Pod); ok {
|
||||
r0 = rf(podFullName)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*v1.Pod)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 bool
|
||||
if rf, ok := ret.Get(1).(func(string) bool); ok {
|
||||
r1 = rf(podFullName)
|
||||
} else {
|
||||
r1 = ret.Get(1).(bool)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetPodByMirrorPod provides a mock function with given fields: _a0
|
||||
func (_m *MockManager) GetPodByMirrorPod(_a0 *v1.Pod) (*v1.Pod, bool) {
|
||||
ret := _m.Called(_a0)
|
||||
|
||||
var r0 *v1.Pod
|
||||
if rf, ok := ret.Get(0).(func(*v1.Pod) *v1.Pod); ok {
|
||||
r0 = rf(_a0)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*v1.Pod)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 bool
|
||||
if rf, ok := ret.Get(1).(func(*v1.Pod) bool); ok {
|
||||
r1 = rf(_a0)
|
||||
} else {
|
||||
r1 = ret.Get(1).(bool)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetPodByName provides a mock function with given fields: namespace, name
|
||||
func (_m *MockManager) GetPodByName(namespace string, name string) (*v1.Pod, bool) {
|
||||
ret := _m.Called(namespace, name)
|
||||
|
||||
var r0 *v1.Pod
|
||||
if rf, ok := ret.Get(0).(func(string, string) *v1.Pod); ok {
|
||||
r0 = rf(namespace, name)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*v1.Pod)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 bool
|
||||
if rf, ok := ret.Get(1).(func(string, string) bool); ok {
|
||||
r1 = rf(namespace, name)
|
||||
} else {
|
||||
r1 = ret.Get(1).(bool)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetPodByUID provides a mock function with given fields: _a0
|
||||
func (_m *MockManager) GetPodByUID(_a0 types.UID) (*v1.Pod, bool) {
|
||||
ret := _m.Called(_a0)
|
||||
|
||||
var r0 *v1.Pod
|
||||
if rf, ok := ret.Get(0).(func(types.UID) *v1.Pod); ok {
|
||||
r0 = rf(_a0)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*v1.Pod)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 bool
|
||||
if rf, ok := ret.Get(1).(func(types.UID) bool); ok {
|
||||
r1 = rf(_a0)
|
||||
} else {
|
||||
r1 = ret.Get(1).(bool)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetPods provides a mock function with given fields:
|
||||
func (_m *MockManager) GetPods() []*v1.Pod {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 []*v1.Pod
|
||||
if rf, ok := ret.Get(0).(func() []*v1.Pod); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).([]*v1.Pod)
|
||||
}
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// GetPodsAndMirrorPods provides a mock function with given fields:
|
||||
func (_m *MockManager) GetPodsAndMirrorPods() ([]*v1.Pod, []*v1.Pod) {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 []*v1.Pod
|
||||
if rf, ok := ret.Get(0).(func() []*v1.Pod); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).([]*v1.Pod)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 []*v1.Pod
|
||||
if rf, ok := ret.Get(1).(func() []*v1.Pod); ok {
|
||||
r1 = rf()
|
||||
} else {
|
||||
if ret.Get(1) != nil {
|
||||
r1 = ret.Get(1).([]*v1.Pod)
|
||||
}
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetUIDTranslations provides a mock function with given fields:
|
||||
func (_m *MockManager) GetUIDTranslations() (map[kubelettypes.ResolvedPodUID]kubelettypes.MirrorPodUID, map[kubelettypes.MirrorPodUID]kubelettypes.ResolvedPodUID) {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 map[kubelettypes.ResolvedPodUID]kubelettypes.MirrorPodUID
|
||||
if rf, ok := ret.Get(0).(func() map[kubelettypes.ResolvedPodUID]kubelettypes.MirrorPodUID); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(map[kubelettypes.ResolvedPodUID]kubelettypes.MirrorPodUID)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 map[kubelettypes.MirrorPodUID]kubelettypes.ResolvedPodUID
|
||||
if rf, ok := ret.Get(1).(func() map[kubelettypes.MirrorPodUID]kubelettypes.ResolvedPodUID); ok {
|
||||
r1 = rf()
|
||||
} else {
|
||||
if ret.Get(1) != nil {
|
||||
r1 = ret.Get(1).(map[kubelettypes.MirrorPodUID]kubelettypes.ResolvedPodUID)
|
||||
}
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// IsMirrorPodOf provides a mock function with given fields: mirrorPod, _a1
|
||||
func (_m *MockManager) IsMirrorPodOf(mirrorPod *v1.Pod, _a1 *v1.Pod) bool {
|
||||
ret := _m.Called(mirrorPod, _a1)
|
||||
|
||||
var r0 bool
|
||||
if rf, ok := ret.Get(0).(func(*v1.Pod, *v1.Pod) bool); ok {
|
||||
r0 = rf(mirrorPod, _a1)
|
||||
} else {
|
||||
r0 = ret.Get(0).(bool)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// SetPods provides a mock function with given fields: pods
|
||||
func (_m *MockManager) SetPods(pods []*v1.Pod) {
|
||||
_m.Called(pods)
|
||||
}
|
||||
|
||||
// TranslatePodUID provides a mock function with given fields: uid
|
||||
func (_m *MockManager) TranslatePodUID(uid types.UID) kubelettypes.ResolvedPodUID {
|
||||
ret := _m.Called(uid)
|
||||
|
||||
var r0 kubelettypes.ResolvedPodUID
|
||||
if rf, ok := ret.Get(0).(func(types.UID) kubelettypes.ResolvedPodUID); ok {
|
||||
r0 = rf(uid)
|
||||
} else {
|
||||
r0 = ret.Get(0).(kubelettypes.ResolvedPodUID)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// UpdatePod provides a mock function with given fields: _a0
|
||||
func (_m *MockManager) UpdatePod(_a0 *v1.Pod) {
|
||||
_m.Called(_a0)
|
||||
}
|
Reference in New Issue
Block a user