Cleanup unused functions
This commit is contained in:
		@@ -26,11 +26,9 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps "k8s.io/api/apps/v1"
 | 
						apps "k8s.io/api/apps/v1"
 | 
				
			||||||
	batch "k8s.io/api/batch/v1"
 | 
					 | 
				
			||||||
	v1 "k8s.io/api/core/v1"
 | 
						v1 "k8s.io/api/core/v1"
 | 
				
			||||||
	storagev1 "k8s.io/api/storage/v1"
 | 
						storagev1 "k8s.io/api/storage/v1"
 | 
				
			||||||
	storagev1beta1 "k8s.io/api/storage/v1beta1"
 | 
						storagev1beta1 "k8s.io/api/storage/v1beta1"
 | 
				
			||||||
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
					 | 
				
			||||||
	apierrors "k8s.io/apimachinery/pkg/api/errors"
 | 
						apierrors "k8s.io/apimachinery/pkg/api/errors"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
						"k8s.io/apimachinery/pkg/api/resource"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
@@ -46,7 +44,6 @@ import (
 | 
				
			|||||||
	clientset "k8s.io/client-go/kubernetes"
 | 
						clientset "k8s.io/client-go/kubernetes"
 | 
				
			||||||
	scaleclient "k8s.io/client-go/scale"
 | 
						scaleclient "k8s.io/client-go/scale"
 | 
				
			||||||
	"k8s.io/client-go/util/workqueue"
 | 
						"k8s.io/client-go/util/workqueue"
 | 
				
			||||||
	batchinternal "k8s.io/kubernetes/pkg/apis/batch"
 | 
					 | 
				
			||||||
	api "k8s.io/kubernetes/pkg/apis/core"
 | 
						api "k8s.io/kubernetes/pkg/apis/core"
 | 
				
			||||||
	extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions"
 | 
						extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions"
 | 
				
			||||||
	"k8s.io/utils/pointer"
 | 
						"k8s.io/utils/pointer"
 | 
				
			||||||
@@ -66,7 +63,7 @@ func removePtr(replicas *int32) int32 {
 | 
				
			|||||||
	return *replicas
 | 
						return *replicas
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func WaitUntilPodIsScheduled(ctx context.Context, c clientset.Interface, name, namespace string, timeout time.Duration) (*v1.Pod, error) {
 | 
					func waitUntilPodIsScheduled(ctx context.Context, c clientset.Interface, name, namespace string, timeout time.Duration) (*v1.Pod, error) {
 | 
				
			||||||
	// Wait until it's scheduled
 | 
						// Wait until it's scheduled
 | 
				
			||||||
	p, err := c.CoreV1().Pods(namespace).Get(ctx, name, metav1.GetOptions{ResourceVersion: "0"})
 | 
						p, err := c.CoreV1().Pods(namespace).Get(ctx, name, metav1.GetOptions{ResourceVersion: "0"})
 | 
				
			||||||
	if err == nil && p.Spec.NodeName != "" {
 | 
						if err == nil && p.Spec.NodeName != "" {
 | 
				
			||||||
@@ -90,7 +87,7 @@ func RunPodAndGetNodeName(ctx context.Context, c clientset.Interface, pod *v1.Po
 | 
				
			|||||||
	if err := CreatePodWithRetries(c, namespace, pod); err != nil {
 | 
						if err := CreatePodWithRetries(c, namespace, pod); err != nil {
 | 
				
			||||||
		return "", err
 | 
							return "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	p, err := WaitUntilPodIsScheduled(ctx, c, name, namespace, timeout)
 | 
						p, err := waitUntilPodIsScheduled(ctx, c, name, namespace, timeout)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return "", err
 | 
							return "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -218,11 +215,11 @@ type podInfo struct {
 | 
				
			|||||||
	phase       string
 | 
						phase       string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PodDiff is a map of pod name to podInfos
 | 
					// podDiff is a map of pod name to podInfos
 | 
				
			||||||
type PodDiff map[string]*podInfo
 | 
					type podDiff map[string]*podInfo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Print formats and prints the give PodDiff.
 | 
					// Print formats and prints the give podDiff.
 | 
				
			||||||
func (p PodDiff) String(ignorePhases sets.String) string {
 | 
					func (p podDiff) String(ignorePhases sets.String) string {
 | 
				
			||||||
	ret := ""
 | 
						ret := ""
 | 
				
			||||||
	for name, info := range p {
 | 
						for name, info := range p {
 | 
				
			||||||
		if ignorePhases.Has(info.phase) {
 | 
							if ignorePhases.Has(info.phase) {
 | 
				
			||||||
@@ -259,7 +256,7 @@ func (p PodDiff) String(ignorePhases sets.String) string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// DeletedPods returns a slice of pods that were present at the beginning
 | 
					// DeletedPods returns a slice of pods that were present at the beginning
 | 
				
			||||||
// and then disappeared.
 | 
					// and then disappeared.
 | 
				
			||||||
func (p PodDiff) DeletedPods() []string {
 | 
					func (p podDiff) DeletedPods() []string {
 | 
				
			||||||
	var deletedPods []string
 | 
						var deletedPods []string
 | 
				
			||||||
	for podName, podInfo := range p {
 | 
						for podName, podInfo := range p {
 | 
				
			||||||
		if podInfo.hostname == nonExist {
 | 
							if podInfo.hostname == nonExist {
 | 
				
			||||||
@@ -269,9 +266,9 @@ func (p PodDiff) DeletedPods() []string {
 | 
				
			|||||||
	return deletedPods
 | 
						return deletedPods
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Diff computes a PodDiff given 2 lists of pods.
 | 
					// diff computes a podDiff given 2 lists of pods.
 | 
				
			||||||
func Diff(oldPods []*v1.Pod, curPods []*v1.Pod) PodDiff {
 | 
					func diff(oldPods []*v1.Pod, curPods []*v1.Pod) podDiff {
 | 
				
			||||||
	podInfoMap := PodDiff{}
 | 
						podInfoMap := podDiff{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// New pods will show up in the curPods list but not in oldPods. They have oldhostname/phase == nonexist.
 | 
						// New pods will show up in the curPods list but not in oldPods. They have oldhostname/phase == nonexist.
 | 
				
			||||||
	for _, pod := range curPods {
 | 
						for _, pod := range curPods {
 | 
				
			||||||
@@ -459,81 +456,6 @@ func (config *ReplicaSetConfig) create() error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RunJob baunches (and verifies correctness) of a Job
 | 
					 | 
				
			||||||
// and will wait for all pods it spawns to become "Running".
 | 
					 | 
				
			||||||
// It's the caller's responsibility to clean up externally (i.e. use the
 | 
					 | 
				
			||||||
// namespace lifecycle for handling Cleanup).
 | 
					 | 
				
			||||||
func RunJob(ctx context.Context, config JobConfig) error {
 | 
					 | 
				
			||||||
	err := config.create()
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return config.start(ctx)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *JobConfig) Run(ctx context.Context) error {
 | 
					 | 
				
			||||||
	return RunJob(ctx, *config)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *JobConfig) GetKind() schema.GroupKind {
 | 
					 | 
				
			||||||
	return batchinternal.Kind("Job")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *JobConfig) GetGroupResource() schema.GroupResource {
 | 
					 | 
				
			||||||
	return batchinternal.Resource("jobs")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *JobConfig) GetGroupVersionResource() schema.GroupVersionResource {
 | 
					 | 
				
			||||||
	return batchinternal.SchemeGroupVersion.WithResource("jobs")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *JobConfig) create() error {
 | 
					 | 
				
			||||||
	job := &batch.Job{
 | 
					 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
			Name: config.Name,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		Spec: batch.JobSpec{
 | 
					 | 
				
			||||||
			Parallelism: pointer.Int32(int32(config.Replicas)),
 | 
					 | 
				
			||||||
			Completions: pointer.Int32(int32(config.Replicas)),
 | 
					 | 
				
			||||||
			Template: v1.PodTemplateSpec{
 | 
					 | 
				
			||||||
				ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
					Labels:      map[string]string{"name": config.Name},
 | 
					 | 
				
			||||||
					Annotations: config.Annotations,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Spec: v1.PodSpec{
 | 
					 | 
				
			||||||
					Affinity:                      config.Affinity,
 | 
					 | 
				
			||||||
					TerminationGracePeriodSeconds: config.getTerminationGracePeriodSeconds(nil),
 | 
					 | 
				
			||||||
					Containers: []v1.Container{
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							Name:            config.Name,
 | 
					 | 
				
			||||||
							Image:           config.Image,
 | 
					 | 
				
			||||||
							Command:         config.Command,
 | 
					 | 
				
			||||||
							Lifecycle:       config.Lifecycle,
 | 
					 | 
				
			||||||
							SecurityContext: config.SecurityContext,
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					RestartPolicy: v1.RestartPolicyOnFailure,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(config.SecretNames) > 0 {
 | 
					 | 
				
			||||||
		attachSecrets(&job.Spec.Template, config.SecretNames)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if len(config.ConfigMapNames) > 0 {
 | 
					 | 
				
			||||||
		attachConfigMaps(&job.Spec.Template, config.ConfigMapNames)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	config.applyTo(&job.Spec.Template)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := CreateJobWithRetries(config.Client, config.Namespace, job); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("error creating job: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	config.RCConfigLog("Created job with name: %v, namespace: %v, parallelism/completions: %v", job.Name, config.Namespace, job.Spec.Parallelism)
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// RunRC Launches (and verifies correctness) of a Replication Controller
 | 
					// RunRC Launches (and verifies correctness) of a Replication Controller
 | 
				
			||||||
// and will wait for all pods it spawns to become "Running".
 | 
					// and will wait for all pods it spawns to become "Running".
 | 
				
			||||||
// It's the caller's responsibility to clean up externally (i.e. use the
 | 
					// It's the caller's responsibility to clean up externally (i.e. use the
 | 
				
			||||||
@@ -737,7 +659,7 @@ func (s *RCStartupStatus) String(name string) string {
 | 
				
			|||||||
		name, len(s.Created), s.Expected, s.Running, s.Pending, s.Waiting, s.Inactive, s.Terminating, s.Unknown, s.RunningButNotReady)
 | 
							name, len(s.Created), s.Expected, s.Running, s.Pending, s.Waiting, s.Inactive, s.Terminating, s.Unknown, s.RunningButNotReady)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func ComputeRCStartupStatus(pods []*v1.Pod, expected int) RCStartupStatus {
 | 
					func computeRCStartupStatus(pods []*v1.Pod, expected int) RCStartupStatus {
 | 
				
			||||||
	startupStatus := RCStartupStatus{
 | 
						startupStatus := RCStartupStatus{
 | 
				
			||||||
		Expected:              expected,
 | 
							Expected:              expected,
 | 
				
			||||||
		Created:               make([]*v1.Pod, 0, expected),
 | 
							Created:               make([]*v1.Pod, 0, expected),
 | 
				
			||||||
@@ -819,7 +741,7 @@ func (config *RCConfig) start(ctx context.Context) error {
 | 
				
			|||||||
		time.Sleep(interval)
 | 
							time.Sleep(interval)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pods := ps.List()
 | 
							pods := ps.List()
 | 
				
			||||||
		startupStatus := ComputeRCStartupStatus(pods, config.Replicas)
 | 
							startupStatus := computeRCStartupStatus(pods, config.Replicas)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if config.CreatedPods != nil {
 | 
							if config.CreatedPods != nil {
 | 
				
			||||||
			*config.CreatedPods = startupStatus.Created
 | 
								*config.CreatedPods = startupStatus.Created
 | 
				
			||||||
@@ -843,7 +765,7 @@ func (config *RCConfig) start(ctx context.Context) error {
 | 
				
			|||||||
			return fmt.Errorf("%d containers failed which is more than allowed %d", startupStatus.FailedContainers, maxContainerFailures)
 | 
								return fmt.Errorf("%d containers failed which is more than allowed %d", startupStatus.FailedContainers, maxContainerFailures)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		diff := Diff(oldPods, pods)
 | 
							diff := diff(oldPods, pods)
 | 
				
			||||||
		deletedPods := diff.DeletedPods()
 | 
							deletedPods := diff.DeletedPods()
 | 
				
			||||||
		podDeletionsCount += len(deletedPods)
 | 
							podDeletionsCount += len(deletedPods)
 | 
				
			||||||
		if podDeletionsCount > config.MaxAllowedPodDeletions {
 | 
							if podDeletionsCount > config.MaxAllowedPodDeletions {
 | 
				
			||||||
@@ -950,16 +872,6 @@ func WaitForEnoughPodsWithLabelRunning(c clientset.Interface, ns string, label l
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CountToStrategy struct {
 | 
					 | 
				
			||||||
	Count    int
 | 
					 | 
				
			||||||
	Strategy PrepareNodeStrategy
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type TestNodePreparer interface {
 | 
					 | 
				
			||||||
	PrepareNodes(ctx context.Context, nextNodeIndex int) error
 | 
					 | 
				
			||||||
	CleanupNodes(ctx context.Context) error
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type PrepareNodeStrategy interface {
 | 
					type PrepareNodeStrategy interface {
 | 
				
			||||||
	// Modify pre-created Node objects before the test starts.
 | 
						// Modify pre-created Node objects before the test starts.
 | 
				
			||||||
	PreparePatch(node *v1.Node) []byte
 | 
						PreparePatch(node *v1.Node) []byte
 | 
				
			||||||
@@ -1242,46 +1154,6 @@ func DoPrepareNode(ctx context.Context, client clientset.Interface, node *v1.Nod
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func DoCleanupNode(ctx context.Context, client clientset.Interface, nodeName string, strategy PrepareNodeStrategy) error {
 | 
					 | 
				
			||||||
	var err error
 | 
					 | 
				
			||||||
	for attempt := 0; attempt < retries; attempt++ {
 | 
					 | 
				
			||||||
		var node *v1.Node
 | 
					 | 
				
			||||||
		node, err = client.CoreV1().Nodes().Get(ctx, nodeName, metav1.GetOptions{})
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return fmt.Errorf("skipping cleanup of Node: failed to get Node %v: %v", nodeName, err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		updatedNode := strategy.CleanupNode(ctx, node)
 | 
					 | 
				
			||||||
		if apiequality.Semantic.DeepEqual(node, updatedNode) {
 | 
					 | 
				
			||||||
			return nil
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if _, err = client.CoreV1().Nodes().Update(ctx, updatedNode, metav1.UpdateOptions{}); err == nil {
 | 
					 | 
				
			||||||
			break
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if !apierrors.IsConflict(err) {
 | 
					 | 
				
			||||||
			return fmt.Errorf("error when updating Node %v: %v", nodeName, err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		time.Sleep(100 * time.Millisecond)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("too many conflicts when trying to cleanup Node %v: %s", nodeName, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for attempt := 0; attempt < retries; attempt++ {
 | 
					 | 
				
			||||||
		err = strategy.CleanupDependentObjects(ctx, nodeName, client)
 | 
					 | 
				
			||||||
		if err == nil {
 | 
					 | 
				
			||||||
			break
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if !apierrors.IsConflict(err) {
 | 
					 | 
				
			||||||
			return fmt.Errorf("error when cleaning up Node %v objects: %v", nodeName, err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		time.Sleep(100 * time.Millisecond)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("too many conflicts when trying to cleanup Node %v objects: %s", nodeName, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type TestPodCreateStrategy func(ctx context.Context, client clientset.Interface, namespace string, podCount int) error
 | 
					type TestPodCreateStrategy func(ctx context.Context, client clientset.Interface, namespace string, podCount int) error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CountToPodStrategy struct {
 | 
					type CountToPodStrategy struct {
 | 
				
			||||||
@@ -1296,6 +1168,16 @@ func NewTestPodCreatorConfig() *TestPodCreatorConfig {
 | 
				
			|||||||
	return &config
 | 
						return &config
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type CountToStrategy struct {
 | 
				
			||||||
 | 
						Count    int
 | 
				
			||||||
 | 
						Strategy PrepareNodeStrategy
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type TestNodePreparer interface {
 | 
				
			||||||
 | 
						PrepareNodes(ctx context.Context, nextNodeIndex int) error
 | 
				
			||||||
 | 
						CleanupNodes(ctx context.Context) error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *TestPodCreatorConfig) AddStrategy(
 | 
					func (c *TestPodCreatorConfig) AddStrategy(
 | 
				
			||||||
	namespace string, podCount int, strategy TestPodCreateStrategy) {
 | 
						namespace string, podCount int, strategy TestPodCreateStrategy) {
 | 
				
			||||||
	(*c)[namespace] = append((*c)[namespace], CountToPodStrategy{Count: podCount, Strategy: strategy})
 | 
						(*c)[namespace] = append((*c)[namespace], CountToPodStrategy{Count: podCount, Strategy: strategy})
 | 
				
			||||||
@@ -1462,28 +1344,6 @@ func CreatePodWithPersistentVolume(ctx context.Context, client clientset.Interfa
 | 
				
			|||||||
	return createError
 | 
						return createError
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func createController(client clientset.Interface, controllerName, namespace string, podCount int, podTemplate *v1.Pod) error {
 | 
					 | 
				
			||||||
	rc := &v1.ReplicationController{
 | 
					 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
			Name: controllerName,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		Spec: v1.ReplicationControllerSpec{
 | 
					 | 
				
			||||||
			Replicas: pointer.Int32(int32(podCount)),
 | 
					 | 
				
			||||||
			Selector: map[string]string{"name": controllerName},
 | 
					 | 
				
			||||||
			Template: &v1.PodTemplateSpec{
 | 
					 | 
				
			||||||
				ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
					Labels: map[string]string{"name": controllerName},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Spec: podTemplate.Spec,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if err := CreateRCWithRetries(client, namespace, rc); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("error creating replication controller: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewCustomCreatePodStrategy(podTemplate *v1.Pod) TestPodCreateStrategy {
 | 
					func NewCustomCreatePodStrategy(podTemplate *v1.Pod) TestPodCreateStrategy {
 | 
				
			||||||
	return func(ctx context.Context, client clientset.Interface, namespace string, podCount int) error {
 | 
						return func(ctx context.Context, client clientset.Interface, namespace string, podCount int) error {
 | 
				
			||||||
		return CreatePod(ctx, client, namespace, podCount, podTemplate)
 | 
							return CreatePod(ctx, client, namespace, podCount, podTemplate)
 | 
				
			||||||
@@ -1499,107 +1359,6 @@ func NewCreatePodWithPersistentVolumeStrategy(claimTemplate *v1.PersistentVolume
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func makeUnboundPersistentVolumeClaim(storageClass string) *v1.PersistentVolumeClaim {
 | 
					 | 
				
			||||||
	return &v1.PersistentVolumeClaim{
 | 
					 | 
				
			||||||
		Spec: v1.PersistentVolumeClaimSpec{
 | 
					 | 
				
			||||||
			AccessModes:      []v1.PersistentVolumeAccessMode{v1.ReadOnlyMany},
 | 
					 | 
				
			||||||
			StorageClassName: &storageClass,
 | 
					 | 
				
			||||||
			Resources: v1.VolumeResourceRequirements{
 | 
					 | 
				
			||||||
				Requests: v1.ResourceList{
 | 
					 | 
				
			||||||
					v1.ResourceName(v1.ResourceStorage): resource.MustParse("1Gi"),
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewCreatePodWithPersistentVolumeWithFirstConsumerStrategy(factory volumeFactory, podTemplate *v1.Pod) TestPodCreateStrategy {
 | 
					 | 
				
			||||||
	return func(ctx context.Context, client clientset.Interface, namespace string, podCount int) error {
 | 
					 | 
				
			||||||
		volumeBindingMode := storagev1.VolumeBindingWaitForFirstConsumer
 | 
					 | 
				
			||||||
		storageClass := &storagev1.StorageClass{
 | 
					 | 
				
			||||||
			ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
				Name: "storagev1-class-1",
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			Provisioner:       "kubernetes.io/gce-pd",
 | 
					 | 
				
			||||||
			VolumeBindingMode: &volumeBindingMode,
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		claimTemplate := makeUnboundPersistentVolumeClaim(storageClass.Name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if err := CreateStorageClassWithRetries(client, storageClass); err != nil {
 | 
					 | 
				
			||||||
			return fmt.Errorf("failed to create storagev1 class: %v", err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		factoryWithStorageClass := func(i int) *v1.PersistentVolume {
 | 
					 | 
				
			||||||
			pv := factory(i)
 | 
					 | 
				
			||||||
			pv.Spec.StorageClassName = storageClass.Name
 | 
					 | 
				
			||||||
			return pv
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return CreatePodWithPersistentVolume(ctx, client, namespace, claimTemplate, factoryWithStorageClass, podTemplate, podCount, false /* bindVolume */)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewSimpleCreatePodStrategy() TestPodCreateStrategy {
 | 
					 | 
				
			||||||
	basePod := &v1.Pod{
 | 
					 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
			GenerateName: "simple-pod-",
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		Spec: MakePodSpec(),
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return NewCustomCreatePodStrategy(basePod)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewSimpleWithControllerCreatePodStrategy(controllerName string) TestPodCreateStrategy {
 | 
					 | 
				
			||||||
	return func(ctx context.Context, client clientset.Interface, namespace string, podCount int) error {
 | 
					 | 
				
			||||||
		basePod := &v1.Pod{
 | 
					 | 
				
			||||||
			ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
				GenerateName: controllerName + "-pod-",
 | 
					 | 
				
			||||||
				Labels:       map[string]string{"name": controllerName},
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			Spec: MakePodSpec(),
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if err := createController(client, controllerName, namespace, podCount, basePod); err != nil {
 | 
					 | 
				
			||||||
			return err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return CreatePod(ctx, client, namespace, podCount, basePod)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type SecretConfig struct {
 | 
					 | 
				
			||||||
	Content   map[string]string
 | 
					 | 
				
			||||||
	Client    clientset.Interface
 | 
					 | 
				
			||||||
	Name      string
 | 
					 | 
				
			||||||
	Namespace string
 | 
					 | 
				
			||||||
	// If set this function will be used to print log lines instead of klog.
 | 
					 | 
				
			||||||
	LogFunc func(fmt string, args ...interface{})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *SecretConfig) Run() error {
 | 
					 | 
				
			||||||
	secret := &v1.Secret{
 | 
					 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
			Name: config.Name,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		StringData: map[string]string{},
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for k, v := range config.Content {
 | 
					 | 
				
			||||||
		secret.StringData[k] = v
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := CreateSecretWithRetries(config.Client, config.Namespace, secret); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("error creating secret: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	config.LogFunc("Created secret %v/%v", config.Namespace, config.Name)
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *SecretConfig) Stop() error {
 | 
					 | 
				
			||||||
	if err := DeleteResourceWithRetries(config.Client, api.Kind("Secret"), config.Namespace, config.Name, metav1.DeleteOptions{}); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("error deleting secret: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	config.LogFunc("Deleted secret %v/%v", config.Namespace, config.Name)
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// TODO: attach secrets using different possibilities: env vars, image pull secrets.
 | 
					// TODO: attach secrets using different possibilities: env vars, image pull secrets.
 | 
				
			||||||
func attachSecrets(template *v1.PodTemplateSpec, secretNames []string) {
 | 
					func attachSecrets(template *v1.PodTemplateSpec, secretNames []string) {
 | 
				
			||||||
	volumes := make([]v1.Volume, 0, len(secretNames))
 | 
						volumes := make([]v1.Volume, 0, len(secretNames))
 | 
				
			||||||
@@ -1623,41 +1382,6 @@ func attachSecrets(template *v1.PodTemplateSpec, secretNames []string) {
 | 
				
			|||||||
	template.Spec.Containers[0].VolumeMounts = mounts
 | 
						template.Spec.Containers[0].VolumeMounts = mounts
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ConfigMapConfig struct {
 | 
					 | 
				
			||||||
	Content   map[string]string
 | 
					 | 
				
			||||||
	Client    clientset.Interface
 | 
					 | 
				
			||||||
	Name      string
 | 
					 | 
				
			||||||
	Namespace string
 | 
					 | 
				
			||||||
	// If set this function will be used to print log lines instead of klog.
 | 
					 | 
				
			||||||
	LogFunc func(fmt string, args ...interface{})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *ConfigMapConfig) Run() error {
 | 
					 | 
				
			||||||
	configMap := &v1.ConfigMap{
 | 
					 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
					 | 
				
			||||||
			Name: config.Name,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		Data: map[string]string{},
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for k, v := range config.Content {
 | 
					 | 
				
			||||||
		configMap.Data[k] = v
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := CreateConfigMapWithRetries(config.Client, config.Namespace, configMap); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("error creating configmap: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	config.LogFunc("Created configmap %v/%v", config.Namespace, config.Name)
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (config *ConfigMapConfig) Stop() error {
 | 
					 | 
				
			||||||
	if err := DeleteResourceWithRetries(config.Client, api.Kind("ConfigMap"), config.Namespace, config.Name, metav1.DeleteOptions{}); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("error deleting configmap: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	config.LogFunc("Deleted configmap %v/%v", config.Namespace, config.Name)
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// TODO: attach configmaps using different possibilities: env vars.
 | 
					// TODO: attach configmaps using different possibilities: env vars.
 | 
				
			||||||
func attachConfigMaps(template *v1.PodTemplateSpec, configMapNames []string) {
 | 
					func attachConfigMaps(template *v1.PodTemplateSpec, configMapNames []string) {
 | 
				
			||||||
	volumes := make([]v1.Volume, 0, len(configMapNames))
 | 
						volumes := make([]v1.Volume, 0, len(configMapNames))
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user