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
cf2bd9a1
Commit
cf2bd9a1
authored
Jun 24, 2015
by
Maxwell Forbes
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #10273 from mbforbes/versionChange
Verify upgrades change node/master software version
parents
91fc1af9
53179399
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
58 additions
and
17 deletions
+58
-17
cluster_upgrade.go
test/e2e/cluster_upgrade.go
+58
-17
No files found.
test/e2e/cluster_upgrade.go
View file @
cf2bd9a1
...
@@ -28,6 +28,8 @@ import (
...
@@ -28,6 +28,8 @@ import (
"time"
"time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/wait"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/wait"
...
@@ -98,8 +100,7 @@ func realVersion(s string) (string, error) {
...
@@ -98,8 +100,7 @@ func realVersion(s string) (string, error) {
var
masterUpgrade
=
func
(
v
string
)
error
{
var
masterUpgrade
=
func
(
v
string
)
error
{
switch
testContext
.
Provider
{
switch
testContext
.
Provider
{
case
"gce"
:
case
"gce"
:
// TODO(mbforbes): Make master upgrade GCE use the provided version.
return
masterUpgradeGCE
(
v
)
return
masterUpgradeGCE
()
case
"gke"
:
case
"gke"
:
return
masterUpgradeGKE
(
v
)
return
masterUpgradeGKE
(
v
)
default
:
default
:
...
@@ -107,8 +108,9 @@ var masterUpgrade = func(v string) error {
...
@@ -107,8 +108,9 @@ var masterUpgrade = func(v string) error {
}
}
}
}
func
masterUpgradeGCE
()
error
{
func
masterUpgradeGCE
(
rawV
string
)
error
{
_
,
_
,
err
:=
runCmd
(
path
.
Join
(
testContext
.
RepoRoot
,
"hack/e2e-internal/e2e-upgrade.sh"
),
"-M"
,
version
)
v
:=
"v"
+
rawV
_
,
_
,
err
:=
runCmd
(
path
.
Join
(
testContext
.
RepoRoot
,
"hack/e2e-internal/e2e-upgrade.sh"
),
"-M"
,
v
)
return
err
return
err
}
}
...
@@ -136,8 +138,7 @@ var nodeUpgrade = func(f Framework, replicas int, v string) error {
...
@@ -136,8 +138,7 @@ var nodeUpgrade = func(f Framework, replicas int, v string) error {
var
err
error
var
err
error
switch
testContext
.
Provider
{
switch
testContext
.
Provider
{
case
"gce"
:
case
"gce"
:
// TODO(mbforbes): Make node upgrade GCE use the provided version.
err
=
nodeUpgradeGCE
(
v
)
err
=
nodeUpgradeGCE
()
case
"gke"
:
case
"gke"
:
err
=
nodeUpgradeGKE
(
v
)
err
=
nodeUpgradeGKE
(
v
)
default
:
default
:
...
@@ -156,9 +157,10 @@ var nodeUpgrade = func(f Framework, replicas int, v string) error {
...
@@ -156,9 +157,10 @@ var nodeUpgrade = func(f Framework, replicas int, v string) error {
return
waitForPodsRunningReady
(
f
.
Namespace
.
Name
,
replicas
,
restartPodReadyAgainTimeout
)
return
waitForPodsRunningReady
(
f
.
Namespace
.
Name
,
replicas
,
restartPodReadyAgainTimeout
)
}
}
func
nodeUpgradeGCE
()
error
{
func
nodeUpgradeGCE
(
rawV
string
)
error
{
Logf
(
"Preparing node upgarde by creating new instance template for %q"
,
version
)
v
:=
"v"
+
rawV
stdout
,
_
,
err
:=
runCmd
(
path
.
Join
(
testContext
.
RepoRoot
,
"hack/e2e-internal/e2e-upgrade.sh"
),
"-P"
,
version
)
Logf
(
"Preparing node upgarde by creating new instance template for %q"
,
v
)
stdout
,
_
,
err
:=
runCmd
(
path
.
Join
(
testContext
.
RepoRoot
,
"hack/e2e-internal/e2e-upgrade.sh"
),
"-P"
,
v
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -196,11 +198,11 @@ var _ = Describe("Skipped", func() {
...
@@ -196,11 +198,11 @@ var _ = Describe("Skipped", func() {
// The version is determined once at the beginning of the test so that
// The version is determined once at the beginning of the test so that
// the master and nodes won't be skewed if the value changes during the
// the master and nodes won't be skewed if the value changes during the
// test.
// test.
// TODO(mbforbes): Use this version for GCE as well.
By
(
fmt
.
Sprintf
(
"Getting real version for %q"
,
version
))
By
(
fmt
.
Sprintf
(
"Getting real version for %q"
,
version
))
var
err
error
var
err
error
v
,
err
=
realVersion
(
version
)
v
,
err
=
realVersion
(
version
)
expectNoError
(
err
)
expectNoError
(
err
)
Logf
(
"Version for %q is %s"
,
version
,
v
)
By
(
"Setting up the service, RC, and pods"
)
By
(
"Setting up the service, RC, and pods"
)
f
.
beforeEach
()
f
.
beforeEach
()
...
@@ -262,6 +264,8 @@ var _ = Describe("Skipped", func() {
...
@@ -262,6 +264,8 @@ var _ = Describe("Skipped", func() {
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
By
(
"Performing a master upgrade"
)
By
(
"Performing a master upgrade"
)
testMasterUpgrade
(
ip
,
v
,
masterUpgrade
)
testMasterUpgrade
(
ip
,
v
,
masterUpgrade
)
By
(
"Checking master version"
)
expectNoError
(
checkMasterVersion
(
f
.
Client
,
v
))
By
(
"Validating cluster after master upgrade"
)
By
(
"Validating cluster after master upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
})
})
...
@@ -315,11 +319,12 @@ var _ = Describe("Skipped", func() {
...
@@ -315,11 +319,12 @@ var _ = Describe("Skipped", func() {
By
(
fmt
.
Sprintf
(
"Skipping upgrade test, which is not implemented for %s"
,
testContext
.
Provider
))
By
(
fmt
.
Sprintf
(
"Skipping upgrade test, which is not implemented for %s"
,
testContext
.
Provider
))
return
return
}
}
By
(
"Validating cluster before master upgrade"
)
By
(
"Validating cluster before master upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
By
(
"Performing a master upgrade"
)
By
(
"Performing a master upgrade"
)
testMasterUpgrade
(
ip
,
v
,
masterUpgrade
)
testMasterUpgrade
(
ip
,
v
,
masterUpgrade
)
By
(
"Checking master version"
)
expectNoError
(
checkMasterVersion
(
f
.
Client
,
v
))
By
(
"Validating cluster after master upgrade"
)
By
(
"Validating cluster after master upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
By
(
"Performing a node upgrade"
)
By
(
"Performing a node upgrade"
)
...
@@ -369,20 +374,56 @@ func testMasterUpgrade(ip, v string, mUp func(v string) error) {
...
@@ -369,20 +374,56 @@ func testMasterUpgrade(ip, v string, mUp func(v string) error) {
done
<-
struct
{}{}
done
<-
struct
{}{}
Logf
(
"Stopping async validation"
)
Logf
(
"Stopping async validation"
)
wg
.
Wait
()
wg
.
Wait
()
// TODO(mbforbes): Validate that:
// - the master software version truly changed
Logf
(
"Master upgrade complete"
)
Logf
(
"Master upgrade complete"
)
}
}
func
checkMasterVersion
(
c
*
client
.
Client
,
want
string
)
error
{
v
,
err
:=
c
.
ServerVersion
()
if
err
!=
nil
{
return
fmt
.
Errorf
(
"checkMasterVersion() couldn't get the master version: %v"
,
err
)
}
// We do prefix trimming and then matching because:
// want looks like: 0.19.3-815-g50e67d4
// got looks like: v0.19.3-815-g50e67d4034e858-dirty
got
:=
strings
.
TrimPrefix
(
v
.
GitVersion
,
"v"
)
if
!
strings
.
HasPrefix
(
got
,
want
)
{
return
fmt
.
Errorf
(
"master had kube-apiserver version %s which does not start with %s"
,
got
,
want
)
}
Logf
(
"Master is at version %s"
,
want
)
return
nil
}
func
testNodeUpgrade
(
f
Framework
,
nUp
func
(
f
Framework
,
n
int
,
v
string
)
error
,
replicas
int
,
v
string
)
{
func
testNodeUpgrade
(
f
Framework
,
nUp
func
(
f
Framework
,
n
int
,
v
string
)
error
,
replicas
int
,
v
string
)
{
Logf
(
"Starting node upgrade"
)
Logf
(
"Starting node upgrade"
)
expectNoError
(
nUp
(
f
,
replicas
,
v
))
expectNoError
(
nUp
(
f
,
replicas
,
v
))
Logf
(
"Node upgrade complete"
)
Logf
(
"Node upgrade complete"
)
By
(
"Checking node versions"
)
expectNoError
(
checkNodesVersions
(
f
.
Client
,
v
))
Logf
(
"All nodes are at version %s"
,
v
)
}
// TODO(mbforbes): Validate that:
func
checkNodesVersions
(
c
*
client
.
Client
,
want
string
)
error
{
// - the node software version truly changed
l
,
err
:=
listNodes
(
c
,
labels
.
Everything
(),
fields
.
Everything
())
if
err
!=
nil
{
return
fmt
.
Errorf
(
"checkNodesVersions() failed to list nodes: %v"
,
err
)
}
for
_
,
n
:=
range
l
.
Items
{
// We do prefix trimming and then matching because:
// want looks like: 0.19.3-815-g50e67d4
// kv/kvp look like: v0.19.3-815-g50e67d4034e858-dirty
kv
,
kpv
:=
strings
.
TrimPrefix
(
n
.
Status
.
NodeInfo
.
KubeletVersion
,
"v"
),
strings
.
TrimPrefix
(
n
.
Status
.
NodeInfo
.
KubeProxyVersion
,
"v"
)
if
!
strings
.
HasPrefix
(
kv
,
want
)
{
return
fmt
.
Errorf
(
"node %s had kubelet version %s which does not start with %s"
,
n
.
ObjectMeta
.
Name
,
kv
,
want
)
}
if
!
strings
.
HasPrefix
(
kpv
,
want
)
{
return
fmt
.
Errorf
(
"node %s had kube-proxy version %s which does not start with %s"
,
n
.
ObjectMeta
.
Name
,
kpv
,
want
)
}
}
return
nil
}
}
// retryCmd runs cmd using args and retries it for up to singleCallTimeout if
// retryCmd runs cmd using args and retries it for up to singleCallTimeout if
...
...
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