Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
H
helm3
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
helm3
Commits
93fa5167
Commit
93fa5167
authored
May 03, 2016
by
Adam Reese
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #635 from adamreese/ref/kube
ref(kube): refactor kubeclient to a struct
parents
fc9171f8
0b6309be
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
184 additions
and
206 deletions
+184
-206
install.go
pkg/client/install.go
+1
-1
client.go
pkg/kube/client.go
+15
-4
client_test.go
pkg/kube/client_test.go
+168
-22
guestbook-all-in-one.yaml
pkg/kube/testdata/guestbook-all-in-one.yaml
+0
-179
No files found.
pkg/client/install.go
View file @
93fa5167
...
...
@@ -43,7 +43,7 @@ func (i *Installer) Install() error {
return
err
}
return
kube
.
Create
(
"helm"
,
&
b
,
nil
)
return
kube
.
New
(
nil
)
.
Create
(
"helm"
,
&
b
)
}
// InstallYAML is the installation YAML for DM.
...
...
pkg/kube/client.go
View file @
93fa5167
...
...
@@ -9,7 +9,17 @@ import (
"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.
type
ResourceActorFunc
func
(
*
resource
.
Info
)
error
...
...
@@ -17,12 +27,13 @@ type ResourceActorFunc func(*resource.Info) error
// Create creates kubernetes resources from an io.reader
//
// Namespace will set the namespace
// Config allows for overiding values from kubectl
func
Create
(
namespace
string
,
reader
io
.
Reader
,
config
clientcmd
.
ClientConfig
)
error
{
f
:=
cmdutil
.
NewFactory
(
config
)
func
(
c
*
Client
)
Create
(
namespace
string
,
reader
io
.
Reader
)
error
{
f
:=
cmdutil
.
NewFactory
(
c
.
config
)
return
perform
(
f
,
namespace
,
reader
,
createResource
)
}
const
includeThirdPartyAPIs
=
false
func
perform
(
f
*
cmdutil
.
Factory
,
namespace
string
,
reader
io
.
Reader
,
fn
ResourceActorFunc
)
error
{
r
:=
f
.
NewBuilder
(
includeThirdPartyAPIs
)
.
ContinueOnError
()
.
...
...
pkg/kube/client_test.go
View file @
93fa5167
package
kube
import
(
"os"
"io"
"strings"
"testing"
"k8s.io/kubernetes/pkg/api/meta"
...
...
@@ -11,34 +12,179 @@ import (
)
func
TestPerform
(
t
*
testing
.
T
)
{
input
,
err
:=
os
.
Open
(
"./testdata/guestbook-all-in-one.yaml"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
tests
:=
[]
struct
{
name
string
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
{
results
=
append
(
results
,
info
)
fn
:=
func
(
info
*
resource
.
Info
)
error
{
results
=
append
(
results
,
info
)
if
info
.
Namespace
!=
"test"
{
t
.
Errorf
(
"expected namespace to be 'test', got %s"
,
info
.
Namespace
)
if
info
.
Namespace
!=
tt
.
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
{
t
.
Fatalf
(
"Unexpected error: %s"
,
err
)
}
err
:=
perform
(
f
,
tt
.
namespace
,
tt
.
reader
,
fn
)
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
{
t
.
Errorf
(
"expected 6 result objects, got %d"
,
len
(
results
))
if
len
(
results
)
!=
tt
.
count
{
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
`
pkg/kube/testdata/guestbook-all-in-one.yaml
deleted
100644 → 0
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
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