mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 04:06:03 +00:00
add import-alias for k8s.io/api/apps/v1
This commit is contained in:
parent
1aa22b8e22
commit
0aae740ede
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"k8s.io/api/admissionregistration/v1beta1": "admissionregistrationv1beta1",
|
"k8s.io/api/admissionregistration/v1beta1": "admissionregistrationv1beta1",
|
||||||
"k8s.io/api/admission/v1beta1": "admissionv1beta1"
|
"k8s.io/api/admission/v1beta1": "admissionv1beta1",
|
||||||
|
"k8s.io/api/apps/v1": "appsv1"
|
||||||
}
|
}
|
@ -24,7 +24,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
apierrs "k8s.io/apimachinery/pkg/api/errors"
|
apierrs "k8s.io/apimachinery/pkg/api/errors"
|
||||||
@ -238,18 +238,18 @@ func TestSampleAPIServer(f *framework.Framework, aggrclient *aggregatorclient.Cl
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
d := &apps.Deployment{
|
d := &appsv1.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: deploymentName,
|
Name: deploymentName,
|
||||||
Labels: podLabels,
|
Labels: podLabels,
|
||||||
},
|
},
|
||||||
Spec: apps.DeploymentSpec{
|
Spec: appsv1.DeploymentSpec{
|
||||||
Replicas: &replicas,
|
Replicas: &replicas,
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: podLabels,
|
MatchLabels: podLabels,
|
||||||
},
|
},
|
||||||
Strategy: apps.DeploymentStrategy{
|
Strategy: appsv1.DeploymentStrategy{
|
||||||
Type: apps.RollingUpdateDeploymentStrategyType,
|
Type: appsv1.RollingUpdateDeploymentStrategyType,
|
||||||
},
|
},
|
||||||
Template: v1.PodTemplateSpec{
|
Template: v1.PodTemplateSpec{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"github.com/onsi/gomega"
|
"github.com/onsi/gomega"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
@ -278,18 +278,18 @@ func deployCustomResourceWebhookAndService(f *framework.Framework, image string,
|
|||||||
Image: image,
|
Image: image,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
d := &apps.Deployment{
|
d := &appsv1.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: deploymentCRDName,
|
Name: deploymentCRDName,
|
||||||
Labels: podLabels,
|
Labels: podLabels,
|
||||||
},
|
},
|
||||||
Spec: apps.DeploymentSpec{
|
Spec: appsv1.DeploymentSpec{
|
||||||
Replicas: &replicas,
|
Replicas: &replicas,
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: podLabels,
|
MatchLabels: podLabels,
|
||||||
},
|
},
|
||||||
Strategy: apps.DeploymentStrategy{
|
Strategy: appsv1.DeploymentStrategy{
|
||||||
Type: apps.RollingUpdateDeploymentStrategyType,
|
Type: appsv1.RollingUpdateDeploymentStrategyType,
|
||||||
},
|
},
|
||||||
Template: v1.PodTemplateSpec{
|
Template: v1.PodTemplateSpec{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
batchv1 "k8s.io/api/batch/v1"
|
batchv1 "k8s.io/api/batch/v1"
|
||||||
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
@ -113,17 +113,17 @@ func getPodTemplateSpec(labels map[string]string) v1.PodTemplateSpec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newOwnerDeployment(f *framework.Framework, deploymentName string, labels map[string]string) *apps.Deployment {
|
func newOwnerDeployment(f *framework.Framework, deploymentName string, labels map[string]string) *appsv1.Deployment {
|
||||||
replicas := int32(2)
|
replicas := int32(2)
|
||||||
return &apps.Deployment{
|
return &appsv1.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: deploymentName,
|
Name: deploymentName,
|
||||||
},
|
},
|
||||||
Spec: apps.DeploymentSpec{
|
Spec: appsv1.DeploymentSpec{
|
||||||
Replicas: &replicas,
|
Replicas: &replicas,
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: labels},
|
Selector: &metav1.LabelSelector{MatchLabels: labels},
|
||||||
Strategy: apps.DeploymentStrategy{
|
Strategy: appsv1.DeploymentStrategy{
|
||||||
Type: apps.RollingUpdateDeploymentStrategyType,
|
Type: appsv1.RollingUpdateDeploymentStrategyType,
|
||||||
},
|
},
|
||||||
Template: getPodTemplateSpec(labels),
|
Template: getPodTemplateSpec(labels),
|
||||||
},
|
},
|
||||||
|
@ -19,7 +19,7 @@ package apimachinery
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
|
admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
||||||
@ -350,18 +350,18 @@ func deployWebhookAndService(f *framework.Framework, image string, context *cert
|
|||||||
Image: image,
|
Image: image,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
d := &apps.Deployment{
|
d := &appsv1.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: deploymentName,
|
Name: deploymentName,
|
||||||
Labels: podLabels,
|
Labels: podLabels,
|
||||||
},
|
},
|
||||||
Spec: apps.DeploymentSpec{
|
Spec: appsv1.DeploymentSpec{
|
||||||
Replicas: &replicas,
|
Replicas: &replicas,
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: podLabels,
|
MatchLabels: podLabels,
|
||||||
},
|
},
|
||||||
Strategy: apps.DeploymentStrategy{
|
Strategy: appsv1.DeploymentStrategy{
|
||||||
Type: apps.RollingUpdateDeploymentStrategyType,
|
Type: appsv1.RollingUpdateDeploymentStrategyType,
|
||||||
},
|
},
|
||||||
Template: v1.PodTemplateSpec{
|
Template: v1.PodTemplateSpec{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -280,7 +280,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
|
|
||||||
e2elog.Logf("Creating simple daemon set %s", dsName)
|
e2elog.Logf("Creating simple daemon set %s", dsName)
|
||||||
ds := newDaemonSet(dsName, image, label)
|
ds := newDaemonSet(dsName, image, label)
|
||||||
ds.Spec.UpdateStrategy = apps.DaemonSetUpdateStrategy{Type: apps.OnDeleteDaemonSetStrategyType}
|
ds.Spec.UpdateStrategy = appsv1.DaemonSetUpdateStrategy{Type: appsv1.OnDeleteDaemonSetStrategyType}
|
||||||
ds, err := c.AppsV1().DaemonSets(ns).Create(ds)
|
ds, err := c.AppsV1().DaemonSets(ns).Create(ds)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
@ -293,7 +293,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
waitForHistoryCreated(c, ns, label, 1)
|
waitForHistoryCreated(c, ns, label, 1)
|
||||||
first := curHistory(listDaemonHistories(c, ns, label), ds)
|
first := curHistory(listDaemonHistories(c, ns, label), ds)
|
||||||
firstHash := first.Labels[apps.DefaultDaemonSetUniqueLabelKey]
|
firstHash := first.Labels[appsv1.DefaultDaemonSetUniqueLabelKey]
|
||||||
gomega.Expect(first.Revision).To(gomega.Equal(int64(1)))
|
gomega.Expect(first.Revision).To(gomega.Equal(int64(1)))
|
||||||
checkDaemonSetPodsLabels(listDaemonPods(c, ns, label), firstHash)
|
checkDaemonSetPodsLabels(listDaemonPods(c, ns, label), firstHash)
|
||||||
|
|
||||||
@ -316,7 +316,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
waitForHistoryCreated(c, ns, label, 2)
|
waitForHistoryCreated(c, ns, label, 2)
|
||||||
cur := curHistory(listDaemonHistories(c, ns, label), ds)
|
cur := curHistory(listDaemonHistories(c, ns, label), ds)
|
||||||
gomega.Expect(cur.Revision).To(gomega.Equal(int64(2)))
|
gomega.Expect(cur.Revision).To(gomega.Equal(int64(2)))
|
||||||
gomega.Expect(cur.Labels[apps.DefaultDaemonSetUniqueLabelKey]).NotTo(gomega.Equal(firstHash))
|
gomega.Expect(cur.Labels[appsv1.DefaultDaemonSetUniqueLabelKey]).NotTo(gomega.Equal(firstHash))
|
||||||
checkDaemonSetPodsLabels(listDaemonPods(c, ns, label), firstHash)
|
checkDaemonSetPodsLabels(listDaemonPods(c, ns, label), firstHash)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -329,7 +329,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
|
|
||||||
e2elog.Logf("Creating simple daemon set %s", dsName)
|
e2elog.Logf("Creating simple daemon set %s", dsName)
|
||||||
ds := newDaemonSet(dsName, image, label)
|
ds := newDaemonSet(dsName, image, label)
|
||||||
ds.Spec.UpdateStrategy = apps.DaemonSetUpdateStrategy{Type: apps.RollingUpdateDaemonSetStrategyType}
|
ds.Spec.UpdateStrategy = appsv1.DaemonSetUpdateStrategy{Type: appsv1.RollingUpdateDaemonSetStrategyType}
|
||||||
ds, err := c.AppsV1().DaemonSets(ns).Create(ds)
|
ds, err := c.AppsV1().DaemonSets(ns).Create(ds)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
@ -342,7 +342,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
waitForHistoryCreated(c, ns, label, 1)
|
waitForHistoryCreated(c, ns, label, 1)
|
||||||
cur := curHistory(listDaemonHistories(c, ns, label), ds)
|
cur := curHistory(listDaemonHistories(c, ns, label), ds)
|
||||||
hash := cur.Labels[apps.DefaultDaemonSetUniqueLabelKey]
|
hash := cur.Labels[appsv1.DefaultDaemonSetUniqueLabelKey]
|
||||||
gomega.Expect(cur.Revision).To(gomega.Equal(int64(1)))
|
gomega.Expect(cur.Revision).To(gomega.Equal(int64(1)))
|
||||||
checkDaemonSetPodsLabels(listDaemonPods(c, ns, label), hash)
|
checkDaemonSetPodsLabels(listDaemonPods(c, ns, label), hash)
|
||||||
|
|
||||||
@ -371,7 +371,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
waitForHistoryCreated(c, ns, label, 2)
|
waitForHistoryCreated(c, ns, label, 2)
|
||||||
cur = curHistory(listDaemonHistories(c, ns, label), ds)
|
cur = curHistory(listDaemonHistories(c, ns, label), ds)
|
||||||
hash = cur.Labels[apps.DefaultDaemonSetUniqueLabelKey]
|
hash = cur.Labels[appsv1.DefaultDaemonSetUniqueLabelKey]
|
||||||
gomega.Expect(cur.Revision).To(gomega.Equal(int64(2)))
|
gomega.Expect(cur.Revision).To(gomega.Equal(int64(2)))
|
||||||
checkDaemonSetPodsLabels(listDaemonPods(c, ns, label), hash)
|
checkDaemonSetPodsLabels(listDaemonPods(c, ns, label), hash)
|
||||||
})
|
})
|
||||||
@ -387,7 +387,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
e2elog.Logf("Create a RollingUpdate DaemonSet")
|
e2elog.Logf("Create a RollingUpdate DaemonSet")
|
||||||
label := map[string]string{daemonsetNameLabel: dsName}
|
label := map[string]string{daemonsetNameLabel: dsName}
|
||||||
ds := newDaemonSet(dsName, image, label)
|
ds := newDaemonSet(dsName, image, label)
|
||||||
ds.Spec.UpdateStrategy = apps.DaemonSetUpdateStrategy{Type: apps.RollingUpdateDaemonSetStrategyType}
|
ds.Spec.UpdateStrategy = appsv1.DaemonSetUpdateStrategy{Type: appsv1.RollingUpdateDaemonSetStrategyType}
|
||||||
ds, err := c.AppsV1().DaemonSets(ns).Create(ds)
|
ds, err := c.AppsV1().DaemonSets(ns).Create(ds)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
@ -398,7 +398,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
e2elog.Logf("Update the DaemonSet to trigger a rollout")
|
e2elog.Logf("Update the DaemonSet to trigger a rollout")
|
||||||
// We use a nonexistent image here, so that we make sure it won't finish
|
// We use a nonexistent image here, so that we make sure it won't finish
|
||||||
newImage := "foo:non-existent"
|
newImage := "foo:non-existent"
|
||||||
newDS, err := framework.UpdateDaemonSetWithRetries(c, ns, ds.Name, func(update *apps.DaemonSet) {
|
newDS, err := framework.UpdateDaemonSetWithRetries(c, ns, ds.Name, func(update *appsv1.DaemonSet) {
|
||||||
update.Spec.Template.Spec.Containers[0].Image = newImage
|
update.Spec.Template.Spec.Containers[0].Image = newImage
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -430,7 +430,7 @@ var _ = SIGDescribe("Daemon set [Serial]", func() {
|
|||||||
gomega.Expect(len(newPods)).NotTo(gomega.Equal(0))
|
gomega.Expect(len(newPods)).NotTo(gomega.Equal(0))
|
||||||
|
|
||||||
e2elog.Logf("Roll back the DaemonSet before rollout is complete")
|
e2elog.Logf("Roll back the DaemonSet before rollout is complete")
|
||||||
rollbackDS, err := framework.UpdateDaemonSetWithRetries(c, ns, ds.Name, func(update *apps.DaemonSet) {
|
rollbackDS, err := framework.UpdateDaemonSetWithRetries(c, ns, ds.Name, func(update *appsv1.DaemonSet) {
|
||||||
update.Spec.Template.Spec.Containers[0].Image = image
|
update.Spec.Template.Spec.Containers[0].Image = image
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -456,12 +456,12 @@ func getDaemonSetImagePatch(containerName, containerImage string) string {
|
|||||||
return fmt.Sprintf(`{"spec":{"template":{"spec":{"containers":[{"name":"%s","image":"%s"}]}}}}`, containerName, containerImage)
|
return fmt.Sprintf(`{"spec":{"template":{"spec":{"containers":[{"name":"%s","image":"%s"}]}}}}`, containerName, containerImage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newDaemonSet(dsName, image string, label map[string]string) *apps.DaemonSet {
|
func newDaemonSet(dsName, image string, label map[string]string) *appsv1.DaemonSet {
|
||||||
return &apps.DaemonSet{
|
return &appsv1.DaemonSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: dsName,
|
Name: dsName,
|
||||||
},
|
},
|
||||||
Spec: apps.DaemonSetSpec{
|
Spec: appsv1.DaemonSetSpec{
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: label,
|
MatchLabels: label,
|
||||||
},
|
},
|
||||||
@ -576,7 +576,7 @@ func setDaemonSetNodeLabels(c clientset.Interface, nodeName string, labels map[s
|
|||||||
return newNode, nil
|
return newNode, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkDaemonPodOnNodes(f *framework.Framework, ds *apps.DaemonSet, nodeNames []string) func() (bool, error) {
|
func checkDaemonPodOnNodes(f *framework.Framework, ds *appsv1.DaemonSet, nodeNames []string) func() (bool, error) {
|
||||||
return func() (bool, error) {
|
return func() (bool, error) {
|
||||||
podList, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).List(metav1.ListOptions{})
|
podList, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).List(metav1.ListOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -615,14 +615,14 @@ func checkDaemonPodOnNodes(f *framework.Framework, ds *apps.DaemonSet, nodeNames
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkRunningOnAllNodes(f *framework.Framework, ds *apps.DaemonSet) func() (bool, error) {
|
func checkRunningOnAllNodes(f *framework.Framework, ds *appsv1.DaemonSet) func() (bool, error) {
|
||||||
return func() (bool, error) {
|
return func() (bool, error) {
|
||||||
nodeNames := schedulableNodes(f.ClientSet, ds)
|
nodeNames := schedulableNodes(f.ClientSet, ds)
|
||||||
return checkDaemonPodOnNodes(f, ds, nodeNames)()
|
return checkDaemonPodOnNodes(f, ds, nodeNames)()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func schedulableNodes(c clientset.Interface, ds *apps.DaemonSet) []string {
|
func schedulableNodes(c clientset.Interface, ds *appsv1.DaemonSet) []string {
|
||||||
nodeList, err := c.CoreV1().Nodes().List(metav1.ListOptions{})
|
nodeList, err := c.CoreV1().Nodes().List(metav1.ListOptions{})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
nodeNames := make([]string, 0)
|
nodeNames := make([]string, 0)
|
||||||
@ -649,7 +649,7 @@ func checkAtLeastOneNewPod(c clientset.Interface, ns string, label map[string]st
|
|||||||
}
|
}
|
||||||
|
|
||||||
// canScheduleOnNode checks if a given DaemonSet can schedule pods on the given node
|
// canScheduleOnNode checks if a given DaemonSet can schedule pods on the given node
|
||||||
func canScheduleOnNode(node v1.Node, ds *apps.DaemonSet) bool {
|
func canScheduleOnNode(node v1.Node, ds *appsv1.DaemonSet) bool {
|
||||||
newPod := daemon.NewPod(ds, node.Name)
|
newPod := daemon.NewPod(ds, node.Name)
|
||||||
nodeInfo := schedulernodeinfo.NewNodeInfo()
|
nodeInfo := schedulernodeinfo.NewNodeInfo()
|
||||||
nodeInfo.SetNode(&node)
|
nodeInfo.SetNode(&node)
|
||||||
@ -661,7 +661,7 @@ func canScheduleOnNode(node v1.Node, ds *apps.DaemonSet) bool {
|
|||||||
return fit
|
return fit
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkRunningOnNoNodes(f *framework.Framework, ds *apps.DaemonSet) func() (bool, error) {
|
func checkRunningOnNoNodes(f *framework.Framework, ds *appsv1.DaemonSet) func() (bool, error) {
|
||||||
return checkDaemonPodOnNodes(f, ds, make([]string, 0))
|
return checkDaemonPodOnNodes(f, ds, make([]string, 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -677,7 +677,7 @@ func checkDaemonStatus(f *framework.Framework, dsName string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkDaemonPodsImageAndAvailability(c clientset.Interface, ds *apps.DaemonSet, image string, maxUnavailable int) func() (bool, error) {
|
func checkDaemonPodsImageAndAvailability(c clientset.Interface, ds *appsv1.DaemonSet, image string, maxUnavailable int) func() (bool, error) {
|
||||||
return func() (bool, error) {
|
return func() (bool, error) {
|
||||||
podList, err := c.CoreV1().Pods(ds.Namespace).List(metav1.ListOptions{})
|
podList, err := c.CoreV1().Pods(ds.Namespace).List(metav1.ListOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -718,7 +718,7 @@ func checkDaemonPodsImageAndAvailability(c clientset.Interface, ds *apps.DaemonS
|
|||||||
|
|
||||||
func checkDaemonSetPodsLabels(podList *v1.PodList, hash string) {
|
func checkDaemonSetPodsLabels(podList *v1.PodList, hash string) {
|
||||||
for _, pod := range podList.Items {
|
for _, pod := range podList.Items {
|
||||||
podHash := pod.Labels[apps.DefaultDaemonSetUniqueLabelKey]
|
podHash := pod.Labels[appsv1.DefaultDaemonSetUniqueLabelKey]
|
||||||
gomega.Expect(len(podHash)).To(gomega.BeNumerically(">", 0))
|
gomega.Expect(len(podHash)).To(gomega.BeNumerically(">", 0))
|
||||||
if len(hash) > 0 {
|
if len(hash) > 0 {
|
||||||
gomega.Expect(podHash).To(gomega.Equal(hash))
|
gomega.Expect(podHash).To(gomega.Equal(hash))
|
||||||
@ -744,7 +744,7 @@ func waitForHistoryCreated(c clientset.Interface, ns string, label map[string]st
|
|||||||
framework.ExpectNoError(err, "error waiting for controllerrevisions to be created")
|
framework.ExpectNoError(err, "error waiting for controllerrevisions to be created")
|
||||||
}
|
}
|
||||||
|
|
||||||
func listDaemonHistories(c clientset.Interface, ns string, label map[string]string) *apps.ControllerRevisionList {
|
func listDaemonHistories(c clientset.Interface, ns string, label map[string]string) *appsv1.ControllerRevisionList {
|
||||||
selector := labels.Set(label).AsSelector()
|
selector := labels.Set(label).AsSelector()
|
||||||
options := metav1.ListOptions{LabelSelector: selector.String()}
|
options := metav1.ListOptions{LabelSelector: selector.String()}
|
||||||
historyList, err := c.AppsV1().ControllerRevisions(ns).List(options)
|
historyList, err := c.AppsV1().ControllerRevisions(ns).List(options)
|
||||||
@ -753,13 +753,13 @@ func listDaemonHistories(c clientset.Interface, ns string, label map[string]stri
|
|||||||
return historyList
|
return historyList
|
||||||
}
|
}
|
||||||
|
|
||||||
func curHistory(historyList *apps.ControllerRevisionList, ds *apps.DaemonSet) *apps.ControllerRevision {
|
func curHistory(historyList *appsv1.ControllerRevisionList, ds *appsv1.DaemonSet) *appsv1.ControllerRevision {
|
||||||
var curHistory *apps.ControllerRevision
|
var curHistory *appsv1.ControllerRevision
|
||||||
foundCurHistories := 0
|
foundCurHistories := 0
|
||||||
for i := range historyList.Items {
|
for i := range historyList.Items {
|
||||||
history := &historyList.Items[i]
|
history := &historyList.Items[i]
|
||||||
// Every history should have the hash label
|
// Every history should have the hash label
|
||||||
gomega.Expect(len(history.Labels[apps.DefaultDaemonSetUniqueLabelKey])).To(gomega.BeNumerically(">", 0))
|
gomega.Expect(len(history.Labels[appsv1.DefaultDaemonSetUniqueLabelKey])).To(gomega.BeNumerically(">", 0))
|
||||||
match, err := daemon.Match(ds, history)
|
match, err := daemon.Match(ds, history)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
if match {
|
if match {
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"github.com/onsi/gomega"
|
"github.com/onsi/gomega"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
extensions "k8s.io/api/extensions/v1beta1"
|
extensions "k8s.io/api/extensions/v1beta1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
@ -53,7 +53,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
nilRs *apps.ReplicaSet
|
nilRs *appsv1.ReplicaSet
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = SIGDescribe("Deployment", func() {
|
var _ = SIGDescribe("Deployment", func() {
|
||||||
@ -234,7 +234,7 @@ func testDeleteDeployment(f *framework.Framework) {
|
|||||||
podLabels := map[string]string{"name": NginxImageName}
|
podLabels := map[string]string{"name": NginxImageName}
|
||||||
replicas := int32(1)
|
replicas := int32(1)
|
||||||
e2elog.Logf("Creating simple deployment %s", deploymentName)
|
e2elog.Logf("Creating simple deployment %s", deploymentName)
|
||||||
d := e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, apps.RollingUpdateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, appsv1.RollingUpdateDeploymentStrategyType)
|
||||||
d.Annotations = map[string]string{"test": "should-copy-to-replica-set", v1.LastAppliedConfigAnnotation: "should-not-copy-to-replica-set"}
|
d.Annotations = map[string]string{"test": "should-copy-to-replica-set", v1.LastAppliedConfigAnnotation: "should-not-copy-to-replica-set"}
|
||||||
deploy, err := c.AppsV1().Deployments(ns).Create(d)
|
deploy, err := c.AppsV1().Deployments(ns).Create(d)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -281,7 +281,7 @@ func testRollingUpdateDeployment(f *framework.Framework) {
|
|||||||
// Create a deployment to delete nginx pods and instead bring up redis pods.
|
// Create a deployment to delete nginx pods and instead bring up redis pods.
|
||||||
deploymentName := "test-rolling-update-deployment"
|
deploymentName := "test-rolling-update-deployment"
|
||||||
e2elog.Logf("Creating deployment %q", deploymentName)
|
e2elog.Logf("Creating deployment %q", deploymentName)
|
||||||
d := e2edeploy.NewDeployment(deploymentName, replicas, deploymentPodLabels, RedisImageName, RedisImage, apps.RollingUpdateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, replicas, deploymentPodLabels, RedisImageName, RedisImage, appsv1.RollingUpdateDeploymentStrategyType)
|
||||||
deploy, err := c.AppsV1().Deployments(ns).Create(d)
|
deploy, err := c.AppsV1().Deployments(ns).Create(d)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
@ -310,7 +310,7 @@ func testRecreateDeployment(f *framework.Framework) {
|
|||||||
// Create a deployment that brings up redis pods.
|
// Create a deployment that brings up redis pods.
|
||||||
deploymentName := "test-recreate-deployment"
|
deploymentName := "test-recreate-deployment"
|
||||||
e2elog.Logf("Creating deployment %q", deploymentName)
|
e2elog.Logf("Creating deployment %q", deploymentName)
|
||||||
d := e2edeploy.NewDeployment(deploymentName, int32(1), map[string]string{"name": "sample-pod-3"}, RedisImageName, RedisImage, apps.RecreateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, int32(1), map[string]string{"name": "sample-pod-3"}, RedisImageName, RedisImage, appsv1.RecreateDeploymentStrategyType)
|
||||||
deployment, err := c.AppsV1().Deployments(ns).Create(d)
|
deployment, err := c.AppsV1().Deployments(ns).Create(d)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
@ -325,7 +325,7 @@ func testRecreateDeployment(f *framework.Framework) {
|
|||||||
|
|
||||||
// Update deployment to delete redis pods and bring up nginx pods.
|
// Update deployment to delete redis pods and bring up nginx pods.
|
||||||
e2elog.Logf("Triggering a new rollout for deployment %q", deploymentName)
|
e2elog.Logf("Triggering a new rollout for deployment %q", deploymentName)
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deploymentName, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deploymentName, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Template.Spec.Containers[0].Name = NginxImageName
|
update.Spec.Template.Spec.Containers[0].Name = NginxImageName
|
||||||
update.Spec.Template.Spec.Containers[0].Image = NginxImage
|
update.Spec.Template.Spec.Containers[0].Image = NginxImage
|
||||||
})
|
})
|
||||||
@ -396,7 +396,7 @@ func testDeploymentCleanUpPolicy(f *framework.Framework) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
d := e2edeploy.NewDeployment(deploymentName, replicas, deploymentPodLabels, RedisImageName, RedisImage, apps.RollingUpdateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, replicas, deploymentPodLabels, RedisImageName, RedisImage, appsv1.RollingUpdateDeploymentStrategyType)
|
||||||
d.Spec.RevisionHistoryLimit = revisionHistoryLimit
|
d.Spec.RevisionHistoryLimit = revisionHistoryLimit
|
||||||
_, err = c.AppsV1().Deployments(ns).Create(d)
|
_, err = c.AppsV1().Deployments(ns).Create(d)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -436,10 +436,10 @@ func testRolloverDeployment(f *framework.Framework) {
|
|||||||
deploymentName, deploymentImageName := "test-rollover-deployment", "redis-slave"
|
deploymentName, deploymentImageName := "test-rollover-deployment", "redis-slave"
|
||||||
deploymentReplicas := int32(1)
|
deploymentReplicas := int32(1)
|
||||||
deploymentImage := "gcr.io/google_samples/gb-redisslave:nonexistent"
|
deploymentImage := "gcr.io/google_samples/gb-redisslave:nonexistent"
|
||||||
deploymentStrategyType := apps.RollingUpdateDeploymentStrategyType
|
deploymentStrategyType := appsv1.RollingUpdateDeploymentStrategyType
|
||||||
e2elog.Logf("Creating deployment %q", deploymentName)
|
e2elog.Logf("Creating deployment %q", deploymentName)
|
||||||
newDeployment := e2edeploy.NewDeployment(deploymentName, deploymentReplicas, deploymentPodLabels, deploymentImageName, deploymentImage, deploymentStrategyType)
|
newDeployment := e2edeploy.NewDeployment(deploymentName, deploymentReplicas, deploymentPodLabels, deploymentImageName, deploymentImage, deploymentStrategyType)
|
||||||
newDeployment.Spec.Strategy.RollingUpdate = &apps.RollingUpdateDeployment{
|
newDeployment.Spec.Strategy.RollingUpdate = &appsv1.RollingUpdateDeployment{
|
||||||
MaxUnavailable: intOrStrP(0),
|
MaxUnavailable: intOrStrP(0),
|
||||||
MaxSurge: intOrStrP(1),
|
MaxSurge: intOrStrP(1),
|
||||||
}
|
}
|
||||||
@ -469,7 +469,7 @@ func testRolloverDeployment(f *framework.Framework) {
|
|||||||
// The deployment is stuck, update it to rollover the above 2 ReplicaSets and bring up redis pods.
|
// The deployment is stuck, update it to rollover the above 2 ReplicaSets and bring up redis pods.
|
||||||
e2elog.Logf("Rollover old replica sets for deployment %q with new image update", deploymentName)
|
e2elog.Logf("Rollover old replica sets for deployment %q with new image update", deploymentName)
|
||||||
updatedDeploymentImageName, updatedDeploymentImage := RedisImageName, RedisImage
|
updatedDeploymentImageName, updatedDeploymentImage := RedisImageName, RedisImage
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, newDeployment.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, newDeployment.Name, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Template.Spec.Containers[0].Name = updatedDeploymentImageName
|
update.Spec.Template.Spec.Containers[0].Name = updatedDeploymentImageName
|
||||||
update.Spec.Template.Spec.Containers[0].Image = updatedDeploymentImage
|
update.Spec.Template.Spec.Containers[0].Image = updatedDeploymentImage
|
||||||
})
|
})
|
||||||
@ -499,7 +499,7 @@ func testRolloverDeployment(f *framework.Framework) {
|
|||||||
ensureReplicas(newRS, int32(0))
|
ensureReplicas(newRS, int32(0))
|
||||||
}
|
}
|
||||||
|
|
||||||
func ensureReplicas(rs *apps.ReplicaSet, replicas int32) {
|
func ensureReplicas(rs *appsv1.ReplicaSet, replicas int32) {
|
||||||
gomega.Expect(*rs.Spec.Replicas).Should(gomega.Equal(replicas))
|
gomega.Expect(*rs.Spec.Replicas).Should(gomega.Equal(replicas))
|
||||||
gomega.Expect(rs.Status.Replicas).Should(gomega.Equal(replicas))
|
gomega.Expect(rs.Status.Replicas).Should(gomega.Equal(replicas))
|
||||||
}
|
}
|
||||||
@ -519,7 +519,7 @@ func testRollbackDeployment(f *framework.Framework) {
|
|||||||
deploymentName, deploymentImageName := "test-rollback-deployment", NginxImageName
|
deploymentName, deploymentImageName := "test-rollback-deployment", NginxImageName
|
||||||
deploymentReplicas := int32(1)
|
deploymentReplicas := int32(1)
|
||||||
deploymentImage := NginxImage
|
deploymentImage := NginxImage
|
||||||
deploymentStrategyType := apps.RollingUpdateDeploymentStrategyType
|
deploymentStrategyType := appsv1.RollingUpdateDeploymentStrategyType
|
||||||
e2elog.Logf("Creating deployment %s", deploymentName)
|
e2elog.Logf("Creating deployment %s", deploymentName)
|
||||||
d := e2edeploy.NewDeployment(deploymentName, deploymentReplicas, deploymentPodLabels, deploymentImageName, deploymentImage, deploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, deploymentReplicas, deploymentPodLabels, deploymentImageName, deploymentImage, deploymentStrategyType)
|
||||||
createAnnotation := map[string]string{"action": "create", "author": "node"}
|
createAnnotation := map[string]string{"action": "create", "author": "node"}
|
||||||
@ -542,7 +542,7 @@ func testRollbackDeployment(f *framework.Framework) {
|
|||||||
updatedDeploymentImage := RedisImage
|
updatedDeploymentImage := RedisImage
|
||||||
updatedDeploymentImageName := RedisImageName
|
updatedDeploymentImageName := RedisImageName
|
||||||
updateAnnotation := map[string]string{"action": "update", "log": "I need to update it"}
|
updateAnnotation := map[string]string{"action": "update", "log": "I need to update it"}
|
||||||
deployment, err := e2edeploy.UpdateDeploymentWithRetries(c, ns, d.Name, func(update *apps.Deployment) {
|
deployment, err := e2edeploy.UpdateDeploymentWithRetries(c, ns, d.Name, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Template.Spec.Containers[0].Name = updatedDeploymentImageName
|
update.Spec.Template.Spec.Containers[0].Name = updatedDeploymentImageName
|
||||||
update.Spec.Template.Spec.Containers[0].Image = updatedDeploymentImage
|
update.Spec.Template.Spec.Containers[0].Image = updatedDeploymentImage
|
||||||
update.Annotations = updateAnnotation
|
update.Annotations = updateAnnotation
|
||||||
@ -645,7 +645,7 @@ func testRollbackDeployment(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func randomScale(d *apps.Deployment, i int) {
|
func randomScale(d *appsv1.Deployment, i int) {
|
||||||
switch r := rand.Float32(); {
|
switch r := rand.Float32(); {
|
||||||
case r < 0.3:
|
case r < 0.3:
|
||||||
e2elog.Logf("%02d: scaling up", i)
|
e2elog.Logf("%02d: scaling up", i)
|
||||||
@ -670,7 +670,7 @@ func testIterativeDeployments(f *framework.Framework) {
|
|||||||
// Create a nginx deployment.
|
// Create a nginx deployment.
|
||||||
deploymentName := "nginx"
|
deploymentName := "nginx"
|
||||||
thirty := int32(30)
|
thirty := int32(30)
|
||||||
d := e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, apps.RollingUpdateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, appsv1.RollingUpdateDeploymentStrategyType)
|
||||||
d.Spec.ProgressDeadlineSeconds = &thirty
|
d.Spec.ProgressDeadlineSeconds = &thirty
|
||||||
d.Spec.RevisionHistoryLimit = &two
|
d.Spec.RevisionHistoryLimit = &two
|
||||||
d.Spec.Template.Spec.TerminationGracePeriodSeconds = &zero
|
d.Spec.Template.Spec.TerminationGracePeriodSeconds = &zero
|
||||||
@ -688,7 +688,7 @@ func testIterativeDeployments(f *framework.Framework) {
|
|||||||
case n < 0.2:
|
case n < 0.2:
|
||||||
// trigger a new deployment
|
// trigger a new deployment
|
||||||
e2elog.Logf("%02d: triggering a new rollout for deployment %q", i, deployment.Name)
|
e2elog.Logf("%02d: triggering a new rollout for deployment %q", i, deployment.Name)
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *appsv1.Deployment) {
|
||||||
newEnv := v1.EnvVar{Name: "A", Value: fmt.Sprintf("%d", i)}
|
newEnv := v1.EnvVar{Name: "A", Value: fmt.Sprintf("%d", i)}
|
||||||
update.Spec.Template.Spec.Containers[0].Env = append(update.Spec.Template.Spec.Containers[0].Env, newEnv)
|
update.Spec.Template.Spec.Containers[0].Env = append(update.Spec.Template.Spec.Containers[0].Env, newEnv)
|
||||||
randomScale(update, i)
|
randomScale(update, i)
|
||||||
@ -698,18 +698,18 @@ func testIterativeDeployments(f *framework.Framework) {
|
|||||||
case n < 0.4:
|
case n < 0.4:
|
||||||
// rollback to the previous version
|
// rollback to the previous version
|
||||||
e2elog.Logf("%02d: rolling back a rollout for deployment %q", i, deployment.Name)
|
e2elog.Logf("%02d: rolling back a rollout for deployment %q", i, deployment.Name)
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *appsv1.Deployment) {
|
||||||
if update.Annotations == nil {
|
if update.Annotations == nil {
|
||||||
update.Annotations = make(map[string]string)
|
update.Annotations = make(map[string]string)
|
||||||
}
|
}
|
||||||
update.Annotations[apps.DeprecatedRollbackTo] = "0"
|
update.Annotations[appsv1.DeprecatedRollbackTo] = "0"
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
case n < 0.6:
|
case n < 0.6:
|
||||||
// just scaling
|
// just scaling
|
||||||
e2elog.Logf("%02d: scaling deployment %q", i, deployment.Name)
|
e2elog.Logf("%02d: scaling deployment %q", i, deployment.Name)
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *appsv1.Deployment) {
|
||||||
randomScale(update, i)
|
randomScale(update, i)
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -718,14 +718,14 @@ func testIterativeDeployments(f *framework.Framework) {
|
|||||||
// toggling the deployment
|
// toggling the deployment
|
||||||
if deployment.Spec.Paused {
|
if deployment.Spec.Paused {
|
||||||
e2elog.Logf("%02d: pausing deployment %q", i, deployment.Name)
|
e2elog.Logf("%02d: pausing deployment %q", i, deployment.Name)
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Paused = true
|
update.Spec.Paused = true
|
||||||
randomScale(update, i)
|
randomScale(update, i)
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
} else {
|
} else {
|
||||||
e2elog.Logf("%02d: resuming deployment %q", i, deployment.Name)
|
e2elog.Logf("%02d: resuming deployment %q", i, deployment.Name)
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Paused = false
|
update.Spec.Paused = false
|
||||||
randomScale(update, i)
|
randomScale(update, i)
|
||||||
})
|
})
|
||||||
@ -762,7 +762,7 @@ func testIterativeDeployments(f *framework.Framework) {
|
|||||||
deployment, err = c.AppsV1().Deployments(ns).Get(deployment.Name, metav1.GetOptions{})
|
deployment, err = c.AppsV1().Deployments(ns).Get(deployment.Name, metav1.GetOptions{})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
if deployment.Spec.Paused {
|
if deployment.Spec.Paused {
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Paused = false
|
update.Spec.Paused = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -776,7 +776,7 @@ func testIterativeDeployments(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
e2elog.Logf("Checking deployment %q for a complete condition", deploymentName)
|
e2elog.Logf("Checking deployment %q for a complete condition", deploymentName)
|
||||||
err = e2edeploy.WaitForDeploymentWithCondition(c, ns, deploymentName, deploymentutil.NewRSAvailableReason, apps.DeploymentProgressing)
|
err = e2edeploy.WaitForDeploymentWithCondition(c, ns, deploymentName, deploymentutil.NewRSAvailableReason, appsv1.DeploymentProgressing)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,7 +788,7 @@ func testDeploymentsControllerRef(f *framework.Framework) {
|
|||||||
e2elog.Logf("Creating Deployment %q", deploymentName)
|
e2elog.Logf("Creating Deployment %q", deploymentName)
|
||||||
podLabels := map[string]string{"name": NginxImageName}
|
podLabels := map[string]string{"name": NginxImageName}
|
||||||
replicas := int32(1)
|
replicas := int32(1)
|
||||||
d := e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, apps.RollingUpdateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, appsv1.RollingUpdateDeploymentStrategyType)
|
||||||
deploy, err := c.AppsV1().Deployments(ns).Create(d)
|
deploy, err := c.AppsV1().Deployments(ns).Create(d)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
err = e2edeploy.WaitForDeploymentComplete(c, deploy)
|
err = e2edeploy.WaitForDeploymentComplete(c, deploy)
|
||||||
@ -815,7 +815,7 @@ func testDeploymentsControllerRef(f *framework.Framework) {
|
|||||||
|
|
||||||
deploymentName = "test-adopt-deployment"
|
deploymentName = "test-adopt-deployment"
|
||||||
e2elog.Logf("Creating Deployment %q to adopt the ReplicaSet", deploymentName)
|
e2elog.Logf("Creating Deployment %q to adopt the ReplicaSet", deploymentName)
|
||||||
d = e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, apps.RollingUpdateDeploymentStrategyType)
|
d = e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, appsv1.RollingUpdateDeploymentStrategyType)
|
||||||
deploy, err = c.AppsV1().Deployments(ns).Create(d)
|
deploy, err = c.AppsV1().Deployments(ns).Create(d)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
err = e2edeploy.WaitForDeploymentComplete(c, deploy)
|
err = e2edeploy.WaitForDeploymentComplete(c, deploy)
|
||||||
@ -845,8 +845,8 @@ func testProportionalScalingDeployment(f *framework.Framework) {
|
|||||||
|
|
||||||
// Create a nginx deployment.
|
// Create a nginx deployment.
|
||||||
deploymentName := "nginx-deployment"
|
deploymentName := "nginx-deployment"
|
||||||
d := e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, apps.RollingUpdateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, replicas, podLabels, NginxImageName, NginxImage, appsv1.RollingUpdateDeploymentStrategyType)
|
||||||
d.Spec.Strategy.RollingUpdate = new(apps.RollingUpdateDeployment)
|
d.Spec.Strategy.RollingUpdate = new(appsv1.RollingUpdateDeployment)
|
||||||
d.Spec.Strategy.RollingUpdate.MaxSurge = intOrStrP(3)
|
d.Spec.Strategy.RollingUpdate.MaxSurge = intOrStrP(3)
|
||||||
d.Spec.Strategy.RollingUpdate.MaxUnavailable = intOrStrP(2)
|
d.Spec.Strategy.RollingUpdate.MaxUnavailable = intOrStrP(2)
|
||||||
|
|
||||||
@ -873,7 +873,7 @@ func testProportionalScalingDeployment(f *framework.Framework) {
|
|||||||
// Update the deployment with a non-existent image so that the new replica set
|
// Update the deployment with a non-existent image so that the new replica set
|
||||||
// will be blocked to simulate a partial rollout.
|
// will be blocked to simulate a partial rollout.
|
||||||
e2elog.Logf("Updating deployment %q with a non-existent image", deploymentName)
|
e2elog.Logf("Updating deployment %q with a non-existent image", deploymentName)
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, d.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, d.Name, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Template.Spec.Containers[0].Image = "nginx:404"
|
update.Spec.Template.Spec.Containers[0].Image = "nginx:404"
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -938,7 +938,7 @@ func testProportionalScalingDeployment(f *framework.Framework) {
|
|||||||
// Scale the deployment to 30 replicas.
|
// Scale the deployment to 30 replicas.
|
||||||
newReplicas = int32(30)
|
newReplicas = int32(30)
|
||||||
e2elog.Logf("Scaling up the deployment %q from %d to %d", deploymentName, replicas, newReplicas)
|
e2elog.Logf("Scaling up the deployment %q from %d to %d", deploymentName, replicas, newReplicas)
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Replicas = &newReplicas
|
update.Spec.Replicas = &newReplicas
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -986,7 +986,7 @@ func waitDeploymentReplicaSetsOrphaned(c clientset.Interface, ns string, label m
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func listDeploymentReplicaSets(c clientset.Interface, ns string, label map[string]string) *apps.ReplicaSetList {
|
func listDeploymentReplicaSets(c clientset.Interface, ns string, label map[string]string) *appsv1.ReplicaSetList {
|
||||||
selector := labels.Set(label).AsSelector()
|
selector := labels.Set(label).AsSelector()
|
||||||
options := metav1.ListOptions{LabelSelector: selector.String()}
|
options := metav1.ListOptions{LabelSelector: selector.String()}
|
||||||
rsList, err := c.AppsV1().ReplicaSets(ns).List(options)
|
rsList, err := c.AppsV1().ReplicaSets(ns).List(options)
|
||||||
@ -995,7 +995,7 @@ func listDeploymentReplicaSets(c clientset.Interface, ns string, label map[strin
|
|||||||
return rsList
|
return rsList
|
||||||
}
|
}
|
||||||
|
|
||||||
func orphanDeploymentReplicaSets(c clientset.Interface, d *apps.Deployment) error {
|
func orphanDeploymentReplicaSets(c clientset.Interface, d *appsv1.Deployment) error {
|
||||||
trueVar := true
|
trueVar := true
|
||||||
deleteOptions := &metav1.DeleteOptions{OrphanDependents: &trueVar}
|
deleteOptions := &metav1.DeleteOptions{OrphanDependents: &trueVar}
|
||||||
deleteOptions.Preconditions = metav1.NewUIDPreconditions(string(d.UID))
|
deleteOptions.Preconditions = metav1.NewUIDPreconditions(string(d.UID))
|
||||||
|
@ -23,7 +23,7 @@ import (
|
|||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"github.com/onsi/gomega"
|
"github.com/onsi/gomega"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
policy "k8s.io/api/policy/v1beta1"
|
policy "k8s.io/api/policy/v1beta1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -340,12 +340,12 @@ func createReplicaSetOrDie(cs kubernetes.Interface, ns string, size int32, exclu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rs := &apps.ReplicaSet{
|
rs := &appsv1.ReplicaSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "rs",
|
Name: "rs",
|
||||||
Namespace: ns,
|
Namespace: ns,
|
||||||
},
|
},
|
||||||
Spec: apps.ReplicaSetSpec{
|
Spec: appsv1.ReplicaSetSpec{
|
||||||
Replicas: &size,
|
Replicas: &size,
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: map[string]string{"foo": "bar"},
|
MatchLabels: map[string]string{"foo": "bar"},
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
@ -38,14 +38,14 @@ import (
|
|||||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newRS(rsName string, replicas int32, rsPodLabels map[string]string, imageName string, image string) *apps.ReplicaSet {
|
func newRS(rsName string, replicas int32, rsPodLabels map[string]string, imageName string, image string) *appsv1.ReplicaSet {
|
||||||
zero := int64(0)
|
zero := int64(0)
|
||||||
return &apps.ReplicaSet{
|
return &appsv1.ReplicaSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: rsName,
|
Name: rsName,
|
||||||
Labels: rsPodLabels,
|
Labels: rsPodLabels,
|
||||||
},
|
},
|
||||||
Spec: apps.ReplicaSetSpec{
|
Spec: appsv1.ReplicaSetSpec{
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: rsPodLabels,
|
MatchLabels: rsPodLabels,
|
||||||
},
|
},
|
||||||
@ -220,7 +220,7 @@ func testReplicaSetConditionCheck(f *framework.Framework) {
|
|||||||
}
|
}
|
||||||
conditions = rs.Status.Conditions
|
conditions = rs.Status.Conditions
|
||||||
|
|
||||||
cond := replicaset.GetCondition(rs.Status, apps.ReplicaSetReplicaFailure)
|
cond := replicaset.GetCondition(rs.Status, appsv1.ReplicaSetReplicaFailure)
|
||||||
return cond != nil, nil
|
return cond != nil, nil
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -230,7 +230,7 @@ func testReplicaSetConditionCheck(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Scaling down replica set %q to satisfy pod quota", name))
|
ginkgo.By(fmt.Sprintf("Scaling down replica set %q to satisfy pod quota", name))
|
||||||
rs, err = replicasetutil.UpdateReplicaSetWithRetries(c, namespace, name, func(update *apps.ReplicaSet) {
|
rs, err = replicasetutil.UpdateReplicaSetWithRetries(c, namespace, name, func(update *appsv1.ReplicaSet) {
|
||||||
x := int32(2)
|
x := int32(2)
|
||||||
update.Spec.Replicas = &x
|
update.Spec.Replicas = &x
|
||||||
})
|
})
|
||||||
@ -250,7 +250,7 @@ func testReplicaSetConditionCheck(f *framework.Framework) {
|
|||||||
}
|
}
|
||||||
conditions = rs.Status.Conditions
|
conditions = rs.Status.Conditions
|
||||||
|
|
||||||
cond := replicaset.GetCondition(rs.Status, apps.ReplicaSetReplicaFailure)
|
cond := replicaset.GetCondition(rs.Status, appsv1.ReplicaSetReplicaFailure)
|
||||||
return cond == nil, nil
|
return cond == nil, nil
|
||||||
})
|
})
|
||||||
if err == wait.ErrWaitTimeout {
|
if err == wait.ErrWaitTimeout {
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
|
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"github.com/onsi/gomega"
|
"github.com/onsi/gomega"
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
klabels "k8s.io/apimachinery/pkg/labels"
|
klabels "k8s.io/apimachinery/pkg/labels"
|
||||||
@ -71,7 +71,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
}
|
}
|
||||||
headlessSvcName := "test"
|
headlessSvcName := "test"
|
||||||
var statefulPodMounts, podMounts []v1.VolumeMount
|
var statefulPodMounts, podMounts []v1.VolumeMount
|
||||||
var ss *apps.StatefulSet
|
var ss *appsv1.StatefulSet
|
||||||
|
|
||||||
ginkgo.BeforeEach(func() {
|
ginkgo.BeforeEach(func() {
|
||||||
statefulPodMounts = []v1.VolumeMount{{Name: "datadir", MountPath: "/data/"}}
|
statefulPodMounts = []v1.VolumeMount{{Name: "datadir", MountPath: "/data/"}}
|
||||||
@ -285,10 +285,10 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
ss := framework.NewStatefulSet("ss2", ns, headlessSvcName, 3, nil, nil, labels)
|
ss := framework.NewStatefulSet("ss2", ns, headlessSvcName, 3, nil, nil, labels)
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.SetHTTPProbe(ss)
|
sst.SetHTTPProbe(ss)
|
||||||
ss.Spec.UpdateStrategy = apps.StatefulSetUpdateStrategy{
|
ss.Spec.UpdateStrategy = appsv1.StatefulSetUpdateStrategy{
|
||||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
Type: appsv1.RollingUpdateStatefulSetStrategyType,
|
||||||
RollingUpdate: func() *apps.RollingUpdateStatefulSetStrategy {
|
RollingUpdate: func() *appsv1.RollingUpdateStatefulSetStrategy {
|
||||||
return &apps.RollingUpdateStatefulSetStrategy{
|
return &appsv1.RollingUpdateStatefulSetStrategy{
|
||||||
Partition: func() *int32 {
|
Partition: func() *int32 {
|
||||||
i := int32(3)
|
i := int32(3)
|
||||||
return &i
|
return &i
|
||||||
@ -305,11 +305,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
ss.Namespace, ss.Name, updateRevision, currentRevision))
|
ss.Namespace, ss.Name, updateRevision, currentRevision))
|
||||||
pods := sst.GetPodList(ss)
|
pods := sst.GetPodList(ss)
|
||||||
for i := range pods.Items {
|
for i := range pods.Items {
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
||||||
fmt.Sprintf("Pod %s/%s revision %s is not equal to currentRevision %s",
|
fmt.Sprintf("Pod %s/%s revision %s is not equal to currentRevision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
currentRevision))
|
currentRevision))
|
||||||
}
|
}
|
||||||
newImage := NewNginxImage
|
newImage := NewNginxImage
|
||||||
@ -317,7 +317,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Updating stateful set template: update image from %s to %s", oldImage, newImage))
|
ginkgo.By(fmt.Sprintf("Updating stateful set template: update image from %s to %s", oldImage, newImage))
|
||||||
gomega.Expect(oldImage).NotTo(gomega.Equal(newImage), "Incorrect test setup: should update to a different image")
|
gomega.Expect(oldImage).NotTo(gomega.Equal(newImage), "Incorrect test setup: should update to a different image")
|
||||||
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *apps.StatefulSet) {
|
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *appsv1.StatefulSet) {
|
||||||
update.Spec.Template.Spec.Containers[0].Image = newImage
|
update.Spec.Template.Spec.Containers[0].Image = newImage
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -336,30 +336,30 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
oldImage))
|
oldImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
||||||
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
currentRevision))
|
currentRevision))
|
||||||
}
|
}
|
||||||
|
|
||||||
ginkgo.By("Performing a canary update")
|
ginkgo.By("Performing a canary update")
|
||||||
ss.Spec.UpdateStrategy = apps.StatefulSetUpdateStrategy{
|
ss.Spec.UpdateStrategy = appsv1.StatefulSetUpdateStrategy{
|
||||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
Type: appsv1.RollingUpdateStatefulSetStrategyType,
|
||||||
RollingUpdate: func() *apps.RollingUpdateStatefulSetStrategy {
|
RollingUpdate: func() *appsv1.RollingUpdateStatefulSetStrategy {
|
||||||
return &apps.RollingUpdateStatefulSetStrategy{
|
return &appsv1.RollingUpdateStatefulSetStrategy{
|
||||||
Partition: func() *int32 {
|
Partition: func() *int32 {
|
||||||
i := int32(2)
|
i := int32(2)
|
||||||
return &i
|
return &i
|
||||||
}()}
|
}()}
|
||||||
}(),
|
}(),
|
||||||
}
|
}
|
||||||
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *apps.StatefulSet) {
|
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *appsv1.StatefulSet) {
|
||||||
update.Spec.UpdateStrategy = apps.StatefulSetUpdateStrategy{
|
update.Spec.UpdateStrategy = appsv1.StatefulSetUpdateStrategy{
|
||||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
Type: appsv1.RollingUpdateStatefulSetStrategyType,
|
||||||
RollingUpdate: func() *apps.RollingUpdateStatefulSetStrategy {
|
RollingUpdate: func() *appsv1.RollingUpdateStatefulSetStrategy {
|
||||||
return &apps.RollingUpdateStatefulSetStrategy{
|
return &appsv1.RollingUpdateStatefulSetStrategy{
|
||||||
Partition: func() *int32 {
|
Partition: func() *int32 {
|
||||||
i := int32(2)
|
i := int32(2)
|
||||||
return &i
|
return &i
|
||||||
@ -377,11 +377,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
oldImage))
|
oldImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
||||||
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
currentRevision))
|
currentRevision))
|
||||||
} else {
|
} else {
|
||||||
gomega.Expect(pods.Items[i].Spec.Containers[0].Image).To(gomega.Equal(newImage),
|
gomega.Expect(pods.Items[i].Spec.Containers[0].Image).To(gomega.Equal(newImage),
|
||||||
@ -390,11 +390,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
newImage))
|
newImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
||||||
fmt.Sprintf("Pod %s/%s has revision %s not equal to new revision %s",
|
fmt.Sprintf("Pod %s/%s has revision %s not equal to new revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
updateRevision))
|
updateRevision))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -413,11 +413,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
oldImage))
|
oldImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
||||||
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
currentRevision))
|
currentRevision))
|
||||||
} else {
|
} else {
|
||||||
gomega.Expect(pods.Items[i].Spec.Containers[0].Image).To(gomega.Equal(newImage),
|
gomega.Expect(pods.Items[i].Spec.Containers[0].Image).To(gomega.Equal(newImage),
|
||||||
@ -426,23 +426,23 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
newImage))
|
newImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
||||||
fmt.Sprintf("Pod %s/%s has revision %s not equal to new revision %s",
|
fmt.Sprintf("Pod %s/%s has revision %s not equal to new revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
updateRevision))
|
updateRevision))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ginkgo.By("Performing a phased rolling update")
|
ginkgo.By("Performing a phased rolling update")
|
||||||
for i := int(*ss.Spec.UpdateStrategy.RollingUpdate.Partition) - 1; i >= 0; i-- {
|
for i := int(*ss.Spec.UpdateStrategy.RollingUpdate.Partition) - 1; i >= 0; i-- {
|
||||||
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *apps.StatefulSet) {
|
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *appsv1.StatefulSet) {
|
||||||
update.Spec.UpdateStrategy = apps.StatefulSetUpdateStrategy{
|
update.Spec.UpdateStrategy = appsv1.StatefulSetUpdateStrategy{
|
||||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
Type: appsv1.RollingUpdateStatefulSetStrategyType,
|
||||||
RollingUpdate: func() *apps.RollingUpdateStatefulSetStrategy {
|
RollingUpdate: func() *appsv1.RollingUpdateStatefulSetStrategy {
|
||||||
j := int32(i)
|
j := int32(i)
|
||||||
return &apps.RollingUpdateStatefulSetStrategy{
|
return &appsv1.RollingUpdateStatefulSetStrategy{
|
||||||
Partition: &j,
|
Partition: &j,
|
||||||
}
|
}
|
||||||
}(),
|
}(),
|
||||||
@ -458,11 +458,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
oldImage))
|
oldImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
||||||
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
currentRevision))
|
currentRevision))
|
||||||
} else {
|
} else {
|
||||||
gomega.Expect(pods.Items[i].Spec.Containers[0].Image).To(gomega.Equal(newImage),
|
gomega.Expect(pods.Items[i].Spec.Containers[0].Image).To(gomega.Equal(newImage),
|
||||||
@ -471,11 +471,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
newImage))
|
newImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
||||||
fmt.Sprintf("Pod %s/%s has revision %s not equal to new revision %s",
|
fmt.Sprintf("Pod %s/%s has revision %s not equal to new revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
updateRevision))
|
updateRevision))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -496,8 +496,8 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
ss := framework.NewStatefulSet("ss2", ns, headlessSvcName, 3, nil, nil, labels)
|
ss := framework.NewStatefulSet("ss2", ns, headlessSvcName, 3, nil, nil, labels)
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.SetHTTPProbe(ss)
|
sst.SetHTTPProbe(ss)
|
||||||
ss.Spec.UpdateStrategy = apps.StatefulSetUpdateStrategy{
|
ss.Spec.UpdateStrategy = appsv1.StatefulSetUpdateStrategy{
|
||||||
Type: apps.OnDeleteStatefulSetStrategyType,
|
Type: appsv1.OnDeleteStatefulSetStrategyType,
|
||||||
}
|
}
|
||||||
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -509,11 +509,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
ss.Namespace, ss.Name, updateRevision, currentRevision))
|
ss.Namespace, ss.Name, updateRevision, currentRevision))
|
||||||
pods := sst.GetPodList(ss)
|
pods := sst.GetPodList(ss)
|
||||||
for i := range pods.Items {
|
for i := range pods.Items {
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
||||||
fmt.Sprintf("Pod %s/%s revision %s is not equal to current revision %s",
|
fmt.Sprintf("Pod %s/%s revision %s is not equal to current revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
currentRevision))
|
currentRevision))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,11 +525,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
ss = sst.GetStatefulSet(ss.Namespace, ss.Name)
|
ss = sst.GetStatefulSet(ss.Namespace, ss.Name)
|
||||||
pods = sst.GetPodList(ss)
|
pods = sst.GetPodList(ss)
|
||||||
for i := range pods.Items {
|
for i := range pods.Items {
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
||||||
fmt.Sprintf("Pod %s/%s revision %s is not equal to current revision %s",
|
fmt.Sprintf("Pod %s/%s revision %s is not equal to current revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
currentRevision))
|
currentRevision))
|
||||||
}
|
}
|
||||||
newImage := NewNginxImage
|
newImage := NewNginxImage
|
||||||
@ -537,7 +537,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Updating stateful set template: update image from %s to %s", oldImage, newImage))
|
ginkgo.By(fmt.Sprintf("Updating stateful set template: update image from %s to %s", oldImage, newImage))
|
||||||
gomega.Expect(oldImage).NotTo(gomega.Equal(newImage), "Incorrect test setup: should update to a different image")
|
gomega.Expect(oldImage).NotTo(gomega.Equal(newImage), "Incorrect test setup: should update to a different image")
|
||||||
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *apps.StatefulSet) {
|
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *appsv1.StatefulSet) {
|
||||||
update.Spec.Template.Spec.Containers[0].Image = newImage
|
update.Spec.Template.Spec.Containers[0].Image = newImage
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -562,11 +562,11 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
newImage))
|
newImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
||||||
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
fmt.Sprintf("Pod %s/%s has revision %s not equal to current revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
updateRevision))
|
updateRevision))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -666,7 +666,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
|
|
||||||
ginkgo.By("Creating stateful set " + ssName + " in namespace " + ns)
|
ginkgo.By("Creating stateful set " + ssName + " in namespace " + ns)
|
||||||
ss := framework.NewStatefulSet(ssName, ns, headlessSvcName, 1, nil, nil, psLabels)
|
ss := framework.NewStatefulSet(ssName, ns, headlessSvcName, 1, nil, nil, psLabels)
|
||||||
ss.Spec.PodManagementPolicy = apps.ParallelPodManagement
|
ss.Spec.PodManagementPolicy = appsv1.ParallelPodManagement
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.SetHTTPProbe(ss)
|
sst.SetHTTPProbe(ss)
|
||||||
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
@ -885,7 +885,7 @@ func kubectlExecWithRetries(args ...string) (out string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type statefulPodTester interface {
|
type statefulPodTester interface {
|
||||||
deploy(ns string) *apps.StatefulSet
|
deploy(ns string) *appsv1.StatefulSet
|
||||||
write(statefulPodIndex int, kv map[string]string)
|
write(statefulPodIndex int, kv map[string]string)
|
||||||
read(statefulPodIndex int, key string) string
|
read(statefulPodIndex int, key string) string
|
||||||
name() string
|
name() string
|
||||||
@ -922,7 +922,7 @@ func (c *clusterAppTester) run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type zookeeperTester struct {
|
type zookeeperTester struct {
|
||||||
ss *apps.StatefulSet
|
ss *appsv1.StatefulSet
|
||||||
tester *framework.StatefulSetTester
|
tester *framework.StatefulSetTester
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -930,7 +930,7 @@ func (z *zookeeperTester) name() string {
|
|||||||
return "zookeeper"
|
return "zookeeper"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (z *zookeeperTester) deploy(ns string) *apps.StatefulSet {
|
func (z *zookeeperTester) deploy(ns string) *appsv1.StatefulSet {
|
||||||
z.ss = z.tester.CreateStatefulSet(zookeeperManifestPath, ns)
|
z.ss = z.tester.CreateStatefulSet(zookeeperManifestPath, ns)
|
||||||
return z.ss
|
return z.ss
|
||||||
}
|
}
|
||||||
@ -952,7 +952,7 @@ func (z *zookeeperTester) read(statefulPodIndex int, key string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type mysqlGaleraTester struct {
|
type mysqlGaleraTester struct {
|
||||||
ss *apps.StatefulSet
|
ss *appsv1.StatefulSet
|
||||||
tester *framework.StatefulSetTester
|
tester *framework.StatefulSetTester
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -968,7 +968,7 @@ func (m *mysqlGaleraTester) mysqlExec(cmd, ns, podName string) string {
|
|||||||
return kubectlExecWithRetries(fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd)
|
return kubectlExecWithRetries(fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mysqlGaleraTester) deploy(ns string) *apps.StatefulSet {
|
func (m *mysqlGaleraTester) deploy(ns string) *appsv1.StatefulSet {
|
||||||
m.ss = m.tester.CreateStatefulSet(mysqlGaleraManifestPath, ns)
|
m.ss = m.tester.CreateStatefulSet(mysqlGaleraManifestPath, ns)
|
||||||
|
|
||||||
e2elog.Logf("Deployed statefulset %v, initializing database", m.ss.Name)
|
e2elog.Logf("Deployed statefulset %v, initializing database", m.ss.Name)
|
||||||
@ -995,7 +995,7 @@ func (m *mysqlGaleraTester) read(statefulPodIndex int, key string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type redisTester struct {
|
type redisTester struct {
|
||||||
ss *apps.StatefulSet
|
ss *appsv1.StatefulSet
|
||||||
tester *framework.StatefulSetTester
|
tester *framework.StatefulSetTester
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1008,7 +1008,7 @@ func (m *redisTester) redisExec(cmd, ns, podName string) string {
|
|||||||
return framework.RunKubectlOrDie(fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd)
|
return framework.RunKubectlOrDie(fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *redisTester) deploy(ns string) *apps.StatefulSet {
|
func (m *redisTester) deploy(ns string) *appsv1.StatefulSet {
|
||||||
m.ss = m.tester.CreateStatefulSet(redisManifestPath, ns)
|
m.ss = m.tester.CreateStatefulSet(redisManifestPath, ns)
|
||||||
return m.ss
|
return m.ss
|
||||||
}
|
}
|
||||||
@ -1026,7 +1026,7 @@ func (m *redisTester) read(statefulPodIndex int, key string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type cockroachDBTester struct {
|
type cockroachDBTester struct {
|
||||||
ss *apps.StatefulSet
|
ss *appsv1.StatefulSet
|
||||||
tester *framework.StatefulSetTester
|
tester *framework.StatefulSetTester
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1039,7 +1039,7 @@ func (c *cockroachDBTester) cockroachDBExec(cmd, ns, podName string) string {
|
|||||||
return framework.RunKubectlOrDie(fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd)
|
return framework.RunKubectlOrDie(fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cockroachDBTester) deploy(ns string) *apps.StatefulSet {
|
func (c *cockroachDBTester) deploy(ns string) *appsv1.StatefulSet {
|
||||||
c.ss = c.tester.CreateStatefulSet(cockroachDBManifestPath, ns)
|
c.ss = c.tester.CreateStatefulSet(cockroachDBManifestPath, ns)
|
||||||
e2elog.Logf("Deployed statefulset %v, initializing database", c.ss.Name)
|
e2elog.Logf("Deployed statefulset %v, initializing database", c.ss.Name)
|
||||||
for _, cmd := range []string{
|
for _, cmd := range []string{
|
||||||
@ -1087,7 +1087,7 @@ func pollReadWithTimeout(statefulPod statefulPodTester, statefulPodNumber int, k
|
|||||||
|
|
||||||
// This function is used by two tests to test StatefulSet rollbacks: one using
|
// This function is used by two tests to test StatefulSet rollbacks: one using
|
||||||
// PVCs and one using no storage.
|
// PVCs and one using no storage.
|
||||||
func rollbackTest(c clientset.Interface, ns string, ss *apps.StatefulSet) {
|
func rollbackTest(c clientset.Interface, ns string, ss *appsv1.StatefulSet) {
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.SetHTTPProbe(ss)
|
sst.SetHTTPProbe(ss)
|
||||||
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
@ -1100,11 +1100,11 @@ func rollbackTest(c clientset.Interface, ns string, ss *apps.StatefulSet) {
|
|||||||
ss.Namespace, ss.Name, updateRevision, currentRevision))
|
ss.Namespace, ss.Name, updateRevision, currentRevision))
|
||||||
pods := sst.GetPodList(ss)
|
pods := sst.GetPodList(ss)
|
||||||
for i := range pods.Items {
|
for i := range pods.Items {
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(currentRevision),
|
||||||
fmt.Sprintf("Pod %s/%s revision %s is not equal to current revision %s",
|
fmt.Sprintf("Pod %s/%s revision %s is not equal to current revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
currentRevision))
|
currentRevision))
|
||||||
}
|
}
|
||||||
sst.SortStatefulPods(pods)
|
sst.SortStatefulPods(pods)
|
||||||
@ -1116,7 +1116,7 @@ func rollbackTest(c clientset.Interface, ns string, ss *apps.StatefulSet) {
|
|||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Updating StatefulSet template: update image from %s to %s", oldImage, newImage))
|
ginkgo.By(fmt.Sprintf("Updating StatefulSet template: update image from %s to %s", oldImage, newImage))
|
||||||
gomega.Expect(oldImage).NotTo(gomega.Equal(newImage), "Incorrect test setup: should update to a different image")
|
gomega.Expect(oldImage).NotTo(gomega.Equal(newImage), "Incorrect test setup: should update to a different image")
|
||||||
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *apps.StatefulSet) {
|
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *appsv1.StatefulSet) {
|
||||||
update.Spec.Template.Spec.Containers[0].Image = newImage
|
update.Spec.Template.Spec.Containers[0].Image = newImage
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -1147,11 +1147,11 @@ func rollbackTest(c clientset.Interface, ns string, ss *apps.StatefulSet) {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
newImage))
|
newImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(updateRevision),
|
||||||
fmt.Sprintf("Pod %s/%s revision %s is not equal to update revision %s",
|
fmt.Sprintf("Pod %s/%s revision %s is not equal to update revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
updateRevision))
|
updateRevision))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1161,7 +1161,7 @@ func rollbackTest(c clientset.Interface, ns string, ss *apps.StatefulSet) {
|
|||||||
ss, pods = sst.WaitForPodNotReady(ss, pods.Items[1].Name)
|
ss, pods = sst.WaitForPodNotReady(ss, pods.Items[1].Name)
|
||||||
priorRevision := currentRevision
|
priorRevision := currentRevision
|
||||||
currentRevision, updateRevision = ss.Status.CurrentRevision, ss.Status.UpdateRevision
|
currentRevision, updateRevision = ss.Status.CurrentRevision, ss.Status.UpdateRevision
|
||||||
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *apps.StatefulSet) {
|
ss, err = framework.UpdateStatefulSetWithRetries(c, ns, ss.Name, func(update *appsv1.StatefulSet) {
|
||||||
update.Spec.Template.Spec.Containers[0].Image = oldImage
|
update.Spec.Template.Spec.Containers[0].Image = oldImage
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -1192,11 +1192,11 @@ func rollbackTest(c clientset.Interface, ns string, ss *apps.StatefulSet) {
|
|||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Spec.Containers[0].Image,
|
pods.Items[i].Spec.Containers[0].Image,
|
||||||
oldImage))
|
oldImage))
|
||||||
gomega.Expect(pods.Items[i].Labels[apps.StatefulSetRevisionLabel]).To(gomega.Equal(priorRevision),
|
gomega.Expect(pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel]).To(gomega.Equal(priorRevision),
|
||||||
fmt.Sprintf("Pod %s/%s revision %s is not equal to prior revision %s",
|
fmt.Sprintf("Pod %s/%s revision %s is not equal to prior revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel],
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel],
|
||||||
priorRevision))
|
priorRevision))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
apiv1 "k8s.io/api/core/v1"
|
apiv1 "k8s.io/api/core/v1"
|
||||||
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
||||||
apiextensionclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
|
apiextensionclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
|
||||||
@ -203,7 +203,7 @@ var _ = SIGDescribe("Advanced Audit [DisabledForLargeClusters][Flaky]", func() {
|
|||||||
|
|
||||||
ginkgo.It("should audit API calls to create, get, update, patch, delete, list, watch deployments.", func() {
|
ginkgo.It("should audit API calls to create, get, update, patch, delete, list, watch deployments.", func() {
|
||||||
podLabels := map[string]string{"name": "audit-deployment-pod"}
|
podLabels := map[string]string{"name": "audit-deployment-pod"}
|
||||||
d := e2edeploy.NewDeployment("audit-deployment", int32(1), podLabels, "redis", imageutils.GetE2EImage(imageutils.Redis), apps.RecreateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment("audit-deployment", int32(1), podLabels, "redis", imageutils.GetE2EImage(imageutils.Redis), appsv1.RecreateDeploymentStrategyType)
|
||||||
|
|
||||||
_, err := f.ClientSet.AppsV1().Deployments(namespace).Create(d)
|
_, err := f.ClientSet.AppsV1().Deployments(namespace).Create(d)
|
||||||
framework.ExpectNoError(err, "failed to create audit-deployment")
|
framework.ExpectNoError(err, "failed to create audit-deployment")
|
||||||
|
@ -23,7 +23,7 @@ import (
|
|||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
rbac "k8s.io/api/rbac/v1"
|
rbac "k8s.io/api/rbac/v1"
|
||||||
storage "k8s.io/api/storage/v1"
|
storage "k8s.io/api/storage/v1"
|
||||||
@ -353,9 +353,9 @@ func (f *Framework) patchItemRecursively(item interface{}) error {
|
|||||||
}
|
}
|
||||||
case *v1.Service:
|
case *v1.Service:
|
||||||
f.PatchNamespace(&item.ObjectMeta.Namespace)
|
f.PatchNamespace(&item.ObjectMeta.Namespace)
|
||||||
case *apps.StatefulSet:
|
case *appsv1.StatefulSet:
|
||||||
f.PatchNamespace(&item.ObjectMeta.Namespace)
|
f.PatchNamespace(&item.ObjectMeta.Namespace)
|
||||||
case *apps.DaemonSet:
|
case *appsv1.DaemonSet:
|
||||||
f.PatchNamespace(&item.ObjectMeta.Namespace)
|
f.PatchNamespace(&item.ObjectMeta.Namespace)
|
||||||
default:
|
default:
|
||||||
return errors.Errorf("missing support for patching item of type %T", item)
|
return errors.Errorf("missing support for patching item of type %T", item)
|
||||||
@ -497,11 +497,11 @@ func (*serviceFactory) Create(f *Framework, i interface{}) (func() error, error)
|
|||||||
type statefulSetFactory struct{}
|
type statefulSetFactory struct{}
|
||||||
|
|
||||||
func (f *statefulSetFactory) New() runtime.Object {
|
func (f *statefulSetFactory) New() runtime.Object {
|
||||||
return &apps.StatefulSet{}
|
return &appsv1.StatefulSet{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*statefulSetFactory) Create(f *Framework, i interface{}) (func() error, error) {
|
func (*statefulSetFactory) Create(f *Framework, i interface{}) (func() error, error) {
|
||||||
item, ok := i.(*apps.StatefulSet)
|
item, ok := i.(*appsv1.StatefulSet)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errorItemNotSupported
|
return nil, errorItemNotSupported
|
||||||
}
|
}
|
||||||
@ -518,11 +518,11 @@ func (*statefulSetFactory) Create(f *Framework, i interface{}) (func() error, er
|
|||||||
type daemonSetFactory struct{}
|
type daemonSetFactory struct{}
|
||||||
|
|
||||||
func (f *daemonSetFactory) New() runtime.Object {
|
func (f *daemonSetFactory) New() runtime.Object {
|
||||||
return &apps.DaemonSet{}
|
return &appsv1.DaemonSet{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*daemonSetFactory) Create(f *Framework, i interface{}) (func() error, error) {
|
func (*daemonSetFactory) Create(f *Framework, i interface{}) (func() error, error) {
|
||||||
item, ok := i.(*apps.DaemonSet)
|
item, ok := i.(*appsv1.DaemonSet)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errorItemNotSupported
|
return nil, errorItemNotSupported
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ import (
|
|||||||
|
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/uuid"
|
"k8s.io/apimachinery/pkg/util/uuid"
|
||||||
@ -39,7 +39,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// UpdateDeploymentWithRetries updates the specified deployment with retries.
|
// UpdateDeploymentWithRetries updates the specified deployment with retries.
|
||||||
func UpdateDeploymentWithRetries(c clientset.Interface, namespace, name string, applyUpdate testutils.UpdateDeploymentFunc) (*apps.Deployment, error) {
|
func UpdateDeploymentWithRetries(c clientset.Interface, namespace, name string, applyUpdate testutils.UpdateDeploymentFunc) (*appsv1.Deployment, error) {
|
||||||
return testutils.UpdateDeploymentWithRetries(c, namespace, name, applyUpdate, e2elog.Logf, poll, pollShortTimeout)
|
return testutils.UpdateDeploymentWithRetries(c, namespace, name, applyUpdate, e2elog.Logf, poll, pollShortTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,8 +50,8 @@ func CheckDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName,
|
|||||||
|
|
||||||
// WatchRecreateDeployment watches Recreate deployments and ensures no new pods will run at the same time with
|
// WatchRecreateDeployment watches Recreate deployments and ensures no new pods will run at the same time with
|
||||||
// old pods.
|
// old pods.
|
||||||
func WatchRecreateDeployment(c clientset.Interface, d *apps.Deployment) error {
|
func WatchRecreateDeployment(c clientset.Interface, d *appsv1.Deployment) error {
|
||||||
if d.Spec.Strategy.Type != apps.RecreateDeploymentStrategyType {
|
if d.Spec.Strategy.Type != appsv1.RecreateDeploymentStrategyType {
|
||||||
return fmt.Errorf("deployment %q does not use a Recreate strategy: %s", d.Name, d.Spec.Strategy.Type)
|
return fmt.Errorf("deployment %q does not use a Recreate strategy: %s", d.Name, d.Spec.Strategy.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ func WatchRecreateDeployment(c clientset.Interface, d *apps.Deployment) error {
|
|||||||
status := d.Status
|
status := d.Status
|
||||||
|
|
||||||
condition := func(event watch.Event) (bool, error) {
|
condition := func(event watch.Event) (bool, error) {
|
||||||
d := event.Object.(*apps.Deployment)
|
d := event.Object.(*appsv1.Deployment)
|
||||||
status = d.Status
|
status = d.Status
|
||||||
|
|
||||||
if d.Status.UpdatedReplicas > 0 && d.Status.Replicas != d.Status.UpdatedReplicas {
|
if d.Status.UpdatedReplicas > 0 && d.Status.Replicas != d.Status.UpdatedReplicas {
|
||||||
@ -92,17 +92,17 @@ func WatchRecreateDeployment(c clientset.Interface, d *apps.Deployment) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewDeployment returns a deployment spec with the specified argument.
|
// NewDeployment returns a deployment spec with the specified argument.
|
||||||
func NewDeployment(deploymentName string, replicas int32, podLabels map[string]string, imageName, image string, strategyType apps.DeploymentStrategyType) *apps.Deployment {
|
func NewDeployment(deploymentName string, replicas int32, podLabels map[string]string, imageName, image string, strategyType appsv1.DeploymentStrategyType) *appsv1.Deployment {
|
||||||
zero := int64(0)
|
zero := int64(0)
|
||||||
return &apps.Deployment{
|
return &appsv1.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: deploymentName,
|
Name: deploymentName,
|
||||||
Labels: podLabels,
|
Labels: podLabels,
|
||||||
},
|
},
|
||||||
Spec: apps.DeploymentSpec{
|
Spec: appsv1.DeploymentSpec{
|
||||||
Replicas: &replicas,
|
Replicas: &replicas,
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: podLabels},
|
Selector: &metav1.LabelSelector{MatchLabels: podLabels},
|
||||||
Strategy: apps.DeploymentStrategy{
|
Strategy: appsv1.DeploymentStrategy{
|
||||||
Type: strategyType,
|
Type: strategyType,
|
||||||
},
|
},
|
||||||
Template: v1.PodTemplateSpec{
|
Template: v1.PodTemplateSpec{
|
||||||
@ -125,7 +125,7 @@ func NewDeployment(deploymentName string, replicas int32, podLabels map[string]s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateDeployment creates a deployment.
|
// CreateDeployment creates a deployment.
|
||||||
func CreateDeployment(client clientset.Interface, replicas int32, podLabels map[string]string, nodeSelector map[string]string, namespace string, pvclaims []*v1.PersistentVolumeClaim, command string) (*apps.Deployment, error) {
|
func CreateDeployment(client clientset.Interface, replicas int32, podLabels map[string]string, nodeSelector map[string]string, namespace string, pvclaims []*v1.PersistentVolumeClaim, command string) (*appsv1.Deployment, error) {
|
||||||
deploymentSpec := testDeployment(replicas, podLabels, nodeSelector, namespace, pvclaims, false, command)
|
deploymentSpec := testDeployment(replicas, podLabels, nodeSelector, namespace, pvclaims, false, command)
|
||||||
deployment, err := client.AppsV1().Deployments(namespace).Create(deploymentSpec)
|
deployment, err := client.AppsV1().Deployments(namespace).Create(deploymentSpec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -140,7 +140,7 @@ func CreateDeployment(client clientset.Interface, replicas int32, podLabels map[
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetPodsForDeployment gets pods for the given deployment
|
// GetPodsForDeployment gets pods for the given deployment
|
||||||
func GetPodsForDeployment(client clientset.Interface, deployment *apps.Deployment) (*v1.PodList, error) {
|
func GetPodsForDeployment(client clientset.Interface, deployment *appsv1.Deployment) (*v1.PodList, error) {
|
||||||
replicaSet, err := deploymentutil.GetNewReplicaSet(deployment, client.AppsV1())
|
replicaSet, err := deploymentutil.GetNewReplicaSet(deployment, client.AppsV1())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Failed to get new replica set for deployment %q: %v", deployment.Name, err)
|
return nil, fmt.Errorf("Failed to get new replica set for deployment %q: %v", deployment.Name, err)
|
||||||
@ -151,7 +151,7 @@ func GetPodsForDeployment(client clientset.Interface, deployment *apps.Deploymen
|
|||||||
podListFunc := func(namespace string, options metav1.ListOptions) (*v1.PodList, error) {
|
podListFunc := func(namespace string, options metav1.ListOptions) (*v1.PodList, error) {
|
||||||
return client.CoreV1().Pods(namespace).List(options)
|
return client.CoreV1().Pods(namespace).List(options)
|
||||||
}
|
}
|
||||||
rsList := []*apps.ReplicaSet{replicaSet}
|
rsList := []*appsv1.ReplicaSet{replicaSet}
|
||||||
podList, err := deploymentutil.ListPods(deployment, rsList, podListFunc)
|
podList, err := deploymentutil.ListPods(deployment, rsList, podListFunc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Failed to list Pods of Deployment %q: %v", deployment.Name, err)
|
return nil, fmt.Errorf("Failed to list Pods of Deployment %q: %v", deployment.Name, err)
|
||||||
@ -169,18 +169,18 @@ func RunDeployment(config testutils.DeploymentConfig) error {
|
|||||||
|
|
||||||
// testDeployment creates a deployment definition based on the namespace. The deployment references the PVC's
|
// testDeployment creates a deployment definition based on the namespace. The deployment references the PVC's
|
||||||
// name. A slice of BASH commands can be supplied as args to be run by the pod
|
// name. A slice of BASH commands can be supplied as args to be run by the pod
|
||||||
func testDeployment(replicas int32, podLabels map[string]string, nodeSelector map[string]string, namespace string, pvclaims []*v1.PersistentVolumeClaim, isPrivileged bool, command string) *apps.Deployment {
|
func testDeployment(replicas int32, podLabels map[string]string, nodeSelector map[string]string, namespace string, pvclaims []*v1.PersistentVolumeClaim, isPrivileged bool, command string) *appsv1.Deployment {
|
||||||
if len(command) == 0 {
|
if len(command) == 0 {
|
||||||
command = "trap exit TERM; while true; do sleep 1; done"
|
command = "trap exit TERM; while true; do sleep 1; done"
|
||||||
}
|
}
|
||||||
zero := int64(0)
|
zero := int64(0)
|
||||||
deploymentName := "deployment-" + string(uuid.NewUUID())
|
deploymentName := "deployment-" + string(uuid.NewUUID())
|
||||||
deploymentSpec := &apps.Deployment{
|
deploymentSpec := &appsv1.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: deploymentName,
|
Name: deploymentName,
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
},
|
},
|
||||||
Spec: apps.DeploymentSpec{
|
Spec: appsv1.DeploymentSpec{
|
||||||
Replicas: &replicas,
|
Replicas: &replicas,
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: podLabels,
|
MatchLabels: podLabels,
|
||||||
|
@ -17,16 +17,16 @@ limitations under the License.
|
|||||||
package deployment
|
package deployment
|
||||||
|
|
||||||
import (
|
import (
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
e2elog "k8s.io/kubernetes/test/e2e/framework/log"
|
e2elog "k8s.io/kubernetes/test/e2e/framework/log"
|
||||||
testutils "k8s.io/kubernetes/test/utils"
|
testutils "k8s.io/kubernetes/test/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func logReplicaSetsOfDeployment(deployment *apps.Deployment, allOldRSs []*apps.ReplicaSet, newRS *apps.ReplicaSet) {
|
func logReplicaSetsOfDeployment(deployment *appsv1.Deployment, allOldRSs []*appsv1.ReplicaSet, newRS *appsv1.ReplicaSet) {
|
||||||
testutils.LogReplicaSetsOfDeployment(deployment, allOldRSs, newRS, e2elog.Logf)
|
testutils.LogReplicaSetsOfDeployment(deployment, allOldRSs, newRS, e2elog.Logf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func logPodsOfDeployment(c clientset.Interface, deployment *apps.Deployment, rsList []*apps.ReplicaSet) {
|
func logPodsOfDeployment(c clientset.Interface, deployment *appsv1.Deployment, rsList []*appsv1.ReplicaSet) {
|
||||||
testutils.LogPodsOfDeployment(c, deployment, rsList, e2elog.Logf)
|
testutils.LogPodsOfDeployment(c, deployment, rsList, e2elog.Logf)
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
@ -42,7 +42,7 @@ func WaitForObservedDeployment(c clientset.Interface, ns, deploymentName string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForDeploymentWithCondition waits for the specified deployment condition.
|
// WaitForDeploymentWithCondition waits for the specified deployment condition.
|
||||||
func WaitForDeploymentWithCondition(c clientset.Interface, ns, deploymentName, reason string, condType apps.DeploymentConditionType) error {
|
func WaitForDeploymentWithCondition(c clientset.Interface, ns, deploymentName, reason string, condType appsv1.DeploymentConditionType) error {
|
||||||
return testutils.WaitForDeploymentWithCondition(c, ns, deploymentName, reason, condType, e2elog.Logf, poll, pollLongTimeout)
|
return testutils.WaitForDeploymentWithCondition(c, ns, deploymentName, reason, condType, e2elog.Logf, poll, pollLongTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,13 +56,13 @@ func WaitForDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName
|
|||||||
// WaitForDeploymentComplete waits for the deployment to complete, and don't check if rolling update strategy is broken.
|
// WaitForDeploymentComplete waits for the deployment to complete, and don't check if rolling update strategy is broken.
|
||||||
// Rolling update strategy is used only during a rolling update, and can be violated in other situations,
|
// Rolling update strategy is used only during a rolling update, and can be violated in other situations,
|
||||||
// such as shortly after a scaling event or the deployment is just created.
|
// such as shortly after a scaling event or the deployment is just created.
|
||||||
func WaitForDeploymentComplete(c clientset.Interface, d *apps.Deployment) error {
|
func WaitForDeploymentComplete(c clientset.Interface, d *appsv1.Deployment) error {
|
||||||
return testutils.WaitForDeploymentComplete(c, d, e2elog.Logf, poll, pollLongTimeout)
|
return testutils.WaitForDeploymentComplete(c, d, e2elog.Logf, poll, pollLongTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitForDeploymentCompleteAndCheckRolling waits for the deployment to complete, and check rolling update strategy isn't broken at any times.
|
// WaitForDeploymentCompleteAndCheckRolling waits for the deployment to complete, and check rolling update strategy isn't broken at any times.
|
||||||
// Rolling update strategy should not be broken during a rolling update.
|
// Rolling update strategy should not be broken during a rolling update.
|
||||||
func WaitForDeploymentCompleteAndCheckRolling(c clientset.Interface, d *apps.Deployment) error {
|
func WaitForDeploymentCompleteAndCheckRolling(c clientset.Interface, d *appsv1.Deployment) error {
|
||||||
return testutils.WaitForDeploymentCompleteAndCheckRolling(c, d, e2elog.Logf, poll, pollLongTimeout)
|
return testutils.WaitForDeploymentCompleteAndCheckRolling(c, d, e2elog.Logf, poll, pollLongTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,8 +79,8 @@ func WaitForDeploymentRollbackCleared(c clientset.Interface, ns, deploymentName
|
|||||||
|
|
||||||
// WaitForDeploymentOldRSsNum waits for the deployment to clean up old rcs.
|
// WaitForDeploymentOldRSsNum waits for the deployment to clean up old rcs.
|
||||||
func WaitForDeploymentOldRSsNum(c clientset.Interface, ns, deploymentName string, desiredRSNum int) error {
|
func WaitForDeploymentOldRSsNum(c clientset.Interface, ns, deploymentName string, desiredRSNum int) error {
|
||||||
var oldRSs []*apps.ReplicaSet
|
var oldRSs []*appsv1.ReplicaSet
|
||||||
var d *apps.Deployment
|
var d *appsv1.Deployment
|
||||||
|
|
||||||
pollErr := wait.PollImmediate(poll, 5*time.Minute, func() (bool, error) {
|
pollErr := wait.PollImmediate(poll, 5*time.Minute, func() (bool, error) {
|
||||||
deployment, err := c.AppsV1().Deployments(ns).Get(deploymentName, metav1.GetOptions{})
|
deployment, err := c.AppsV1().Deployments(ns).Get(deploymentName, metav1.GetOptions{})
|
||||||
@ -103,7 +103,7 @@ func WaitForDeploymentOldRSsNum(c clientset.Interface, ns, deploymentName string
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForDeploymentRevision waits for becoming the target revision of a delopyment.
|
// WaitForDeploymentRevision waits for becoming the target revision of a delopyment.
|
||||||
func WaitForDeploymentRevision(c clientset.Interface, d *apps.Deployment, targetRevision string) error {
|
func WaitForDeploymentRevision(c clientset.Interface, d *appsv1.Deployment, targetRevision string) error {
|
||||||
err := wait.PollImmediate(poll, pollLongTimeout, func() (bool, error) {
|
err := wait.PollImmediate(poll, pollLongTimeout, func() (bool, error) {
|
||||||
deployment, err := c.AppsV1().Deployments(d.Namespace).Get(d.Name, metav1.GetOptions{})
|
deployment, err := c.AppsV1().Deployments(d.Namespace).Get(d.Name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -37,7 +37,7 @@ import (
|
|||||||
compute "google.golang.org/api/compute/v1"
|
compute "google.golang.org/api/compute/v1"
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||||
apierrs "k8s.io/apimachinery/pkg/api/errors"
|
apierrs "k8s.io/apimachinery/pkg/api/errors"
|
||||||
@ -908,12 +908,12 @@ func generateBacksideHTTPSServiceSpec() *v1.Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateBacksideHTTPSDeploymentSpec() *apps.Deployment {
|
func generateBacksideHTTPSDeploymentSpec() *appsv1.Deployment {
|
||||||
return &apps.Deployment{
|
return &appsv1.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "echoheaders-https",
|
Name: "echoheaders-https",
|
||||||
},
|
},
|
||||||
Spec: apps.DeploymentSpec{
|
Spec: appsv1.DeploymentSpec{
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: map[string]string{
|
Selector: &metav1.LabelSelector{MatchLabels: map[string]string{
|
||||||
"app": "echoheaders-https",
|
"app": "echoheaders-https",
|
||||||
}},
|
}},
|
||||||
@ -941,7 +941,7 @@ func generateBacksideHTTPSDeploymentSpec() *apps.Deployment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetUpBacksideHTTPSIngress sets up deployment, service and ingress with backside HTTPS configured.
|
// SetUpBacksideHTTPSIngress sets up deployment, service and ingress with backside HTTPS configured.
|
||||||
func (j *TestJig) SetUpBacksideHTTPSIngress(cs clientset.Interface, namespace string, staticIPName string) (*apps.Deployment, *v1.Service, *networkingv1beta1.Ingress, error) {
|
func (j *TestJig) SetUpBacksideHTTPSIngress(cs clientset.Interface, namespace string, staticIPName string) (*appsv1.Deployment, *v1.Service, *networkingv1beta1.Ingress, error) {
|
||||||
deployCreated, err := cs.AppsV1().Deployments(namespace).Create(generateBacksideHTTPSDeploymentSpec())
|
deployCreated, err := cs.AppsV1().Deployments(namespace).Create(generateBacksideHTTPSDeploymentSpec())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
@ -965,7 +965,7 @@ func (j *TestJig) SetUpBacksideHTTPSIngress(cs clientset.Interface, namespace st
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteTestResource deletes given deployment, service and ingress.
|
// DeleteTestResource deletes given deployment, service and ingress.
|
||||||
func (j *TestJig) DeleteTestResource(cs clientset.Interface, deploy *apps.Deployment, svc *v1.Service, ing *networkingv1beta1.Ingress) []error {
|
func (j *TestJig) DeleteTestResource(cs clientset.Interface, deploy *appsv1.Deployment, svc *v1.Service, ing *networkingv1beta1.Ingress) []error {
|
||||||
var errs []error
|
var errs []error
|
||||||
if ing != nil {
|
if ing != nil {
|
||||||
if err := j.runDelete(ing); err != nil {
|
if err := j.runDelete(ing); err != nil {
|
||||||
|
@ -19,7 +19,7 @@ package pod
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
batch "k8s.io/api/batch/v1"
|
batch "k8s.io/api/batch/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
extensions "k8s.io/api/extensions/v1beta1"
|
extensions "k8s.io/api/extensions/v1beta1"
|
||||||
@ -61,15 +61,15 @@ func getSelectorFromRuntimeObject(obj runtime.Object) (labels.Selector, error) {
|
|||||||
return labels.SelectorFromSet(typed.Spec.Selector), nil
|
return labels.SelectorFromSet(typed.Spec.Selector), nil
|
||||||
case *extensions.ReplicaSet:
|
case *extensions.ReplicaSet:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *apps.ReplicaSet:
|
case *appsv1.ReplicaSet:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *extensions.Deployment:
|
case *extensions.Deployment:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *apps.Deployment:
|
case *appsv1.Deployment:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *extensions.DaemonSet:
|
case *extensions.DaemonSet:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *apps.DaemonSet:
|
case *appsv1.DaemonSet:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *batch.Job:
|
case *batch.Job:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
@ -92,7 +92,7 @@ func getReplicasFromRuntimeObject(obj runtime.Object) (int32, error) {
|
|||||||
return *typed.Spec.Replicas, nil
|
return *typed.Spec.Replicas, nil
|
||||||
}
|
}
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *apps.ReplicaSet:
|
case *appsv1.ReplicaSet:
|
||||||
if typed.Spec.Replicas != nil {
|
if typed.Spec.Replicas != nil {
|
||||||
return *typed.Spec.Replicas, nil
|
return *typed.Spec.Replicas, nil
|
||||||
}
|
}
|
||||||
@ -102,14 +102,14 @@ func getReplicasFromRuntimeObject(obj runtime.Object) (int32, error) {
|
|||||||
return *typed.Spec.Replicas, nil
|
return *typed.Spec.Replicas, nil
|
||||||
}
|
}
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *apps.Deployment:
|
case *appsv1.Deployment:
|
||||||
if typed.Spec.Replicas != nil {
|
if typed.Spec.Replicas != nil {
|
||||||
return *typed.Spec.Replicas, nil
|
return *typed.Spec.Replicas, nil
|
||||||
}
|
}
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *extensions.DaemonSet:
|
case *extensions.DaemonSet:
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *apps.DaemonSet:
|
case *appsv1.DaemonSet:
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *batch.Job:
|
case *batch.Job:
|
||||||
// TODO: currently we use pause pods so that's OK. When we'll want to switch to Pods
|
// TODO: currently we use pause pods so that's OK. When we'll want to switch to Pods
|
||||||
|
@ -17,14 +17,14 @@ limitations under the License.
|
|||||||
package replicaset
|
package replicaset
|
||||||
|
|
||||||
import (
|
import (
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewReplicaSet returns a new ReplicaSet.
|
// NewReplicaSet returns a new ReplicaSet.
|
||||||
func NewReplicaSet(name, namespace string, replicas int32, podLabels map[string]string, imageName, image string) *apps.ReplicaSet {
|
func NewReplicaSet(name, namespace string, replicas int32, podLabels map[string]string, imageName, image string) *appsv1.ReplicaSet {
|
||||||
return &apps.ReplicaSet{
|
return &appsv1.ReplicaSet{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
Kind: "ReplicaSet",
|
Kind: "ReplicaSet",
|
||||||
APIVersion: "apps/v1",
|
APIVersion: "apps/v1",
|
||||||
@ -33,7 +33,7 @@ func NewReplicaSet(name, namespace string, replicas int32, podLabels map[string]
|
|||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
Name: name,
|
Name: name,
|
||||||
},
|
},
|
||||||
Spec: apps.ReplicaSetSpec{
|
Spec: appsv1.ReplicaSetSpec{
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: podLabels,
|
MatchLabels: podLabels,
|
||||||
},
|
},
|
||||||
|
@ -19,7 +19,7 @@ package replicaset
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
|
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
|
||||||
@ -29,7 +29,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// UpdateReplicaSetWithRetries updates replicaset template with retries.
|
// UpdateReplicaSetWithRetries updates replicaset template with retries.
|
||||||
func UpdateReplicaSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate testutils.UpdateReplicaSetFunc) (*apps.ReplicaSet, error) {
|
func UpdateReplicaSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate testutils.UpdateReplicaSetFunc) (*appsv1.ReplicaSet, error) {
|
||||||
return testutils.UpdateReplicaSetWithRetries(c, namespace, name, applyUpdate, e2elog.Logf, framework.Poll, framework.PollShortTimeout)
|
return testutils.UpdateReplicaSetWithRetries(c, namespace, name, applyUpdate, e2elog.Logf, framework.Poll, framework.PollShortTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
@ -53,7 +53,7 @@ func WaitForReadyReplicaSet(c clientset.Interface, ns, name string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForReplicaSetDesiredReplicas waits until the replicaset has desired number of replicas.
|
// WaitForReplicaSetDesiredReplicas waits until the replicaset has desired number of replicas.
|
||||||
func WaitForReplicaSetDesiredReplicas(rsClient appsclient.ReplicaSetsGetter, replicaSet *apps.ReplicaSet) error {
|
func WaitForReplicaSetDesiredReplicas(rsClient appsclient.ReplicaSetsGetter, replicaSet *appsv1.ReplicaSet) error {
|
||||||
desiredGeneration := replicaSet.Generation
|
desiredGeneration := replicaSet.Generation
|
||||||
err := wait.PollImmediate(framework.Poll, framework.PollShortTimeout, func() (bool, error) {
|
err := wait.PollImmediate(framework.Poll, framework.PollShortTimeout, func() (bool, error) {
|
||||||
rs, err := rsClient.ReplicaSets(replicaSet.Namespace).Get(replicaSet.Name, metav1.GetOptions{})
|
rs, err := rsClient.ReplicaSets(replicaSet.Namespace).Get(replicaSet.Name, metav1.GetOptions{})
|
||||||
@ -69,7 +69,7 @@ func WaitForReplicaSetDesiredReplicas(rsClient appsclient.ReplicaSetsGetter, rep
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForReplicaSetTargetSpecReplicas waits for .spec.replicas of a RS to equal targetReplicaNum
|
// WaitForReplicaSetTargetSpecReplicas waits for .spec.replicas of a RS to equal targetReplicaNum
|
||||||
func WaitForReplicaSetTargetSpecReplicas(c clientset.Interface, replicaSet *apps.ReplicaSet, targetReplicaNum int32) error {
|
func WaitForReplicaSetTargetSpecReplicas(c clientset.Interface, replicaSet *appsv1.ReplicaSet, targetReplicaNum int32) error {
|
||||||
desiredGeneration := replicaSet.Generation
|
desiredGeneration := replicaSet.Generation
|
||||||
err := wait.PollImmediate(framework.Poll, framework.PollShortTimeout, func() (bool, error) {
|
err := wait.PollImmediate(framework.Poll, framework.PollShortTimeout, func() (bool, error) {
|
||||||
rs, err := c.AppsV1().ReplicaSets(replicaSet.Namespace).Get(replicaSet.Name, metav1.GetOptions{})
|
rs, err := c.AppsV1().ReplicaSets(replicaSet.Namespace).Get(replicaSet.Name, metav1.GetOptions{})
|
||||||
@ -85,7 +85,7 @@ func WaitForReplicaSetTargetSpecReplicas(c clientset.Interface, replicaSet *apps
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForReplicaSetTargetAvailableReplicas waits for .status.availableReplicas of a RS to equal targetReplicaNum
|
// WaitForReplicaSetTargetAvailableReplicas waits for .status.availableReplicas of a RS to equal targetReplicaNum
|
||||||
func WaitForReplicaSetTargetAvailableReplicas(c clientset.Interface, replicaSet *apps.ReplicaSet, targetReplicaNum int32) error {
|
func WaitForReplicaSetTargetAvailableReplicas(c clientset.Interface, replicaSet *appsv1.ReplicaSet, targetReplicaNum int32) error {
|
||||||
desiredGeneration := replicaSet.Generation
|
desiredGeneration := replicaSet.Generation
|
||||||
err := wait.PollImmediate(framework.Poll, framework.PollShortTimeout, func() (bool, error) {
|
err := wait.PollImmediate(framework.Poll, framework.PollShortTimeout, func() (bool, error) {
|
||||||
rs, err := c.AppsV1().ReplicaSets(replicaSet.Namespace).Get(replicaSet.Name, metav1.GetOptions{})
|
rs, err := c.AppsV1().ReplicaSets(replicaSet.Namespace).Get(replicaSet.Name, metav1.GetOptions{})
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
appsV1beta2 "k8s.io/api/apps/v1beta2"
|
appsV1beta2 "k8s.io/api/apps/v1beta2"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
apierrs "k8s.io/apimachinery/pkg/api/errors"
|
apierrs "k8s.io/apimachinery/pkg/api/errors"
|
||||||
@ -82,7 +82,7 @@ func NewStatefulSetTester(c clientset.Interface) *StatefulSetTester {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetStatefulSet gets the StatefulSet named name in namespace.
|
// GetStatefulSet gets the StatefulSet named name in namespace.
|
||||||
func (s *StatefulSetTester) GetStatefulSet(namespace, name string) *apps.StatefulSet {
|
func (s *StatefulSetTester) GetStatefulSet(namespace, name string) *appsv1.StatefulSet {
|
||||||
ss, err := s.c.AppsV1().StatefulSets(namespace).Get(name, metav1.GetOptions{})
|
ss, err := s.c.AppsV1().StatefulSets(namespace).Get(name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Failf("Failed to get StatefulSet %s/%s: %v", namespace, name, err)
|
Failf("Failed to get StatefulSet %s/%s: %v", namespace, name, err)
|
||||||
@ -91,7 +91,7 @@ func (s *StatefulSetTester) GetStatefulSet(namespace, name string) *apps.Statefu
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateStatefulSet creates a StatefulSet from the manifest at manifestPath in the Namespace ns using kubectl create.
|
// CreateStatefulSet creates a StatefulSet from the manifest at manifestPath in the Namespace ns using kubectl create.
|
||||||
func (s *StatefulSetTester) CreateStatefulSet(manifestPath, ns string) *apps.StatefulSet {
|
func (s *StatefulSetTester) CreateStatefulSet(manifestPath, ns string) *appsv1.StatefulSet {
|
||||||
mkpath := func(file string) string {
|
mkpath := func(file string) string {
|
||||||
return filepath.Join(manifestPath, file)
|
return filepath.Join(manifestPath, file)
|
||||||
}
|
}
|
||||||
@ -115,7 +115,7 @@ func (s *StatefulSetTester) CreateStatefulSet(manifestPath, ns string) *apps.Sta
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CheckMount checks that the mount at mountPath is valid for all Pods in ss.
|
// CheckMount checks that the mount at mountPath is valid for all Pods in ss.
|
||||||
func (s *StatefulSetTester) CheckMount(ss *apps.StatefulSet, mountPath string) error {
|
func (s *StatefulSetTester) CheckMount(ss *appsv1.StatefulSet, mountPath string) error {
|
||||||
for _, cmd := range []string{
|
for _, cmd := range []string{
|
||||||
// Print inode, size etc
|
// Print inode, size etc
|
||||||
fmt.Sprintf("ls -idlh %v", mountPath),
|
fmt.Sprintf("ls -idlh %v", mountPath),
|
||||||
@ -132,7 +132,7 @@ func (s *StatefulSetTester) CheckMount(ss *apps.StatefulSet, mountPath string) e
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ExecInStatefulPods executes cmd in all Pods in ss. If a error occurs it is returned and cmd is not execute in any subsequent Pods.
|
// ExecInStatefulPods executes cmd in all Pods in ss. If a error occurs it is returned and cmd is not execute in any subsequent Pods.
|
||||||
func (s *StatefulSetTester) ExecInStatefulPods(ss *apps.StatefulSet, cmd string) error {
|
func (s *StatefulSetTester) ExecInStatefulPods(ss *appsv1.StatefulSet, cmd string) error {
|
||||||
podList := s.GetPodList(ss)
|
podList := s.GetPodList(ss)
|
||||||
for _, statefulPod := range podList.Items {
|
for _, statefulPod := range podList.Items {
|
||||||
stdout, err := RunHostCmdWithRetries(statefulPod.Namespace, statefulPod.Name, cmd, StatefulSetPoll, StatefulPodTimeout)
|
stdout, err := RunHostCmdWithRetries(statefulPod.Namespace, statefulPod.Name, cmd, StatefulSetPoll, StatefulPodTimeout)
|
||||||
@ -145,7 +145,7 @@ func (s *StatefulSetTester) ExecInStatefulPods(ss *apps.StatefulSet, cmd string)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CheckHostname verifies that all Pods in ss have the correct Hostname. If the returned error is not nil than verification failed.
|
// CheckHostname verifies that all Pods in ss have the correct Hostname. If the returned error is not nil than verification failed.
|
||||||
func (s *StatefulSetTester) CheckHostname(ss *apps.StatefulSet) error {
|
func (s *StatefulSetTester) CheckHostname(ss *appsv1.StatefulSet) error {
|
||||||
cmd := "printf $(hostname)"
|
cmd := "printf $(hostname)"
|
||||||
podList := s.GetPodList(ss)
|
podList := s.GetPodList(ss)
|
||||||
for _, statefulPod := range podList.Items {
|
for _, statefulPod := range podList.Items {
|
||||||
@ -161,7 +161,7 @@ func (s *StatefulSetTester) CheckHostname(ss *apps.StatefulSet) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Saturate waits for all Pods in ss to become Running and Ready.
|
// Saturate waits for all Pods in ss to become Running and Ready.
|
||||||
func (s *StatefulSetTester) Saturate(ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) Saturate(ss *appsv1.StatefulSet) {
|
||||||
var i int32
|
var i int32
|
||||||
for i = 0; i < *(ss.Spec.Replicas); i++ {
|
for i = 0; i < *(ss.Spec.Replicas); i++ {
|
||||||
e2elog.Logf("Waiting for stateful pod at index %v to enter Running", i)
|
e2elog.Logf("Waiting for stateful pod at index %v to enter Running", i)
|
||||||
@ -172,7 +172,7 @@ func (s *StatefulSetTester) Saturate(ss *apps.StatefulSet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteStatefulPodAtIndex deletes the Pod with ordinal index in ss.
|
// DeleteStatefulPodAtIndex deletes the Pod with ordinal index in ss.
|
||||||
func (s *StatefulSetTester) DeleteStatefulPodAtIndex(index int, ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) DeleteStatefulPodAtIndex(index int, ss *appsv1.StatefulSet) {
|
||||||
name := getStatefulSetPodNameAtIndex(index, ss)
|
name := getStatefulSetPodNameAtIndex(index, ss)
|
||||||
noGrace := int64(0)
|
noGrace := int64(0)
|
||||||
if err := s.c.CoreV1().Pods(ss.Namespace).Delete(name, &metav1.DeleteOptions{GracePeriodSeconds: &noGrace}); err != nil {
|
if err := s.c.CoreV1().Pods(ss.Namespace).Delete(name, &metav1.DeleteOptions{GracePeriodSeconds: &noGrace}); err != nil {
|
||||||
@ -184,26 +184,26 @@ func (s *StatefulSetTester) DeleteStatefulPodAtIndex(index int, ss *apps.Statefu
|
|||||||
type VerifyStatefulPodFunc func(*v1.Pod)
|
type VerifyStatefulPodFunc func(*v1.Pod)
|
||||||
|
|
||||||
// VerifyPodAtIndex applies a visitor patter to the Pod at index in ss. verify is applied to the Pod to "visit" it.
|
// VerifyPodAtIndex applies a visitor patter to the Pod at index in ss. verify is applied to the Pod to "visit" it.
|
||||||
func (s *StatefulSetTester) VerifyPodAtIndex(index int, ss *apps.StatefulSet, verify VerifyStatefulPodFunc) {
|
func (s *StatefulSetTester) VerifyPodAtIndex(index int, ss *appsv1.StatefulSet, verify VerifyStatefulPodFunc) {
|
||||||
name := getStatefulSetPodNameAtIndex(index, ss)
|
name := getStatefulSetPodNameAtIndex(index, ss)
|
||||||
pod, err := s.c.CoreV1().Pods(ss.Namespace).Get(name, metav1.GetOptions{})
|
pod, err := s.c.CoreV1().Pods(ss.Namespace).Get(name, metav1.GetOptions{})
|
||||||
ExpectNoError(err, fmt.Sprintf("Failed to get stateful pod %s for StatefulSet %s/%s", name, ss.Namespace, ss.Name))
|
ExpectNoError(err, fmt.Sprintf("Failed to get stateful pod %s for StatefulSet %s/%s", name, ss.Namespace, ss.Name))
|
||||||
verify(pod)
|
verify(pod)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getStatefulSetPodNameAtIndex(index int, ss *apps.StatefulSet) string {
|
func getStatefulSetPodNameAtIndex(index int, ss *appsv1.StatefulSet) string {
|
||||||
// TODO: we won't use "-index" as the name strategy forever,
|
// TODO: we won't use "-index" as the name strategy forever,
|
||||||
// pull the name out from an identity mapper.
|
// pull the name out from an identity mapper.
|
||||||
return fmt.Sprintf("%v-%v", ss.Name, index)
|
return fmt.Sprintf("%v-%v", ss.Name, index)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scale scales ss to count replicas.
|
// Scale scales ss to count replicas.
|
||||||
func (s *StatefulSetTester) Scale(ss *apps.StatefulSet, count int32) (*apps.StatefulSet, error) {
|
func (s *StatefulSetTester) Scale(ss *appsv1.StatefulSet, count int32) (*appsv1.StatefulSet, error) {
|
||||||
name := ss.Name
|
name := ss.Name
|
||||||
ns := ss.Namespace
|
ns := ss.Namespace
|
||||||
|
|
||||||
e2elog.Logf("Scaling statefulset %s to %d", name, count)
|
e2elog.Logf("Scaling statefulset %s to %d", name, count)
|
||||||
ss = s.update(ns, name, func(ss *apps.StatefulSet) { *(ss.Spec.Replicas) = count })
|
ss = s.update(ns, name, func(ss *appsv1.StatefulSet) { *(ss.Spec.Replicas) = count })
|
||||||
|
|
||||||
var statefulPodList *v1.PodList
|
var statefulPodList *v1.PodList
|
||||||
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout, func() (bool, error) {
|
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout, func() (bool, error) {
|
||||||
@ -227,12 +227,12 @@ func (s *StatefulSetTester) Scale(ss *apps.StatefulSet, count int32) (*apps.Stat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// UpdateReplicas updates the replicas of ss to count.
|
// UpdateReplicas updates the replicas of ss to count.
|
||||||
func (s *StatefulSetTester) UpdateReplicas(ss *apps.StatefulSet, count int32) {
|
func (s *StatefulSetTester) UpdateReplicas(ss *appsv1.StatefulSet, count int32) {
|
||||||
s.update(ss.Namespace, ss.Name, func(ss *apps.StatefulSet) { *(ss.Spec.Replicas) = count })
|
s.update(ss.Namespace, ss.Name, func(ss *appsv1.StatefulSet) { *(ss.Spec.Replicas) = count })
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restart scales ss to 0 and then back to its previous number of replicas.
|
// Restart scales ss to 0 and then back to its previous number of replicas.
|
||||||
func (s *StatefulSetTester) Restart(ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) Restart(ss *appsv1.StatefulSet) {
|
||||||
oldReplicas := *(ss.Spec.Replicas)
|
oldReplicas := *(ss.Spec.Replicas)
|
||||||
ss, err := s.Scale(ss, 0)
|
ss, err := s.Scale(ss, 0)
|
||||||
ExpectNoError(err)
|
ExpectNoError(err)
|
||||||
@ -240,10 +240,10 @@ func (s *StatefulSetTester) Restart(ss *apps.StatefulSet) {
|
|||||||
// This way we know the controller has observed all Pod deletions
|
// This way we know the controller has observed all Pod deletions
|
||||||
// before we scale it back up.
|
// before we scale it back up.
|
||||||
s.WaitForStatusReplicas(ss, 0)
|
s.WaitForStatusReplicas(ss, 0)
|
||||||
s.update(ss.Namespace, ss.Name, func(ss *apps.StatefulSet) { *(ss.Spec.Replicas) = oldReplicas })
|
s.update(ss.Namespace, ss.Name, func(ss *appsv1.StatefulSet) { *(ss.Spec.Replicas) = oldReplicas })
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StatefulSetTester) update(ns, name string, update func(ss *apps.StatefulSet)) *apps.StatefulSet {
|
func (s *StatefulSetTester) update(ns, name string, update func(ss *appsv1.StatefulSet)) *appsv1.StatefulSet {
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
ss, err := s.c.AppsV1().StatefulSets(ns).Get(name, metav1.GetOptions{})
|
ss, err := s.c.AppsV1().StatefulSets(ns).Get(name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -263,7 +263,7 @@ func (s *StatefulSetTester) update(ns, name string, update func(ss *apps.Statefu
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetPodList gets the current Pods in ss.
|
// GetPodList gets the current Pods in ss.
|
||||||
func (s *StatefulSetTester) GetPodList(ss *apps.StatefulSet) *v1.PodList {
|
func (s *StatefulSetTester) GetPodList(ss *appsv1.StatefulSet) *v1.PodList {
|
||||||
selector, err := metav1.LabelSelectorAsSelector(ss.Spec.Selector)
|
selector, err := metav1.LabelSelectorAsSelector(ss.Spec.Selector)
|
||||||
ExpectNoError(err)
|
ExpectNoError(err)
|
||||||
podList, err := s.c.CoreV1().Pods(ss.Namespace).List(metav1.ListOptions{LabelSelector: selector.String()})
|
podList, err := s.c.CoreV1().Pods(ss.Namespace).List(metav1.ListOptions{LabelSelector: selector.String()})
|
||||||
@ -273,7 +273,7 @@ func (s *StatefulSetTester) GetPodList(ss *apps.StatefulSet) *v1.PodList {
|
|||||||
|
|
||||||
// ConfirmStatefulPodCount asserts that the current number of Pods in ss is count waiting up to timeout for ss to
|
// ConfirmStatefulPodCount asserts that the current number of Pods in ss is count waiting up to timeout for ss to
|
||||||
// to scale to count.
|
// to scale to count.
|
||||||
func (s *StatefulSetTester) ConfirmStatefulPodCount(count int, ss *apps.StatefulSet, timeout time.Duration, hard bool) {
|
func (s *StatefulSetTester) ConfirmStatefulPodCount(count int, ss *appsv1.StatefulSet, timeout time.Duration, hard bool) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
deadline := start.Add(timeout)
|
deadline := start.Add(timeout)
|
||||||
for t := time.Now(); t.Before(deadline); t = time.Now() {
|
for t := time.Now(); t.Before(deadline); t = time.Now() {
|
||||||
@ -296,7 +296,7 @@ func (s *StatefulSetTester) ConfirmStatefulPodCount(count int, ss *apps.Stateful
|
|||||||
|
|
||||||
// WaitForRunning waits for numPodsRunning in ss to be Running and for the first
|
// WaitForRunning waits for numPodsRunning in ss to be Running and for the first
|
||||||
// numPodsReady ordinals to be Ready.
|
// numPodsReady ordinals to be Ready.
|
||||||
func (s *StatefulSetTester) WaitForRunning(numPodsRunning, numPodsReady int32, ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) WaitForRunning(numPodsRunning, numPodsReady int32, ss *appsv1.StatefulSet) {
|
||||||
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout,
|
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout,
|
||||||
func() (bool, error) {
|
func() (bool, error) {
|
||||||
podList := s.GetPodList(ss)
|
podList := s.GetPodList(ss)
|
||||||
@ -325,7 +325,7 @@ func (s *StatefulSetTester) WaitForRunning(numPodsRunning, numPodsReady int32, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForState periodically polls for the ss and its pods until the until function returns either true or an error
|
// WaitForState periodically polls for the ss and its pods until the until function returns either true or an error
|
||||||
func (s *StatefulSetTester) WaitForState(ss *apps.StatefulSet, until func(*apps.StatefulSet, *v1.PodList) (bool, error)) {
|
func (s *StatefulSetTester) WaitForState(ss *appsv1.StatefulSet, until func(*appsv1.StatefulSet, *v1.PodList) (bool, error)) {
|
||||||
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout,
|
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout,
|
||||||
func() (bool, error) {
|
func() (bool, error) {
|
||||||
ssGet, err := s.c.AppsV1().StatefulSets(ss.Namespace).Get(ss.Name, metav1.GetOptions{})
|
ssGet, err := s.c.AppsV1().StatefulSets(ss.Namespace).Get(ss.Name, metav1.GetOptions{})
|
||||||
@ -342,8 +342,8 @@ func (s *StatefulSetTester) WaitForState(ss *apps.StatefulSet, until func(*apps.
|
|||||||
|
|
||||||
// WaitForStatus waits for the StatefulSetStatus's ObservedGeneration to be greater than or equal to set's Generation.
|
// WaitForStatus waits for the StatefulSetStatus's ObservedGeneration to be greater than or equal to set's Generation.
|
||||||
// The returned StatefulSet contains such a StatefulSetStatus
|
// The returned StatefulSet contains such a StatefulSetStatus
|
||||||
func (s *StatefulSetTester) WaitForStatus(set *apps.StatefulSet) *apps.StatefulSet {
|
func (s *StatefulSetTester) WaitForStatus(set *appsv1.StatefulSet) *appsv1.StatefulSet {
|
||||||
s.WaitForState(set, func(set2 *apps.StatefulSet, pods *v1.PodList) (bool, error) {
|
s.WaitForState(set, func(set2 *appsv1.StatefulSet, pods *v1.PodList) (bool, error) {
|
||||||
if set2.Status.ObservedGeneration >= set.Generation {
|
if set2.Status.ObservedGeneration >= set.Generation {
|
||||||
set = set2
|
set = set2
|
||||||
return true, nil
|
return true, nil
|
||||||
@ -354,14 +354,14 @@ func (s *StatefulSetTester) WaitForStatus(set *apps.StatefulSet) *apps.StatefulS
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForRunningAndReady waits for numStatefulPods in ss to be Running and Ready.
|
// WaitForRunningAndReady waits for numStatefulPods in ss to be Running and Ready.
|
||||||
func (s *StatefulSetTester) WaitForRunningAndReady(numStatefulPods int32, ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) WaitForRunningAndReady(numStatefulPods int32, ss *appsv1.StatefulSet) {
|
||||||
s.WaitForRunning(numStatefulPods, numStatefulPods, ss)
|
s.WaitForRunning(numStatefulPods, numStatefulPods, ss)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitForPodReady waits for the Pod named podName in set to exist and have a Ready condition.
|
// WaitForPodReady waits for the Pod named podName in set to exist and have a Ready condition.
|
||||||
func (s *StatefulSetTester) WaitForPodReady(set *apps.StatefulSet, podName string) (*apps.StatefulSet, *v1.PodList) {
|
func (s *StatefulSetTester) WaitForPodReady(set *appsv1.StatefulSet, podName string) (*appsv1.StatefulSet, *v1.PodList) {
|
||||||
var pods *v1.PodList
|
var pods *v1.PodList
|
||||||
s.WaitForState(set, func(set2 *apps.StatefulSet, pods2 *v1.PodList) (bool, error) {
|
s.WaitForState(set, func(set2 *appsv1.StatefulSet, pods2 *v1.PodList) (bool, error) {
|
||||||
set = set2
|
set = set2
|
||||||
pods = pods2
|
pods = pods2
|
||||||
for i := range pods.Items {
|
for i := range pods.Items {
|
||||||
@ -376,9 +376,9 @@ func (s *StatefulSetTester) WaitForPodReady(set *apps.StatefulSet, podName strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForPodNotReady waist for the Pod named podName in set to exist and to not have a Ready condition.
|
// WaitForPodNotReady waist for the Pod named podName in set to exist and to not have a Ready condition.
|
||||||
func (s *StatefulSetTester) WaitForPodNotReady(set *apps.StatefulSet, podName string) (*apps.StatefulSet, *v1.PodList) {
|
func (s *StatefulSetTester) WaitForPodNotReady(set *appsv1.StatefulSet, podName string) (*appsv1.StatefulSet, *v1.PodList) {
|
||||||
var pods *v1.PodList
|
var pods *v1.PodList
|
||||||
s.WaitForState(set, func(set2 *apps.StatefulSet, pods2 *v1.PodList) (bool, error) {
|
s.WaitForState(set, func(set2 *appsv1.StatefulSet, pods2 *v1.PodList) (bool, error) {
|
||||||
set = set2
|
set = set2
|
||||||
pods = pods2
|
pods = pods2
|
||||||
for i := range pods.Items {
|
for i := range pods.Items {
|
||||||
@ -394,15 +394,15 @@ func (s *StatefulSetTester) WaitForPodNotReady(set *apps.StatefulSet, podName st
|
|||||||
|
|
||||||
// WaitForRollingUpdate waits for all Pods in set to exist and have the correct revision and for the RollingUpdate to
|
// WaitForRollingUpdate waits for all Pods in set to exist and have the correct revision and for the RollingUpdate to
|
||||||
// complete. set must have a RollingUpdateStatefulSetStrategyType.
|
// complete. set must have a RollingUpdateStatefulSetStrategyType.
|
||||||
func (s *StatefulSetTester) WaitForRollingUpdate(set *apps.StatefulSet) (*apps.StatefulSet, *v1.PodList) {
|
func (s *StatefulSetTester) WaitForRollingUpdate(set *appsv1.StatefulSet) (*appsv1.StatefulSet, *v1.PodList) {
|
||||||
var pods *v1.PodList
|
var pods *v1.PodList
|
||||||
if set.Spec.UpdateStrategy.Type != apps.RollingUpdateStatefulSetStrategyType {
|
if set.Spec.UpdateStrategy.Type != appsv1.RollingUpdateStatefulSetStrategyType {
|
||||||
Failf("StatefulSet %s/%s attempt to wait for rolling update with updateStrategy %s",
|
Failf("StatefulSet %s/%s attempt to wait for rolling update with updateStrategy %s",
|
||||||
set.Namespace,
|
set.Namespace,
|
||||||
set.Name,
|
set.Name,
|
||||||
set.Spec.UpdateStrategy.Type)
|
set.Spec.UpdateStrategy.Type)
|
||||||
}
|
}
|
||||||
s.WaitForState(set, func(set2 *apps.StatefulSet, pods2 *v1.PodList) (bool, error) {
|
s.WaitForState(set, func(set2 *appsv1.StatefulSet, pods2 *v1.PodList) (bool, error) {
|
||||||
set = set2
|
set = set2
|
||||||
pods = pods2
|
pods = pods2
|
||||||
if len(pods.Items) < int(*set.Spec.Replicas) {
|
if len(pods.Items) < int(*set.Spec.Replicas) {
|
||||||
@ -415,12 +415,12 @@ func (s *StatefulSetTester) WaitForRollingUpdate(set *apps.StatefulSet) (*apps.S
|
|||||||
)
|
)
|
||||||
s.SortStatefulPods(pods)
|
s.SortStatefulPods(pods)
|
||||||
for i := range pods.Items {
|
for i := range pods.Items {
|
||||||
if pods.Items[i].Labels[apps.StatefulSetRevisionLabel] != set.Status.UpdateRevision {
|
if pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel] != set.Status.UpdateRevision {
|
||||||
e2elog.Logf("Waiting for Pod %s/%s to have revision %s update revision %s",
|
e2elog.Logf("Waiting for Pod %s/%s to have revision %s update revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
set.Status.UpdateRevision,
|
set.Status.UpdateRevision,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel])
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false, nil
|
return false, nil
|
||||||
@ -434,9 +434,9 @@ func (s *StatefulSetTester) WaitForRollingUpdate(set *apps.StatefulSet) (*apps.S
|
|||||||
// a RollingUpdateStatefulSetStrategyType with a non-nil RollingUpdate and Partition. All Pods with ordinals less
|
// a RollingUpdateStatefulSetStrategyType with a non-nil RollingUpdate and Partition. All Pods with ordinals less
|
||||||
// than or equal to the Partition are expected to be at set's current revision. All other Pods are expected to be
|
// than or equal to the Partition are expected to be at set's current revision. All other Pods are expected to be
|
||||||
// at its update revision.
|
// at its update revision.
|
||||||
func (s *StatefulSetTester) WaitForPartitionedRollingUpdate(set *apps.StatefulSet) (*apps.StatefulSet, *v1.PodList) {
|
func (s *StatefulSetTester) WaitForPartitionedRollingUpdate(set *appsv1.StatefulSet) (*appsv1.StatefulSet, *v1.PodList) {
|
||||||
var pods *v1.PodList
|
var pods *v1.PodList
|
||||||
if set.Spec.UpdateStrategy.Type != apps.RollingUpdateStatefulSetStrategyType {
|
if set.Spec.UpdateStrategy.Type != appsv1.RollingUpdateStatefulSetStrategyType {
|
||||||
Failf("StatefulSet %s/%s attempt to wait for partitioned update with updateStrategy %s",
|
Failf("StatefulSet %s/%s attempt to wait for partitioned update with updateStrategy %s",
|
||||||
set.Namespace,
|
set.Namespace,
|
||||||
set.Name,
|
set.Name,
|
||||||
@ -447,7 +447,7 @@ func (s *StatefulSetTester) WaitForPartitionedRollingUpdate(set *apps.StatefulSe
|
|||||||
set.Namespace,
|
set.Namespace,
|
||||||
set.Name)
|
set.Name)
|
||||||
}
|
}
|
||||||
s.WaitForState(set, func(set2 *apps.StatefulSet, pods2 *v1.PodList) (bool, error) {
|
s.WaitForState(set, func(set2 *appsv1.StatefulSet, pods2 *v1.PodList) (bool, error) {
|
||||||
set = set2
|
set = set2
|
||||||
pods = pods2
|
pods = pods2
|
||||||
partition := int(*set.Spec.UpdateStrategy.RollingUpdate.Partition)
|
partition := int(*set.Spec.UpdateStrategy.RollingUpdate.Partition)
|
||||||
@ -461,23 +461,23 @@ func (s *StatefulSetTester) WaitForPartitionedRollingUpdate(set *apps.StatefulSe
|
|||||||
)
|
)
|
||||||
s.SortStatefulPods(pods)
|
s.SortStatefulPods(pods)
|
||||||
for i := range pods.Items {
|
for i := range pods.Items {
|
||||||
if pods.Items[i].Labels[apps.StatefulSetRevisionLabel] != set.Status.UpdateRevision {
|
if pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel] != set.Status.UpdateRevision {
|
||||||
e2elog.Logf("Waiting for Pod %s/%s to have revision %s update revision %s",
|
e2elog.Logf("Waiting for Pod %s/%s to have revision %s update revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
set.Status.UpdateRevision,
|
set.Status.UpdateRevision,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel])
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
for i := int(*set.Spec.Replicas) - 1; i >= partition; i-- {
|
for i := int(*set.Spec.Replicas) - 1; i >= partition; i-- {
|
||||||
if pods.Items[i].Labels[apps.StatefulSetRevisionLabel] != set.Status.UpdateRevision {
|
if pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel] != set.Status.UpdateRevision {
|
||||||
e2elog.Logf("Waiting for Pod %s/%s to have revision %s update revision %s",
|
e2elog.Logf("Waiting for Pod %s/%s to have revision %s update revision %s",
|
||||||
pods.Items[i].Namespace,
|
pods.Items[i].Namespace,
|
||||||
pods.Items[i].Name,
|
pods.Items[i].Name,
|
||||||
set.Status.UpdateRevision,
|
set.Status.UpdateRevision,
|
||||||
pods.Items[i].Labels[apps.StatefulSetRevisionLabel])
|
pods.Items[i].Labels[appsv1.StatefulSetRevisionLabel])
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -487,7 +487,7 @@ func (s *StatefulSetTester) WaitForPartitionedRollingUpdate(set *apps.StatefulSe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForRunningAndNotReady waits for numStatefulPods in ss to be Running and not Ready.
|
// WaitForRunningAndNotReady waits for numStatefulPods in ss to be Running and not Ready.
|
||||||
func (s *StatefulSetTester) WaitForRunningAndNotReady(numStatefulPods int32, ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) WaitForRunningAndNotReady(numStatefulPods int32, ss *appsv1.StatefulSet) {
|
||||||
s.WaitForRunning(numStatefulPods, 0, ss)
|
s.WaitForRunning(numStatefulPods, 0, ss)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -506,12 +506,12 @@ var httpProbe = &v1.Probe{
|
|||||||
// SetHTTPProbe sets the pod template's ReadinessProbe for Nginx StatefulSet containers.
|
// SetHTTPProbe sets the pod template's ReadinessProbe for Nginx StatefulSet containers.
|
||||||
// This probe can then be controlled with BreakHTTPProbe() and RestoreHTTPProbe().
|
// This probe can then be controlled with BreakHTTPProbe() and RestoreHTTPProbe().
|
||||||
// Note that this cannot be used together with PauseNewPods().
|
// Note that this cannot be used together with PauseNewPods().
|
||||||
func (s *StatefulSetTester) SetHTTPProbe(ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) SetHTTPProbe(ss *appsv1.StatefulSet) {
|
||||||
ss.Spec.Template.Spec.Containers[0].ReadinessProbe = httpProbe
|
ss.Spec.Template.Spec.Containers[0].ReadinessProbe = httpProbe
|
||||||
}
|
}
|
||||||
|
|
||||||
// BreakHTTPProbe breaks the readiness probe for Nginx StatefulSet containers in ss.
|
// BreakHTTPProbe breaks the readiness probe for Nginx StatefulSet containers in ss.
|
||||||
func (s *StatefulSetTester) BreakHTTPProbe(ss *apps.StatefulSet) error {
|
func (s *StatefulSetTester) BreakHTTPProbe(ss *appsv1.StatefulSet) error {
|
||||||
path := httpProbe.HTTPGet.Path
|
path := httpProbe.HTTPGet.Path
|
||||||
if path == "" {
|
if path == "" {
|
||||||
return fmt.Errorf("Path expected to be not empty: %v", path)
|
return fmt.Errorf("Path expected to be not empty: %v", path)
|
||||||
@ -522,7 +522,7 @@ func (s *StatefulSetTester) BreakHTTPProbe(ss *apps.StatefulSet) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BreakPodHTTPProbe breaks the readiness probe for Nginx StatefulSet containers in one pod.
|
// BreakPodHTTPProbe breaks the readiness probe for Nginx StatefulSet containers in one pod.
|
||||||
func (s *StatefulSetTester) BreakPodHTTPProbe(ss *apps.StatefulSet, pod *v1.Pod) error {
|
func (s *StatefulSetTester) BreakPodHTTPProbe(ss *appsv1.StatefulSet, pod *v1.Pod) error {
|
||||||
path := httpProbe.HTTPGet.Path
|
path := httpProbe.HTTPGet.Path
|
||||||
if path == "" {
|
if path == "" {
|
||||||
return fmt.Errorf("Path expected to be not empty: %v", path)
|
return fmt.Errorf("Path expected to be not empty: %v", path)
|
||||||
@ -535,7 +535,7 @@ func (s *StatefulSetTester) BreakPodHTTPProbe(ss *apps.StatefulSet, pod *v1.Pod)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RestoreHTTPProbe restores the readiness probe for Nginx StatefulSet containers in ss.
|
// RestoreHTTPProbe restores the readiness probe for Nginx StatefulSet containers in ss.
|
||||||
func (s *StatefulSetTester) RestoreHTTPProbe(ss *apps.StatefulSet) error {
|
func (s *StatefulSetTester) RestoreHTTPProbe(ss *appsv1.StatefulSet) error {
|
||||||
path := httpProbe.HTTPGet.Path
|
path := httpProbe.HTTPGet.Path
|
||||||
if path == "" {
|
if path == "" {
|
||||||
return fmt.Errorf("Path expected to be not empty: %v", path)
|
return fmt.Errorf("Path expected to be not empty: %v", path)
|
||||||
@ -546,7 +546,7 @@ func (s *StatefulSetTester) RestoreHTTPProbe(ss *apps.StatefulSet) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RestorePodHTTPProbe restores the readiness probe for Nginx StatefulSet containers in pod.
|
// RestorePodHTTPProbe restores the readiness probe for Nginx StatefulSet containers in pod.
|
||||||
func (s *StatefulSetTester) RestorePodHTTPProbe(ss *apps.StatefulSet, pod *v1.Pod) error {
|
func (s *StatefulSetTester) RestorePodHTTPProbe(ss *appsv1.StatefulSet, pod *v1.Pod) error {
|
||||||
path := httpProbe.HTTPGet.Path
|
path := httpProbe.HTTPGet.Path
|
||||||
if path == "" {
|
if path == "" {
|
||||||
return fmt.Errorf("Path expected to be not empty: %v", path)
|
return fmt.Errorf("Path expected to be not empty: %v", path)
|
||||||
@ -576,7 +576,7 @@ func hasPauseProbe(pod *v1.Pod) bool {
|
|||||||
// This causes all newly-created Pods to stay Unready until they are manually resumed
|
// This causes all newly-created Pods to stay Unready until they are manually resumed
|
||||||
// with ResumeNextPod().
|
// with ResumeNextPod().
|
||||||
// Note that this cannot be used together with SetHTTPProbe().
|
// Note that this cannot be used together with SetHTTPProbe().
|
||||||
func (s *StatefulSetTester) PauseNewPods(ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) PauseNewPods(ss *appsv1.StatefulSet) {
|
||||||
ss.Spec.Template.Spec.Containers[0].ReadinessProbe = pauseProbe
|
ss.Spec.Template.Spec.Containers[0].ReadinessProbe = pauseProbe
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -585,7 +585,7 @@ func (s *StatefulSetTester) PauseNewPods(ss *apps.StatefulSet) {
|
|||||||
// It fails the test if it finds any pods that are not in phase Running,
|
// It fails the test if it finds any pods that are not in phase Running,
|
||||||
// or if it finds more than one paused Pod existing at the same time.
|
// or if it finds more than one paused Pod existing at the same time.
|
||||||
// This is a no-op if there are no paused pods.
|
// This is a no-op if there are no paused pods.
|
||||||
func (s *StatefulSetTester) ResumeNextPod(ss *apps.StatefulSet) {
|
func (s *StatefulSetTester) ResumeNextPod(ss *appsv1.StatefulSet) {
|
||||||
podList := s.GetPodList(ss)
|
podList := s.GetPodList(ss)
|
||||||
resumedPod := ""
|
resumedPod := ""
|
||||||
for _, pod := range podList.Items {
|
for _, pod := range podList.Items {
|
||||||
@ -606,7 +606,7 @@ func (s *StatefulSetTester) ResumeNextPod(ss *apps.StatefulSet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForStatusReadyReplicas waits for the ss.Status.ReadyReplicas to be equal to expectedReplicas
|
// WaitForStatusReadyReplicas waits for the ss.Status.ReadyReplicas to be equal to expectedReplicas
|
||||||
func (s *StatefulSetTester) WaitForStatusReadyReplicas(ss *apps.StatefulSet, expectedReplicas int32) {
|
func (s *StatefulSetTester) WaitForStatusReadyReplicas(ss *appsv1.StatefulSet, expectedReplicas int32) {
|
||||||
e2elog.Logf("Waiting for statefulset status.replicas updated to %d", expectedReplicas)
|
e2elog.Logf("Waiting for statefulset status.replicas updated to %d", expectedReplicas)
|
||||||
|
|
||||||
ns, name := ss.Namespace, ss.Name
|
ns, name := ss.Namespace, ss.Name
|
||||||
@ -631,7 +631,7 @@ func (s *StatefulSetTester) WaitForStatusReadyReplicas(ss *apps.StatefulSet, exp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WaitForStatusReplicas waits for the ss.Status.Replicas to be equal to expectedReplicas
|
// WaitForStatusReplicas waits for the ss.Status.Replicas to be equal to expectedReplicas
|
||||||
func (s *StatefulSetTester) WaitForStatusReplicas(ss *apps.StatefulSet, expectedReplicas int32) {
|
func (s *StatefulSetTester) WaitForStatusReplicas(ss *appsv1.StatefulSet, expectedReplicas int32) {
|
||||||
e2elog.Logf("Waiting for statefulset status.replicas updated to %d", expectedReplicas)
|
e2elog.Logf("Waiting for statefulset status.replicas updated to %d", expectedReplicas)
|
||||||
|
|
||||||
ns, name := ss.Namespace, ss.Name
|
ns, name := ss.Namespace, ss.Name
|
||||||
@ -656,7 +656,7 @@ func (s *StatefulSetTester) WaitForStatusReplicas(ss *apps.StatefulSet, expected
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CheckServiceName asserts that the ServiceName for ss is equivalent to expectedServiceName.
|
// CheckServiceName asserts that the ServiceName for ss is equivalent to expectedServiceName.
|
||||||
func (s *StatefulSetTester) CheckServiceName(ss *apps.StatefulSet, expectedServiceName string) error {
|
func (s *StatefulSetTester) CheckServiceName(ss *appsv1.StatefulSet, expectedServiceName string) error {
|
||||||
e2elog.Logf("Checking if statefulset spec.serviceName is %s", expectedServiceName)
|
e2elog.Logf("Checking if statefulset spec.serviceName is %s", expectedServiceName)
|
||||||
|
|
||||||
if expectedServiceName != ss.Spec.ServiceName {
|
if expectedServiceName != ss.Spec.ServiceName {
|
||||||
@ -767,7 +767,7 @@ func NewStatefulSetPVC(name string) v1.PersistentVolumeClaim {
|
|||||||
// NewStatefulSet creates a new NGINX StatefulSet for testing. The StatefulSet is named name, is in namespace ns,
|
// NewStatefulSet creates a new NGINX StatefulSet for testing. The StatefulSet is named name, is in namespace ns,
|
||||||
// statefulPodsMounts are the mounts that will be backed by PVs. podsMounts are the mounts that are mounted directly
|
// statefulPodsMounts are the mounts that will be backed by PVs. podsMounts are the mounts that are mounted directly
|
||||||
// to the Pod. labels are the labels that will be usd for the StatefulSet selector.
|
// to the Pod. labels are the labels that will be usd for the StatefulSet selector.
|
||||||
func NewStatefulSet(name, ns, governingSvcName string, replicas int32, statefulPodMounts []v1.VolumeMount, podMounts []v1.VolumeMount, labels map[string]string) *apps.StatefulSet {
|
func NewStatefulSet(name, ns, governingSvcName string, replicas int32, statefulPodMounts []v1.VolumeMount, podMounts []v1.VolumeMount, labels map[string]string) *appsv1.StatefulSet {
|
||||||
mounts := append(statefulPodMounts, podMounts...)
|
mounts := append(statefulPodMounts, podMounts...)
|
||||||
claims := []v1.PersistentVolumeClaim{}
|
claims := []v1.PersistentVolumeClaim{}
|
||||||
for _, m := range statefulPodMounts {
|
for _, m := range statefulPodMounts {
|
||||||
@ -786,7 +786,7 @@ func NewStatefulSet(name, ns, governingSvcName string, replicas int32, statefulP
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return &apps.StatefulSet{
|
return &appsv1.StatefulSet{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
Kind: "StatefulSet",
|
Kind: "StatefulSet",
|
||||||
APIVersion: "apps/v1",
|
APIVersion: "apps/v1",
|
||||||
@ -795,7 +795,7 @@ func NewStatefulSet(name, ns, governingSvcName string, replicas int32, statefulP
|
|||||||
Name: name,
|
Name: name,
|
||||||
Namespace: ns,
|
Namespace: ns,
|
||||||
},
|
},
|
||||||
Spec: apps.StatefulSetSpec{
|
Spec: appsv1.StatefulSetSpec{
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: labels,
|
MatchLabels: labels,
|
||||||
},
|
},
|
||||||
@ -817,7 +817,7 @@ func NewStatefulSet(name, ns, governingSvcName string, replicas int32, statefulP
|
|||||||
Volumes: vols,
|
Volumes: vols,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
|
UpdateStrategy: appsv1.StatefulSetUpdateStrategy{Type: appsv1.RollingUpdateStatefulSetStrategyType},
|
||||||
VolumeClaimTemplates: claims,
|
VolumeClaimTemplates: claims,
|
||||||
ServiceName: governingSvcName,
|
ServiceName: governingSvcName,
|
||||||
},
|
},
|
||||||
@ -825,7 +825,7 @@ func NewStatefulSet(name, ns, governingSvcName string, replicas int32, statefulP
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewStatefulSetScale creates a new StatefulSet scale subresource and returns it
|
// NewStatefulSetScale creates a new StatefulSet scale subresource and returns it
|
||||||
func NewStatefulSetScale(ss *apps.StatefulSet) *appsV1beta2.Scale {
|
func NewStatefulSetScale(ss *appsv1.StatefulSet) *appsV1beta2.Scale {
|
||||||
return &appsV1beta2.Scale{
|
return &appsV1beta2.Scale{
|
||||||
// TODO: Create a variant of ObjectMeta type that only contains the fields below.
|
// TODO: Create a variant of ObjectMeta type that only contains the fields below.
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -869,10 +869,10 @@ func (sp statefulPodsByOrdinal) Less(i, j int) bool {
|
|||||||
return getStatefulPodOrdinal(&sp[i]) < getStatefulPodOrdinal(&sp[j])
|
return getStatefulPodOrdinal(&sp[i]) < getStatefulPodOrdinal(&sp[j])
|
||||||
}
|
}
|
||||||
|
|
||||||
type updateStatefulSetFunc func(*apps.StatefulSet)
|
type updateStatefulSetFunc func(*appsv1.StatefulSet)
|
||||||
|
|
||||||
// UpdateStatefulSetWithRetries updates statfulset template with retries.
|
// UpdateStatefulSetWithRetries updates statfulset template with retries.
|
||||||
func UpdateStatefulSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateStatefulSetFunc) (statefulSet *apps.StatefulSet, err error) {
|
func UpdateStatefulSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateStatefulSetFunc) (statefulSet *appsv1.StatefulSet, err error) {
|
||||||
statefulSets := c.AppsV1().StatefulSets(namespace)
|
statefulSets := c.AppsV1().StatefulSets(namespace)
|
||||||
var updateErr error
|
var updateErr error
|
||||||
pollErr := wait.Poll(10*time.Millisecond, 1*time.Minute, func() (bool, error) {
|
pollErr := wait.Poll(10*time.Millisecond, 1*time.Minute, func() (bool, error) {
|
||||||
|
@ -47,7 +47,7 @@ import (
|
|||||||
"github.com/onsi/gomega"
|
"github.com/onsi/gomega"
|
||||||
gomegatypes "github.com/onsi/gomega/types"
|
gomegatypes "github.com/onsi/gomega/types"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
batch "k8s.io/api/batch/v1"
|
batch "k8s.io/api/batch/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
extensions "k8s.io/api/extensions/v1beta1"
|
extensions "k8s.io/api/extensions/v1beta1"
|
||||||
@ -2249,15 +2249,15 @@ func getSelectorFromRuntimeObject(obj runtime.Object) (labels.Selector, error) {
|
|||||||
return labels.SelectorFromSet(typed.Spec.Selector), nil
|
return labels.SelectorFromSet(typed.Spec.Selector), nil
|
||||||
case *extensions.ReplicaSet:
|
case *extensions.ReplicaSet:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *apps.ReplicaSet:
|
case *appsv1.ReplicaSet:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *extensions.Deployment:
|
case *extensions.Deployment:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *apps.Deployment:
|
case *appsv1.Deployment:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *extensions.DaemonSet:
|
case *extensions.DaemonSet:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *apps.DaemonSet:
|
case *appsv1.DaemonSet:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
case *batch.Job:
|
case *batch.Job:
|
||||||
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
return metav1.LabelSelectorAsSelector(typed.Spec.Selector)
|
||||||
@ -2278,7 +2278,7 @@ func getReplicasFromRuntimeObject(obj runtime.Object) (int32, error) {
|
|||||||
return *typed.Spec.Replicas, nil
|
return *typed.Spec.Replicas, nil
|
||||||
}
|
}
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *apps.ReplicaSet:
|
case *appsv1.ReplicaSet:
|
||||||
if typed.Spec.Replicas != nil {
|
if typed.Spec.Replicas != nil {
|
||||||
return *typed.Spec.Replicas, nil
|
return *typed.Spec.Replicas, nil
|
||||||
}
|
}
|
||||||
@ -2288,14 +2288,14 @@ func getReplicasFromRuntimeObject(obj runtime.Object) (int32, error) {
|
|||||||
return *typed.Spec.Replicas, nil
|
return *typed.Spec.Replicas, nil
|
||||||
}
|
}
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *apps.Deployment:
|
case *appsv1.Deployment:
|
||||||
if typed.Spec.Replicas != nil {
|
if typed.Spec.Replicas != nil {
|
||||||
return *typed.Spec.Replicas, nil
|
return *typed.Spec.Replicas, nil
|
||||||
}
|
}
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *extensions.DaemonSet:
|
case *extensions.DaemonSet:
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *apps.DaemonSet:
|
case *appsv1.DaemonSet:
|
||||||
return 0, nil
|
return 0, nil
|
||||||
case *batch.Job:
|
case *batch.Job:
|
||||||
// TODO: currently we use pause pods so that's OK. When we'll want to switch to Pods
|
// TODO: currently we use pause pods so that's OK. When we'll want to switch to Pods
|
||||||
@ -2379,11 +2379,11 @@ func DeleteResourceAndWaitForGC(c clientset.Interface, kind schema.GroupKind, ns
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type updateDSFunc func(*apps.DaemonSet)
|
type updateDSFunc func(*appsv1.DaemonSet)
|
||||||
|
|
||||||
// UpdateDaemonSetWithRetries updates daemonsets with the given applyUpdate func
|
// UpdateDaemonSetWithRetries updates daemonsets with the given applyUpdate func
|
||||||
// until it succeeds or a timeout expires.
|
// until it succeeds or a timeout expires.
|
||||||
func UpdateDaemonSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateDSFunc) (ds *apps.DaemonSet, err error) {
|
func UpdateDaemonSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateDSFunc) (ds *appsv1.DaemonSet, err error) {
|
||||||
daemonsets := c.AppsV1().DaemonSets(namespace)
|
daemonsets := c.AppsV1().DaemonSets(namespace)
|
||||||
var updateErr error
|
var updateErr error
|
||||||
pollErr := wait.PollImmediate(10*time.Millisecond, 1*time.Minute, func() (bool, error) {
|
pollErr := wait.PollImmediate(10*time.Millisecond, 1*time.Minute, func() (bool, error) {
|
||||||
@ -3432,8 +3432,8 @@ func DumpDebugInfo(c clientset.Interface, ns string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DsFromManifest reads a .json/yaml file and returns the daemonset in it.
|
// DsFromManifest reads a .json/yaml file and returns the daemonset in it.
|
||||||
func DsFromManifest(url string) (*apps.DaemonSet, error) {
|
func DsFromManifest(url string) (*appsv1.DaemonSet, error) {
|
||||||
var controller apps.DaemonSet
|
var controller appsv1.DaemonSet
|
||||||
e2elog.Logf("Parsing ds from %v", url)
|
e2elog.Logf("Parsing ds from %v", url)
|
||||||
|
|
||||||
var response *http.Response
|
var response *http.Response
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||||
rbac "k8s.io/api/rbac/v1"
|
rbac "k8s.io/api/rbac/v1"
|
||||||
@ -119,8 +119,8 @@ func IngressToManifest(ing *networkingv1beta1.Ingress, path string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StatefulSetFromManifest returns a StatefulSet from a manifest stored in fileName in the Namespace indicated by ns.
|
// StatefulSetFromManifest returns a StatefulSet from a manifest stored in fileName in the Namespace indicated by ns.
|
||||||
func StatefulSetFromManifest(fileName, ns string) (*apps.StatefulSet, error) {
|
func StatefulSetFromManifest(fileName, ns string) (*appsv1.StatefulSet, error) {
|
||||||
var ss apps.StatefulSet
|
var ss appsv1.StatefulSet
|
||||||
data, err := testfiles.Read(fileName)
|
data, err := testfiles.Read(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -143,8 +143,8 @@ func StatefulSetFromManifest(fileName, ns string) (*apps.StatefulSet, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DaemonSetFromManifest returns a DaemonSet from a manifest stored in fileName in the Namespace indicated by ns.
|
// DaemonSetFromManifest returns a DaemonSet from a manifest stored in fileName in the Namespace indicated by ns.
|
||||||
func DaemonSetFromManifest(fileName, ns string) (*apps.DaemonSet, error) {
|
func DaemonSetFromManifest(fileName, ns string) (*appsv1.DaemonSet, error) {
|
||||||
var ds apps.DaemonSet
|
var ds appsv1.DaemonSet
|
||||||
data, err := testfiles.Read(fileName)
|
data, err := testfiles.Read(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -73,7 +73,7 @@ type IngressScaleFramework struct {
|
|||||||
NumIngressesTest []int
|
NumIngressesTest []int
|
||||||
OutputFile string
|
OutputFile string
|
||||||
|
|
||||||
ScaleTestDeploy *apps.Deployment
|
ScaleTestDeploy *appsv1.Deployment
|
||||||
ScaleTestSvcs []*v1.Service
|
ScaleTestSvcs []*v1.Service
|
||||||
ScaleTestIngs []*networkingv1beta1.Ingress
|
ScaleTestIngs []*networkingv1beta1.Ingress
|
||||||
|
|
||||||
@ -438,12 +438,12 @@ func generateScaleTestServiceSpec(suffix string) *v1.Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateScaleTestBackendDeploymentSpec(numReplicas int32) *apps.Deployment {
|
func generateScaleTestBackendDeploymentSpec(numReplicas int32) *appsv1.Deployment {
|
||||||
return &apps.Deployment{
|
return &appsv1.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: scaleTestBackendName,
|
Name: scaleTestBackendName,
|
||||||
},
|
},
|
||||||
Spec: apps.DeploymentSpec{
|
Spec: appsv1.DeploymentSpec{
|
||||||
Replicas: &numReplicas,
|
Replicas: &numReplicas,
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: scaleTestLabels},
|
Selector: &metav1.LabelSelector{MatchLabels: scaleTestLabels},
|
||||||
Template: v1.PodTemplateSpec{
|
Template: v1.PodTemplateSpec{
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
|
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"github.com/onsi/gomega"
|
"github.com/onsi/gomega"
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storage "k8s.io/api/storage/v1"
|
storage "k8s.io/api/storage/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
@ -163,7 +163,7 @@ var _ = utils.SIGDescribe("Mounted volume expand", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
func waitForDeploymentToRecreatePod(client clientset.Interface, deployment *apps.Deployment) (v1.Pod, error) {
|
func waitForDeploymentToRecreatePod(client clientset.Interface, deployment *appsv1.Deployment) (v1.Pod, error) {
|
||||||
var runningPod v1.Pod
|
var runningPod v1.Pod
|
||||||
waitErr := wait.PollImmediate(10*time.Second, 5*time.Minute, func() (bool, error) {
|
waitErr := wait.PollImmediate(10*time.Second, 5*time.Minute, func() (bool, error) {
|
||||||
podList, err := e2edeploy.GetPodsForDeployment(client, deployment)
|
podList, err := e2edeploy.GetPodsForDeployment(client, deployment)
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
"github.com/vmware/govmomi/object"
|
"github.com/vmware/govmomi/object"
|
||||||
vimtypes "github.com/vmware/govmomi/vim25/types"
|
vimtypes "github.com/vmware/govmomi/vim25/types"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
@ -144,7 +144,7 @@ var _ = utils.SIGDescribe("Node Poweroff [Feature:vsphere] [Slow] [Disruptive]",
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Wait until the pod failed over to a different node, or time out after 3 minutes
|
// Wait until the pod failed over to a different node, or time out after 3 minutes
|
||||||
func waitForPodToFailover(client clientset.Interface, deployment *apps.Deployment, oldNode string) (string, error) {
|
func waitForPodToFailover(client clientset.Interface, deployment *appsv1.Deployment, oldNode string) (string, error) {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
newNode string
|
newNode string
|
||||||
@ -179,7 +179,7 @@ func waitForPodToFailover(client clientset.Interface, deployment *apps.Deploymen
|
|||||||
}
|
}
|
||||||
|
|
||||||
// getNodeForDeployment returns node name for the Deployment
|
// getNodeForDeployment returns node name for the Deployment
|
||||||
func getNodeForDeployment(client clientset.Interface, deployment *apps.Deployment) (string, error) {
|
func getNodeForDeployment(client clientset.Interface, deployment *appsv1.Deployment) (string, error) {
|
||||||
podList, err := e2edeploy.GetPodsForDeployment(client, deployment)
|
podList, err := e2edeploy.GetPodsForDeployment(client, deployment)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -19,7 +19,7 @@ package upgrades
|
|||||||
import (
|
import (
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
@ -33,7 +33,7 @@ import (
|
|||||||
// DaemonSetUpgradeTest tests that a DaemonSet is running before and after
|
// DaemonSetUpgradeTest tests that a DaemonSet is running before and after
|
||||||
// a cluster upgrade.
|
// a cluster upgrade.
|
||||||
type DaemonSetUpgradeTest struct {
|
type DaemonSetUpgradeTest struct {
|
||||||
daemonSet *apps.DaemonSet
|
daemonSet *appsv1.DaemonSet
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name returns the tracking name of the test.
|
// Name returns the tracking name of the test.
|
||||||
@ -47,12 +47,12 @@ func (t *DaemonSetUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
|
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
t.daemonSet = &apps.DaemonSet{
|
t.daemonSet = &appsv1.DaemonSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Namespace: ns.Name,
|
Namespace: ns.Name,
|
||||||
Name: daemonSetName,
|
Name: daemonSetName,
|
||||||
},
|
},
|
||||||
Spec: apps.DaemonSetSpec{
|
Spec: appsv1.DaemonSetSpec{
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: labelSet,
|
MatchLabels: labelSet,
|
||||||
},
|
},
|
||||||
|
@ -19,7 +19,7 @@ package upgrades
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
|
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
|
||||||
@ -60,7 +60,7 @@ func (t *DeploymentUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
rsClient := c.AppsV1().ReplicaSets(ns)
|
rsClient := c.AppsV1().ReplicaSets(ns)
|
||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Creating a deployment %q with 1 replica in namespace %q", deploymentName, ns))
|
ginkgo.By(fmt.Sprintf("Creating a deployment %q with 1 replica in namespace %q", deploymentName, ns))
|
||||||
d := e2edeploy.NewDeployment(deploymentName, int32(1), map[string]string{"test": "upgrade"}, "nginx", nginxImage, apps.RollingUpdateDeploymentStrategyType)
|
d := e2edeploy.NewDeployment(deploymentName, int32(1), map[string]string{"test": "upgrade"}, "nginx", nginxImage, appsv1.RollingUpdateDeploymentStrategyType)
|
||||||
deployment, err := deploymentClient.Create(d)
|
deployment, err := deploymentClient.Create(d)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ func (t *DeploymentUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
|
|
||||||
// Trigger a new rollout so that we have some history.
|
// Trigger a new rollout so that we have some history.
|
||||||
ginkgo.By(fmt.Sprintf("Triggering a new rollout for deployment %q", deploymentName))
|
ginkgo.By(fmt.Sprintf("Triggering a new rollout for deployment %q", deploymentName))
|
||||||
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deploymentName, func(update *apps.Deployment) {
|
deployment, err = e2edeploy.UpdateDeploymentWithRetries(c, ns, deploymentName, func(update *appsv1.Deployment) {
|
||||||
update.Spec.Template.Spec.Containers[0].Name = "updated-name"
|
update.Spec.Template.Spec.Containers[0].Name = "updated-name"
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
@ -159,7 +159,7 @@ func (t *DeploymentUpgradeTest) Test(f *framework.Framework, done <-chan struct{
|
|||||||
|
|
||||||
// Verify the upgraded deployment is active by scaling up the deployment by 1
|
// Verify the upgraded deployment is active by scaling up the deployment by 1
|
||||||
ginkgo.By(fmt.Sprintf("Scaling up replicaset of deployment %q by 1", deploymentName))
|
ginkgo.By(fmt.Sprintf("Scaling up replicaset of deployment %q by 1", deploymentName))
|
||||||
deploymentWithUpdatedReplicas, err := e2edeploy.UpdateDeploymentWithRetries(c, ns, deploymentName, func(deployment *apps.Deployment) {
|
deploymentWithUpdatedReplicas, err := e2edeploy.UpdateDeploymentWithRetries(c, ns, deploymentName, func(deployment *appsv1.Deployment) {
|
||||||
*deployment.Spec.Replicas = *deployment.Spec.Replicas + 1
|
*deployment.Spec.Replicas = *deployment.Spec.Replicas + 1
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
@ -89,7 +89,7 @@ func (r *ReplicaSetUpgradeTest) Test(f *framework.Framework, done <-chan struct{
|
|||||||
|
|
||||||
// Verify the upgraded RS is active by scaling up the RS to scaleNum and ensuring all pods are Ready
|
// Verify the upgraded RS is active by scaling up the RS to scaleNum and ensuring all pods are Ready
|
||||||
ginkgo.By(fmt.Sprintf("Scaling up replicaset %s to %d", rsName, scaleNum))
|
ginkgo.By(fmt.Sprintf("Scaling up replicaset %s to %d", rsName, scaleNum))
|
||||||
_, err = replicaset.UpdateReplicaSetWithRetries(c, ns, rsName, func(rs *apps.ReplicaSet) {
|
_, err = replicaset.UpdateReplicaSetWithRetries(c, ns, rsName, func(rs *appsv1.ReplicaSet) {
|
||||||
*rs.Spec.Replicas = scaleNum
|
*rs.Spec.Replicas = scaleNum
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
@ -19,7 +19,7 @@ package upgrades
|
|||||||
import (
|
import (
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/version"
|
"k8s.io/apimachinery/pkg/util/version"
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ import (
|
|||||||
type StatefulSetUpgradeTest struct {
|
type StatefulSetUpgradeTest struct {
|
||||||
tester *framework.StatefulSetTester
|
tester *framework.StatefulSetTester
|
||||||
service *v1.Service
|
service *v1.Service
|
||||||
set *apps.StatefulSet
|
set *appsv1.StatefulSet
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name returns the tracking name of the test.
|
// Name returns the tracking name of the test.
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
@ -221,7 +221,7 @@ func getKubeProxyStaticPods(c clientset.Interface) (*v1.PodList, error) {
|
|||||||
return c.CoreV1().Pods(metav1.NamespaceSystem).List(listOpts)
|
return c.CoreV1().Pods(metav1.NamespaceSystem).List(listOpts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getKubeProxyDaemonSet(c clientset.Interface) (*apps.DaemonSetList, error) {
|
func getKubeProxyDaemonSet(c clientset.Interface) (*appsv1.DaemonSetList, error) {
|
||||||
label := labels.SelectorFromSet(labels.Set(map[string]string{clusterAddonLabelKey: kubeProxyLabelName}))
|
label := labels.SelectorFromSet(labels.Set(map[string]string{clusterAddonLabelKey: kubeProxyLabelName}))
|
||||||
listOpts := metav1.ListOptions{LabelSelector: label.String()}
|
listOpts := metav1.ListOptions{LabelSelector: label.String()}
|
||||||
return c.AppsV1().DaemonSets(metav1.NamespaceSystem).List(listOpts)
|
return c.AppsV1().DaemonSets(metav1.NamespaceSystem).List(listOpts)
|
||||||
|
Loading…
Reference in New Issue
Block a user