Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
aba725a3
Commit
aba725a3
authored
Nov 15, 2017
by
dhilipkumars
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Promote SS to apps/v1
parent
ae96999b
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
200 additions
and
152 deletions
+200
-152
apps.go
cmd/kube-controller-manager/app/apps.go
+2
-2
BUILD
pkg/controller/history/BUILD
+4
-4
controller_history.go
pkg/controller/history/controller_history.go
+8
-8
controller_history_test.go
pkg/controller/history/controller_history_test.go
+14
-14
BUILD
pkg/controller/statefulset/BUILD
+6
-6
stateful_pod_control.go
pkg/controller/statefulset/stateful_pod_control.go
+2
-2
stateful_set.go
pkg/controller/statefulset/stateful_set.go
+5
-5
stateful_set_control.go
pkg/controller/statefulset/stateful_set_control.go
+2
-3
stateful_set_control_test.go
pkg/controller/statefulset/stateful_set_control_test.go
+13
-13
stateful_set_status_updater.go
pkg/controller/statefulset/stateful_set_status_updater.go
+3
-3
stateful_set_status_updater_test.go
...ontroller/statefulset/stateful_set_status_updater_test.go
+8
-23
stateful_set_test.go
pkg/controller/statefulset/stateful_set_test.go
+6
-6
stateful_set_utils.go
pkg/controller/statefulset/stateful_set_utils.go
+2
-3
stateful_set_utils_test.go
pkg/controller/statefulset/stateful_set_utils_test.go
+2
-2
BUILD
pkg/kubectl/BUILD
+2
-0
history.go
pkg/kubectl/history.go
+28
-4
rollback.go
pkg/kubectl/rollback.go
+41
-3
BUILD
test/e2e/apps/BUILD
+1
-1
network_partition.go
test/e2e/apps/network_partition.go
+2
-2
statefulset.go
test/e2e/apps/statefulset.go
+13
-12
BUILD
test/e2e/framework/BUILD
+1
-1
statefulset_utils.go
test/e2e/framework/statefulset_utils.go
+15
-15
influxdb.go
test/e2e/instrumentation/monitoring/influxdb.go
+1
-1
BUILD
test/e2e/manifest/BUILD
+1
-1
manifest.go
test/e2e/manifest/manifest.go
+1
-1
BUILD
test/e2e/storage/BUILD
+1
-1
persistent_volumes-local.go
test/e2e/storage/persistent_volumes-local.go
+6
-6
statefulset.yaml
.../testing-manifests/statefulset/cassandra/statefulset.yaml
+1
-1
statefulset.yaml
...esting-manifests/statefulset/cockroachdb/statefulset.yaml
+1
-1
statefulset.yaml
test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml
+1
-1
statefulset.yaml
...sting-manifests/statefulset/mysql-galera/statefulset.yaml
+1
-1
statefulset.yaml
...ting-manifests/statefulset/mysql-upgrade/statefulset.yaml
+1
-1
statefulset.yaml
.../e2e/testing-manifests/statefulset/redis/statefulset.yaml
+1
-1
statefulset.yaml
.../testing-manifests/statefulset/zookeeper/statefulset.yaml
+1
-1
BUILD
test/e2e/upgrades/apps/BUILD
+1
-1
statefulset.go
test/e2e/upgrades/apps/statefulset.go
+2
-2
No files found.
cmd/kube-controller-manager/app/apps.go
View file @
aba725a3
...
...
@@ -31,9 +31,9 @@ func startStatefulSetController(ctx ControllerContext) (bool, error) {
}
go
statefulset
.
NewStatefulSetController
(
ctx
.
InformerFactory
.
Core
()
.
V1
()
.
Pods
(),
ctx
.
InformerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
(),
ctx
.
InformerFactory
.
Apps
()
.
V1
()
.
StatefulSets
(),
ctx
.
InformerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
ctx
.
InformerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
(),
ctx
.
InformerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
(),
ctx
.
ClientBuilder
.
ClientOrDie
(
"statefulset-controller"
),
)
.
Run
(
1
,
ctx
.
Stop
)
return
true
,
nil
...
...
pkg/controller/history/BUILD
View file @
aba725a3
...
...
@@ -14,7 +14,7 @@ go_test(
deps = [
"//pkg/api/testapi:go_default_library",
"//pkg/controller:go_default_library",
"//vendor/k8s.io/api/apps/v1
beta1
:go_default_library",
"//vendor/k8s.io/api/apps/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/resource:go_default_library",
...
...
@@ -35,7 +35,7 @@ go_library(
importpath = "k8s.io/kubernetes/pkg/controller/history",
deps = [
"//pkg/util/hash:go_default_library",
"//vendor/k8s.io/api/apps/v1
beta1
: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/errors: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/types:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/rand:go_default_library",
"//vendor/k8s.io/client-go/informers/apps/v1
beta1
: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/listers/apps/v1
beta1
: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/util/retry:go_default_library",
],
...
...
pkg/controller/history/controller_history.go
View file @
aba725a3
...
...
@@ -23,10 +23,10 @@ import (
"sort"
"strconv"
apps
"k8s.io/api/apps/v1
beta1
"
appsinformers
"k8s.io/client-go/informers/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
appsinformers
"k8s.io/client-go/informers/apps/v1"
clientset
"k8s.io/client-go/kubernetes"
appslisters
"k8s.io/client-go/listers/apps/v1
beta1
"
appslisters
"k8s.io/client-go/listers/apps/v1"
hashutil
"k8s.io/kubernetes/pkg/util/hash"
apiequality
"k8s.io/apimachinery/pkg/api/equality"
...
...
@@ -251,7 +251,7 @@ func (rh *realHistory) CreateControllerRevision(parent metav1.Object, revision *
hash
:=
HashControllerRevision
(
revision
,
collisionCount
)
// Update the revisions name and labels
clone
.
Name
=
ControllerRevisionName
(
parent
.
GetName
(),
hash
)
created
,
err
:=
rh
.
client
.
AppsV1
beta1
()
.
ControllerRevisions
(
parent
.
GetNamespace
())
.
Create
(
clone
)
created
,
err
:=
rh
.
client
.
AppsV1
()
.
ControllerRevisions
(
parent
.
GetNamespace
())
.
Create
(
clone
)
if
errors
.
IsAlreadyExists
(
err
)
{
*
collisionCount
++
continue
...
...
@@ -267,7 +267,7 @@ func (rh *realHistory) UpdateControllerRevision(revision *apps.ControllerRevisio
return
nil
}
clone
.
Revision
=
newRevision
updated
,
updateErr
:=
rh
.
client
.
AppsV1
beta1
()
.
ControllerRevisions
(
clone
.
Namespace
)
.
Update
(
clone
)
updated
,
updateErr
:=
rh
.
client
.
AppsV1
()
.
ControllerRevisions
(
clone
.
Namespace
)
.
Update
(
clone
)
if
updateErr
==
nil
{
return
nil
}
...
...
@@ -284,7 +284,7 @@ func (rh *realHistory) UpdateControllerRevision(revision *apps.ControllerRevisio
}
func
(
rh
*
realHistory
)
DeleteControllerRevision
(
revision
*
apps
.
ControllerRevision
)
error
{
return
rh
.
client
.
AppsV1
beta1
()
.
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
)
{
...
...
@@ -293,7 +293,7 @@ func (rh *realHistory) AdoptControllerRevision(parent metav1.Object, parentKind
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
return
rh
.
client
.
AppsV1
beta1
()
.
ControllerRevisions
(
parent
.
GetNamespace
())
.
Patch
(
revision
.
GetName
(),
return
rh
.
client
.
AppsV1
()
.
ControllerRevisions
(
parent
.
GetNamespace
())
.
Patch
(
revision
.
GetName
(),
types
.
StrategicMergePatchType
,
[]
byte
(
fmt
.
Sprintf
(
`{"metadata":{"ownerReferences":[{"apiVersion":"%s","kind":"%s","name":"%s","uid":"%s","controller":true,"blockOwnerDeletion":true}],"uid":"%s"}}`
,
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
)
{
// Use strategic merge patch to add an owner reference indicating a controller ref
released
,
err
:=
rh
.
client
.
AppsV1
beta1
()
.
ControllerRevisions
(
revision
.
GetNamespace
())
.
Patch
(
revision
.
GetName
(),
released
,
err
:=
rh
.
client
.
AppsV1
()
.
ControllerRevisions
(
revision
.
GetNamespace
())
.
Patch
(
revision
.
GetName
(),
types
.
StrategicMergePatchType
,
[]
byte
(
fmt
.
Sprintf
(
`{"metadata":{"ownerReferences":[{"$patch":"delete","uid":"%s"}],"uid":"%s"}}`
,
parent
.
GetUID
(),
revision
.
UID
)))
...
...
pkg/controller/history/controller_history_test.go
View file @
aba725a3
...
...
@@ -23,7 +23,7 @@ import (
"reflect"
"testing"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes/fake"
...
...
@@ -56,7 +56,7 @@ func TestRealHistory_ListControllerRevisions(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
for
i
:=
range
test
.
revisions
{
informer
.
Informer
()
.
GetIndexer
()
.
Add
(
test
.
revisions
[
i
])
...
...
@@ -157,7 +157,7 @@ func TestFakeHistory_ListControllerRevisions(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
for
i
:=
range
test
.
revisions
{
informer
.
Informer
()
.
GetIndexer
()
.
Add
(
test
.
revisions
[
i
])
...
...
@@ -260,7 +260,7 @@ func TestRealHistory_CreateControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewHistory
(
client
,
informer
.
Lister
())
...
...
@@ -391,7 +391,7 @@ func TestFakeHistory_CreateControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewFakeHistory
(
informer
)
...
...
@@ -549,7 +549,7 @@ func TestRealHistory_UpdateControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewHistory
(
client
,
informer
.
Lister
())
var
collisionCount
int32
...
...
@@ -681,7 +681,7 @@ func TestFakeHistory_UpdateControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewFakeHistory
(
informer
)
var
collisionCount
int32
...
...
@@ -773,7 +773,7 @@ func TestRealHistory_DeleteControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewHistory
(
client
,
informer
.
Lister
())
var
collisionCount
int32
...
...
@@ -884,7 +884,7 @@ func TestFakeHistory_DeleteControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewFakeHistory
(
informer
)
var
collisionCount
int32
...
...
@@ -1029,7 +1029,7 @@ func TestRealHistory_AdoptControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewHistory
(
client
,
informer
.
Lister
())
...
...
@@ -1143,7 +1143,7 @@ func TestFakeHistory_AdoptControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewFakeHistory
(
informer
)
...
...
@@ -1296,7 +1296,7 @@ func TestRealHistory_ReleaseControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewHistory
(
client
,
informer
.
Lister
())
...
...
@@ -1426,7 +1426,7 @@ func TestFakeHistory_ReleaseControllerRevision(t *testing.T) {
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
informer
:=
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
informer
:=
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
informerFactory
.
WaitForCacheSync
(
stop
)
history
:=
NewFakeHistory
(
informer
)
var
collisionCount
int32
...
...
@@ -1685,7 +1685,7 @@ func newStatefulSet(replicas int, name string, uid types.UID, labels map[string]
return
&
apps
.
StatefulSet
{
TypeMeta
:
metav1
.
TypeMeta
{
Kind
:
"StatefulSet"
,
APIVersion
:
"apps/v1
beta1
"
,
APIVersion
:
"apps/v1"
,
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
name
,
...
...
pkg/controller/statefulset/BUILD
View file @
aba725a3
...
...
@@ -21,7 +21,7 @@ go_library(
"//pkg/controller:go_default_library",
"//pkg/controller/history:go_default_library",
"//vendor/github.com/golang/glog:go_default_library",
"//vendor/k8s.io/api/apps/v1
beta1
:go_default_library",
"//vendor/k8s.io/api/apps/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/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/strategicpatch:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//vendor/k8s.io/client-go/informers/apps/v1
beta1
: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/kubernetes: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/listers/apps/v1
beta1
: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/tools/cache: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/controller:go_default_library",
"//pkg/controller/history:go_default_library",
"//vendor/k8s.io/api/apps/v1
beta1
:go_default_library",
"//vendor/k8s.io/api/apps/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/resource:go_default_library",
...
...
@@ -72,11 +72,11 @@ go_test(
"//vendor/k8s.io/apimachinery/pkg/types: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/apps/v1
beta1
: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/kubernetes:go_default_library",
"//vendor/k8s.io/client-go/kubernetes/fake:go_default_library",
"//vendor/k8s.io/client-go/listers/apps/v1
beta1
: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/testing:go_default_library",
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
...
...
pkg/controller/statefulset/stateful_pod_control.go
View file @
aba725a3
...
...
@@ -20,13 +20,13 @@ import (
"fmt"
"strings"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
errorutils
"k8s.io/apimachinery/pkg/util/errors"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
clientset
"k8s.io/client-go/kubernetes"
appslisters
"k8s.io/client-go/listers/apps/v1
beta1
"
appslisters
"k8s.io/client-go/listers/apps/v1"
corelisters
"k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/retry"
...
...
pkg/controller/statefulset/stateful_set.go
View file @
aba725a3
...
...
@@ -21,19 +21,19 @@ import (
"reflect"
"time"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/wait"
appsinformers
"k8s.io/client-go/informers/apps/v1
beta1
"
appsinformers
"k8s.io/client-go/informers/apps/v1"
coreinformers
"k8s.io/client-go/informers/core/v1"
clientset
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/scheme"
v1core
"k8s.io/client-go/kubernetes/typed/core/v1"
appslisters
"k8s.io/client-go/listers/apps/v1
beta1
"
appslisters
"k8s.io/client-go/listers/apps/v1"
corelisters
"k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache"
"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
// an uncached quorum read sometime after listing Pods (see #42639).
canAdoptFunc
:=
controller
.
RecheckDeletionTimestamp
(
func
()
(
metav1
.
Object
,
error
)
{
fresh
,
err
:=
ssc
.
kubeClient
.
AppsV1
beta1
()
.
StatefulSets
(
set
.
Namespace
)
.
Get
(
set
.
Name
,
metav1
.
GetOptions
{})
fresh
,
err
:=
ssc
.
kubeClient
.
AppsV1
()
.
StatefulSets
(
set
.
Namespace
)
.
Get
(
set
.
Name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -326,7 +326,7 @@ func (ssc *StatefulSetController) adoptOrphanRevisions(set *apps.StatefulSet) er
}
}
if
hasOrphans
{
fresh
,
err
:=
ssc
.
kubeClient
.
AppsV1
beta1
()
.
StatefulSets
(
set
.
Namespace
)
.
Get
(
set
.
Name
,
metav1
.
GetOptions
{})
fresh
,
err
:=
ssc
.
kubeClient
.
AppsV1
()
.
StatefulSets
(
set
.
Namespace
)
.
Get
(
set
.
Name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
return
err
}
...
...
pkg/controller/statefulset/stateful_set_control.go
View file @
aba725a3
...
...
@@ -22,7 +22,7 @@ import (
"github.com/golang/glog"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/record"
...
...
@@ -269,8 +269,7 @@ func (ssc *defaultStatefulSetControl) updateStatefulSet(
// set the generation, and revisions in the returned status
status
:=
apps
.
StatefulSetStatus
{}
status
.
ObservedGeneration
=
new
(
int64
)
*
status
.
ObservedGeneration
=
set
.
Generation
status
.
ObservedGeneration
=
set
.
Generation
status
.
CurrentRevision
=
currentRevision
.
Name
status
.
UpdateRevision
=
updateRevision
.
Name
status
.
CollisionCount
=
new
(
int32
)
...
...
pkg/controller/statefulset/stateful_set_control_test.go
View file @
aba725a3
...
...
@@ -28,17 +28,17 @@ import (
"testing"
"time"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/informers"
appsinformers
"k8s.io/client-go/informers/apps/v1
beta1
"
appsinformers
"k8s.io/client-go/informers/apps/v1"
coreinformers
"k8s.io/client-go/informers/core/v1"
clientset
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
appslisters
"k8s.io/client-go/listers/apps/v1
beta1
"
appslisters
"k8s.io/client-go/listers/apps/v1"
corelisters
"k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache"
"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
{})
{
informerFactory
:=
informers
.
NewSharedInformerFactory
(
client
,
controller
.
NoResyncPeriodFunc
())
spc
:=
newFakeStatefulPodControl
(
informerFactory
.
Core
()
.
V1
()
.
Pods
(),
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
())
ssu
:=
newFakeStatefulSetStatusUpdater
(
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
())
spc
:=
newFakeStatefulPodControl
(
informerFactory
.
Core
()
.
V1
()
.
Pods
(),
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
())
ssu
:=
newFakeStatefulSetStatusUpdater
(
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
())
recorder
:=
record
.
NewFakeRecorder
(
10
)
ssc
:=
NewDefaultStatefulSetControl
(
spc
,
ssu
,
history
.
NewFakeHistory
(
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()),
recorder
)
ssc
:=
NewDefaultStatefulSetControl
(
spc
,
ssu
,
history
.
NewFakeHistory
(
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()),
recorder
)
stop
:=
make
(
chan
struct
{})
informerFactory
.
Start
(
stop
)
cache
.
WaitForCacheSync
(
stop
,
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
()
.
Informer
()
.
HasSynced
,
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
()
.
Informer
()
.
HasSynced
,
informerFactory
.
Core
()
.
V1
()
.
Pods
()
.
Informer
()
.
HasSynced
,
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
.
Informer
()
.
HasSynced
,
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
.
Informer
()
.
HasSynced
,
)
return
spc
,
ssu
,
ssc
,
stop
}
...
...
@@ -452,19 +452,19 @@ func TestStatefulSetControl_getSetRevisions(t *testing.T) {
testFn
:=
func
(
test
*
testcase
,
t
*
testing
.
T
)
{
client
:=
fake
.
NewSimpleClientset
()
informerFactory
:=
informers
.
NewSharedInformerFactory
(
client
,
controller
.
NoResyncPeriodFunc
())
spc
:=
newFakeStatefulPodControl
(
informerFactory
.
Core
()
.
V1
()
.
Pods
(),
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
())
ssu
:=
newFakeStatefulSetStatusUpdater
(
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
())
spc
:=
newFakeStatefulPodControl
(
informerFactory
.
Core
()
.
V1
()
.
Pods
(),
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
())
ssu
:=
newFakeStatefulSetStatusUpdater
(
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
())
recorder
:=
record
.
NewFakeRecorder
(
10
)
ssc
:=
defaultStatefulSetControl
{
spc
,
ssu
,
history
.
NewFakeHistory
(
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()),
recorder
}
ssc
:=
defaultStatefulSetControl
{
spc
,
ssu
,
history
.
NewFakeHistory
(
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()),
recorder
}
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
informerFactory
.
Start
(
stop
)
cache
.
WaitForCacheSync
(
stop
,
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
()
.
Informer
()
.
HasSynced
,
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
()
.
Informer
()
.
HasSynced
,
informerFactory
.
Core
()
.
V1
()
.
Pods
()
.
Informer
()
.
HasSynced
,
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
()
.
Informer
()
.
HasSynced
,
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
()
.
Informer
()
.
HasSynced
,
)
test
.
set
.
Status
.
CollisionCount
=
new
(
int32
)
for
i
:=
range
test
.
existing
{
...
...
pkg/controller/statefulset/stateful_set_status_updater.go
View file @
aba725a3
...
...
@@ -19,10 +19,10 @@ package statefulset
import
(
"fmt"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
clientset
"k8s.io/client-go/kubernetes"
appslisters
"k8s.io/client-go/listers/apps/v1
beta1
"
appslisters
"k8s.io/client-go/listers/apps/v1"
"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
return
retry
.
RetryOnConflict
(
retry
.
DefaultRetry
,
func
()
error
{
set
.
Status
=
*
status
_
,
updateErr
:=
ssu
.
client
.
AppsV1
beta1
()
.
StatefulSets
(
set
.
Namespace
)
.
UpdateStatus
(
set
)
_
,
updateErr
:=
ssu
.
client
.
AppsV1
()
.
StatefulSets
(
set
.
Namespace
)
.
UpdateStatus
(
set
)
if
updateErr
==
nil
{
return
nil
}
...
...
pkg/controller/statefulset/stateful_set_status_updater_test.go
View file @
aba725a3
...
...
@@ -26,17 +26,14 @@ import (
core
"k8s.io/client-go/testing"
"k8s.io/client-go/tools/cache"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/client-go/kubernetes/fake"
appslisters
"k8s.io/client-go/listers/apps/v1
beta1
"
appslisters
"k8s.io/client-go/listers/apps/v1"
)
func
TestStatefulSetUpdaterUpdatesSetStatus
(
t
*
testing
.
T
)
{
set
:=
newStatefulSet
(
3
)
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
func
()
*
int64
{
i
:=
int64
(
1
)
return
&
i
}(),
Replicas
:
2
}
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
1
,
Replicas
:
2
}
fakeClient
:=
&
fake
.
Clientset
{}
updater
:=
NewRealStatefulSetStatusUpdater
(
fakeClient
,
nil
)
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
)
{
set
:=
newStatefulSet
(
3
)
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
func
()
*
int64
{
i
:=
int64
(
3
)
return
&
i
}(),
Replicas
:
2
}
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
3
,
Replicas
:
2
}
fakeClient
:=
&
fake
.
Clientset
{}
updater
:=
NewRealStatefulSetStatusUpdater
(
fakeClient
,
nil
)
fakeClient
.
AddReactor
(
"update"
,
"statefulsets"
,
func
(
action
core
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
update
:=
action
.
(
core
.
UpdateAction
)
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
)
}
return
true
,
sts
,
nil
...
...
@@ -74,10 +68,7 @@ func TestStatefulSetStatusUpdaterUpdatesObservedGeneration(t *testing.T) {
func
TestStatefulSetStatusUpdaterUpdateReplicasFailure
(
t
*
testing
.
T
)
{
set
:=
newStatefulSet
(
3
)
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
func
()
*
int64
{
i
:=
int64
(
3
)
return
&
i
}(),
Replicas
:
2
}
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
3
,
Replicas
:
2
}
fakeClient
:=
&
fake
.
Clientset
{}
indexer
:=
cache
.
NewIndexer
(
cache
.
MetaNamespaceKeyFunc
,
cache
.
Indexers
{
cache
.
NamespaceIndex
:
cache
.
MetaNamespaceIndexFunc
})
indexer
.
Add
(
set
)
...
...
@@ -93,10 +84,7 @@ func TestStatefulSetStatusUpdaterUpdateReplicasFailure(t *testing.T) {
func
TestStatefulSetStatusUpdaterUpdateReplicasConflict
(
t
*
testing
.
T
)
{
set
:=
newStatefulSet
(
3
)
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
func
()
*
int64
{
i
:=
int64
(
3
)
return
&
i
}(),
Replicas
:
2
}
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
3
,
Replicas
:
2
}
conflict
:=
false
fakeClient
:=
&
fake
.
Clientset
{}
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
)
{
set
:=
newStatefulSet
(
3
)
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
func
()
*
int64
{
i
:=
int64
(
3
)
return
&
i
}(),
Replicas
:
2
}
status
:=
apps
.
StatefulSetStatus
{
ObservedGeneration
:
3
,
Replicas
:
2
}
fakeClient
:=
&
fake
.
Clientset
{}
indexer
:=
cache
.
NewIndexer
(
cache
.
MetaNamespaceKeyFunc
,
cache
.
Indexers
{
cache
.
NamespaceIndex
:
cache
.
MetaNamespaceIndexFunc
})
indexer
.
Add
(
set
)
...
...
pkg/controller/statefulset/stateful_set_test.go
View file @
aba725a3
...
...
@@ -20,7 +20,7 @@ import (
"sort"
"testing"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
...
...
@@ -574,16 +574,16 @@ func TestGetPodsForStatefulSetRelease(t *testing.T) {
func
newFakeStatefulSetController
(
initialObjects
...
runtime
.
Object
)
(
*
StatefulSetController
,
*
fakeStatefulPodControl
)
{
client
:=
fake
.
NewSimpleClientset
(
initialObjects
...
)
informerFactory
:=
informers
.
NewSharedInformerFactory
(
client
,
controller
.
NoResyncPeriodFunc
())
fpc
:=
newFakeStatefulPodControl
(
informerFactory
.
Core
()
.
V1
()
.
Pods
(),
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
())
ssu
:=
newFakeStatefulSetStatusUpdater
(
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
())
fpc
:=
newFakeStatefulPodControl
(
informerFactory
.
Core
()
.
V1
()
.
Pods
(),
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
())
ssu
:=
newFakeStatefulSetStatusUpdater
(
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
())
ssc
:=
NewStatefulSetController
(
informerFactory
.
Core
()
.
V1
()
.
Pods
(),
informerFactory
.
Apps
()
.
V1
beta1
()
.
StatefulSets
(),
informerFactory
.
Apps
()
.
V1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
(),
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
(),
client
,
)
ssh
:=
history
.
NewFakeHistory
(
informerFactory
.
Apps
()
.
V1
beta1
()
.
ControllerRevisions
())
ssh
:=
history
.
NewFakeHistory
(
informerFactory
.
Apps
()
.
V1
()
.
ControllerRevisions
())
ssc
.
podListerSynced
=
alwaysReady
ssc
.
setListerSynced
=
alwaysReady
recorder
:=
record
.
NewFakeRecorder
(
10
)
...
...
pkg/controller/statefulset/stateful_set_utils.go
View file @
aba725a3
...
...
@@ -23,7 +23,7 @@ import (
"regexp"
"strconv"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"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
// 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
{
return
set
.
Status
.
ObservedGeneration
==
nil
||
*
status
.
ObservedGeneration
>
*
set
.
Status
.
ObservedGeneration
||
return
status
.
ObservedGeneration
>
set
.
Status
.
ObservedGeneration
||
status
.
Replicas
!=
set
.
Status
.
Replicas
||
status
.
CurrentReplicas
!=
set
.
Status
.
CurrentReplicas
||
status
.
ReadyReplicas
!=
set
.
Status
.
ReadyReplicas
||
...
...
pkg/controller/statefulset/stateful_set_utils_test.go
View file @
aba725a3
...
...
@@ -28,7 +28,7 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
podutil
"k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/controller/history"
...
...
@@ -340,7 +340,7 @@ func newStatefulSetWithVolumes(replicas int, name string, petMounts []v1.VolumeM
return
&
apps
.
StatefulSet
{
TypeMeta
:
metav1
.
TypeMeta
{
Kind
:
"StatefulSet"
,
APIVersion
:
"apps/v1
beta1
"
,
APIVersion
:
"apps/v1"
,
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
name
,
...
...
pkg/kubectl/BUILD
View file @
aba725a3
...
...
@@ -156,6 +156,7 @@ go_library(
"//vendor/github.com/golang/glog:go_default_library",
"//vendor/github.com/spf13/cobra: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/autoscaling/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/watch: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/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/client-go/rest:go_default_library",
...
...
pkg/kubectl/history.go
View file @
aba725a3
...
...
@@ -22,6 +22,7 @@ import (
"io"
"text/tabwriter"
appsv1
"k8s.io/api/apps/v1"
appsv1beta1
"k8s.io/api/apps/v1beta1"
"k8s.io/api/core/v1"
extensionsv1beta1
"k8s.io/api/extensions/v1beta1"
...
...
@@ -33,6 +34,7 @@ import (
"k8s.io/apimachinery/pkg/util/json"
"k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/client-go/kubernetes"
clientappsv1
"k8s.io/client-go/kubernetes/typed/apps/v1"
clientappsv1beta1
"k8s.io/client-go/kubernetes/typed/apps/v1beta1"
clientextv1beta1
"k8s.io/client-go/kubernetes/typed/extensions/v1beta1"
api
"k8s.io/kubernetes/pkg/apis/core"
...
...
@@ -241,7 +243,7 @@ type StatefulSetHistoryViewer struct {
// TODO: this should be a describer
// TODO: needs to implement detailed revision view
func
(
h
*
StatefulSetHistoryViewer
)
ViewHistory
(
namespace
,
name
string
,
revision
int64
)
(
string
,
error
)
{
_
,
history
,
err
:=
statefulSetHistory
(
h
.
c
.
AppsV1
beta1
(),
namespace
,
name
)
_
,
history
,
err
:=
statefulSetHistory
(
h
.
c
.
AppsV1
(),
namespace
,
name
)
if
err
!=
nil
{
return
""
,
err
}
...
...
@@ -265,6 +267,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
func
controlledHistory
(
apps
clientappsv1beta1
.
AppsV1beta1Interface
,
namespace
string
,
...
...
@@ -311,8 +335,8 @@ func daemonSetHistory(
// statefulSetHistory returns the StatefulSet named name in namespace and all ControllerRevisions in its history.
func
statefulSetHistory
(
apps
clientappsv1
beta1
.
AppsV1beta
1Interface
,
namespace
,
name
string
)
(
*
appsv1
beta1
.
StatefulSet
,
[]
*
appsv1beta
1
.
ControllerRevision
,
error
)
{
apps
clientappsv1
.
AppsV
1Interface
,
namespace
,
name
string
)
(
*
appsv1
.
StatefulSet
,
[]
*
appsv
1
.
ControllerRevision
,
error
)
{
sts
,
err
:=
apps
.
StatefulSets
(
namespace
)
.
Get
(
name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
return
nil
,
nil
,
fmt
.
Errorf
(
"failed to retrieve Statefulset %s: %s"
,
name
,
err
.
Error
())
...
...
@@ -325,7 +349,7 @@ func statefulSetHistory(
if
err
!=
nil
{
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
:=
controlledHistory
V1
(
apps
,
namespace
,
selector
,
accessor
)
if
err
!=
nil
{
return
nil
,
nil
,
fmt
.
Errorf
(
"unable to find history controlled by StatefulSet %s: %v"
,
name
,
err
)
}
...
...
pkg/kubectl/rollback.go
View file @
aba725a3
...
...
@@ -24,6 +24,7 @@ import (
"sort"
"syscall"
appsv1
"k8s.io/api/apps/v1"
appsv1beta1
"k8s.io/api/apps/v1beta1"
"k8s.io/api/core/v1"
extv1beta1
"k8s.io/api/extensions/v1beta1"
...
...
@@ -307,7 +308,7 @@ func (r *StatefulSetRollbacker) Rollback(obj runtime.Object, updatedAnnotations
if
err
!=
nil
{
return
""
,
fmt
.
Errorf
(
"failed to create accessor for kind %v: %s"
,
obj
.
GetObjectKind
(),
err
.
Error
())
}
sts
,
history
,
err
:=
statefulSetHistory
(
r
.
c
.
AppsV1
beta1
(),
accessor
.
GetNamespace
(),
accessor
.
GetName
())
sts
,
history
,
err
:=
statefulSetHistory
(
r
.
c
.
AppsV1
(),
accessor
.
GetNamespace
(),
accessor
.
GetName
())
if
err
!=
nil
{
return
""
,
err
}
...
...
@@ -315,7 +316,7 @@ func (r *StatefulSetRollbacker) Rollback(obj runtime.Object, updatedAnnotations
return
""
,
fmt
.
Errorf
(
"no last revision to roll back to"
)
}
toHistory
:=
findHistory
(
toRevision
,
history
)
toHistory
:=
findHistory
V1
(
toRevision
,
history
)
if
toHistory
==
nil
{
return
""
,
revisionNotFoundErr
(
toRevision
)
}
...
...
@@ -338,13 +339,41 @@ func (r *StatefulSetRollbacker) Rollback(obj runtime.Object, updatedAnnotations
}
// Restore revision
if
_
,
err
=
r
.
c
.
AppsV1
beta1
()
.
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
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.
// It returns nil if no such controllerrevision exists.
// 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
{
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
}
test/e2e/apps/BUILD
View file @
aba725a3
...
...
@@ -47,8 +47,8 @@ go_library(
"//vendor/github.com/davecgh/go-spew/spew:go_default_library",
"//vendor/github.com/onsi/ginkgo: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/v1beta2: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/core/v1:go_default_library",
...
...
test/e2e/apps/network_partition.go
View file @
aba725a3
...
...
@@ -371,7 +371,7 @@ var _ = SIGDescribe("Network Partition [Disruptive] [Slow]", func() {
petMounts
:=
[]
v1
.
VolumeMount
{{
Name
:
"datadir"
,
MountPath
:
"/data/"
}}
podMounts
:=
[]
v1
.
VolumeMount
{{
Name
:
"home"
,
MountPath
:
"/home"
}}
ps
:=
framework
.
NewStatefulSet
(
psName
,
ns
,
headlessSvcName
,
3
,
petMounts
,
podMounts
,
labels
)
_
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ps
)
_
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ps
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
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
()
{
ps
:=
framework
.
NewStatefulSet
(
psName
,
ns
,
headlessSvcName
,
3
,
[]
v1
.
VolumeMount
{},
[]
v1
.
VolumeMount
{},
labels
)
_
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ps
)
_
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ps
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
pst
:=
framework
.
NewStatefulSetTester
(
c
)
...
...
test/e2e/apps/statefulset.go
View file @
aba725a3
...
...
@@ -23,8 +23,7 @@ import (
.
"github.com/onsi/ginkgo"
.
"github.com/onsi/gomega"
apps
"k8s.io/api/apps/v1beta1"
appsv1beta2
"k8s.io/api/apps/v1beta2"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
klabels
"k8s.io/apimachinery/pkg/labels"
...
...
@@ -95,7 +94,7 @@ var _ = SIGDescribe("StatefulSet", func() {
sst
:=
framework
.
NewStatefulSetTester
(
c
)
sst
.
PauseNewPods
(
ss
)
_
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
_
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
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.
// Save Kind since it won't be populated in the returned ss.
kind
:=
ss
.
Kind
ss
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
ss
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
ss
.
Kind
=
kind
...
...
@@ -215,7 +214,7 @@ var _ = SIGDescribe("StatefulSet", func() {
sst
:=
framework
.
NewStatefulSetTester
(
c
)
sst
.
PauseNewPods
(
ss
)
_
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
_
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
sst
.
WaitForRunning
(
1
,
0
,
ss
)
...
...
@@ -248,7 +247,7 @@ var _ = SIGDescribe("StatefulSet", func() {
ss
:=
framework
.
NewStatefulSet
(
"ss2"
,
ns
,
headlessSvcName
,
3
,
nil
,
nil
,
labels
)
sst
:=
framework
.
NewStatefulSetTester
(
c
)
sst
.
SetHttpProbe
(
ss
)
ss
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
ss
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
sst
.
WaitForRunningAndReady
(
*
ss
.
Spec
.
Replicas
,
ss
)
ss
=
sst
.
WaitForStatus
(
ss
)
...
...
@@ -373,7 +372,7 @@ var _ = SIGDescribe("StatefulSet", func() {
}()}
}(),
}
ss
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
ss
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
sst
.
WaitForRunningAndReady
(
*
ss
.
Spec
.
Replicas
,
ss
)
ss
=
sst
.
WaitForStatus
(
ss
)
...
...
@@ -575,7 +574,7 @@ var _ = SIGDescribe("StatefulSet", func() {
ss
.
Spec
.
UpdateStrategy
=
apps
.
StatefulSetUpdateStrategy
{
Type
:
apps
.
OnDeleteStatefulSetStrategyType
,
}
ss
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
ss
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
sst
.
WaitForRunningAndReady
(
*
ss
.
Spec
.
Replicas
,
ss
)
ss
=
sst
.
WaitForStatus
(
ss
)
...
...
@@ -659,7 +658,7 @@ var _ = SIGDescribe("StatefulSet", func() {
ss
:=
framework
.
NewStatefulSet
(
ssName
,
ns
,
headlessSvcName
,
1
,
nil
,
nil
,
psLabels
)
sst
:=
framework
.
NewStatefulSetTester
(
c
)
sst
.
SetHttpProbe
(
ss
)
ss
,
err
=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
ss
,
err
=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
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
sst
:=
framework
.
NewStatefulSetTester
(
c
)
sst
.
SetHttpProbe
(
ss
)
ss
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
ss
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
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
.
Ports
=
append
(
statefulPodContainer
.
Ports
,
conflictingPort
)
ss
.
Spec
.
Template
.
Spec
.
NodeName
=
node
.
Name
_
,
err
=
f
.
ClientSet
.
AppsV1
beta1
()
.
StatefulSets
(
f
.
Namespace
.
Name
)
.
Create
(
ss
)
_
,
err
=
f
.
ClientSet
.
AppsV1
()
.
StatefulSets
(
f
.
Namespace
.
Name
)
.
Create
(
ss
)
framework
.
ExpectNoError
(
err
)
By
(
"Waiting until pod "
+
podName
+
" will start running in namespace "
+
f
.
Namespace
.
Name
)
...
...
@@ -844,7 +843,7 @@ var _ = SIGDescribe("StatefulSet", func() {
return
nil
},
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() {
By("Creating statefulset " + ssName + " in namespace " + ns)
ss := framework.NewStatefulSet(ssName, ns, headlessSvcName, 1, nil, nil, labels)
...
...
@@ -858,6 +857,7 @@ var _ = SIGDescribe("StatefulSet", func() {
By("getting scale subresource")
scale := framework.NewStatefulSetScale(ss)
scaleResult := &appsv1beta2.Scale{}
err = c.AppsV1beta2().RESTClient().Get().AbsPath("/apis/apps/v1beta2").Namespace(ns).Resource("statefulsets").Name(ssName).SubResource("scale").Do().Into(scale)
if err != nil {
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)))
})
*/
})
framework
.
KubeDescribe
(
"Deploy clustered applications [Feature:StatefulSet] [Slow]"
,
func
()
{
...
...
test/e2e/framework/BUILD
View file @
aba725a3
...
...
@@ -101,7 +101,7 @@ go_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/googleapi:go_default_library",
"//vendor/k8s.io/api/apps/v1
beta1
: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/authorization/v1beta1:go_default_library",
"//vendor/k8s.io/api/batch/v1:go_default_library",
...
...
test/e2e/framework/statefulset_utils.go
View file @
aba725a3
...
...
@@ -28,7 +28,7 @@ import (
.
"github.com/onsi/gomega"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
appsV1beta2
"k8s.io/api/apps/v1beta2"
"k8s.io/api/core/v1"
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.
func
(
s
*
StatefulSetTester
)
GetStatefulSet
(
namespace
,
name
string
)
*
apps
.
StatefulSet
{
ss
,
err
:=
s
.
c
.
AppsV1
beta1
()
.
StatefulSets
(
namespace
)
.
Get
(
name
,
metav1
.
GetOptions
{})
ss
,
err
:=
s
.
c
.
AppsV1
()
.
StatefulSets
(
namespace
)
.
Get
(
name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
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
())
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
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
_
,
err
=
s
.
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
ss
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
s
.
WaitForRunningAndReady
(
*
ss
.
Spec
.
Replicas
,
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
{
for
i
:=
0
;
i
<
3
;
i
++
{
ss
,
err
:=
s
.
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Get
(
name
,
metav1
.
GetOptions
{})
ss
,
err
:=
s
.
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Get
(
name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
Failf
(
"failed to get statefulset %q: %v"
,
name
,
err
)
}
update
(
ss
)
ss
,
err
=
s
.
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Update
(
ss
)
ss
,
err
=
s
.
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Update
(
ss
)
if
err
==
nil
{
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
))
{
pollErr
:=
wait
.
PollImmediate
(
StatefulSetPoll
,
StatefulSetTimeout
,
func
()
(
bool
,
error
)
{
ssGet
,
err
:=
s
.
c
.
AppsV1
beta1
()
.
StatefulSets
(
ss
.
Namespace
)
.
Get
(
ss
.
Name
,
metav1
.
GetOptions
{})
ssGet
,
err
:=
s
.
c
.
AppsV1
()
.
StatefulSets
(
ss
.
Namespace
)
.
Get
(
ss
.
Name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
return
false
,
err
}
...
...
@@ -344,7 +344,7 @@ func (s *StatefulSetTester) WaitForState(ss *apps.StatefulSet, until func(*apps.
// The returned StatefulSet contains such a StatefulSetStatus
func
(
s
*
StatefulSetTester
)
WaitForStatus
(
set
*
apps
.
StatefulSet
)
*
apps
.
StatefulSet
{
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
return
true
,
nil
}
...
...
@@ -613,11 +613,11 @@ func (s *StatefulSetTester) WaitForStatusReadyReplicas(ss *apps.StatefulSet, exp
ns
,
name
:=
ss
.
Namespace
,
ss
.
Name
pollErr
:=
wait
.
PollImmediate
(
StatefulSetPoll
,
StatefulSetTimeout
,
func
()
(
bool
,
error
)
{
ssGet
,
err
:=
s
.
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Get
(
name
,
metav1
.
GetOptions
{})
ssGet
,
err
:=
s
.
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Get
(
name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
return
false
,
err
}
if
*
ssGet
.
Status
.
ObservedGeneration
<
ss
.
Generation
{
if
ssGet
.
Status
.
ObservedGeneration
<
ss
.
Generation
{
return
false
,
nil
}
if
ssGet
.
Status
.
ReadyReplicas
!=
expectedReplicas
{
...
...
@@ -638,11 +638,11 @@ func (s *StatefulSetTester) WaitForStatusReplicas(ss *apps.StatefulSet, expected
ns
,
name
:=
ss
.
Namespace
,
ss
.
Name
pollErr
:=
wait
.
PollImmediate
(
StatefulSetPoll
,
StatefulSetTimeout
,
func
()
(
bool
,
error
)
{
ssGet
,
err
:=
s
.
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Get
(
name
,
metav1
.
GetOptions
{})
ssGet
,
err
:=
s
.
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Get
(
name
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
return
false
,
err
}
if
*
ssGet
.
Status
.
ObservedGeneration
<
ss
.
Generation
{
if
ssGet
.
Status
.
ObservedGeneration
<
ss
.
Generation
{
return
false
,
nil
}
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.
func
DeleteAllStatefulSets
(
c
clientset
.
Interface
,
ns
string
)
{
sst
:=
&
StatefulSetTester
{
c
:
c
}
ssList
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
List
(
metav1
.
ListOptions
{
LabelSelector
:
labels
.
Everything
()
.
String
()})
ssList
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
ns
)
.
List
(
metav1
.
ListOptions
{
LabelSelector
:
labels
.
Everything
()
.
String
()})
ExpectNoError
(
err
)
// 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
)
// Use OrphanDependents=false so it's deleted synchronously.
// We already made sure the Pods are gone inside Scale().
if
err
:=
c
.
AppsV1
beta1
()
.
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
))
}
}
...
...
@@ -790,7 +790,7 @@ func NewStatefulSet(name, ns, governingSvcName string, replicas int32, statefulP
return
&
apps
.
StatefulSet
{
TypeMeta
:
metav1
.
TypeMeta
{
Kind
:
"StatefulSet"
,
APIVersion
:
"apps/v1
beta1
"
,
APIVersion
:
"apps/v1"
,
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
name
,
...
...
@@ -872,7 +872,7 @@ func (sp statefulPodsByOrdinal) Less(i, j int) bool {
type
updateStatefulSetFunc
func
(
*
apps
.
StatefulSet
)
func
UpdateStatefulSetWithRetries
(
c
clientset
.
Interface
,
namespace
,
name
string
,
applyUpdate
updateStatefulSetFunc
)
(
statefulSet
*
apps
.
StatefulSet
,
err
error
)
{
statefulSets
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
namespace
)
statefulSets
:=
c
.
AppsV1
()
.
StatefulSets
(
namespace
)
var
updateErr
error
pollErr
:=
wait
.
Poll
(
10
*
time
.
Millisecond
,
1
*
time
.
Minute
,
func
()
(
bool
,
error
)
{
if
statefulSet
,
err
=
statefulSets
.
Get
(
name
,
metav1
.
GetOptions
{});
err
!=
nil
{
...
...
test/e2e/instrumentation/monitoring/influxdb.go
View file @
aba725a3
...
...
@@ -122,7 +122,7 @@ func verifyExpectedRcsExistAndGetExpectedPods(c clientset.Interface) ([]string,
if
err
!=
nil
{
return
nil
,
err
}
psList
,
err
:=
c
.
AppsV1
beta1
()
.
StatefulSets
(
metav1
.
NamespaceSystem
)
.
List
(
options
)
psList
,
err
:=
c
.
AppsV1
()
.
StatefulSets
(
metav1
.
NamespaceSystem
)
.
List
(
options
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
test/e2e/manifest/BUILD
View file @
aba725a3
...
...
@@ -12,7 +12,7 @@ go_library(
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//test/e2e/generated:go_default_library",
"//vendor/k8s.io/api/apps/v1
beta1
: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/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
...
...
test/e2e/manifest/manifest.go
View file @
aba725a3
...
...
@@ -17,7 +17,7 @@ limitations under the License.
package
manifest
import
(
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
extensions
"k8s.io/api/extensions/v1beta1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
...
...
test/e2e/storage/BUILD
View file @
aba725a3
...
...
@@ -44,7 +44,7 @@ go_library(
"//vendor/github.com/onsi/ginkgo:go_default_library",
"//vendor/github.com/onsi/gomega:go_default_library",
"//vendor/google.golang.org/api/googleapi:go_default_library",
"//vendor/k8s.io/api/apps/v1
beta1
: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/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
...
...
test/e2e/storage/persistent_volumes-local.go
View file @
aba725a3
...
...
@@ -29,7 +29,7 @@ import (
.
"github.com/onsi/ginkgo"
.
"github.com/onsi/gomega"
appsv1
beta1
"k8s.io/api/apps/v1beta
1"
appsv1
"k8s.io/api/apps/v
1"
"k8s.io/api/core/v1"
extv1beta1
"k8s.io/api/extensions/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
)
}
func
createStatefulSet
(
config
*
localTestConfig
,
ssReplicas
int32
,
volumeCount
int
)
*
appsv1
beta1
.
StatefulSet
{
func
createStatefulSet
(
config
*
localTestConfig
,
ssReplicas
int32
,
volumeCount
int
)
*
appsv1
.
StatefulSet
{
mounts
:=
[]
v1
.
VolumeMount
{}
claims
:=
[]
v1
.
PersistentVolumeClaim
{}
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"
}
spec
:=
&
appsv1
beta1
.
StatefulSet
{
spec
:=
&
appsv1
.
StatefulSet
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"local-volume-statefulset"
,
Namespace
:
config
.
ns
,
},
Spec
:
appsv1
beta1
.
StatefulSetSpec
{
Spec
:
appsv1
.
StatefulSetSpec
{
Selector
:
&
metav1
.
LabelSelector
{
MatchLabels
:
map
[
string
]
string
{
"app"
:
"local-volume-test"
},
},
...
...
@@ -1253,14 +1253,14 @@ func createStatefulSet(config *localTestConfig, ssReplicas int32, volumeCount in
},
}
ss
,
err
:=
config
.
client
.
AppsV1
beta1
()
.
StatefulSets
(
config
.
ns
)
.
Create
(
spec
)
ss
,
err
:=
config
.
client
.
AppsV1
()
.
StatefulSets
(
config
.
ns
)
.
Create
(
spec
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
config
.
ssTester
.
WaitForRunningAndReady
(
ssReplicas
,
ss
)
return
ss
}
func
validateStatefulSet
(
config
*
localTestConfig
,
ss
*
appsv1
beta1
.
StatefulSet
)
{
func
validateStatefulSet
(
config
*
localTestConfig
,
ss
*
appsv1
.
StatefulSet
)
{
pods
:=
config
.
ssTester
.
GetPodList
(
ss
)
// Verify that each pod is on a different node
...
...
test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml
View file @
aba725a3
apiVersion
:
"
apps/v1
beta1
"
apiVersion
:
"
apps/v1"
kind
:
StatefulSet
metadata
:
name
:
cassandra
...
...
test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml
View file @
aba725a3
apiVersion
:
apps/v1
beta1
apiVersion
:
apps/v1
kind
:
StatefulSet
metadata
:
name
:
cockroachdb
...
...
test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml
View file @
aba725a3
apiVersion
:
apps/v1
beta1
apiVersion
:
apps/v1
kind
:
StatefulSet
metadata
:
name
:
etcd
...
...
test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml
View file @
aba725a3
apiVersion
:
apps/v1
beta1
apiVersion
:
apps/v1
kind
:
StatefulSet
metadata
:
name
:
mysql
...
...
test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml
View file @
aba725a3
apiVersion
:
apps/v1
beta1
apiVersion
:
apps/v1
kind
:
StatefulSet
metadata
:
name
:
mysql
...
...
test/e2e/testing-manifests/statefulset/redis/statefulset.yaml
View file @
aba725a3
apiVersion
:
apps/v1
beta1
apiVersion
:
apps/v1
kind
:
StatefulSet
metadata
:
name
:
rd
...
...
test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml
View file @
aba725a3
apiVersion
:
apps/v1
beta1
apiVersion
:
apps/v1
kind
:
StatefulSet
metadata
:
name
:
zoo
...
...
test/e2e/upgrades/apps/BUILD
View file @
aba725a3
...
...
@@ -24,7 +24,7 @@ go_library(
"//test/utils/image:go_default_library",
"//vendor/github.com/onsi/ginkgo:go_default_library",
"//vendor/github.com/onsi/gomega:go_default_library",
"//vendor/k8s.io/api/apps/v1
beta1
: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/core/v1:go_default_library",
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
...
...
test/e2e/upgrades/apps/statefulset.go
View file @
aba725a3
...
...
@@ -20,7 +20,7 @@ import (
.
"github.com/onsi/ginkgo"
.
"github.com/onsi/gomega"
apps
"k8s.io/api/apps/v1
beta1
"
apps
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
"k8s.io/kubernetes/pkg/util/version"
...
...
@@ -71,7 +71,7 @@ func (t *StatefulSetUpgradeTest) Setup(f *framework.Framework) {
By
(
"Creating statefulset "
+
ssName
+
" in namespace "
+
ns
)
*
(
t
.
set
.
Spec
.
Replicas
)
=
3
_
,
err
=
f
.
ClientSet
.
AppsV1
beta1
()
.
StatefulSets
(
ns
)
.
Create
(
t
.
set
)
_
,
err
=
f
.
ClientSet
.
AppsV1
()
.
StatefulSets
(
ns
)
.
Create
(
t
.
set
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
By
(
"Saturating stateful set "
+
t
.
set
.
Name
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment