Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
1105 Внедрение механизмов обеспечения безопасности цепочки поставки программных проектов
Legacy
scanned-projects
helm
Commits
4947e5aa
Commit
4947e5aa
authored
7 years ago
by
Matthew Fisher
Browse files
Options
Download
Patches
Plain Diff
fix helm init --upgrade logic
parent
ad54e71a
main
Release
add-codeql
dependabot/go_modules/github.com/docker/distribution-2.8.2incompatible
dependabot/go_modules/github.com/lib/pq-1.10.9
dependabot/go_modules/github.com/rubenv/sql-migrate-1.4.0
dependabot/go_modules/golang.org/x/crypto-0.9.0
dependabot/go_modules/golang.org/x/term-0.8.0
dependabot/go_modules/k8s.io/klog/v2-2.100.1
dev-v2
feat-v3/event-emitter-lua
release-2.10
release-2.11
release-2.12
release-2.13
release-2.14
release-2.15
release-2.16
release-2.17
release-2.9
release-3.0
release-3.1
release-3.10
release-3.11
release-3.12
release-3.2
release-3.3
release-3.4
release-3.5
release-3.6
release-3.6.1
release-3.6.2
release-3.7
release-3.8
release-3.9
release-v3.0.0-beta.4
v3.12.0
v3.12.0-rc.1
v3.12.0-dev.1
v3.11.3
v3.11.2
v3.11.1
v3.11.0
v3.11.0-rc.2
v3.11.0-rc.1
v3.10.3
v3.10.2
v3.10.1
v3.10.0
v3.10.0-rc.1
v3.9.4
v3.9.3
v3.9.2
v3.9.1
v3.9.0
v3.9.0-rc.1
v3.8.2
v3.8.1
v3.8.0
v3.8.0-rc.2
v3.8.0-rc.1
v3.7.2
v3.7.1
v3.7.0
v3.7.0-rc.3
v3.7.0-rc.2
v3.7.0-rc.1
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.6.0-rc.1
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.5.0-rc.2
v3.5.0-rc.1
v3.4.2
v3.4.1
v3.4.0
v3.4.0-rc.1
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.3.0-rc.2
v3.3.0-rc.1
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.2.0-rc.1
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.1.0-rc.3
v3.1.0-rc.2
v3.1.0-rc.1
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v3.0.0-rc.4
v3.0.0-rc.3
v3.0.0-rc.2
v3.0.0-rc.1
v3.0.0-beta.5
v3.0.0-beta.4
v3.0.0-beta.3
v3.0.0-beta.2
v3.0.0-beta.1
v3.0.0-alpha.2
v3.0.0-alpha.1
v2.17.0
v2.17.0-rc.1
v2.16.12
v2.16.11
v2.16.10
v2.16.9
v2.16.8
v2.16.7
v2.16.6
v2.16.5
v2.16.4
v2.16.3
v2.16.2
v2.16.1
v2.16.0
v2.16.0-rc.2
v2.16.0-rc.1
v2.15.2
v2.15.1
v2.15.0
v2.15.0-rc.2
v2.15.0-rc.1
v2.14.3
v2.14.2
v2.14.1
v2.14.0
v2.14.0-rc.2
v2.14.0-rc.1
v2.13.1
v2.13.1-rc.1
v2.13.0
v2.13.0-rc.2
v2.13.0-rc.1
v2.12.3
v2.12.2
v2.12.1
v2.12.0
v2.12.0-rc.2
v2.12.0-rc.1
v2.11.0
v2.11.0-rc.4
v2.11.0-rc.3
v2.11.0-rc.2
v2.11.0-rc.1
v2.10.0
v2.10.0-rc.3
v2.10.0-rc.2
v2.10.0-rc.1
v2.9.1
v2.9.0
v2.9.0-rc5
v2.9.0-rc4
v2.9.0-rc3
v2.9.0-rc2
v2.9.0-rc1
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
cmd/helm/installer/install.go
+17
-8
cmd/helm/installer/install.go
cmd/helm/installer/install_test.go
+123
-0
cmd/helm/installer/install_test.go
with
140 additions
and
8 deletions
+140
-8
cmd/helm/installer/install.go
+
17
−
8
View file @
4947e5aa
...
...
@@ -63,8 +63,8 @@ func Upgrade(client kubernetes.Interface, opts *Options) error {
if
err
!=
nil
{
return
err
}
existing
Image
:=
obj
.
Spec
.
Template
.
Spec
.
Containers
[
0
]
.
Image
if
!
isNewerVersion
(
existingImage
)
&&
!
opts
.
ForceUpgrade
{
tiller
Image
:=
obj
.
Spec
.
Template
.
Spec
.
Containers
[
0
]
.
Image
if
semverCompare
(
tillerImage
)
==
-
1
&&
!
opts
.
ForceUpgrade
{
return
errors
.
New
(
"current Tiller version is newer, use --force-upgrade to downgrade"
)
}
obj
.
Spec
.
Template
.
Spec
.
Containers
[
0
]
.
Image
=
opts
.
selectImage
()
...
...
@@ -82,15 +82,24 @@ func Upgrade(client kubernetes.Interface, opts *Options) error {
return
err
}
//
isNewerVersion
returns whether the c
urr
ent version is newer than the give image's version
func
isNewerVersion
(
image
string
)
bool
{
//
semverCompare
returns whether the c
li
ent
's
version is
older, equal or
newer than the give
n
image's version
.
func
semverCompare
(
image
string
)
int
{
split
:=
strings
.
Split
(
image
,
":"
)
if
len
(
split
)
<
2
{
// If we don't know the version, we consider the c
urr
ent version newer
return
true
// If we don't know the version, we consider the c
li
ent version newer
.
return
1
}
imageVersion
:=
split
[
1
]
return
semver
.
MustParse
(
version
.
Version
)
.
GreaterThan
(
semver
.
MustParse
(
imageVersion
))
tillerVersion
,
err
:=
semver
.
NewVersion
(
split
[
1
])
if
err
!=
nil
{
// same thing with unparsable tiller versions (e.g. canary releases).
return
1
}
clientVersion
,
err
:=
semver
.
NewVersion
(
version
.
Version
)
if
err
!=
nil
{
// aaaaaand same thing with unparsable helm versions (e.g. canary releases).
return
1
}
return
clientVersion
.
Compare
(
tillerVersion
)
}
// createDeployment creates the Tiller Deployment resource.
...
...
This diff is collapsed.
Click to expand it.
cmd/helm/installer/install_test.go
+
123
−
0
View file @
4947e5aa
...
...
@@ -476,6 +476,129 @@ func TestUgrade_newerVersion(t *testing.T) {
}
}
func
TestUpgrade_identical
(
t
*
testing
.
T
)
{
image
:=
"gcr.io/kubernetes-helm/tiller:v2.0.0"
serviceAccount
:=
"newServiceAccount"
existingDeployment
,
_
:=
deployment
(
&
Options
{
Namespace
:
v1
.
NamespaceDefault
,
ImageSpec
:
"imageToReplace:v2.0.0"
,
ServiceAccount
:
"serviceAccountToReplace"
,
UseCanary
:
false
,
})
existingService
:=
service
(
v1
.
NamespaceDefault
)
fc
:=
&
fake
.
Clientset
{}
fc
.
AddReactor
(
"get"
,
"deployments"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
return
true
,
existingDeployment
,
nil
})
fc
.
AddReactor
(
"update"
,
"deployments"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
obj
:=
action
.
(
testcore
.
UpdateAction
)
.
GetObject
()
.
(
*
v1beta1
.
Deployment
)
i
:=
obj
.
Spec
.
Template
.
Spec
.
Containers
[
0
]
.
Image
if
i
!=
image
{
t
.
Errorf
(
"expected image = '%s', got '%s'"
,
image
,
i
)
}
sa
:=
obj
.
Spec
.
Template
.
Spec
.
ServiceAccountName
if
sa
!=
serviceAccount
{
t
.
Errorf
(
"expected serviceAccountName = '%s', got '%s'"
,
serviceAccount
,
sa
)
}
return
true
,
obj
,
nil
})
fc
.
AddReactor
(
"get"
,
"services"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
return
true
,
existingService
,
nil
})
opts
:=
&
Options
{
Namespace
:
v1
.
NamespaceDefault
,
ImageSpec
:
image
,
ServiceAccount
:
serviceAccount
}
if
err
:=
Upgrade
(
fc
,
opts
);
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
}
if
actions
:=
fc
.
Actions
();
len
(
actions
)
!=
3
{
t
.
Errorf
(
"unexpected actions: %v, expected 3 actions got %d"
,
actions
,
len
(
actions
))
}
}
func
TestUpgrade_canaryClient
(
t
*
testing
.
T
)
{
image
:=
"gcr.io/kubernetes-helm/tiller:canary"
serviceAccount
:=
"newServiceAccount"
existingDeployment
,
_
:=
deployment
(
&
Options
{
Namespace
:
v1
.
NamespaceDefault
,
ImageSpec
:
"imageToReplace:v1.0.0"
,
ServiceAccount
:
"serviceAccountToReplace"
,
UseCanary
:
false
,
})
existingService
:=
service
(
v1
.
NamespaceDefault
)
fc
:=
&
fake
.
Clientset
{}
fc
.
AddReactor
(
"get"
,
"deployments"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
return
true
,
existingDeployment
,
nil
})
fc
.
AddReactor
(
"update"
,
"deployments"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
obj
:=
action
.
(
testcore
.
UpdateAction
)
.
GetObject
()
.
(
*
v1beta1
.
Deployment
)
i
:=
obj
.
Spec
.
Template
.
Spec
.
Containers
[
0
]
.
Image
if
i
!=
image
{
t
.
Errorf
(
"expected image = '%s', got '%s'"
,
image
,
i
)
}
sa
:=
obj
.
Spec
.
Template
.
Spec
.
ServiceAccountName
if
sa
!=
serviceAccount
{
t
.
Errorf
(
"expected serviceAccountName = '%s', got '%s'"
,
serviceAccount
,
sa
)
}
return
true
,
obj
,
nil
})
fc
.
AddReactor
(
"get"
,
"services"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
return
true
,
existingService
,
nil
})
opts
:=
&
Options
{
Namespace
:
v1
.
NamespaceDefault
,
ImageSpec
:
image
,
ServiceAccount
:
serviceAccount
}
if
err
:=
Upgrade
(
fc
,
opts
);
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
}
if
actions
:=
fc
.
Actions
();
len
(
actions
)
!=
3
{
t
.
Errorf
(
"unexpected actions: %v, expected 3 actions got %d"
,
actions
,
len
(
actions
))
}
}
func
TestUpgrade_canaryServer
(
t
*
testing
.
T
)
{
image
:=
"gcr.io/kubernetes-helm/tiller:v2.0.0"
serviceAccount
:=
"newServiceAccount"
existingDeployment
,
_
:=
deployment
(
&
Options
{
Namespace
:
v1
.
NamespaceDefault
,
ImageSpec
:
"imageToReplace:canary"
,
ServiceAccount
:
"serviceAccountToReplace"
,
UseCanary
:
false
,
})
existingService
:=
service
(
v1
.
NamespaceDefault
)
fc
:=
&
fake
.
Clientset
{}
fc
.
AddReactor
(
"get"
,
"deployments"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
return
true
,
existingDeployment
,
nil
})
fc
.
AddReactor
(
"update"
,
"deployments"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
obj
:=
action
.
(
testcore
.
UpdateAction
)
.
GetObject
()
.
(
*
v1beta1
.
Deployment
)
i
:=
obj
.
Spec
.
Template
.
Spec
.
Containers
[
0
]
.
Image
if
i
!=
image
{
t
.
Errorf
(
"expected image = '%s', got '%s'"
,
image
,
i
)
}
sa
:=
obj
.
Spec
.
Template
.
Spec
.
ServiceAccountName
if
sa
!=
serviceAccount
{
t
.
Errorf
(
"expected serviceAccountName = '%s', got '%s'"
,
serviceAccount
,
sa
)
}
return
true
,
obj
,
nil
})
fc
.
AddReactor
(
"get"
,
"services"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
return
true
,
existingService
,
nil
})
opts
:=
&
Options
{
Namespace
:
v1
.
NamespaceDefault
,
ImageSpec
:
image
,
ServiceAccount
:
serviceAccount
}
if
err
:=
Upgrade
(
fc
,
opts
);
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
}
if
actions
:=
fc
.
Actions
();
len
(
actions
)
!=
3
{
t
.
Errorf
(
"unexpected actions: %v, expected 3 actions got %d"
,
actions
,
len
(
actions
))
}
}
func
tlsTestFile
(
t
*
testing
.
T
,
path
string
)
string
{
const
tlsTestDir
=
"../../../testdata"
path
=
filepath
.
Join
(
tlsTestDir
,
path
)
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets