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
d10e9186
Commit
d10e9186
authored
8 years ago
by
Adam Reese
Browse files
Options
Download
Patches
Plain Diff
feat(tiller): validate objects against kube schema on dry-run
parent
a95bd105
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.2
release-2.3
release-2.4
release-2.5
release-2.6
release-2.7
release-2.8
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
v2.8.2
v2.8.2-rc1
v2.8.1
v2.8.0
v2.8.0-rc.1
v2.7.2
v2.7.1
v2.7.0
v2.7.0-rc1
v2.6.2
v2.6.1
v2.6.0
v2.5.1
v2.5.0
v2.4.2
v2.4.1
v2.4.0
v2.3.1
v2.3.0
v2.2.3
v2.2.2
v2.2.1
v2.2.0
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
pkg/kube/client.go
+12
-9
pkg/kube/client.go
pkg/tiller/environment/environment.go
+8
-0
pkg/tiller/environment/environment.go
pkg/tiller/environment/environment_test.go
+4
-0
pkg/tiller/environment/environment_test.go
pkg/tiller/release_server.go
+11
-2
pkg/tiller/release_server.go
with
35 additions
and
11 deletions
+35
-11
pkg/kube/client.go
+
12
−
9
View file @
d10e9186
...
@@ -50,8 +50,6 @@ var ErrNoObjectsVisited = goerrors.New("no objects visited")
...
@@ -50,8 +50,6 @@ var ErrNoObjectsVisited = goerrors.New("no objects visited")
// Client represents a client capable of communicating with the Kubernetes API.
// Client represents a client capable of communicating with the Kubernetes API.
type
Client
struct
{
type
Client
struct
{
cmdutil
.
Factory
cmdutil
.
Factory
// Validate idicates whether to load a schema for validation.
Validate
bool
// SchemaCacheDir is the path for loading cached schema.
// SchemaCacheDir is the path for loading cached schema.
SchemaCacheDir
string
SchemaCacheDir
string
}
}
...
@@ -60,7 +58,6 @@ type Client struct {
...
@@ -60,7 +58,6 @@ type Client struct {
func
New
(
config
clientcmd
.
ClientConfig
)
*
Client
{
func
New
(
config
clientcmd
.
ClientConfig
)
*
Client
{
return
&
Client
{
return
&
Client
{
Factory
:
cmdutil
.
NewFactory
(
config
),
Factory
:
cmdutil
.
NewFactory
(
config
),
Validate
:
true
,
SchemaCacheDir
:
clientcmd
.
RecommendedSchemaFile
,
SchemaCacheDir
:
clientcmd
.
RecommendedSchemaFile
,
}
}
}
}
...
@@ -91,8 +88,8 @@ func (c *Client) Create(namespace string, reader io.Reader) error {
...
@@ -91,8 +88,8 @@ func (c *Client) Create(namespace string, reader io.Reader) error {
return
perform
(
c
,
namespace
,
reader
,
createResource
)
return
perform
(
c
,
namespace
,
reader
,
createResource
)
}
}
func
(
c
*
Client
)
newBuilder
(
namespace
string
,
reader
io
.
Reader
)
*
resource
.
Builder
{
func
(
c
*
Client
)
newBuilder
(
namespace
string
,
reader
io
.
Reader
)
*
resource
.
Result
{
schema
,
err
:=
c
.
Validator
(
c
.
Validat
e
,
c
.
SchemaCacheDir
)
schema
,
err
:=
c
.
Validator
(
tru
e
,
c
.
SchemaCacheDir
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Printf
(
"warning: failed to load schema: %s"
,
err
)
log
.
Printf
(
"warning: failed to load schema: %s"
,
err
)
}
}
...
@@ -102,7 +99,13 @@ func (c *Client) newBuilder(namespace string, reader io.Reader) *resource.Builde
...
@@ -102,7 +99,13 @@ func (c *Client) newBuilder(namespace string, reader io.Reader) *resource.Builde
NamespaceParam
(
namespace
)
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
.
DefaultNamespace
()
.
Stream
(
reader
,
""
)
.
Stream
(
reader
,
""
)
.
Flatten
()
Flatten
()
.
Do
()
}
// Build validates for Kubernetes objects and returns resource Infos from a io.Reader.
func
(
c
*
Client
)
Build
(
namespace
string
,
reader
io
.
Reader
)
([]
*
resource
.
Info
,
error
)
{
return
c
.
newBuilder
(
namespace
,
reader
)
.
Infos
()
}
}
// Get gets kubernetes resources as pretty printed string
// Get gets kubernetes resources as pretty printed string
...
@@ -165,12 +168,12 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) {
...
@@ -165,12 +168,12 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) {
//
//
// Namespace will set the namespaces
// Namespace will set the namespaces
func
(
c
*
Client
)
Update
(
namespace
string
,
currentReader
,
targetReader
io
.
Reader
,
recreate
bool
)
error
{
func
(
c
*
Client
)
Update
(
namespace
string
,
currentReader
,
targetReader
io
.
Reader
,
recreate
bool
)
error
{
currentInfos
,
err
:=
c
.
new
Build
er
(
namespace
,
currentReader
)
.
Do
()
.
Infos
()
currentInfos
,
err
:=
c
.
Build
(
namespace
,
currentReader
)
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed decoding reader into objects: %s"
,
err
)
return
fmt
.
Errorf
(
"failed decoding reader into objects: %s"
,
err
)
}
}
target
:=
c
.
newBuilder
(
namespace
,
targetReader
)
.
Do
()
target
:=
c
.
newBuilder
(
namespace
,
targetReader
)
if
target
.
Err
()
!=
nil
{
if
target
.
Err
()
!=
nil
{
return
fmt
.
Errorf
(
"failed decoding reader into objects: %s"
,
target
.
Err
())
return
fmt
.
Errorf
(
"failed decoding reader into objects: %s"
,
target
.
Err
())
}
}
...
@@ -283,7 +286,7 @@ func (c *Client) WatchUntilReady(namespace string, reader io.Reader, timeout int
...
@@ -283,7 +286,7 @@ func (c *Client) WatchUntilReady(namespace string, reader io.Reader, timeout int
}
}
func
perform
(
c
*
Client
,
namespace
string
,
reader
io
.
Reader
,
fn
ResourceActorFunc
)
error
{
func
perform
(
c
*
Client
,
namespace
string
,
reader
io
.
Reader
,
fn
ResourceActorFunc
)
error
{
infos
,
err
:=
c
.
new
Build
er
(
namespace
,
reader
)
.
Do
()
.
Infos
()
infos
,
err
:=
c
.
Build
(
namespace
,
reader
)
switch
{
switch
{
case
err
!=
nil
:
case
err
!=
nil
:
return
scrubValidationError
(
err
)
return
scrubValidationError
(
err
)
...
...
This diff is collapsed.
Click to expand it.
pkg/tiller/environment/environment.go
+
8
−
0
View file @
d10e9186
...
@@ -31,6 +31,7 @@ import (
...
@@ -31,6 +31,7 @@ import (
"k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/storage"
"k8s.io/helm/pkg/storage"
"k8s.io/helm/pkg/storage/driver"
"k8s.io/helm/pkg/storage/driver"
"k8s.io/kubernetes/pkg/kubectl/resource"
)
)
// DefaultTillerNamespace is the default namespace for tiller.
// DefaultTillerNamespace is the default namespace for tiller.
...
@@ -132,6 +133,8 @@ type KubeClient interface {
...
@@ -132,6 +133,8 @@ type KubeClient interface {
// reader must contain a YAML stream (one or more YAML documents separated
// reader must contain a YAML stream (one or more YAML documents separated
// by "\n---\n").
// by "\n---\n").
Update
(
namespace
string
,
originalReader
,
modifiedReader
io
.
Reader
,
recreate
bool
)
error
Update
(
namespace
string
,
originalReader
,
modifiedReader
io
.
Reader
,
recreate
bool
)
error
Build
(
namespace
string
,
reader
io
.
Reader
)
([]
*
resource
.
Info
,
error
)
}
}
// PrintingKubeClient implements KubeClient, but simply prints the reader to
// PrintingKubeClient implements KubeClient, but simply prints the reader to
...
@@ -172,6 +175,11 @@ func (p *PrintingKubeClient) Update(ns string, currentReader, modifiedReader io.
...
@@ -172,6 +175,11 @@ func (p *PrintingKubeClient) Update(ns string, currentReader, modifiedReader io.
return
err
return
err
}
}
// Build implements KubeClient Build.
func
(
p
*
PrintingKubeClient
)
Build
(
ns
string
,
reader
io
.
Reader
)
([]
*
resource
.
Info
,
error
)
{
return
[]
*
resource
.
Info
{},
nil
}
// Environment provides the context for executing a client request.
// Environment provides the context for executing a client request.
//
//
// All services in a context are concurrency safe.
// All services in a context are concurrency safe.
...
...
This diff is collapsed.
Click to expand it.
pkg/tiller/environment/environment_test.go
+
4
−
0
View file @
d10e9186
...
@@ -23,6 +23,7 @@ import (
...
@@ -23,6 +23,7 @@ import (
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/kubernetes/pkg/kubectl/resource"
)
)
type
mockEngine
struct
{
type
mockEngine
struct
{
...
@@ -50,6 +51,9 @@ func (k *mockKubeClient) Update(ns string, currentReader, modifiedReader io.Read
...
@@ -50,6 +51,9 @@ func (k *mockKubeClient) Update(ns string, currentReader, modifiedReader io.Read
func
(
k
*
mockKubeClient
)
WatchUntilReady
(
ns
string
,
r
io
.
Reader
,
t
int64
)
error
{
func
(
k
*
mockKubeClient
)
WatchUntilReady
(
ns
string
,
r
io
.
Reader
,
t
int64
)
error
{
return
nil
return
nil
}
}
func
(
k
*
mockKubeClient
)
Build
(
ns
string
,
reader
io
.
Reader
)
([]
*
resource
.
Info
,
error
)
{
return
[]
*
resource
.
Info
{},
nil
}
var
_
Engine
=
&
mockEngine
{}
var
_
Engine
=
&
mockEngine
{}
var
_
KubeClient
=
&
mockKubeClient
{}
var
_
KubeClient
=
&
mockKubeClient
{}
...
...
This diff is collapsed.
Click to expand it.
pkg/tiller/release_server.go
+
11
−
2
View file @
d10e9186
...
@@ -435,7 +435,8 @@ func (s *ReleaseServer) prepareUpdate(req *services.UpdateReleaseRequest) (*rele
...
@@ -435,7 +435,8 @@ func (s *ReleaseServer) prepareUpdate(req *services.UpdateReleaseRequest) (*rele
if
len
(
notesTxt
)
>
0
{
if
len
(
notesTxt
)
>
0
{
updatedRelease
.
Info
.
Status
.
Notes
=
notesTxt
updatedRelease
.
Info
.
Status
.
Notes
=
notesTxt
}
}
return
currentRelease
,
updatedRelease
,
nil
err
=
validateManifest
(
s
.
env
.
KubeClient
,
currentRelease
.
Namespace
,
manifestDoc
.
Bytes
())
return
currentRelease
,
updatedRelease
,
err
}
}
// RollbackRelease rolls back to a previous version of the given release.
// RollbackRelease rolls back to a previous version of the given release.
...
@@ -706,7 +707,9 @@ func (s *ReleaseServer) prepareRelease(req *services.InstallReleaseRequest) (*re
...
@@ -706,7 +707,9 @@ func (s *ReleaseServer) prepareRelease(req *services.InstallReleaseRequest) (*re
if
len
(
notesTxt
)
>
0
{
if
len
(
notesTxt
)
>
0
{
rel
.
Info
.
Status
.
Notes
=
notesTxt
rel
.
Info
.
Status
.
Notes
=
notesTxt
}
}
return
rel
,
nil
err
=
validateManifest
(
s
.
env
.
KubeClient
,
req
.
Namespace
,
manifestDoc
.
Bytes
())
return
rel
,
err
}
}
func
getVersionSet
(
client
discovery
.
ServerGroupsInterface
)
(
versionSet
,
error
)
{
func
getVersionSet
(
client
discovery
.
ServerGroupsInterface
)
(
versionSet
,
error
)
{
...
@@ -1048,3 +1051,9 @@ func splitManifests(bigfile string) map[string]string {
...
@@ -1048,3 +1051,9 @@ func splitManifests(bigfile string) map[string]string {
}
}
return
res
return
res
}
}
func
validateManifest
(
c
environment
.
KubeClient
,
ns
string
,
manifest
[]
byte
)
error
{
r
:=
bytes
.
NewReader
(
manifest
)
_
,
err
:=
c
.
Build
(
ns
,
r
)
return
err
}
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