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
93fa5167
Commit
93fa5167
authored
8 years ago
by
Adam Reese
Browse files
Options
Download
Plain Diff
Merge pull request #635 from adamreese/ref/kube
ref(kube): refactor kubeclient to a struct
parents
fc9171f8
0b6309be
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
kube-update-test
release-2.0
release-2.1
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
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.2
v2.0.1
v2.0.0
v2.0.0-rc.2
v2.0.0-rc.1
v2.0.0-beta.2
v2.0.0-beta.1
v2.0.0-alpha.5
v2.0.0-alpha.4
v2.0.0-alpha.3
v2.0.0-alpha.2
v2.0.0-alpha.1
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
pkg/client/install.go
+1
-1
pkg/client/install.go
pkg/kube/client.go
+15
-4
pkg/kube/client.go
pkg/kube/client_test.go
+168
-22
pkg/kube/client_test.go
pkg/kube/testdata/guestbook-all-in-one.yaml
+0
-179
pkg/kube/testdata/guestbook-all-in-one.yaml
with
184 additions
and
206 deletions
+184
-206
pkg/client/install.go
+
1
−
1
View file @
93fa5167
...
@@ -43,7 +43,7 @@ func (i *Installer) Install() error {
...
@@ -43,7 +43,7 @@ func (i *Installer) Install() error {
return
err
return
err
}
}
return
kube
.
Create
(
"helm"
,
&
b
,
nil
)
return
kube
.
New
(
nil
)
.
Create
(
"helm"
,
&
b
)
}
}
// InstallYAML is the installation YAML for DM.
// InstallYAML is the installation YAML for DM.
...
...
This diff is collapsed.
Click to expand it.
pkg/kube/client.go
+
15
−
4
View file @
93fa5167
...
@@ -9,7 +9,17 @@ import (
...
@@ -9,7 +9,17 @@ import (
"k8s.io/kubernetes/pkg/kubectl/resource"
"k8s.io/kubernetes/pkg/kubectl/resource"
)
)
const
includeThirdPartyAPIs
=
false
// Client represents a client capable of communicating with the Kubernetes API.
type
Client
struct
{
config
clientcmd
.
ClientConfig
}
// New create a new Client
func
New
(
config
clientcmd
.
ClientConfig
)
*
Client
{
return
&
Client
{
config
:
config
,
}
}
// ResourceActorFunc performs an action on a signle resource.
// ResourceActorFunc performs an action on a signle resource.
type
ResourceActorFunc
func
(
*
resource
.
Info
)
error
type
ResourceActorFunc
func
(
*
resource
.
Info
)
error
...
@@ -17,12 +27,13 @@ type ResourceActorFunc func(*resource.Info) error
...
@@ -17,12 +27,13 @@ type ResourceActorFunc func(*resource.Info) error
// Create creates kubernetes resources from an io.reader
// Create creates kubernetes resources from an io.reader
//
//
// Namespace will set the namespace
// Namespace will set the namespace
// Config allows for overiding values from kubectl
func
(
c
*
Client
)
Create
(
namespace
string
,
reader
io
.
Reader
)
error
{
func
Create
(
namespace
string
,
reader
io
.
Reader
,
config
clientcmd
.
ClientConfig
)
error
{
f
:=
cmdutil
.
NewFactory
(
c
.
config
)
f
:=
cmdutil
.
NewFactory
(
config
)
return
perform
(
f
,
namespace
,
reader
,
createResource
)
return
perform
(
f
,
namespace
,
reader
,
createResource
)
}
}
const
includeThirdPartyAPIs
=
false
func
perform
(
f
*
cmdutil
.
Factory
,
namespace
string
,
reader
io
.
Reader
,
fn
ResourceActorFunc
)
error
{
func
perform
(
f
*
cmdutil
.
Factory
,
namespace
string
,
reader
io
.
Reader
,
fn
ResourceActorFunc
)
error
{
r
:=
f
.
NewBuilder
(
includeThirdPartyAPIs
)
.
r
:=
f
.
NewBuilder
(
includeThirdPartyAPIs
)
.
ContinueOnError
()
.
ContinueOnError
()
.
...
...
This diff is collapsed.
Click to expand it.
pkg/kube/client_test.go
+
168
−
22
View file @
93fa5167
package
kube
package
kube
import
(
import
(
"os"
"io"
"strings"
"testing"
"testing"
"k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/meta"
...
@@ -11,34 +12,179 @@ import (
...
@@ -11,34 +12,179 @@ import (
)
)
func
TestPerform
(
t
*
testing
.
T
)
{
func
TestPerform
(
t
*
testing
.
T
)
{
input
,
err
:=
os
.
Open
(
"./testdata/guestbook-all-in-one.yaml"
)
tests
:=
[]
struct
{
if
err
!=
nil
{
name
string
t
.
Fatal
(
err
)
namespace
string
reader
io
.
Reader
count
int
err
bool
errMessage
string
}{
{
name
:
"Valid input"
,
namespace
:
"test"
,
reader
:
strings
.
NewReader
(
guestbookManifest
),
count
:
6
,
},
{
name
:
"Empty manifests"
,
namespace
:
"test"
,
reader
:
strings
.
NewReader
(
""
),
err
:
true
,
errMessage
:
"no objects passed to create"
,
},
}
}
defer
input
.
Close
()
results
:=
[]
*
resource
.
Info
{}
for
_
,
tt
:=
range
tests
{
results
:=
[]
*
resource
.
Info
{}
fn
:=
func
(
info
*
resource
.
Info
)
error
{
fn
:=
func
(
info
*
resource
.
Info
)
error
{
results
=
append
(
results
,
info
)
results
=
append
(
results
,
info
)
if
info
.
Namespace
!=
"test"
{
if
info
.
Namespace
!=
tt
.
namespace
{
t
.
Errorf
(
"expected namespace to be 'test', got %s"
,
info
.
Namespace
)
t
.
Errorf
(
"%q. expected namespace to be '%s', got %s"
,
tt
.
name
,
tt
.
namespace
,
info
.
Namespace
)
}
return
nil
}
}
return
nil
f
:=
cmdutil
.
NewFactory
(
nil
)
}
f
.
ClientForMapping
=
func
(
mapping
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
{
return
&
fake
.
RESTClient
{},
nil
f
:=
cmdutil
.
NewFactory
(
nil
)
}
f
.
ClientForMapping
=
func
(
mapping
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
{
return
&
fake
.
RESTClient
{},
nil
}
if
err
:=
perform
(
f
,
"test"
,
input
,
fn
);
err
!=
nil
{
err
:=
perform
(
f
,
tt
.
namespace
,
tt
.
reader
,
fn
)
t
.
Fatalf
(
"Unexpected error: %s"
,
err
)
if
(
err
!=
nil
)
!=
tt
.
err
{
}
t
.
Errorf
(
"%q. expected error: %v, got %v"
,
tt
.
name
,
tt
.
err
,
err
)
}
if
err
!=
nil
&&
err
.
Error
()
!=
tt
.
errMessage
{
t
.
Errorf
(
"%q. expected error message: %v, got %v"
,
tt
.
name
,
tt
.
errMessage
,
err
)
}
if
len
(
results
)
!=
6
{
if
len
(
results
)
!=
tt
.
count
{
t
.
Errorf
(
"expected 6 result objects, got %d"
,
len
(
results
))
t
.
Errorf
(
"%q. expected %d result objects, got %d"
,
tt
.
name
,
tt
.
count
,
len
(
results
))
}
}
}
}
}
const
guestbookManifest
=
`
apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
app: redis
tier: backend
role: master
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
tier: backend
role: master
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis-master
spec:
replicas: 1
template:
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: gcr.io/google_containers/redis:e2e # or just image: redis
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-slave
labels:
app: redis
tier: backend
role: slave
spec:
ports:
# the port that this service should serve on
- port: 6379
selector:
app: redis
tier: backend
role: slave
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis-slave
spec:
replicas: 2
template:
metadata:
labels:
app: redis
role: slave
tier: backend
spec:
containers:
- name: slave
image: gcr.io/google_samples/gb-redisslave:v1
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
ports:
- port: 80
selector:
app: guestbook
tier: frontend
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 3
template:
metadata:
labels:
app: guestbook
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google-samples/gb-frontend:v4
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 80
`
This diff is collapsed.
Click to expand it.
pkg/kube/testdata/guestbook-all-in-one.yaml
deleted
100644 → 0
+
0
−
179
View file @
fc9171f8
apiVersion
:
v1
kind
:
Service
metadata
:
name
:
redis-master
labels
:
app
:
redis
tier
:
backend
role
:
master
spec
:
ports
:
# the port that this service should serve on
-
port
:
6379
targetPort
:
6379
selector
:
app
:
redis
tier
:
backend
role
:
master
---
apiVersion
:
extensions/v1beta1
kind
:
Deployment
metadata
:
name
:
redis-master
# these labels can be applied automatically
# from the labels in the pod template if not set
# labels:
# app: redis
# role: master
# tier: backend
spec
:
# this replicas value is default
# modify it according to your case
replicas
:
1
# selector can be applied automatically
# from the labels in the pod template if not set
# selector:
# matchLabels:
# app: guestbook
# role: master
# tier: backend
template
:
metadata
:
labels
:
app
:
redis
role
:
master
tier
:
backend
spec
:
containers
:
-
name
:
master
image
:
gcr.io/google_containers/redis:e2e
# or just image: redis
resources
:
requests
:
cpu
:
100m
memory
:
100Mi
ports
:
-
containerPort
:
6379
---
apiVersion
:
v1
kind
:
Service
metadata
:
name
:
redis-slave
labels
:
app
:
redis
tier
:
backend
role
:
slave
spec
:
ports
:
# the port that this service should serve on
-
port
:
6379
selector
:
app
:
redis
tier
:
backend
role
:
slave
---
apiVersion
:
extensions/v1beta1
kind
:
Deployment
metadata
:
name
:
redis-slave
# these labels can be applied automatically
# from the labels in the pod template if not set
# labels:
# app: redis
# role: slave
# tier: backend
spec
:
# this replicas value is default
# modify it according to your case
replicas
:
2
# selector can be applied automatically
# from the labels in the pod template if not set
# selector:
# matchLabels:
# app: guestbook
# role: slave
# tier: backend
template
:
metadata
:
labels
:
app
:
redis
role
:
slave
tier
:
backend
spec
:
containers
:
-
name
:
slave
image
:
gcr.io/google_samples/gb-redisslave:v1
resources
:
requests
:
cpu
:
100m
memory
:
100Mi
env
:
-
name
:
GET_HOSTS_FROM
value
:
dns
# If your cluster config does not include a dns service, then to
# instead access an environment variable to find the master
# service's host, comment out the 'value: dns' line above, and
# uncomment the line below.
# value: env
ports
:
-
containerPort
:
6379
---
apiVersion
:
v1
kind
:
Service
metadata
:
name
:
frontend
labels
:
app
:
guestbook
tier
:
frontend
spec
:
# if your cluster supports it, uncomment the following to automatically create
# an external load-balanced IP for the frontend service.
# type: LoadBalancer
ports
:
# the port that this service should serve on
-
port
:
80
selector
:
app
:
guestbook
tier
:
frontend
---
apiVersion
:
extensions/v1beta1
kind
:
Deployment
metadata
:
name
:
frontend
# these labels can be applied automatically
# from the labels in the pod template if not set
# labels:
# app: guestbook
# tier: frontend
spec
:
# this replicas value is default
# modify it according to your case
replicas
:
3
# selector can be applied automatically
# from the labels in the pod template if not set
# selector:
# matchLabels:
# app: guestbook
# tier: frontend
template
:
metadata
:
labels
:
app
:
guestbook
tier
:
frontend
spec
:
containers
:
-
name
:
php-redis
image
:
gcr.io/google-samples/gb-frontend:v4
resources
:
requests
:
cpu
:
100m
memory
:
100Mi
env
:
-
name
:
GET_HOSTS_FROM
value
:
dns
# If your cluster config does not include a dns service, then to
# instead access environment variables to find service host
# info, comment out the 'value: dns' line above, and uncomment the
# line below.
# value: env
ports
:
-
containerPort
:
80
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