mirror of https://github.com/k3s-io/k3s
Promote SS to apps/v1
parent
ae96999b07
commit
aba725a391
|
@ -31,9 +31,9 @@ func startStatefulSetController(ctx ControllerContext) (bool, error) {
|
||||||
}
|
}
|
||||||
go statefulset.NewStatefulSetController(
|
go statefulset.NewStatefulSetController(
|
||||||
ctx.InformerFactory.Core().V1().Pods(),
|
ctx.InformerFactory.Core().V1().Pods(),
|
||||||
ctx.InformerFactory.Apps().V1beta1().StatefulSets(),
|
ctx.InformerFactory.Apps().V1().StatefulSets(),
|
||||||
ctx.InformerFactory.Core().V1().PersistentVolumeClaims(),
|
ctx.InformerFactory.Core().V1().PersistentVolumeClaims(),
|
||||||
ctx.InformerFactory.Apps().V1beta1().ControllerRevisions(),
|
ctx.InformerFactory.Apps().V1().ControllerRevisions(),
|
||||||
ctx.ClientBuilder.ClientOrDie("statefulset-controller"),
|
ctx.ClientBuilder.ClientOrDie("statefulset-controller"),
|
||||||
).Run(1, ctx.Stop)
|
).Run(1, ctx.Stop)
|
||||||
return true, nil
|
return true, nil
|
||||||
|
|
|
@ -14,7 +14,7 @@ go_test(
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/testapi:go_default_library",
|
"//pkg/api/testapi:go_default_library",
|
||||||
"//pkg/controller:go_default_library",
|
"//pkg/controller:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||||
|
@ -35,7 +35,7 @@ go_library(
|
||||||
importpath = "k8s.io/kubernetes/pkg/controller/history",
|
importpath = "k8s.io/kubernetes/pkg/controller/history",
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/util/hash:go_default_library",
|
"//pkg/util/hash:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
|
@ -44,9 +44,9 @@ go_library(
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/rand:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/rand:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/informers/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/client-go/informers/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/listers/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/client-go/listers/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
|
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/util/retry:go_default_library",
|
"//vendor/k8s.io/client-go/util/retry:go_default_library",
|
||||||
],
|
],
|
||||||
|
|
|
@ -23,10 +23,10 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1"
|
||||||
appsinformers "k8s.io/client-go/informers/apps/v1beta1"
|
appsinformers "k8s.io/client-go/informers/apps/v1"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
appslisters "k8s.io/client-go/listers/apps/v1beta1"
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
hashutil "k8s.io/kubernetes/pkg/util/hash"
|
hashutil "k8s.io/kubernetes/pkg/util/hash"
|
||||||
|
|
||||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||||
|
@ -251,7 +251,7 @@ func (rh *realHistory) CreateControllerRevision(parent metav1.Object, revision *
|
||||||
hash := HashControllerRevision(revision, collisionCount)
|
hash := HashControllerRevision(revision, collisionCount)
|
||||||
// Update the revisions name and labels
|
// Update the revisions name and labels
|
||||||
clone.Name = ControllerRevisionName(parent.GetName(), hash)
|
clone.Name = ControllerRevisionName(parent.GetName(), hash)
|
||||||
created, err := rh.client.AppsV1beta1().ControllerRevisions(parent.GetNamespace()).Create(clone)
|
created, err := rh.client.AppsV1().ControllerRevisions(parent.GetNamespace()).Create(clone)
|
||||||
if errors.IsAlreadyExists(err) {
|
if errors.IsAlreadyExists(err) {
|
||||||
*collisionCount++
|
*collisionCount++
|
||||||
continue
|
continue
|
||||||
|
@ -267,7 +267,7 @@ func (rh *realHistory) UpdateControllerRevision(revision *apps.ControllerRevisio
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
clone.Revision = newRevision
|
clone.Revision = newRevision
|
||||||
updated, updateErr := rh.client.AppsV1beta1().ControllerRevisions(clone.Namespace).Update(clone)
|
updated, updateErr := rh.client.AppsV1().ControllerRevisions(clone.Namespace).Update(clone)
|
||||||
if updateErr == nil {
|
if updateErr == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -284,7 +284,7 @@ func (rh *realHistory) UpdateControllerRevision(revision *apps.ControllerRevisio
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rh *realHistory) DeleteControllerRevision(revision *apps.ControllerRevision) error {
|
func (rh *realHistory) DeleteControllerRevision(revision *apps.ControllerRevision) error {
|
||||||
return rh.client.AppsV1beta1().ControllerRevisions(revision.Namespace).Delete(revision.Name, nil)
|
return rh.client.AppsV1().ControllerRevisions(revision.Namespace).Delete(revision.Name, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rh *realHistory) AdoptControllerRevision(parent metav1.Object, parentKind schema.GroupVersionKind, revision *apps.ControllerRevision) (*apps.ControllerRevision, error) {
|
func (rh *realHistory) AdoptControllerRevision(parent metav1.Object, parentKind schema.GroupVersionKind, revision *apps.ControllerRevision) (*apps.ControllerRevision, error) {
|
||||||
|
@ -293,7 +293,7 @@ func (rh *realHistory) AdoptControllerRevision(parent metav1.Object, parentKind
|
||||||
return nil, fmt.Errorf("attempt to adopt revision owned by %v", owner)
|
return nil, fmt.Errorf("attempt to adopt revision owned by %v", owner)
|
||||||
}
|
}
|
||||||
// Use strategic merge patch to add an owner reference indicating a controller ref
|
// Use strategic merge patch to add an owner reference indicating a controller ref
|
||||||
return rh.client.AppsV1beta1().ControllerRevisions(parent.GetNamespace()).Patch(revision.GetName(),
|
return rh.client.AppsV1().ControllerRevisions(parent.GetNamespace()).Patch(revision.GetName(),
|
||||||
types.StrategicMergePatchType, []byte(fmt.Sprintf(
|
types.StrategicMergePatchType, []byte(fmt.Sprintf(
|
||||||
`{"metadata":{"ownerReferences":[{"apiVersion":"%s","kind":"%s","name":"%s","uid":"%s","controller":true,"blockOwnerDeletion":true}],"uid":"%s"}}`,
|
`{"metadata":{"ownerReferences":[{"apiVersion":"%s","kind":"%s","name":"%s","uid":"%s","controller":true,"blockOwnerDeletion":true}],"uid":"%s"}}`,
|
||||||
parentKind.GroupVersion().String(), parentKind.Kind,
|
parentKind.GroupVersion().String(), parentKind.Kind,
|
||||||
|
@ -302,7 +302,7 @@ func (rh *realHistory) AdoptControllerRevision(parent metav1.Object, parentKind
|
||||||
|
|
||||||
func (rh *realHistory) ReleaseControllerRevision(parent metav1.Object, revision *apps.ControllerRevision) (*apps.ControllerRevision, error) {
|
func (rh *realHistory) ReleaseControllerRevision(parent metav1.Object, revision *apps.ControllerRevision) (*apps.ControllerRevision, error) {
|
||||||
// Use strategic merge patch to add an owner reference indicating a controller ref
|
// Use strategic merge patch to add an owner reference indicating a controller ref
|
||||||
released, err := rh.client.AppsV1beta1().ControllerRevisions(revision.GetNamespace()).Patch(revision.GetName(),
|
released, err := rh.client.AppsV1().ControllerRevisions(revision.GetNamespace()).Patch(revision.GetName(),
|
||||||
types.StrategicMergePatchType,
|
types.StrategicMergePatchType,
|
||||||
[]byte(fmt.Sprintf(`{"metadata":{"ownerReferences":[{"$patch":"delete","uid":"%s"}],"uid":"%s"}}`, parent.GetUID(), revision.UID)))
|
[]byte(fmt.Sprintf(`{"metadata":{"ownerReferences":[{"$patch":"delete","uid":"%s"}],"uid":"%s"}}`, parent.GetUID(), revision.UID)))
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
"k8s.io/client-go/kubernetes/fake"
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
|
@ -56,7 +56,7 @@ func TestRealHistory_ListControllerRevisions(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
for i := range test.revisions {
|
for i := range test.revisions {
|
||||||
informer.Informer().GetIndexer().Add(test.revisions[i])
|
informer.Informer().GetIndexer().Add(test.revisions[i])
|
||||||
|
@ -157,7 +157,7 @@ func TestFakeHistory_ListControllerRevisions(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
for i := range test.revisions {
|
for i := range test.revisions {
|
||||||
informer.Informer().GetIndexer().Add(test.revisions[i])
|
informer.Informer().GetIndexer().Add(test.revisions[i])
|
||||||
|
@ -260,7 +260,7 @@ func TestRealHistory_CreateControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
history := NewHistory(client, informer.Lister())
|
history := NewHistory(client, informer.Lister())
|
||||||
|
|
||||||
|
@ -391,7 +391,7 @@ func TestFakeHistory_CreateControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
history := NewFakeHistory(informer)
|
history := NewFakeHistory(informer)
|
||||||
|
|
||||||
|
@ -549,7 +549,7 @@ func TestRealHistory_UpdateControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
history := NewHistory(client, informer.Lister())
|
history := NewHistory(client, informer.Lister())
|
||||||
var collisionCount int32
|
var collisionCount int32
|
||||||
|
@ -681,7 +681,7 @@ func TestFakeHistory_UpdateControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
history := NewFakeHistory(informer)
|
history := NewFakeHistory(informer)
|
||||||
var collisionCount int32
|
var collisionCount int32
|
||||||
|
@ -773,7 +773,7 @@ func TestRealHistory_DeleteControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
history := NewHistory(client, informer.Lister())
|
history := NewHistory(client, informer.Lister())
|
||||||
var collisionCount int32
|
var collisionCount int32
|
||||||
|
@ -884,7 +884,7 @@ func TestFakeHistory_DeleteControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
history := NewFakeHistory(informer)
|
history := NewFakeHistory(informer)
|
||||||
var collisionCount int32
|
var collisionCount int32
|
||||||
|
@ -1029,7 +1029,7 @@ func TestRealHistory_AdoptControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
|
|
||||||
history := NewHistory(client, informer.Lister())
|
history := NewHistory(client, informer.Lister())
|
||||||
|
@ -1143,7 +1143,7 @@ func TestFakeHistory_AdoptControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
|
|
||||||
history := NewFakeHistory(informer)
|
history := NewFakeHistory(informer)
|
||||||
|
@ -1296,7 +1296,7 @@ func TestRealHistory_ReleaseControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
|
|
||||||
history := NewHistory(client, informer.Lister())
|
history := NewHistory(client, informer.Lister())
|
||||||
|
@ -1426,7 +1426,7 @@ func TestFakeHistory_ReleaseControllerRevision(t *testing.T) {
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informer := informerFactory.Apps().V1beta1().ControllerRevisions()
|
informer := informerFactory.Apps().V1().ControllerRevisions()
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
history := NewFakeHistory(informer)
|
history := NewFakeHistory(informer)
|
||||||
var collisionCount int32
|
var collisionCount int32
|
||||||
|
@ -1685,7 +1685,7 @@ func newStatefulSet(replicas int, name string, uid types.UID, labels map[string]
|
||||||
return &apps.StatefulSet{
|
return &apps.StatefulSet{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
Kind: "StatefulSet",
|
Kind: "StatefulSet",
|
||||||
APIVersion: "apps/v1beta1",
|
APIVersion: "apps/v1",
|
||||||
},
|
},
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: name,
|
Name: name,
|
||||||
|
|
|
@ -21,7 +21,7 @@ go_library(
|
||||||
"//pkg/controller:go_default_library",
|
"//pkg/controller:go_default_library",
|
||||||
"//pkg/controller/history:go_default_library",
|
"//pkg/controller/history:go_default_library",
|
||||||
"//vendor/github.com/golang/glog:go_default_library",
|
"//vendor/github.com/golang/glog:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
|
@ -31,12 +31,12 @@ go_library(
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/informers/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/client-go/informers/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/informers/core/v1:go_default_library",
|
"//vendor/k8s.io/client-go/informers/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/listers/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/client-go/listers/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/listers/core/v1:go_default_library",
|
"//vendor/k8s.io/client-go/listers/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
|
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/tools/record:go_default_library",
|
"//vendor/k8s.io/client-go/tools/record:go_default_library",
|
||||||
|
@ -62,7 +62,7 @@ go_test(
|
||||||
"//pkg/apis/core/install:go_default_library",
|
"//pkg/apis/core/install:go_default_library",
|
||||||
"//pkg/controller:go_default_library",
|
"//pkg/controller:go_default_library",
|
||||||
"//pkg/controller/history:go_default_library",
|
"//pkg/controller/history:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||||
|
@ -72,11 +72,11 @@ go_test(
|
||||||
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/informers:go_default_library",
|
"//vendor/k8s.io/client-go/informers:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/informers/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/client-go/informers/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/informers/core/v1:go_default_library",
|
"//vendor/k8s.io/client-go/informers/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes/fake:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes/fake:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/listers/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/client-go/listers/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/listers/core/v1:go_default_library",
|
"//vendor/k8s.io/client-go/listers/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/testing:go_default_library",
|
"//vendor/k8s.io/client-go/testing:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
|
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
|
||||||
|
|
|
@ -20,13 +20,13 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "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"
|
||||||
errorutils "k8s.io/apimachinery/pkg/util/errors"
|
errorutils "k8s.io/apimachinery/pkg/util/errors"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
appslisters "k8s.io/client-go/listers/apps/v1beta1"
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
corelisters "k8s.io/client-go/listers/core/v1"
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
"k8s.io/client-go/tools/record"
|
"k8s.io/client-go/tools/record"
|
||||||
"k8s.io/client-go/util/retry"
|
"k8s.io/client-go/util/retry"
|
||||||
|
|
|
@ -21,19 +21,19 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
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"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
appsinformers "k8s.io/client-go/informers/apps/v1beta1"
|
appsinformers "k8s.io/client-go/informers/apps/v1"
|
||||||
coreinformers "k8s.io/client-go/informers/core/v1"
|
coreinformers "k8s.io/client-go/informers/core/v1"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
|
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
appslisters "k8s.io/client-go/listers/apps/v1beta1"
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
corelisters "k8s.io/client-go/listers/core/v1"
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
"k8s.io/client-go/tools/record"
|
"k8s.io/client-go/tools/record"
|
||||||
|
@ -298,7 +298,7 @@ func (ssc *StatefulSetController) getPodsForStatefulSet(set *apps.StatefulSet, s
|
||||||
// If any adoptions are attempted, we should first recheck for deletion with
|
// If any adoptions are attempted, we should first recheck for deletion with
|
||||||
// an uncached quorum read sometime after listing Pods (see #42639).
|
// an uncached quorum read sometime after listing Pods (see #42639).
|
||||||
canAdoptFunc := controller.RecheckDeletionTimestamp(func() (metav1.Object, error) {
|
canAdoptFunc := controller.RecheckDeletionTimestamp(func() (metav1.Object, error) {
|
||||||
fresh, err := ssc.kubeClient.AppsV1beta1().StatefulSets(set.Namespace).Get(set.Name, metav1.GetOptions{})
|
fresh, err := ssc.kubeClient.AppsV1().StatefulSets(set.Namespace).Get(set.Name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -326,7 +326,7 @@ func (ssc *StatefulSetController) adoptOrphanRevisions(set *apps.StatefulSet) er
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if hasOrphans {
|
if hasOrphans {
|
||||||
fresh, err := ssc.kubeClient.AppsV1beta1().StatefulSets(set.Namespace).Get(set.Name, metav1.GetOptions{})
|
fresh, err := ssc.kubeClient.AppsV1().StatefulSets(set.Namespace).Get(set.Name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "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"
|
||||||
"k8s.io/client-go/tools/record"
|
"k8s.io/client-go/tools/record"
|
||||||
|
@ -269,8 +269,7 @@ func (ssc *defaultStatefulSetControl) updateStatefulSet(
|
||||||
|
|
||||||
// set the generation, and revisions in the returned status
|
// set the generation, and revisions in the returned status
|
||||||
status := apps.StatefulSetStatus{}
|
status := apps.StatefulSetStatus{}
|
||||||
status.ObservedGeneration = new(int64)
|
status.ObservedGeneration = set.Generation
|
||||||
*status.ObservedGeneration = set.Generation
|
|
||||||
status.CurrentRevision = currentRevision.Name
|
status.CurrentRevision = currentRevision.Name
|
||||||
status.UpdateRevision = updateRevision.Name
|
status.UpdateRevision = updateRevision.Name
|
||||||
status.CollisionCount = new(int32)
|
status.CollisionCount = new(int32)
|
||||||
|
|
|
@ -28,17 +28,17 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "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"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
appsinformers "k8s.io/client-go/informers/apps/v1beta1"
|
appsinformers "k8s.io/client-go/informers/apps/v1"
|
||||||
coreinformers "k8s.io/client-go/informers/core/v1"
|
coreinformers "k8s.io/client-go/informers/core/v1"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/kubernetes/fake"
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
appslisters "k8s.io/client-go/listers/apps/v1beta1"
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
corelisters "k8s.io/client-go/listers/core/v1"
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
"k8s.io/client-go/tools/record"
|
"k8s.io/client-go/tools/record"
|
||||||
|
@ -51,18 +51,18 @@ type invariantFunc func(set *apps.StatefulSet, spc *fakeStatefulPodControl) erro
|
||||||
|
|
||||||
func setupController(client clientset.Interface) (*fakeStatefulPodControl, *fakeStatefulSetStatusUpdater, StatefulSetControlInterface, chan struct{}) {
|
func setupController(client clientset.Interface) (*fakeStatefulPodControl, *fakeStatefulSetStatusUpdater, StatefulSetControlInterface, chan struct{}) {
|
||||||
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
||||||
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
|
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1().StatefulSets())
|
||||||
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
|
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1().StatefulSets())
|
||||||
recorder := record.NewFakeRecorder(10)
|
recorder := record.NewFakeRecorder(10)
|
||||||
ssc := NewDefaultStatefulSetControl(spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions()), recorder)
|
ssc := NewDefaultStatefulSetControl(spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1().ControllerRevisions()), recorder)
|
||||||
|
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
cache.WaitForCacheSync(
|
cache.WaitForCacheSync(
|
||||||
stop,
|
stop,
|
||||||
informerFactory.Apps().V1beta1().StatefulSets().Informer().HasSynced,
|
informerFactory.Apps().V1().StatefulSets().Informer().HasSynced,
|
||||||
informerFactory.Core().V1().Pods().Informer().HasSynced,
|
informerFactory.Core().V1().Pods().Informer().HasSynced,
|
||||||
informerFactory.Apps().V1beta1().ControllerRevisions().Informer().HasSynced,
|
informerFactory.Apps().V1().ControllerRevisions().Informer().HasSynced,
|
||||||
)
|
)
|
||||||
return spc, ssu, ssc, stop
|
return spc, ssu, ssc, stop
|
||||||
}
|
}
|
||||||
|
@ -452,19 +452,19 @@ func TestStatefulSetControl_getSetRevisions(t *testing.T) {
|
||||||
testFn := func(test *testcase, t *testing.T) {
|
testFn := func(test *testcase, t *testing.T) {
|
||||||
client := fake.NewSimpleClientset()
|
client := fake.NewSimpleClientset()
|
||||||
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
||||||
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
|
spc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1().StatefulSets())
|
||||||
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
|
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1().StatefulSets())
|
||||||
recorder := record.NewFakeRecorder(10)
|
recorder := record.NewFakeRecorder(10)
|
||||||
ssc := defaultStatefulSetControl{spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions()), recorder}
|
ssc := defaultStatefulSetControl{spc, ssu, history.NewFakeHistory(informerFactory.Apps().V1().ControllerRevisions()), recorder}
|
||||||
|
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
defer close(stop)
|
defer close(stop)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
cache.WaitForCacheSync(
|
cache.WaitForCacheSync(
|
||||||
stop,
|
stop,
|
||||||
informerFactory.Apps().V1beta1().StatefulSets().Informer().HasSynced,
|
informerFactory.Apps().V1().StatefulSets().Informer().HasSynced,
|
||||||
informerFactory.Core().V1().Pods().Informer().HasSynced,
|
informerFactory.Core().V1().Pods().Informer().HasSynced,
|
||||||
informerFactory.Apps().V1beta1().ControllerRevisions().Informer().HasSynced,
|
informerFactory.Apps().V1().ControllerRevisions().Informer().HasSynced,
|
||||||
)
|
)
|
||||||
test.set.Status.CollisionCount = new(int32)
|
test.set.Status.CollisionCount = new(int32)
|
||||||
for i := range test.existing {
|
for i := range test.existing {
|
||||||
|
|
|
@ -19,10 +19,10 @@ package statefulset
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
appslisters "k8s.io/client-go/listers/apps/v1beta1"
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
"k8s.io/client-go/util/retry"
|
"k8s.io/client-go/util/retry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ func (ssu *realStatefulSetStatusUpdater) UpdateStatefulSetStatus(
|
||||||
// don't wait due to limited number of clients, but backoff after the default number of steps
|
// don't wait due to limited number of clients, but backoff after the default number of steps
|
||||||
return retry.RetryOnConflict(retry.DefaultRetry, func() error {
|
return retry.RetryOnConflict(retry.DefaultRetry, func() error {
|
||||||
set.Status = *status
|
set.Status = *status
|
||||||
_, updateErr := ssu.client.AppsV1beta1().StatefulSets(set.Namespace).UpdateStatus(set)
|
_, updateErr := ssu.client.AppsV1().StatefulSets(set.Namespace).UpdateStatus(set)
|
||||||
if updateErr == nil {
|
if updateErr == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,17 +26,14 @@ import (
|
||||||
core "k8s.io/client-go/testing"
|
core "k8s.io/client-go/testing"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1"
|
||||||
"k8s.io/client-go/kubernetes/fake"
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
appslisters "k8s.io/client-go/listers/apps/v1beta1"
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestStatefulSetUpdaterUpdatesSetStatus(t *testing.T) {
|
func TestStatefulSetUpdaterUpdatesSetStatus(t *testing.T) {
|
||||||
set := newStatefulSet(3)
|
set := newStatefulSet(3)
|
||||||
status := apps.StatefulSetStatus{ObservedGeneration: func() *int64 {
|
status := apps.StatefulSetStatus{ObservedGeneration: 1, Replicas: 2}
|
||||||
i := int64(1)
|
|
||||||
return &i
|
|
||||||
}(), Replicas: 2}
|
|
||||||
fakeClient := &fake.Clientset{}
|
fakeClient := &fake.Clientset{}
|
||||||
updater := NewRealStatefulSetStatusUpdater(fakeClient, nil)
|
updater := NewRealStatefulSetStatusUpdater(fakeClient, nil)
|
||||||
fakeClient.AddReactor("update", "statefulsets", func(action core.Action) (bool, runtime.Object, error) {
|
fakeClient.AddReactor("update", "statefulsets", func(action core.Action) (bool, runtime.Object, error) {
|
||||||
|
@ -53,16 +50,13 @@ func TestStatefulSetUpdaterUpdatesSetStatus(t *testing.T) {
|
||||||
|
|
||||||
func TestStatefulSetStatusUpdaterUpdatesObservedGeneration(t *testing.T) {
|
func TestStatefulSetStatusUpdaterUpdatesObservedGeneration(t *testing.T) {
|
||||||
set := newStatefulSet(3)
|
set := newStatefulSet(3)
|
||||||
status := apps.StatefulSetStatus{ObservedGeneration: func() *int64 {
|
status := apps.StatefulSetStatus{ObservedGeneration: 3, Replicas: 2}
|
||||||
i := int64(3)
|
|
||||||
return &i
|
|
||||||
}(), Replicas: 2}
|
|
||||||
fakeClient := &fake.Clientset{}
|
fakeClient := &fake.Clientset{}
|
||||||
updater := NewRealStatefulSetStatusUpdater(fakeClient, nil)
|
updater := NewRealStatefulSetStatusUpdater(fakeClient, nil)
|
||||||
fakeClient.AddReactor("update", "statefulsets", func(action core.Action) (bool, runtime.Object, error) {
|
fakeClient.AddReactor("update", "statefulsets", func(action core.Action) (bool, runtime.Object, error) {
|
||||||
update := action.(core.UpdateAction)
|
update := action.(core.UpdateAction)
|
||||||
sts := update.GetObject().(*apps.StatefulSet)
|
sts := update.GetObject().(*apps.StatefulSet)
|
||||||
if sts.Status.ObservedGeneration == nil || *sts.Status.ObservedGeneration != int64(3) {
|
if sts.Status.ObservedGeneration != 3 {
|
||||||
t.Errorf("expected observedGeneration to be synced with generation for statefulset %q", sts.Name)
|
t.Errorf("expected observedGeneration to be synced with generation for statefulset %q", sts.Name)
|
||||||
}
|
}
|
||||||
return true, sts, nil
|
return true, sts, nil
|
||||||
|
@ -74,10 +68,7 @@ func TestStatefulSetStatusUpdaterUpdatesObservedGeneration(t *testing.T) {
|
||||||
|
|
||||||
func TestStatefulSetStatusUpdaterUpdateReplicasFailure(t *testing.T) {
|
func TestStatefulSetStatusUpdaterUpdateReplicasFailure(t *testing.T) {
|
||||||
set := newStatefulSet(3)
|
set := newStatefulSet(3)
|
||||||
status := apps.StatefulSetStatus{ObservedGeneration: func() *int64 {
|
status := apps.StatefulSetStatus{ObservedGeneration: 3, Replicas: 2}
|
||||||
i := int64(3)
|
|
||||||
return &i
|
|
||||||
}(), Replicas: 2}
|
|
||||||
fakeClient := &fake.Clientset{}
|
fakeClient := &fake.Clientset{}
|
||||||
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
|
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
|
||||||
indexer.Add(set)
|
indexer.Add(set)
|
||||||
|
@ -93,10 +84,7 @@ func TestStatefulSetStatusUpdaterUpdateReplicasFailure(t *testing.T) {
|
||||||
|
|
||||||
func TestStatefulSetStatusUpdaterUpdateReplicasConflict(t *testing.T) {
|
func TestStatefulSetStatusUpdaterUpdateReplicasConflict(t *testing.T) {
|
||||||
set := newStatefulSet(3)
|
set := newStatefulSet(3)
|
||||||
status := apps.StatefulSetStatus{ObservedGeneration: func() *int64 {
|
status := apps.StatefulSetStatus{ObservedGeneration: 3, Replicas: 2}
|
||||||
i := int64(3)
|
|
||||||
return &i
|
|
||||||
}(), Replicas: 2}
|
|
||||||
conflict := false
|
conflict := false
|
||||||
fakeClient := &fake.Clientset{}
|
fakeClient := &fake.Clientset{}
|
||||||
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
|
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
|
||||||
|
@ -122,10 +110,7 @@ func TestStatefulSetStatusUpdaterUpdateReplicasConflict(t *testing.T) {
|
||||||
|
|
||||||
func TestStatefulSetStatusUpdaterUpdateReplicasConflictFailure(t *testing.T) {
|
func TestStatefulSetStatusUpdaterUpdateReplicasConflictFailure(t *testing.T) {
|
||||||
set := newStatefulSet(3)
|
set := newStatefulSet(3)
|
||||||
status := apps.StatefulSetStatus{ObservedGeneration: func() *int64 {
|
status := apps.StatefulSetStatus{ObservedGeneration: 3, Replicas: 2}
|
||||||
i := int64(3)
|
|
||||||
return &i
|
|
||||||
}(), Replicas: 2}
|
|
||||||
fakeClient := &fake.Clientset{}
|
fakeClient := &fake.Clientset{}
|
||||||
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
|
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
|
||||||
indexer.Add(set)
|
indexer.Add(set)
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "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"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
@ -574,16 +574,16 @@ func TestGetPodsForStatefulSetRelease(t *testing.T) {
|
||||||
func newFakeStatefulSetController(initialObjects ...runtime.Object) (*StatefulSetController, *fakeStatefulPodControl) {
|
func newFakeStatefulSetController(initialObjects ...runtime.Object) (*StatefulSetController, *fakeStatefulPodControl) {
|
||||||
client := fake.NewSimpleClientset(initialObjects...)
|
client := fake.NewSimpleClientset(initialObjects...)
|
||||||
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
|
||||||
fpc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1beta1().StatefulSets())
|
fpc := newFakeStatefulPodControl(informerFactory.Core().V1().Pods(), informerFactory.Apps().V1().StatefulSets())
|
||||||
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1beta1().StatefulSets())
|
ssu := newFakeStatefulSetStatusUpdater(informerFactory.Apps().V1().StatefulSets())
|
||||||
ssc := NewStatefulSetController(
|
ssc := NewStatefulSetController(
|
||||||
informerFactory.Core().V1().Pods(),
|
informerFactory.Core().V1().Pods(),
|
||||||
informerFactory.Apps().V1beta1().StatefulSets(),
|
informerFactory.Apps().V1().StatefulSets(),
|
||||||
informerFactory.Core().V1().PersistentVolumeClaims(),
|
informerFactory.Core().V1().PersistentVolumeClaims(),
|
||||||
informerFactory.Apps().V1beta1().ControllerRevisions(),
|
informerFactory.Apps().V1().ControllerRevisions(),
|
||||||
client,
|
client,
|
||||||
)
|
)
|
||||||
ssh := history.NewFakeHistory(informerFactory.Apps().V1beta1().ControllerRevisions())
|
ssh := history.NewFakeHistory(informerFactory.Apps().V1().ControllerRevisions())
|
||||||
ssc.podListerSynced = alwaysReady
|
ssc.podListerSynced = alwaysReady
|
||||||
ssc.setListerSynced = alwaysReady
|
ssc.setListerSynced = alwaysReady
|
||||||
recorder := record.NewFakeRecorder(10)
|
recorder := record.NewFakeRecorder(10)
|
||||||
|
|
|
@ -23,7 +23,7 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "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"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
@ -363,8 +363,7 @@ func nextRevision(revisions []*apps.ControllerRevision) int64 {
|
||||||
// inconsistentStatus returns true if the ObservedGeneration of status is greater than set's
|
// inconsistentStatus returns true if the ObservedGeneration of status is greater than set's
|
||||||
// Generation or if any of the status's fields do not match those of set's status.
|
// Generation or if any of the status's fields do not match those of set's status.
|
||||||
func inconsistentStatus(set *apps.StatefulSet, status *apps.StatefulSetStatus) bool {
|
func inconsistentStatus(set *apps.StatefulSet, status *apps.StatefulSetStatus) bool {
|
||||||
return set.Status.ObservedGeneration == nil ||
|
return status.ObservedGeneration > set.Status.ObservedGeneration ||
|
||||||
*status.ObservedGeneration > *set.Status.ObservedGeneration ||
|
|
||||||
status.Replicas != set.Status.Replicas ||
|
status.Replicas != set.Status.Replicas ||
|
||||||
status.CurrentReplicas != set.Status.CurrentReplicas ||
|
status.CurrentReplicas != set.Status.CurrentReplicas ||
|
||||||
status.ReadyReplicas != set.Status.ReadyReplicas ||
|
status.ReadyReplicas != set.Status.ReadyReplicas ||
|
||||||
|
|
|
@ -28,7 +28,7 @@ import (
|
||||||
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"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
"k8s.io/kubernetes/pkg/controller/history"
|
"k8s.io/kubernetes/pkg/controller/history"
|
||||||
|
@ -340,7 +340,7 @@ func newStatefulSetWithVolumes(replicas int, name string, petMounts []v1.VolumeM
|
||||||
return &apps.StatefulSet{
|
return &apps.StatefulSet{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
Kind: "StatefulSet",
|
Kind: "StatefulSet",
|
||||||
APIVersion: "apps/v1beta1",
|
APIVersion: "apps/v1",
|
||||||
},
|
},
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: name,
|
Name: name,
|
||||||
|
|
|
@ -156,6 +156,7 @@ go_library(
|
||||||
"//vendor/github.com/golang/glog:go_default_library",
|
"//vendor/github.com/golang/glog:go_default_library",
|
||||||
"//vendor/github.com/spf13/cobra:go_default_library",
|
"//vendor/github.com/spf13/cobra:go_default_library",
|
||||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||||
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/api/autoscaling/v1:go_default_library",
|
"//vendor/k8s.io/api/autoscaling/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
||||||
|
@ -187,6 +188,7 @@ go_library(
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/watch:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/watch:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
|
"//vendor/k8s.io/client-go/kubernetes/typed/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/rest:go_default_library",
|
"//vendor/k8s.io/client-go/rest:go_default_library",
|
||||||
|
|
|
@ -22,6 +22,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
|
|
||||||
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||||
|
@ -33,6 +34,7 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/util/json"
|
"k8s.io/apimachinery/pkg/util/json"
|
||||||
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
|
clientappsv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
|
||||||
clientappsv1beta1 "k8s.io/client-go/kubernetes/typed/apps/v1beta1"
|
clientappsv1beta1 "k8s.io/client-go/kubernetes/typed/apps/v1beta1"
|
||||||
clientextv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1"
|
clientextv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
|
@ -241,7 +243,7 @@ type StatefulSetHistoryViewer struct {
|
||||||
// TODO: this should be a describer
|
// TODO: this should be a describer
|
||||||
// TODO: needs to implement detailed revision view
|
// TODO: needs to implement detailed revision view
|
||||||
func (h *StatefulSetHistoryViewer) ViewHistory(namespace, name string, revision int64) (string, error) {
|
func (h *StatefulSetHistoryViewer) ViewHistory(namespace, name string, revision int64) (string, error) {
|
||||||
_, history, err := statefulSetHistory(h.c.AppsV1beta1(), namespace, name)
|
_, history, err := statefulSetHistory(h.c.AppsV1(), namespace, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -264,6 +266,28 @@ func (h *StatefulSetHistoryViewer) ViewHistory(namespace, name string, revision
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// controlledHistories returns all ControllerRevisions in namespace that selected by selector and owned by accessor
|
||||||
|
// TODO: Rename this to controllerHistory when other controllers have been upgraded
|
||||||
|
func controlledHistoryV1(
|
||||||
|
apps clientappsv1.AppsV1Interface,
|
||||||
|
namespace string,
|
||||||
|
selector labels.Selector,
|
||||||
|
accessor metav1.Object) ([]*appsv1.ControllerRevision, error) {
|
||||||
|
var result []*appsv1.ControllerRevision
|
||||||
|
historyList, err := apps.ControllerRevisions(namespace).List(metav1.ListOptions{LabelSelector: selector.String()})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for i := range historyList.Items {
|
||||||
|
history := historyList.Items[i]
|
||||||
|
// Only add history that belongs to the API object
|
||||||
|
if metav1.IsControlledBy(&history, accessor) {
|
||||||
|
result = append(result, &history)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
// controlledHistories returns all ControllerRevisions in namespace that selected by selector and owned by accessor
|
// controlledHistories returns all ControllerRevisions in namespace that selected by selector and owned by accessor
|
||||||
func controlledHistory(
|
func controlledHistory(
|
||||||
apps clientappsv1beta1.AppsV1beta1Interface,
|
apps clientappsv1beta1.AppsV1beta1Interface,
|
||||||
|
@ -311,8 +335,8 @@ func daemonSetHistory(
|
||||||
|
|
||||||
// statefulSetHistory returns the StatefulSet named name in namespace and all ControllerRevisions in its history.
|
// statefulSetHistory returns the StatefulSet named name in namespace and all ControllerRevisions in its history.
|
||||||
func statefulSetHistory(
|
func statefulSetHistory(
|
||||||
apps clientappsv1beta1.AppsV1beta1Interface,
|
apps clientappsv1.AppsV1Interface,
|
||||||
namespace, name string) (*appsv1beta1.StatefulSet, []*appsv1beta1.ControllerRevision, error) {
|
namespace, name string) (*appsv1.StatefulSet, []*appsv1.ControllerRevision, error) {
|
||||||
sts, err := apps.StatefulSets(namespace).Get(name, metav1.GetOptions{})
|
sts, err := apps.StatefulSets(namespace).Get(name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to retrieve Statefulset %s: %s", name, err.Error())
|
return nil, nil, fmt.Errorf("failed to retrieve Statefulset %s: %s", name, err.Error())
|
||||||
|
@ -325,7 +349,7 @@ func statefulSetHistory(
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to obtain accessor for StatefulSet %s: %s", name, err.Error())
|
return nil, nil, fmt.Errorf("failed to obtain accessor for StatefulSet %s: %s", name, err.Error())
|
||||||
}
|
}
|
||||||
history, err := controlledHistory(apps, namespace, selector, accessor)
|
history, err := controlledHistoryV1(apps, namespace, selector, accessor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("unable to find history controlled by StatefulSet %s: %v", name, err)
|
return nil, nil, fmt.Errorf("unable to find history controlled by StatefulSet %s: %v", name, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
extv1beta1 "k8s.io/api/extensions/v1beta1"
|
extv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||||
|
@ -307,7 +308,7 @@ func (r *StatefulSetRollbacker) Rollback(obj runtime.Object, updatedAnnotations
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("failed to create accessor for kind %v: %s", obj.GetObjectKind(), err.Error())
|
return "", fmt.Errorf("failed to create accessor for kind %v: %s", obj.GetObjectKind(), err.Error())
|
||||||
}
|
}
|
||||||
sts, history, err := statefulSetHistory(r.c.AppsV1beta1(), accessor.GetNamespace(), accessor.GetName())
|
sts, history, err := statefulSetHistory(r.c.AppsV1(), accessor.GetNamespace(), accessor.GetName())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -315,7 +316,7 @@ func (r *StatefulSetRollbacker) Rollback(obj runtime.Object, updatedAnnotations
|
||||||
return "", fmt.Errorf("no last revision to roll back to")
|
return "", fmt.Errorf("no last revision to roll back to")
|
||||||
}
|
}
|
||||||
|
|
||||||
toHistory := findHistory(toRevision, history)
|
toHistory := findHistoryV1(toRevision, history)
|
||||||
if toHistory == nil {
|
if toHistory == nil {
|
||||||
return "", revisionNotFoundErr(toRevision)
|
return "", revisionNotFoundErr(toRevision)
|
||||||
}
|
}
|
||||||
|
@ -338,13 +339,41 @@ func (r *StatefulSetRollbacker) Rollback(obj runtime.Object, updatedAnnotations
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restore revision
|
// Restore revision
|
||||||
if _, err = r.c.AppsV1beta1().StatefulSets(sts.Namespace).Patch(sts.Name, types.StrategicMergePatchType, toHistory.Data.Raw); err != nil {
|
if _, err = r.c.AppsV1().StatefulSets(sts.Namespace).Patch(sts.Name, types.StrategicMergePatchType, toHistory.Data.Raw); err != nil {
|
||||||
return "", fmt.Errorf("failed restoring revision %d: %v", toRevision, err)
|
return "", fmt.Errorf("failed restoring revision %d: %v", toRevision, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return rollbackSuccess, nil
|
return rollbackSuccess, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: When all the controllers have been updated to use v1, rename this function findHistoryV1()->findHistory() and
|
||||||
|
// TODO: remove the original findHistory()
|
||||||
|
// findHistoryV1 returns a controllerrevision of a specific revision from the given controllerrevisions.
|
||||||
|
// It returns nil if no such controllerrevision exists.
|
||||||
|
// If toRevision is 0, the last previously used history is returned.
|
||||||
|
func findHistoryV1(toRevision int64, allHistory []*appsv1.ControllerRevision) *appsv1.ControllerRevision {
|
||||||
|
if toRevision == 0 && len(allHistory) <= 1 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the history to rollback to
|
||||||
|
var toHistory *appsv1.ControllerRevision
|
||||||
|
if toRevision == 0 {
|
||||||
|
// If toRevision == 0, find the latest revision (2nd max)
|
||||||
|
sort.Sort(historiesByRevisionV1(allHistory))
|
||||||
|
toHistory = allHistory[len(allHistory)-2]
|
||||||
|
} else {
|
||||||
|
for _, h := range allHistory {
|
||||||
|
if h.Revision == toRevision {
|
||||||
|
// If toRevision != 0, find the history with matching revision
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return toHistory
|
||||||
|
}
|
||||||
|
|
||||||
// findHistory returns a controllerrevision of a specific revision from the given controllerrevisions.
|
// findHistory returns a controllerrevision of a specific revision from the given controllerrevisions.
|
||||||
// It returns nil if no such controllerrevision exists.
|
// It returns nil if no such controllerrevision exists.
|
||||||
// If toRevision is 0, the last previously used history is returned.
|
// If toRevision is 0, the last previously used history is returned.
|
||||||
|
@ -395,3 +424,12 @@ func (h historiesByRevision) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
|
||||||
func (h historiesByRevision) Less(i, j int) bool {
|
func (h historiesByRevision) Less(i, j int) bool {
|
||||||
return h[i].Revision < h[j].Revision
|
return h[i].Revision < h[j].Revision
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: copied from daemon controller, should extract to a library
|
||||||
|
type historiesByRevisionV1 []*appsv1.ControllerRevision
|
||||||
|
|
||||||
|
func (h historiesByRevisionV1) Len() int { return len(h) }
|
||||||
|
func (h historiesByRevisionV1) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
|
||||||
|
func (h historiesByRevisionV1) Less(i, j int) bool {
|
||||||
|
return h[i].Revision < h[j].Revision
|
||||||
|
}
|
||||||
|
|
|
@ -47,8 +47,8 @@ go_library(
|
||||||
"//vendor/github.com/davecgh/go-spew/spew:go_default_library",
|
"//vendor/github.com/davecgh/go-spew/spew:go_default_library",
|
||||||
"//vendor/github.com/onsi/ginkgo:go_default_library",
|
"//vendor/github.com/onsi/ginkgo:go_default_library",
|
||||||
"//vendor/github.com/onsi/gomega:go_default_library",
|
"//vendor/github.com/onsi/gomega:go_default_library",
|
||||||
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta2:go_default_library",
|
|
||||||
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/batch/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/batch/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||||
|
|
|
@ -371,7 +371,7 @@ var _ = SIGDescribe("Network Partition [Disruptive] [Slow]", func() {
|
||||||
petMounts := []v1.VolumeMount{{Name: "datadir", MountPath: "/data/"}}
|
petMounts := []v1.VolumeMount{{Name: "datadir", MountPath: "/data/"}}
|
||||||
podMounts := []v1.VolumeMount{{Name: "home", MountPath: "/home"}}
|
podMounts := []v1.VolumeMount{{Name: "home", MountPath: "/home"}}
|
||||||
ps := framework.NewStatefulSet(psName, ns, headlessSvcName, 3, petMounts, podMounts, labels)
|
ps := framework.NewStatefulSet(psName, ns, headlessSvcName, 3, petMounts, podMounts, labels)
|
||||||
_, err := c.AppsV1beta1().StatefulSets(ns).Create(ps)
|
_, err := c.AppsV1().StatefulSets(ns).Create(ps)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
pst := framework.NewStatefulSetTester(c)
|
pst := framework.NewStatefulSetTester(c)
|
||||||
|
@ -387,7 +387,7 @@ var _ = SIGDescribe("Network Partition [Disruptive] [Slow]", func() {
|
||||||
|
|
||||||
It("should not reschedule stateful pods if there is a network partition [Slow] [Disruptive]", func() {
|
It("should not reschedule stateful pods if there is a network partition [Slow] [Disruptive]", func() {
|
||||||
ps := framework.NewStatefulSet(psName, ns, headlessSvcName, 3, []v1.VolumeMount{}, []v1.VolumeMount{}, labels)
|
ps := framework.NewStatefulSet(psName, ns, headlessSvcName, 3, []v1.VolumeMount{}, []v1.VolumeMount{}, labels)
|
||||||
_, err := c.AppsV1beta1().StatefulSets(ns).Create(ps)
|
_, err := c.AppsV1().StatefulSets(ns).Create(ps)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
pst := framework.NewStatefulSetTester(c)
|
pst := framework.NewStatefulSetTester(c)
|
||||||
|
|
|
@ -23,8 +23,7 @@ import (
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1"
|
||||||
appsv1beta2 "k8s.io/api/apps/v1beta2"
|
|
||||||
"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"
|
||||||
|
@ -95,7 +94,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.PauseNewPods(ss)
|
sst.PauseNewPods(ss)
|
||||||
|
|
||||||
_, err := c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
_, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
By("Saturating stateful set " + ss.Name)
|
By("Saturating stateful set " + ss.Name)
|
||||||
|
@ -135,7 +134,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
// Replace ss with the one returned from Create() so it has the UID.
|
// Replace ss with the one returned from Create() so it has the UID.
|
||||||
// Save Kind since it won't be populated in the returned ss.
|
// Save Kind since it won't be populated in the returned ss.
|
||||||
kind := ss.Kind
|
kind := ss.Kind
|
||||||
ss, err := c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
ss.Kind = kind
|
ss.Kind = kind
|
||||||
|
|
||||||
|
@ -215,7 +214,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.PauseNewPods(ss)
|
sst.PauseNewPods(ss)
|
||||||
|
|
||||||
_, err := c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
_, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
sst.WaitForRunning(1, 0, ss)
|
sst.WaitForRunning(1, 0, ss)
|
||||||
|
@ -248,7 +247,7 @@ 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, err := c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
sst.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
|
sst.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
|
||||||
ss = sst.WaitForStatus(ss)
|
ss = sst.WaitForStatus(ss)
|
||||||
|
@ -373,7 +372,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
}()}
|
}()}
|
||||||
}(),
|
}(),
|
||||||
}
|
}
|
||||||
ss, err := c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
sst.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
|
sst.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
|
||||||
ss = sst.WaitForStatus(ss)
|
ss = sst.WaitForStatus(ss)
|
||||||
|
@ -575,7 +574,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
ss.Spec.UpdateStrategy = apps.StatefulSetUpdateStrategy{
|
ss.Spec.UpdateStrategy = apps.StatefulSetUpdateStrategy{
|
||||||
Type: apps.OnDeleteStatefulSetStrategyType,
|
Type: apps.OnDeleteStatefulSetStrategyType,
|
||||||
}
|
}
|
||||||
ss, err := c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
sst.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
|
sst.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
|
||||||
ss = sst.WaitForStatus(ss)
|
ss = sst.WaitForStatus(ss)
|
||||||
|
@ -659,7 +658,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
ss := framework.NewStatefulSet(ssName, ns, headlessSvcName, 1, nil, nil, psLabels)
|
ss := framework.NewStatefulSet(ssName, ns, headlessSvcName, 1, nil, nil, psLabels)
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.SetHttpProbe(ss)
|
sst.SetHttpProbe(ss)
|
||||||
ss, err = c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
ss, err = c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
By("Waiting until all stateful set " + ssName + " replicas will be running in namespace " + ns)
|
By("Waiting until all stateful set " + ssName + " replicas will be running in namespace " + ns)
|
||||||
|
@ -731,7 +730,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
ss.Spec.PodManagementPolicy = apps.ParallelPodManagement
|
ss.Spec.PodManagementPolicy = apps.ParallelPodManagement
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.SetHttpProbe(ss)
|
sst.SetHttpProbe(ss)
|
||||||
ss, err := c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
ss, err := c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
By("Waiting until all stateful set " + ssName + " replicas will be running in namespace " + ns)
|
By("Waiting until all stateful set " + ssName + " replicas will be running in namespace " + ns)
|
||||||
|
@ -793,7 +792,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
statefulPodContainer := &ss.Spec.Template.Spec.Containers[0]
|
statefulPodContainer := &ss.Spec.Template.Spec.Containers[0]
|
||||||
statefulPodContainer.Ports = append(statefulPodContainer.Ports, conflictingPort)
|
statefulPodContainer.Ports = append(statefulPodContainer.Ports, conflictingPort)
|
||||||
ss.Spec.Template.Spec.NodeName = node.Name
|
ss.Spec.Template.Spec.NodeName = node.Name
|
||||||
_, err = f.ClientSet.AppsV1beta1().StatefulSets(f.Namespace.Name).Create(ss)
|
_, err = f.ClientSet.AppsV1().StatefulSets(f.Namespace.Name).Create(ss)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
By("Waiting until pod " + podName + " will start running in namespace " + f.Namespace.Name)
|
By("Waiting until pod " + podName + " will start running in namespace " + f.Namespace.Name)
|
||||||
|
@ -844,7 +843,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
return nil
|
return nil
|
||||||
}, framework.StatefulPodTimeout, 2*time.Second).Should(BeNil())
|
}, framework.StatefulPodTimeout, 2*time.Second).Should(BeNil())
|
||||||
})
|
})
|
||||||
|
/* Comment it for now until scale sub-resource is finalized in ref:pull/53679 for scale-sub resource specific comment.
|
||||||
It("should have a working scale subresource", func() {
|
It("should have a working scale subresource", func() {
|
||||||
By("Creating statefulset " + ssName + " in namespace " + ns)
|
By("Creating statefulset " + ssName + " in namespace " + ns)
|
||||||
ss := framework.NewStatefulSet(ssName, ns, headlessSvcName, 1, nil, nil, labels)
|
ss := framework.NewStatefulSet(ssName, ns, headlessSvcName, 1, nil, nil, labels)
|
||||||
|
@ -858,6 +857,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
By("getting scale subresource")
|
By("getting scale subresource")
|
||||||
scale := framework.NewStatefulSetScale(ss)
|
scale := framework.NewStatefulSetScale(ss)
|
||||||
scaleResult := &appsv1beta2.Scale{}
|
scaleResult := &appsv1beta2.Scale{}
|
||||||
|
|
||||||
err = c.AppsV1beta2().RESTClient().Get().AbsPath("/apis/apps/v1beta2").Namespace(ns).Resource("statefulsets").Name(ssName).SubResource("scale").Do().Into(scale)
|
err = c.AppsV1beta2().RESTClient().Get().AbsPath("/apis/apps/v1beta2").Namespace(ns).Resource("statefulsets").Name(ssName).SubResource("scale").Do().Into(scale)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("Failed to get scale subresource: %v", err)
|
framework.Failf("Failed to get scale subresource: %v", err)
|
||||||
|
@ -881,6 +881,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
||||||
}
|
}
|
||||||
Expect(*(ss.Spec.Replicas)).To(Equal(int32(2)))
|
Expect(*(ss.Spec.Replicas)).To(Equal(int32(2)))
|
||||||
})
|
})
|
||||||
|
*/
|
||||||
})
|
})
|
||||||
|
|
||||||
framework.KubeDescribe("Deploy clustered applications [Feature:StatefulSet] [Slow]", func() {
|
framework.KubeDescribe("Deploy clustered applications [Feature:StatefulSet] [Slow]", func() {
|
||||||
|
|
|
@ -101,7 +101,7 @@ go_library(
|
||||||
"//vendor/golang.org/x/net/websocket:go_default_library",
|
"//vendor/golang.org/x/net/websocket:go_default_library",
|
||||||
"//vendor/google.golang.org/api/compute/v1:go_default_library",
|
"//vendor/google.golang.org/api/compute/v1:go_default_library",
|
||||||
"//vendor/google.golang.org/api/googleapi:go_default_library",
|
"//vendor/google.golang.org/api/googleapi:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta2:go_default_library",
|
"//vendor/k8s.io/api/apps/v1beta2:go_default_library",
|
||||||
"//vendor/k8s.io/api/authorization/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/authorization/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
||||||
|
|
|
@ -28,7 +28,7 @@ import (
|
||||||
|
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "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"
|
||||||
|
@ -83,7 +83,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) *apps.StatefulSet {
|
||||||
ss, err := s.c.AppsV1beta1().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)
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,7 @@ func (s *StatefulSetTester) CreateStatefulSet(manifestPath, ns string) *apps.Sta
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
Logf(fmt.Sprintf("creating statefulset %v/%v with %d replicas and selector %+v", ss.Namespace, ss.Name, *(ss.Spec.Replicas), ss.Spec.Selector))
|
Logf(fmt.Sprintf("creating statefulset %v/%v with %d replicas and selector %+v", ss.Namespace, ss.Name, *(ss.Spec.Replicas), ss.Spec.Selector))
|
||||||
_, err = s.c.AppsV1beta1().StatefulSets(ns).Create(ss)
|
_, err = s.c.AppsV1().StatefulSets(ns).Create(ss)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
s.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
|
s.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
|
||||||
return ss
|
return ss
|
||||||
|
@ -245,12 +245,12 @@ func (s *StatefulSetTester) Restart(ss *apps.StatefulSet) {
|
||||||
|
|
||||||
func (s *StatefulSetTester) update(ns, name string, update func(ss *apps.StatefulSet)) *apps.StatefulSet {
|
func (s *StatefulSetTester) update(ns, name string, update func(ss *apps.StatefulSet)) *apps.StatefulSet {
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
ss, err := s.c.AppsV1beta1().StatefulSets(ns).Get(name, metav1.GetOptions{})
|
ss, err := s.c.AppsV1().StatefulSets(ns).Get(name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Failf("failed to get statefulset %q: %v", name, err)
|
Failf("failed to get statefulset %q: %v", name, err)
|
||||||
}
|
}
|
||||||
update(ss)
|
update(ss)
|
||||||
ss, err = s.c.AppsV1beta1().StatefulSets(ns).Update(ss)
|
ss, err = s.c.AppsV1().StatefulSets(ns).Update(ss)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return ss
|
return ss
|
||||||
}
|
}
|
||||||
|
@ -328,7 +328,7 @@ func (s *StatefulSetTester) WaitForRunning(numPodsRunning, numPodsReady int32, s
|
||||||
func (s *StatefulSetTester) WaitForState(ss *apps.StatefulSet, until func(*apps.StatefulSet, *v1.PodList) (bool, error)) {
|
func (s *StatefulSetTester) WaitForState(ss *apps.StatefulSet, until func(*apps.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.AppsV1beta1().StatefulSets(ss.Namespace).Get(ss.Name, metav1.GetOptions{})
|
ssGet, err := s.c.AppsV1().StatefulSets(ss.Namespace).Get(ss.Name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
@ -344,7 +344,7 @@ func (s *StatefulSetTester) WaitForState(ss *apps.StatefulSet, until func(*apps.
|
||||||
// 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 *apps.StatefulSet) *apps.StatefulSet {
|
||||||
s.WaitForState(set, func(set2 *apps.StatefulSet, pods *v1.PodList) (bool, error) {
|
s.WaitForState(set, func(set2 *apps.StatefulSet, pods *v1.PodList) (bool, error) {
|
||||||
if set2.Status.ObservedGeneration != nil && *set2.Status.ObservedGeneration >= set.Generation {
|
if set2.Status.ObservedGeneration >= set.Generation {
|
||||||
set = set2
|
set = set2
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
@ -613,11 +613,11 @@ func (s *StatefulSetTester) WaitForStatusReadyReplicas(ss *apps.StatefulSet, exp
|
||||||
ns, name := ss.Namespace, ss.Name
|
ns, name := ss.Namespace, ss.Name
|
||||||
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout,
|
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout,
|
||||||
func() (bool, error) {
|
func() (bool, error) {
|
||||||
ssGet, err := s.c.AppsV1beta1().StatefulSets(ns).Get(name, metav1.GetOptions{})
|
ssGet, err := s.c.AppsV1().StatefulSets(ns).Get(name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if *ssGet.Status.ObservedGeneration < ss.Generation {
|
if ssGet.Status.ObservedGeneration < ss.Generation {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
if ssGet.Status.ReadyReplicas != expectedReplicas {
|
if ssGet.Status.ReadyReplicas != expectedReplicas {
|
||||||
|
@ -638,11 +638,11 @@ func (s *StatefulSetTester) WaitForStatusReplicas(ss *apps.StatefulSet, expected
|
||||||
ns, name := ss.Namespace, ss.Name
|
ns, name := ss.Namespace, ss.Name
|
||||||
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout,
|
pollErr := wait.PollImmediate(StatefulSetPoll, StatefulSetTimeout,
|
||||||
func() (bool, error) {
|
func() (bool, error) {
|
||||||
ssGet, err := s.c.AppsV1beta1().StatefulSets(ns).Get(name, metav1.GetOptions{})
|
ssGet, err := s.c.AppsV1().StatefulSets(ns).Get(name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if *ssGet.Status.ObservedGeneration < ss.Generation {
|
if ssGet.Status.ObservedGeneration < ss.Generation {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
if ssGet.Status.Replicas != expectedReplicas {
|
if ssGet.Status.Replicas != expectedReplicas {
|
||||||
|
@ -676,7 +676,7 @@ func (s *StatefulSetTester) SortStatefulPods(pods *v1.PodList) {
|
||||||
// DeleteAllStatefulSets deletes all StatefulSet API Objects in Namespace ns.
|
// DeleteAllStatefulSets deletes all StatefulSet API Objects in Namespace ns.
|
||||||
func DeleteAllStatefulSets(c clientset.Interface, ns string) {
|
func DeleteAllStatefulSets(c clientset.Interface, ns string) {
|
||||||
sst := &StatefulSetTester{c: c}
|
sst := &StatefulSetTester{c: c}
|
||||||
ssList, err := c.AppsV1beta1().StatefulSets(ns).List(metav1.ListOptions{LabelSelector: labels.Everything().String()})
|
ssList, err := c.AppsV1().StatefulSets(ns).List(metav1.ListOptions{LabelSelector: labels.Everything().String()})
|
||||||
ExpectNoError(err)
|
ExpectNoError(err)
|
||||||
|
|
||||||
// Scale down each statefulset, then delete it completely.
|
// Scale down each statefulset, then delete it completely.
|
||||||
|
@ -692,7 +692,7 @@ func DeleteAllStatefulSets(c clientset.Interface, ns string) {
|
||||||
Logf("Deleting statefulset %v", ss.Name)
|
Logf("Deleting statefulset %v", ss.Name)
|
||||||
// Use OrphanDependents=false so it's deleted synchronously.
|
// Use OrphanDependents=false so it's deleted synchronously.
|
||||||
// We already made sure the Pods are gone inside Scale().
|
// We already made sure the Pods are gone inside Scale().
|
||||||
if err := c.AppsV1beta1().StatefulSets(ss.Namespace).Delete(ss.Name, &metav1.DeleteOptions{OrphanDependents: new(bool)}); err != nil {
|
if err := c.AppsV1().StatefulSets(ss.Namespace).Delete(ss.Name, &metav1.DeleteOptions{OrphanDependents: new(bool)}); err != nil {
|
||||||
errList = append(errList, fmt.Sprintf("%v", err))
|
errList = append(errList, fmt.Sprintf("%v", err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -790,7 +790,7 @@ func NewStatefulSet(name, ns, governingSvcName string, replicas int32, statefulP
|
||||||
return &apps.StatefulSet{
|
return &apps.StatefulSet{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
Kind: "StatefulSet",
|
Kind: "StatefulSet",
|
||||||
APIVersion: "apps/v1beta1",
|
APIVersion: "apps/v1",
|
||||||
},
|
},
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: name,
|
Name: name,
|
||||||
|
@ -872,7 +872,7 @@ func (sp statefulPodsByOrdinal) Less(i, j int) bool {
|
||||||
type updateStatefulSetFunc func(*apps.StatefulSet)
|
type updateStatefulSetFunc func(*apps.StatefulSet)
|
||||||
|
|
||||||
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 *apps.StatefulSet, err error) {
|
||||||
statefulSets := c.AppsV1beta1().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) {
|
||||||
if statefulSet, err = statefulSets.Get(name, metav1.GetOptions{}); err != nil {
|
if statefulSet, err = statefulSets.Get(name, metav1.GetOptions{}); err != nil {
|
||||||
|
|
|
@ -122,7 +122,7 @@ func verifyExpectedRcsExistAndGetExpectedPods(c clientset.Interface) ([]string,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
psList, err := c.AppsV1beta1().StatefulSets(metav1.NamespaceSystem).List(options)
|
psList, err := c.AppsV1().StatefulSets(metav1.NamespaceSystem).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ go_library(
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/legacyscheme:go_default_library",
|
"//pkg/api/legacyscheme:go_default_library",
|
||||||
"//test/e2e/generated:go_default_library",
|
"//test/e2e/generated:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
|
|
|
@ -17,7 +17,7 @@ limitations under the License.
|
||||||
package manifest
|
package manifest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "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"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
|
@ -44,7 +44,7 @@ go_library(
|
||||||
"//vendor/github.com/onsi/ginkgo:go_default_library",
|
"//vendor/github.com/onsi/ginkgo:go_default_library",
|
||||||
"//vendor/github.com/onsi/gomega:go_default_library",
|
"//vendor/github.com/onsi/gomega:go_default_library",
|
||||||
"//vendor/google.golang.org/api/googleapi:go_default_library",
|
"//vendor/google.golang.org/api/googleapi:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
|
||||||
|
|
|
@ -29,7 +29,7 @@ import (
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
extv1beta1 "k8s.io/api/extensions/v1beta1"
|
extv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||||
rbacv1beta1 "k8s.io/api/rbac/v1beta1"
|
rbacv1beta1 "k8s.io/api/rbac/v1beta1"
|
||||||
|
@ -1193,7 +1193,7 @@ func findLocalPersistentVolume(c clientset.Interface, volumePath string) (*v1.Pe
|
||||||
return nil, fmt.Errorf("Unable to find local persistent volume with path %v", volumePath)
|
return nil, fmt.Errorf("Unable to find local persistent volume with path %v", volumePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createStatefulSet(config *localTestConfig, ssReplicas int32, volumeCount int) *appsv1beta1.StatefulSet {
|
func createStatefulSet(config *localTestConfig, ssReplicas int32, volumeCount int) *appsv1.StatefulSet {
|
||||||
mounts := []v1.VolumeMount{}
|
mounts := []v1.VolumeMount{}
|
||||||
claims := []v1.PersistentVolumeClaim{}
|
claims := []v1.PersistentVolumeClaim{}
|
||||||
for i := 0; i < volumeCount; i++ {
|
for i := 0; i < volumeCount; i++ {
|
||||||
|
@ -1223,12 +1223,12 @@ func createStatefulSet(config *localTestConfig, ssReplicas int32, volumeCount in
|
||||||
}
|
}
|
||||||
|
|
||||||
labels := map[string]string{"app": "local-volume-test"}
|
labels := map[string]string{"app": "local-volume-test"}
|
||||||
spec := &appsv1beta1.StatefulSet{
|
spec := &appsv1.StatefulSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "local-volume-statefulset",
|
Name: "local-volume-statefulset",
|
||||||
Namespace: config.ns,
|
Namespace: config.ns,
|
||||||
},
|
},
|
||||||
Spec: appsv1beta1.StatefulSetSpec{
|
Spec: appsv1.StatefulSetSpec{
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: map[string]string{"app": "local-volume-test"},
|
MatchLabels: map[string]string{"app": "local-volume-test"},
|
||||||
},
|
},
|
||||||
|
@ -1253,14 +1253,14 @@ func createStatefulSet(config *localTestConfig, ssReplicas int32, volumeCount in
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
ss, err := config.client.AppsV1beta1().StatefulSets(config.ns).Create(spec)
|
ss, err := config.client.AppsV1().StatefulSets(config.ns).Create(spec)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
config.ssTester.WaitForRunningAndReady(ssReplicas, ss)
|
config.ssTester.WaitForRunningAndReady(ssReplicas, ss)
|
||||||
return ss
|
return ss
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateStatefulSet(config *localTestConfig, ss *appsv1beta1.StatefulSet) {
|
func validateStatefulSet(config *localTestConfig, ss *appsv1.StatefulSet) {
|
||||||
pods := config.ssTester.GetPodList(ss)
|
pods := config.ssTester.GetPodList(ss)
|
||||||
|
|
||||||
// Verify that each pod is on a different node
|
// Verify that each pod is on a different node
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: "apps/v1beta1"
|
apiVersion: "apps/v1"
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: cassandra
|
name: cassandra
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: apps/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: cockroachdb
|
name: cockroachdb
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: apps/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: etcd
|
name: etcd
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: apps/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: mysql
|
name: mysql
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: apps/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: mysql
|
name: mysql
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: apps/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: rd
|
name: rd
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: apps/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: zoo
|
name: zoo
|
||||||
|
|
|
@ -24,7 +24,7 @@ go_library(
|
||||||
"//test/utils/image:go_default_library",
|
"//test/utils/image:go_default_library",
|
||||||
"//vendor/github.com/onsi/ginkgo:go_default_library",
|
"//vendor/github.com/onsi/ginkgo:go_default_library",
|
||||||
"//vendor/github.com/onsi/gomega:go_default_library",
|
"//vendor/github.com/onsi/gomega:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
apps "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/util/version"
|
"k8s.io/kubernetes/pkg/util/version"
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ func (t *StatefulSetUpgradeTest) Setup(f *framework.Framework) {
|
||||||
|
|
||||||
By("Creating statefulset " + ssName + " in namespace " + ns)
|
By("Creating statefulset " + ssName + " in namespace " + ns)
|
||||||
*(t.set.Spec.Replicas) = 3
|
*(t.set.Spec.Replicas) = 3
|
||||||
_, err = f.ClientSet.AppsV1beta1().StatefulSets(ns).Create(t.set)
|
_, err = f.ClientSet.AppsV1().StatefulSets(ns).Create(t.set)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
By("Saturating stateful set " + t.set.Name)
|
By("Saturating stateful set " + t.set.Name)
|
||||||
|
|
Loading…
Reference in New Issue