mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Merge pull request #124850 from soltysh/cleanup_runners
Cleanup unused test functions
This commit is contained in:
commit
caafc21140
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user