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
de5a6a93
Unverified
Commit
de5a6a93
authored
Oct 11, 2018
by
Adam Reese
Committed by
GitHub
Oct 11, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #4734 from adamreese/ref/kube-1.12
ref(*): kubernetes v1.12 support
parents
e7d93f23
dbf84cd2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
223 additions
and
236 deletions
+223
-236
helm.go
cmd/helm/helm.go
+1
-16
uninstall.go
cmd/helm/installer/uninstall.go
+6
-6
uninstall_test.go
cmd/helm/installer/uninstall_test.go
+8
-8
reset.go
cmd/helm/reset.go
+4
-3
reset_test.go
cmd/helm/reset_test.go
+3
-3
rudder.go
cmd/rudder/rudder.go
+4
-4
tiller.go
cmd/tiller/tiller.go
+4
-3
glide.lock
glide.lock
+0
-0
glide.yaml
glide.yaml
+58
-63
portforwarder_test.go
pkg/helm/portforwarder/portforwarder_test.go
+1
-1
client.go
pkg/kube/client.go
+32
-28
client_test.go
pkg/kube/client_test.go
+15
-15
namespace.go
pkg/kube/namespace.go
+8
-8
namespace_test.go
pkg/kube/namespace_test.go
+2
-2
result.go
pkg/kube/result.go
+1
-1
result_test.go
pkg/kube/result_test.go
+1
-1
environment.go
pkg/releasetesting/environment.go
+2
-2
test_suite.go
pkg/releasetesting/test_suite.go
+5
-5
test_suite_test.go
pkg/releasetesting/test_suite_test.go
+5
-5
cfgmaps.go
pkg/storage/driver/cfgmaps.go
+6
-6
cfgmaps_test.go
pkg/storage/driver/cfgmaps_test.go
+2
-2
mock_test.go
pkg/storage/driver/mock_test.go
+27
-26
secrets.go
pkg/storage/driver/secrets.go
+6
-6
secrets_test.go
pkg/storage/driver/secrets_test.go
+2
-2
environment.go
pkg/tiller/environment/environment.go
+5
-5
environment_test.go
pkg/tiller/environment/environment_test.go
+5
-5
release_modules.go
pkg/tiller/release_modules.go
+2
-2
release_server.go
pkg/tiller/release_server.go
+3
-3
release_server_test.go
pkg/tiller/release_server_test.go
+5
-5
No files found.
cmd/helm/helm.go
View file @
de5a6a93
...
@@ -28,10 +28,10 @@ import (
...
@@ -28,10 +28,10 @@ import (
"google.golang.org/grpc/status"
"google.golang.org/grpc/status"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
// Import to initialize client auth plugins.
// Import to initialize client auth plugins.
_
"k8s.io/client-go/plugin/pkg/client/auth"
_
"k8s.io/client-go/plugin/pkg/client/auth"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm"
helm_env
"k8s.io/helm/pkg/helm/environment"
helm_env
"k8s.io/helm/pkg/helm/environment"
"k8s.io/helm/pkg/helm/portforwarder"
"k8s.io/helm/pkg/helm/portforwarder"
...
@@ -256,21 +256,6 @@ func getKubeClient(context string, kubeconfig string) (*rest.Config, kubernetes.
...
@@ -256,21 +256,6 @@ func getKubeClient(context string, kubeconfig string) (*rest.Config, kubernetes.
return
config
,
client
,
nil
return
config
,
client
,
nil
}
}
// getInternalKubeClient creates a Kubernetes config and an "internal" client for a given kubeconfig context.
//
// Prefer the similar getKubeClient if you don't need to use such an internal client.
func
getInternalKubeClient
(
context
string
,
kubeconfig
string
)
(
internalclientset
.
Interface
,
error
)
{
config
,
err
:=
configForContext
(
context
,
kubeconfig
)
if
err
!=
nil
{
return
nil
,
err
}
client
,
err
:=
internalclientset
.
NewForConfig
(
config
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"could not get Kubernetes client: %s"
,
err
)
}
return
client
,
nil
}
// ensureHelmClient returns a new helm client impl. if h is not nil.
// ensureHelmClient returns a new helm client impl. if h is not nil.
func
ensureHelmClient
(
h
helm
.
Interface
)
helm
.
Interface
{
func
ensureHelmClient
(
h
helm
.
Interface
)
helm
.
Interface
{
if
h
!=
nil
{
if
h
!=
nil
{
...
...
cmd/helm/installer/uninstall.go
View file @
de5a6a93
...
@@ -19,8 +19,8 @@ package installer // import "k8s.io/helm/cmd/helm/installer"
...
@@ -19,8 +19,8 @@ package installer // import "k8s.io/helm/cmd/helm/installer"
import
(
import
(
apierrors
"k8s.io/apimachinery/pkg/api/errors"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/
kubernetes/pkg/client/clientset_generated/internalclientset
"
"k8s.io/
client-go/kubernetes
"
core
client
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion
"
core
v1
"k8s.io/client-go/kubernetes/typed/core/v1
"
)
)
const
(
const
(
...
@@ -30,7 +30,7 @@ const (
...
@@ -30,7 +30,7 @@ const (
)
)
// Uninstall uses Kubernetes client to uninstall Tiller.
// Uninstall uses Kubernetes client to uninstall Tiller.
func
Uninstall
(
client
internalclientset
.
Interface
,
opts
*
Options
)
error
{
func
Uninstall
(
client
kubernetes
.
Interface
,
opts
*
Options
)
error
{
if
err
:=
deleteService
(
client
.
Core
(),
opts
.
Namespace
);
err
!=
nil
{
if
err
:=
deleteService
(
client
.
Core
(),
opts
.
Namespace
);
err
!=
nil
{
return
err
return
err
}
}
...
@@ -41,7 +41,7 @@ func Uninstall(client internalclientset.Interface, opts *Options) error {
...
@@ -41,7 +41,7 @@ func Uninstall(client internalclientset.Interface, opts *Options) error {
}
}
// deleteService deletes the Tiller Service resource
// deleteService deletes the Tiller Service resource
func
deleteService
(
client
core
client
.
ServicesGetter
,
namespace
string
)
error
{
func
deleteService
(
client
core
v1
.
ServicesGetter
,
namespace
string
)
error
{
err
:=
client
.
Services
(
namespace
)
.
Delete
(
serviceName
,
&
metav1
.
DeleteOptions
{})
err
:=
client
.
Services
(
namespace
)
.
Delete
(
serviceName
,
&
metav1
.
DeleteOptions
{})
return
ingoreNotFound
(
err
)
return
ingoreNotFound
(
err
)
}
}
...
@@ -49,13 +49,13 @@ func deleteService(client coreclient.ServicesGetter, namespace string) error {
...
@@ -49,13 +49,13 @@ func deleteService(client coreclient.ServicesGetter, namespace string) error {
// deleteDeployment deletes the Tiller Deployment resource
// deleteDeployment deletes the Tiller Deployment resource
// We need to use the reaper instead of the kube API because GC for deployment dependents
// We need to use the reaper instead of the kube API because GC for deployment dependents
// is not yet supported at the k8s server level (<= 1.5)
// is not yet supported at the k8s server level (<= 1.5)
func
deleteDeployment
(
client
internalclientset
.
Interface
,
namespace
string
)
error
{
func
deleteDeployment
(
client
kubernetes
.
Interface
,
namespace
string
)
error
{
err
:=
client
.
Extensions
()
.
Deployments
(
namespace
)
.
Delete
(
deploymentName
,
&
metav1
.
DeleteOptions
{})
err
:=
client
.
Extensions
()
.
Deployments
(
namespace
)
.
Delete
(
deploymentName
,
&
metav1
.
DeleteOptions
{})
return
ingoreNotFound
(
err
)
return
ingoreNotFound
(
err
)
}
}
// deleteSecret deletes the Tiller Secret resource
// deleteSecret deletes the Tiller Secret resource
func
deleteSecret
(
client
core
client
.
SecretsGetter
,
namespace
string
)
error
{
func
deleteSecret
(
client
core
v1
.
SecretsGetter
,
namespace
string
)
error
{
err
:=
client
.
Secrets
(
namespace
)
.
Delete
(
secretName
,
&
metav1
.
DeleteOptions
{})
err
:=
client
.
Secrets
(
namespace
)
.
Delete
(
secretName
,
&
metav1
.
DeleteOptions
{})
return
ingoreNotFound
(
err
)
return
ingoreNotFound
(
err
)
}
}
...
...
cmd/helm/installer/uninstall_test.go
View file @
de5a6a93
...
@@ -19,17 +19,17 @@ package installer // import "k8s.io/helm/cmd/helm/installer"
...
@@ -19,17 +19,17 @@ package installer // import "k8s.io/helm/cmd/helm/installer"
import
(
import
(
"testing"
"testing"
"k8s.io/api/core/v1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/kubernetes/fake"
testcore
"k8s.io/client-go/testing"
testcore
"k8s.io/client-go/testing"
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
)
)
func
TestUninstall
(
t
*
testing
.
T
)
{
func
TestUninstall
(
t
*
testing
.
T
)
{
fc
:=
&
fake
.
Clientset
{}
fc
:=
&
fake
.
Clientset
{}
opts
:=
&
Options
{
Namespace
:
core
.
NamespaceDefault
}
opts
:=
&
Options
{
Namespace
:
v1
.
NamespaceDefault
}
if
err
:=
Uninstall
(
fc
,
opts
);
err
!=
nil
{
if
err
:=
Uninstall
(
fc
,
opts
);
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
}
}
...
@@ -45,7 +45,7 @@ func TestUninstall_serviceNotFound(t *testing.T) {
...
@@ -45,7 +45,7 @@ func TestUninstall_serviceNotFound(t *testing.T) {
return
true
,
nil
,
apierrors
.
NewNotFound
(
schema
.
GroupResource
{
Resource
:
"services"
},
"1"
)
return
true
,
nil
,
apierrors
.
NewNotFound
(
schema
.
GroupResource
{
Resource
:
"services"
},
"1"
)
})
})
opts
:=
&
Options
{
Namespace
:
core
.
NamespaceDefault
}
opts
:=
&
Options
{
Namespace
:
v1
.
NamespaceDefault
}
if
err
:=
Uninstall
(
fc
,
opts
);
err
!=
nil
{
if
err
:=
Uninstall
(
fc
,
opts
);
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
}
}
...
@@ -58,10 +58,10 @@ func TestUninstall_serviceNotFound(t *testing.T) {
...
@@ -58,10 +58,10 @@ func TestUninstall_serviceNotFound(t *testing.T) {
func
TestUninstall_deploymentNotFound
(
t
*
testing
.
T
)
{
func
TestUninstall_deploymentNotFound
(
t
*
testing
.
T
)
{
fc
:=
&
fake
.
Clientset
{}
fc
:=
&
fake
.
Clientset
{}
fc
.
AddReactor
(
"delete"
,
"deployments"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
fc
.
AddReactor
(
"delete"
,
"deployments"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
return
true
,
nil
,
apierrors
.
NewNotFound
(
core
.
Resource
(
"deployments"
)
,
"1"
)
return
true
,
nil
,
apierrors
.
NewNotFound
(
schema
.
GroupResource
{
Resource
:
"deployments"
}
,
"1"
)
})
})
opts
:=
&
Options
{
Namespace
:
core
.
NamespaceDefault
}
opts
:=
&
Options
{
Namespace
:
v1
.
NamespaceDefault
}
if
err
:=
Uninstall
(
fc
,
opts
);
err
!=
nil
{
if
err
:=
Uninstall
(
fc
,
opts
);
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
}
}
...
@@ -74,10 +74,10 @@ func TestUninstall_deploymentNotFound(t *testing.T) {
...
@@ -74,10 +74,10 @@ func TestUninstall_deploymentNotFound(t *testing.T) {
func
TestUninstall_secretNotFound
(
t
*
testing
.
T
)
{
func
TestUninstall_secretNotFound
(
t
*
testing
.
T
)
{
fc
:=
&
fake
.
Clientset
{}
fc
:=
&
fake
.
Clientset
{}
fc
.
AddReactor
(
"delete"
,
"secrets"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
fc
.
AddReactor
(
"delete"
,
"secrets"
,
func
(
action
testcore
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
return
true
,
nil
,
apierrors
.
NewNotFound
(
core
.
Resource
(
"secrets"
)
,
"1"
)
return
true
,
nil
,
apierrors
.
NewNotFound
(
schema
.
GroupResource
{
Resource
:
"secrets"
}
,
"1"
)
})
})
opts
:=
&
Options
{
Namespace
:
core
.
NamespaceDefault
}
opts
:=
&
Options
{
Namespace
:
v1
.
NamespaceDefault
}
if
err
:=
Uninstall
(
fc
,
opts
);
err
!=
nil
{
if
err
:=
Uninstall
(
fc
,
opts
);
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
t
.
Errorf
(
"unexpected error: %#+v"
,
err
)
}
}
...
...
cmd/helm/reset.go
View file @
de5a6a93
...
@@ -23,7 +23,8 @@ import (
...
@@ -23,7 +23,8 @@ import (
"os"
"os"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/client-go/kubernetes"
"k8s.io/helm/cmd/helm/installer"
"k8s.io/helm/cmd/helm/installer"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm"
...
@@ -44,7 +45,7 @@ type resetCmd struct {
...
@@ -44,7 +45,7 @@ type resetCmd struct {
out
io
.
Writer
out
io
.
Writer
home
helmpath
.
Home
home
helmpath
.
Home
client
helm
.
Interface
client
helm
.
Interface
kubeClient
internalclientset
.
Interface
kubeClient
kubernetes
.
Interface
}
}
func
newResetCmd
(
client
helm
.
Interface
,
out
io
.
Writer
)
*
cobra
.
Command
{
func
newResetCmd
(
client
helm
.
Interface
,
out
io
.
Writer
)
*
cobra
.
Command
{
...
@@ -90,7 +91,7 @@ func newResetCmd(client helm.Interface, out io.Writer) *cobra.Command {
...
@@ -90,7 +91,7 @@ func newResetCmd(client helm.Interface, out io.Writer) *cobra.Command {
// runReset uninstalls tiller from Kubernetes Cluster and deletes local config
// runReset uninstalls tiller from Kubernetes Cluster and deletes local config
func
(
d
*
resetCmd
)
run
()
error
{
func
(
d
*
resetCmd
)
run
()
error
{
if
d
.
kubeClient
==
nil
{
if
d
.
kubeClient
==
nil
{
c
,
err
:=
getInternal
KubeClient
(
settings
.
KubeContext
,
settings
.
KubeConfig
)
_
,
c
,
err
:=
get
KubeClient
(
settings
.
KubeContext
,
settings
.
KubeConfig
)
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"could not get kubernetes client: %s"
,
err
)
return
fmt
.
Errorf
(
"could not get kubernetes client: %s"
,
err
)
}
}
...
...
cmd/helm/reset_test.go
View file @
de5a6a93
...
@@ -23,8 +23,8 @@ import (
...
@@ -23,8 +23,8 @@ import (
"strings"
"strings"
"testing"
"testing"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
"k8s.io/
kubernetes/pkg/client/clientset_generated/internalclientset
/fake"
"k8s.io/
client-go/kubernetes
/fake"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/helm/helmpath"
...
@@ -101,7 +101,7 @@ func verifyResetCmd(t *testing.T, tc resetCase) {
...
@@ -101,7 +101,7 @@ func verifyResetCmd(t *testing.T, tc resetCase) {
home
:
helmpath
.
Home
(
home
),
home
:
helmpath
.
Home
(
home
),
client
:
c
,
client
:
c
,
kubeClient
:
fc
,
kubeClient
:
fc
,
namespace
:
core
.
NamespaceDefault
,
namespace
:
v1
.
NamespaceDefault
,
}
}
err
=
cmd
.
run
()
err
=
cmd
.
run
()
...
...
cmd/rudder/rudder.go
View file @
de5a6a93
...
@@ -21,12 +21,12 @@ import (
...
@@ -21,12 +21,12 @@ import (
"fmt"
"fmt"
"net"
"net"
"github.com/spf13/pflag"
"golang.org/x/net/context"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/grpclog"
"k8s.io/
kubernetes/pkg/client/clientset_generated/internalclientset
"
"k8s.io/
client-go/kubernetes
"
"github.com/spf13/pflag"
"k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/kube"
rudderAPI
"k8s.io/helm/pkg/proto/hapi/rudder"
rudderAPI
"k8s.io/helm/pkg/proto/hapi/rudder"
"k8s.io/helm/pkg/tiller"
"k8s.io/helm/pkg/tiller"
...
@@ -34,7 +34,7 @@ import (
...
@@ -34,7 +34,7 @@ import (
)
)
var
kubeClient
*
kube
.
Client
var
kubeClient
*
kube
.
Client
var
clientset
internalclientset
.
Interface
var
clientset
kubernetes
.
Interface
type
options
struct
{
type
options
struct
{
listen
string
listen
string
...
@@ -59,7 +59,7 @@ func main() {
...
@@ -59,7 +59,7 @@ func main() {
opts
.
regAndParseFlags
()
opts
.
regAndParseFlags
()
var
err
error
var
err
error
kubeClient
=
kube
.
New
(
nil
)
kubeClient
=
kube
.
New
(
nil
)
clientset
,
err
=
kubeClient
.
ClientSet
()
clientset
,
err
=
kubeClient
.
Kubernetes
ClientSet
()
if
err
!=
nil
{
if
err
!=
nil
{
grpclog
.
Fatalf
(
"Cannot initialize Kubernetes connection: %s"
,
err
)
grpclog
.
Fatalf
(
"Cannot initialize Kubernetes connection: %s"
,
err
)
}
}
...
...
cmd/tiller/tiller.go
View file @
de5a6a93
...
@@ -39,6 +39,7 @@ import (
...
@@ -39,6 +39,7 @@ import (
// Import to initialize client auth plugins.
// Import to initialize client auth plugins.
_
"k8s.io/client-go/plugin/pkg/client/auth"
_
"k8s.io/client-go/plugin/pkg/client/auth"
"k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/proto/hapi/services"
"k8s.io/helm/pkg/proto/hapi/services"
"k8s.io/helm/pkg/storage"
"k8s.io/helm/pkg/storage"
...
@@ -120,7 +121,7 @@ func start() {
...
@@ -120,7 +121,7 @@ func start() {
healthSrv
:=
health
.
NewServer
()
healthSrv
:=
health
.
NewServer
()
healthSrv
.
SetServingStatus
(
"Tiller"
,
healthpb
.
HealthCheckResponse_NOT_SERVING
)
healthSrv
.
SetServingStatus
(
"Tiller"
,
healthpb
.
HealthCheckResponse_NOT_SERVING
)
clientset
,
err
:=
kube
.
New
(
nil
)
.
ClientSet
()
clientset
,
err
:=
kube
.
New
(
nil
)
.
Kubernetes
ClientSet
()
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Fatalf
(
"Cannot initialize Kubernetes connection: %s"
,
err
)
logger
.
Fatalf
(
"Cannot initialize Kubernetes connection: %s"
,
err
)
}
}
...
@@ -129,13 +130,13 @@ func start() {
...
@@ -129,13 +130,13 @@ func start() {
case
storageMemory
:
case
storageMemory
:
env
.
Releases
=
storage
.
Init
(
driver
.
NewMemory
())
env
.
Releases
=
storage
.
Init
(
driver
.
NewMemory
())
case
storageConfigMap
:
case
storageConfigMap
:
cfgmaps
:=
driver
.
NewConfigMaps
(
clientset
.
Core
()
.
ConfigMaps
(
namespace
()))
cfgmaps
:=
driver
.
NewConfigMaps
(
clientset
.
Core
V1
()
.
ConfigMaps
(
namespace
()))
cfgmaps
.
Log
=
newLogger
(
"storage/driver"
)
.
Printf
cfgmaps
.
Log
=
newLogger
(
"storage/driver"
)
.
Printf
env
.
Releases
=
storage
.
Init
(
cfgmaps
)
env
.
Releases
=
storage
.
Init
(
cfgmaps
)
env
.
Releases
.
Log
=
newLogger
(
"storage"
)
.
Printf
env
.
Releases
.
Log
=
newLogger
(
"storage"
)
.
Printf
case
storageSecret
:
case
storageSecret
:
secrets
:=
driver
.
NewSecrets
(
clientset
.
Core
()
.
Secrets
(
namespace
()))
secrets
:=
driver
.
NewSecrets
(
clientset
.
Core
V1
()
.
Secrets
(
namespace
()))
secrets
.
Log
=
newLogger
(
"storage/driver"
)
.
Printf
secrets
.
Log
=
newLogger
(
"storage/driver"
)
.
Printf
env
.
Releases
=
storage
.
Init
(
secrets
)
env
.
Releases
=
storage
.
Init
(
secrets
)
...
...
glide.lock
View file @
de5a6a93
This diff is collapsed.
Click to expand it.
glide.yaml
View file @
de5a6a93
package
:
k8s.io/helm
package
:
k8s.io/helm
import
:
import
:
-
package
:
golang.org/x/net
-
package
:
golang.org/x/net
subpackages
:
subpackages
:
-
context
-
context
-
package
:
github.com/spf13/cobra
-
package
:
github.com/spf13/cobra
version
:
c439c4fa093711d42e1b01acb1235b52004753c1
version
:
c439c4fa093711d42e1b01acb1235b52004753c1
-
package
:
github.com/spf13/pflag
-
package
:
github.com/spf13/pflag
version
:
583c0c0531f06d5278b7d917446061adc344b5cd
version
:
~1.0.1
-
package
:
github.com/Masterminds/vcs
-
package
:
github.com/Masterminds/vcs
version
:
~1.11.0
# Pin version of mergo that is compatible with both sprig and Kubernetes
# Pin version of mergo that is compatible with both sprig and Kubernetes
-
package
:
github.com/imdario/mergo
-
package
:
github.com/imdario/mergo
version
:
6633656539c1639d9d78127b7d47c622b5d7b6dc
version
:
v0.3.5
-
package
:
github.com/Masterminds/sprig
-
package
:
github.com/Masterminds/sprig
version
:
^2.16.0
version
:
^2.16.0
-
package
:
github.com/ghodss/yaml
-
package
:
github.com/ghodss/yaml
-
package
:
github.com/Masterminds/semver
-
package
:
github.com/Masterminds/semver
version
:
~1.3.1
version
:
~1.3.1
-
package
:
github.com/technosophos/moniker
-
package
:
github.com/technosophos/moniker
version
:
~0.2
version
:
~0.2
-
package
:
github.com/golang/protobuf
-
package
:
github.com/golang/protobuf
version
:
1643683e1b54a9e88ad26d98f81400c8c9d9f4f9
version
:
1643683e1b54a9e88ad26d98f81400c8c9d9f4f9
subpackages
:
subpackages
:
-
proto
-
proto
-
ptypes/any
-
ptypes/any
-
ptypes/timestamp
-
ptypes/timestamp
-
package
:
google.golang.org/grpc
-
package
:
google.golang.org/grpc
version
:
1.7.2
version
:
1.7.2
-
package
:
github.com/gosuri/uitable
-
package
:
github.com/gosuri/uitable
-
package
:
github.com/asaskevich/govalidator
-
package
:
github.com/asaskevich/govalidator
version
:
^4.0.0
version
:
^4.0.0
-
package
:
golang.org/x/crypto
-
package
:
golang.org/x/crypto
subpackages
:
subpackages
:
-
openpgp
-
openpgp
-
ssh/terminal
-
ssh/terminal
# pin version of golang.org/x/sys that is compatible with golang.org/x/crypto
-
package
:
github.com/gobwas/glob
-
package
:
golang.org/x/sys
version
:
^0.2.1
version
:
43eea11
-
package
:
github.com/evanphx/json-patch
subpackages
:
-
package
:
github.com/BurntSushi/toml
-
unix
version
:
~0.3.0
-
windows
-
package
:
github.com/prometheus/client_golang
-
package
:
github.com/gobwas/glob
version
:
0.8.0
version
:
^0.2.1
-
package
:
github.com/grpc-ecosystem/go-grpc-prometheus
-
package
:
github.com/evanphx/json-patch
-
package
:
github.com/BurntSushi/toml
version
:
~0.3.0
-
package
:
github.com/prometheus/client_golang
version
:
0.8.0
-
package
:
github.com/grpc-ecosystem/go-grpc-prometheus
-
package
:
k8s.io/kubernetes
-
package
:
k8s.io/kubernetes
version
:
release-1.11
version
:
release-1.12
-
package
:
k8s.io/client-go
-
package
:
k8s.io/client-go
version
:
kubernetes-1.11.1
version
:
kubernetes-1.12.0
-
package
:
k8s.io/api
-
package
:
k8s.io/api
version
:
kubernetes-1.11.1
version
:
kubernetes-1.12.0
-
package
:
k8s.io/apimachinery
-
package
:
k8s.io/apimachinery
version
:
kubernetes-1.11.1
version
:
kubernetes-1.12.0
-
package
:
k8s.io/apiserver
-
package
:
k8s.io/apiserver
version
:
kubernetes-1.11.1
version
:
kubernetes-1.12.0
-
package
:
github.com/cyphar/filepath-securejoin
-
package
:
k8s.io/cli-runtime
version
:
^0.2.1
version
:
kubernetes-1.12.0
-
package
:
github.com/cyphar/filepath-securejoin
version
:
^0.2.1
testImports
:
testImports
:
-
package
:
github.com/stretchr/testify
-
package
:
github.com/stretchr/testify
version
:
^1.1.4
version
:
^1.1.4
subpackages
:
subpackages
:
-
assert
-
assert
pkg/helm/portforwarder/portforwarder_test.go
View file @
de5a6a93
...
@@ -76,7 +76,7 @@ func TestGetFirstPod(t *testing.T) {
...
@@ -76,7 +76,7 @@ func TestGetFirstPod(t *testing.T) {
for
_
,
tt
:=
range
tests
{
for
_
,
tt
:=
range
tests
{
client
:=
fake
.
NewSimpleClientset
(
&
v1
.
PodList
{
Items
:
tt
.
pods
})
client
:=
fake
.
NewSimpleClientset
(
&
v1
.
PodList
{
Items
:
tt
.
pods
})
name
,
err
:=
GetTillerPodName
(
client
.
Core
(),
v1
.
NamespaceDefault
)
name
,
err
:=
GetTillerPodName
(
client
.
Core
V1
(),
v1
.
NamespaceDefault
)
if
(
err
!=
nil
)
!=
tt
.
err
{
if
(
err
!=
nil
)
!=
tt
.
err
{
t
.
Errorf
(
"%q. expected error: %v, got %v"
,
tt
.
name
,
tt
.
err
,
err
)
t
.
Errorf
(
"%q. expected error: %v, got %v"
,
tt
.
name
,
tt
.
err
,
err
)
}
}
...
...
pkg/kube/client.go
View file @
de5a6a93
...
@@ -18,6 +18,7 @@ package kube // import "k8s.io/helm/pkg/kube"
...
@@ -18,6 +18,7 @@ package kube // import "k8s.io/helm/pkg/kube"
import
(
import
(
"bytes"
"bytes"
"context"
"encoding/json"
"encoding/json"
goerrors
"errors"
goerrors
"errors"
"fmt"
"fmt"
...
@@ -42,20 +43,19 @@ import (
...
@@ -42,20 +43,19 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/cli-runtime/pkg/genericclioptions/resource"
watchtools
"k8s.io/client-go/tools/watch"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
batchinternal
"k8s.io/kubernetes/pkg/apis/batch"
batchinternal
"k8s.io/kubernetes/pkg/apis/batch"
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/kubectl/cmd/get"
"k8s.io/kubernetes/pkg/kubectl/cmd/get"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/validation"
"k8s.io/kubernetes/pkg/kubectl/validation"
)
)
const
(
// MissingGetHeader is added to Get's output when a resource is not found.
// MissingGetHeader is added to Get's output when a resource is not found.
const
MissingGetHeader
=
"==> MISSING
\n
KIND
\t\t
NAME
\n
"
MissingGetHeader
=
"==> MISSING
\n
KIND
\t\t
NAME
\n
"
)
// ErrNoObjectsVisited indicates that during a visit operation, no matching objects were found.
// ErrNoObjectsVisited indicates that during a visit operation, no matching objects were found.
var
ErrNoObjectsVisited
=
goerrors
.
New
(
"no objects visited"
)
var
ErrNoObjectsVisited
=
goerrors
.
New
(
"no objects visited"
)
...
@@ -86,7 +86,7 @@ type ResourceActorFunc func(*resource.Info) error
...
@@ -86,7 +86,7 @@ type ResourceActorFunc func(*resource.Info) error
//
//
// Namespace will set the namespace.
// Namespace will set the namespace.
func
(
c
*
Client
)
Create
(
namespace
string
,
reader
io
.
Reader
,
timeout
int64
,
shouldWait
bool
)
error
{
func
(
c
*
Client
)
Create
(
namespace
string
,
reader
io
.
Reader
,
timeout
int64
,
shouldWait
bool
)
error
{
client
,
err
:=
c
.
ClientSet
()
client
,
err
:=
c
.
Kubernetes
ClientSet
()
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -163,7 +163,7 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) {
...
@@ -163,7 +163,7 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) {
return
""
,
err
return
""
,
err
}
}
var
objPods
=
make
(
map
[
string
][]
core
.
Pod
)
var
objPods
=
make
(
map
[
string
][]
v1
.
Pod
)
missing
:=
[]
string
{}
missing
:=
[]
string
{}
err
=
perform
(
infos
,
func
(
info
*
resource
.
Info
)
error
{
err
=
perform
(
infos
,
func
(
info
*
resource
.
Info
)
error
{
...
@@ -368,7 +368,7 @@ func perform(infos Result, fn ResourceActorFunc) error {
...
@@ -368,7 +368,7 @@ func perform(infos Result, fn ResourceActorFunc) error {
}
}
func
createResource
(
info
*
resource
.
Info
)
error
{
func
createResource
(
info
*
resource
.
Info
)
error
{
obj
,
err
:=
resource
.
NewHelper
(
info
.
Client
,
info
.
Mapping
)
.
Create
(
info
.
Namespace
,
true
,
info
.
Object
)
obj
,
err
:=
resource
.
NewHelper
(
info
.
Client
,
info
.
Mapping
)
.
Create
(
info
.
Namespace
,
true
,
info
.
Object
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -438,7 +438,7 @@ func updateResource(c *Client, target *resource.Info, currentObj runtime.Object,
...
@@ -438,7 +438,7 @@ func updateResource(c *Client, target *resource.Info, currentObj runtime.Object,
// send patch to server
// send patch to server
helper
:=
resource
.
NewHelper
(
target
.
Client
,
target
.
Mapping
)
helper
:=
resource
.
NewHelper
(
target
.
Client
,
target
.
Mapping
)
obj
,
err
:=
helper
.
Patch
(
target
.
Namespace
,
target
.
Name
,
patchType
,
patch
)
obj
,
err
:=
helper
.
Patch
(
target
.
Namespace
,
target
.
Name
,
patchType
,
patch
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
kind
:=
target
.
Mapping
.
GroupVersionKind
.
Kind
kind
:=
target
.
Mapping
.
GroupVersionKind
.
Kind
log
.
Printf
(
"Cannot patch %s: %q (%v)"
,
kind
,
target
.
Name
,
err
)
log
.
Printf
(
"Cannot patch %s: %q (%v)"
,
kind
,
target
.
Name
,
err
)
...
@@ -479,12 +479,12 @@ func updateResource(c *Client, target *resource.Info, currentObj runtime.Object,
...
@@ -479,12 +479,12 @@ func updateResource(c *Client, target *resource.Info, currentObj runtime.Object,
return
nil
return
nil
}
}
client
,
err
:=
c
.
ClientSet
()
client
,
err
:=
c
.
Kubernetes
ClientSet
()
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
pods
,
err
:=
client
.
Core
()
.
Pods
(
target
.
Namespace
)
.
List
(
metav1
.
ListOptions
{
pods
,
err
:=
client
.
Core
V1
()
.
Pods
(
target
.
Namespace
)
.
List
(
metav1
.
ListOptions
{
FieldSelector
:
fields
.
Everything
()
.
String
(),
FieldSelector
:
fields
.
Everything
()
.
String
(),
LabelSelector
:
labels
.
Set
(
selector
)
.
AsSelector
()
.
String
(),
LabelSelector
:
labels
.
Set
(
selector
)
.
AsSelector
()
.
String
(),
})
})
...
@@ -497,7 +497,7 @@ func updateResource(c *Client, target *resource.Info, currentObj runtime.Object,
...
@@ -497,7 +497,7 @@ func updateResource(c *Client, target *resource.Info, currentObj runtime.Object,
c
.
Log
(
"Restarting pod: %v/%v"
,
pod
.
Namespace
,
pod
.
Name
)
c
.
Log
(
"Restarting pod: %v/%v"
,
pod
.
Namespace
,
pod
.
Name
)
// Delete each pod for get them restarted with changed spec.
// Delete each pod for get them restarted with changed spec.
if
err
:=
client
.
Core
()
.
Pods
(
pod
.
Namespace
)
.
Delete
(
pod
.
Name
,
metav1
.
NewPreconditionDeleteOptions
(
string
(
pod
.
UID
)));
err
!=
nil
{
if
err
:=
client
.
Core
V1
()
.
Pods
(
pod
.
Namespace
)
.
Delete
(
pod
.
Name
,
metav1
.
NewPreconditionDeleteOptions
(
string
(
pod
.
UID
)));
err
!=
nil
{
return
err
return
err
}
}
}
}
...
@@ -561,7 +561,9 @@ func (c *Client) watchUntilReady(timeout time.Duration, info *resource.Info) err
...
@@ -561,7 +561,9 @@ func (c *Client) watchUntilReady(timeout time.Duration, info *resource.Info) err
// In the future, we might want to add some special logic for types
// In the future, we might want to add some special logic for types
// like Ingress, Volume, etc.
// like Ingress, Volume, etc.
_
,
err
=
watch
.
Until
(
timeout
,
w
,
func
(
e
watch
.
Event
)
(
bool
,
error
)
{
ctx
,
cancel
:=
watchtools
.
ContextWithOptionalTimeout
(
context
.
Background
(),
timeout
)
defer
cancel
()
_
,
err
=
watchtools
.
UntilWithoutRetry
(
ctx
,
w
,
func
(
e
watch
.
Event
)
(
bool
,
error
)
{
switch
e
.
Type
{
switch
e
.
Type
{
case
watch
.
Added
,
watch
.
Modified
:
case
watch
.
Added
,
watch
.
Modified
:
// For things like a secret or a config map, this is the best indicator
// For things like a secret or a config map, this is the best indicator
...
@@ -623,26 +625,26 @@ func scrubValidationError(err error) error {
...
@@ -623,26 +625,26 @@ func scrubValidationError(err error) error {
// WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase
// WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase
// and returns said phase (PodSucceeded or PodFailed qualify).
// and returns said phase (PodSucceeded or PodFailed qualify).
func
(
c
*
Client
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
core
.
PodPhase
,
error
)
{
func
(
c
*
Client
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
v1
.
PodPhase
,
error
)
{
infos
,
err
:=
c
.
Build
(
namespace
,
reader
)
infos
,
err
:=
c
.
Build
(
namespace
,
reader
)
if
err
!=
nil
{
if
err
!=
nil
{
return
core
.
PodUnknown
,
err
return
v1
.
PodUnknown
,
err
}
}
info
:=
infos
[
0
]
info
:=
infos
[
0
]
kind
:=
info
.
Mapping
.
GroupVersionKind
.
Kind
kind
:=
info
.
Mapping
.
GroupVersionKind
.
Kind
if
kind
!=
"Pod"
{
if
kind
!=
"Pod"
{
return
core
.
PodUnknown
,
fmt
.
Errorf
(
"%s is not a Pod"
,
info
.
Name
)
return
v1
.
PodUnknown
,
fmt
.
Errorf
(
"%s is not a Pod"
,
info
.
Name
)
}
}
if
err
:=
c
.
watchPodUntilComplete
(
timeout
,
info
);
err
!=
nil
{
if
err
:=
c
.
watchPodUntilComplete
(
timeout
,
info
);
err
!=
nil
{
return
core
.
PodUnknown
,
err
return
v1
.
PodUnknown
,
err
}
}
if
err
:=
info
.
Get
();
err
!=
nil
{
if
err
:=
info
.
Get
();
err
!=
nil
{
return
core
.
PodUnknown
,
err
return
v1
.
PodUnknown
,
err
}
}
status
:=
info
.
Object
.
(
*
core
.
Pod
)
.
Status
.
Phase
status
:=
info
.
Object
.
(
*
v1
.
Pod
)
.
Status
.
Phase
return
status
,
nil
return
status
,
nil
}
}
...
@@ -654,7 +656,9 @@ func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Inf
...
@@ -654,7 +656,9 @@ func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Inf
}
}
c
.
Log
(
"Watching pod %s for completion with timeout of %v"
,
info
.
Name
,
timeout
)
c
.
Log
(
"Watching pod %s for completion with timeout of %v"
,
info
.
Name
,
timeout
)
_
,
err
=
watch
.
Until
(
timeout
,
w
,
func
(
e
watch
.
Event
)
(
bool
,
error
)
{
ctx
,
cancel
:=
watchtools
.
ContextWithOptionalTimeout
(
context
.
Background
(),
timeout
)
defer
cancel
()
_
,
err
=
watchtools
.
UntilWithoutRetry
(
ctx
,
w
,
func
(
e
watch
.
Event
)
(
bool
,
error
)
{
return
isPodComplete
(
e
)
return
isPodComplete
(
e
)
})
})
...
@@ -662,15 +666,15 @@ func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Inf
...
@@ -662,15 +666,15 @@ func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Inf
}
}
func
isPodComplete
(
event
watch
.
Event
)
(
bool
,
error
)
{
func
isPodComplete
(
event
watch
.
Event
)
(
bool
,
error
)
{
o
,
ok
:=
event
.
Object
.
(
*
core
.
Pod
)
o
,
ok
:=
event
.
Object
.
(
*
v1
.
Pod
)
if
!
ok
{
if
!
ok
{
return
true
,
fmt
.
Errorf
(
"expected a *
core
.Pod, got %T"
,
event
.
Object
)
return
true
,
fmt
.
Errorf
(
"expected a *
v1
.Pod, got %T"
,
event
.
Object
)
}
}
if
event
.
Type
==
watch
.
Deleted
{
if
event
.
Type
==
watch
.
Deleted
{
return
false
,
fmt
.
Errorf
(
"pod not found"
)
return
false
,
fmt
.
Errorf
(
"pod not found"
)
}
}
switch
o
.
Status
.
Phase
{
switch
o
.
Status
.
Phase
{
case
core
.
PodFailed
,
core
.
PodSucceeded
:
case
v1
.
PodFailed
,
v1
.
PodSucceeded
:
return
true
,
nil
return
true
,
nil
}
}
return
false
,
nil
return
false
,
nil
...
@@ -678,7 +682,7 @@ func isPodComplete(event watch.Event) (bool, error) {
...
@@ -678,7 +682,7 @@ func isPodComplete(event watch.Event) (bool, error) {
//get a kubernetes resources' relation pods
//get a kubernetes resources' relation pods
// kubernetes resource used select labels to relate pods
// kubernetes resource used select labels to relate pods
func
(
c
*
Client
)
getSelectRelationPod
(
info
*
resource
.
Info
,
objPods
map
[
string
][]
core
.
Pod
)
(
map
[
string
][]
core
.
Pod
,
error
)
{
func
(
c
*
Client
)
getSelectRelationPod
(
info
*
resource
.
Info
,
objPods
map
[
string
][]
v1
.
Pod
)
(
map
[
string
][]
v1
.
Pod
,
error
)
{
if
info
==
nil
{
if
info
==
nil
{
return
objPods
,
nil
return
objPods
,
nil
}
}
...
@@ -691,9 +695,9 @@ func (c *Client) getSelectRelationPod(info *resource.Info, objPods map[string][]
...
@@ -691,9 +695,9 @@ func (c *Client) getSelectRelationPod(info *resource.Info, objPods map[string][]
return
objPods
,
nil
return
objPods
,
nil
}
}
client
,
_
:=
c
.
ClientSet
()
client
,
_
:=
c
.
Kubernetes
ClientSet
()
pods
,
err
:=
client
.
Core
()
.
Pods
(
info
.
Namespace
)
.
List
(
metav1
.
ListOptions
{
pods
,
err
:=
client
.
Core
V1
()
.
Pods
(
info
.
Namespace
)
.
List
(
metav1
.
ListOptions
{
FieldSelector
:
fields
.
Everything
()
.
String
(),
FieldSelector
:
fields
.
Everything
()
.
String
(),
LabelSelector
:
labels
.
Set
(
selector
)
.
AsSelector
()
.
String
(),
LabelSelector
:
labels
.
Set
(
selector
)
.
AsSelector
()
.
String
(),
})
})
...
@@ -718,7 +722,7 @@ func (c *Client) getSelectRelationPod(info *resource.Info, objPods map[string][]
...
@@ -718,7 +722,7 @@ func (c *Client) getSelectRelationPod(info *resource.Info, objPods map[string][]
return
objPods
,
nil
return
objPods
,
nil
}
}
func
isFoundPod
(
podItem
[]
core
.
Pod
,
pod
core
.
Pod
)
bool
{
func
isFoundPod
(
podItem
[]
v1
.
Pod
,
pod
v1
.
Pod
)
bool
{
for
_
,
value
:=
range
podItem
{
for
_
,
value
:=
range
podItem
{
if
(
value
.
Namespace
==
pod
.
Namespace
)
&&
(
value
.
Name
==
pod
.
Name
)
{
if
(
value
.
Namespace
==
pod
.
Namespace
)
&&
(
value
.
Name
==
pod
.
Name
)
{
return
true
return
true
...
...
pkg/kube/client_test.go
View file @
de5a6a93
...
@@ -24,15 +24,15 @@ import (
...
@@ -24,15 +24,15 @@ import (
"strings"
"strings"
"testing"
"testing"
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/cli-runtime/pkg/genericclioptions/resource"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/apis/core"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
)
)
...
@@ -42,34 +42,34 @@ func objBody(codec runtime.Codec, obj runtime.Object) io.ReadCloser {
...
@@ -42,34 +42,34 @@ func objBody(codec runtime.Codec, obj runtime.Object) io.ReadCloser {
return
ioutil
.
NopCloser
(
bytes
.
NewReader
([]
byte
(
runtime
.
EncodeOrDie
(
codec
,
obj
))))
return
ioutil
.
NopCloser
(
bytes
.
NewReader
([]
byte
(
runtime
.
EncodeOrDie
(
codec
,
obj
))))
}
}
func
newPod
(
name
string
)
core
.
Pod
{
func
newPod
(
name
string
)
v1
.
Pod
{
return
newPodWithStatus
(
name
,
core
.
PodStatus
{},
""
)
return
newPodWithStatus
(
name
,
v1
.
PodStatus
{},
""
)
}
}
func
newPodWithStatus
(
name
string
,
status
core
.
PodStatus
,
namespace
string
)
core
.
Pod
{
func
newPodWithStatus
(
name
string
,
status
v1
.
PodStatus
,
namespace
string
)
v1
.
Pod
{
ns
:=
core
.
NamespaceDefault
ns
:=
v1
.
NamespaceDefault
if
namespace
!=
""
{
if
namespace
!=
""
{
ns
=
namespace
ns
=
namespace
}
}
return
core
.
Pod
{
return
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
name
,
Name
:
name
,
Namespace
:
ns
,
Namespace
:
ns
,
SelfLink
:
"/api/v1/namespaces/default/pods/"
+
name
,
SelfLink
:
"/api/v1/namespaces/default/pods/"
+
name
,
},
},
Spec
:
core
.
PodSpec
{
Spec
:
v1
.
PodSpec
{
Containers
:
[]
core
.
Container
{{
Containers
:
[]
v1
.
Container
{{
Name
:
"app:v4"
,
Name
:
"app:v4"
,
Image
:
"abc/app:v4"
,
Image
:
"abc/app:v4"
,
Ports
:
[]
core
.
ContainerPort
{{
Name
:
"http"
,
ContainerPort
:
80
}},
Ports
:
[]
v1
.
ContainerPort
{{
Name
:
"http"
,
ContainerPort
:
80
}},
}},
}},
},
},
Status
:
status
,
Status
:
status
,
}
}
}
}
func
newPodList
(
names
...
string
)
core
.
PodList
{
func
newPodList
(
names
...
string
)
v1
.
PodList
{
var
list
core
.
PodList
var
list
v1
.
PodList
for
_
,
name
:=
range
names
{
for
_
,
name
:=
range
names
{
list
.
Items
=
append
(
list
.
Items
,
newPod
(
name
))
list
.
Items
=
append
(
list
.
Items
,
newPod
(
name
))
}
}
...
@@ -114,8 +114,8 @@ func TestUpdate(t *testing.T) {
...
@@ -114,8 +114,8 @@ func TestUpdate(t *testing.T) {
listA
:=
newPodList
(
"starfish"
,
"otter"
,
"squid"
)
listA
:=
newPodList
(
"starfish"
,
"otter"
,
"squid"
)
listB
:=
newPodList
(
"starfish"
,
"otter"
,
"dolphin"
)
listB
:=
newPodList
(
"starfish"
,
"otter"
,
"dolphin"
)
listC
:=
newPodList
(
"starfish"
,
"otter"
,
"dolphin"
)
listC
:=
newPodList
(
"starfish"
,
"otter"
,
"dolphin"
)
listB
.
Items
[
0
]
.
Spec
.
Containers
[
0
]
.
Ports
=
[]
core
.
ContainerPort
{{
Name
:
"https"
,
ContainerPort
:
443
}}
listB
.
Items
[
0
]
.
Spec
.
Containers
[
0
]
.
Ports
=
[]
v1
.
ContainerPort
{{
Name
:
"https"
,
ContainerPort
:
443
}}
listC
.
Items
[
0
]
.
Spec
.
Containers
[
0
]
.
Ports
=
[]
core
.
ContainerPort
{{
Name
:
"https"
,
ContainerPort
:
443
}}
listC
.
Items
[
0
]
.
Spec
.
Containers
[
0
]
.
Ports
=
[]
v1
.
ContainerPort
{{
Name
:
"https"
,
ContainerPort
:
443
}}
var
actions
[]
string
var
actions
[]
string
...
@@ -163,7 +163,7 @@ func TestUpdate(t *testing.T) {
...
@@ -163,7 +163,7 @@ func TestUpdate(t *testing.T) {
}
}
codec
:=
legacyscheme
.
Codecs
.
LegacyCodec
(
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
codec
:=
legacyscheme
.
Codecs
.
LegacyCodec
(
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
if
err
:=
c
.
Update
(
core
.
NamespaceDefault
,
objBody
(
codec
,
&
listA
),
objBody
(
codec
,
&
listB
),
false
,
false
,
0
,
false
);
err
!=
nil
{
if
err
:=
c
.
Update
(
v1
.
NamespaceDefault
,
objBody
(
codec
,
&
listA
),
objBody
(
codec
,
&
listB
),
false
,
false
,
0
,
false
);
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
// TODO: Find a way to test methods that use Client Set
// TODO: Find a way to test methods that use Client Set
...
...
pkg/kube/namespace.go
View file @
de5a6a93
...
@@ -17,14 +17,14 @@ limitations under the License.
...
@@ -17,14 +17,14 @@ limitations under the License.
package
kube
// import "k8s.io/helm/pkg/kube"
package
kube
// import "k8s.io/helm/pkg/kube"
import
(
import
(
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/client-go/kubernetes"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
)
)
func
createNamespace
(
client
internalclientset
.
Interface
,
namespace
string
)
error
{
func
createNamespace
(
client
kubernetes
.
Interface
,
namespace
string
)
error
{
ns
:=
&
core
.
Namespace
{
ns
:=
&
v1
.
Namespace
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
namespace
,
Name
:
namespace
,
Labels
:
map
[
string
]
string
{
Labels
:
map
[
string
]
string
{
...
@@ -32,15 +32,15 @@ func createNamespace(client internalclientset.Interface, namespace string) error
...
@@ -32,15 +32,15 @@ func createNamespace(client internalclientset.Interface, namespace string) error
},
},
},
},
}
}
_
,
err
:=
client
.
Core
()
.
Namespaces
()
.
Create
(
ns
)
_
,
err
:=
client
.
Core
V1
()
.
Namespaces
()
.
Create
(
ns
)
return
err
return
err
}
}
func
getNamespace
(
client
internalclientset
.
Interface
,
namespace
string
)
(
*
core
.
Namespace
,
error
)
{
func
getNamespace
(
client
kubernetes
.
Interface
,
namespace
string
)
(
*
v1
.
Namespace
,
error
)
{
return
client
.
Core
()
.
Namespaces
()
.
Get
(
namespace
,
metav1
.
GetOptions
{})
return
client
.
Core
V1
()
.
Namespaces
()
.
Get
(
namespace
,
metav1
.
GetOptions
{})
}
}
func
ensureNamespace
(
client
internalclientset
.
Interface
,
namespace
string
)
error
{
func
ensureNamespace
(
client
kubernetes
.
Interface
,
namespace
string
)
error
{
_
,
err
:=
getNamespace
(
client
,
namespace
)
_
,
err
:=
getNamespace
(
client
,
namespace
)
if
err
!=
nil
&&
errors
.
IsNotFound
(
err
)
{
if
err
!=
nil
&&
errors
.
IsNotFound
(
err
)
{
err
=
createNamespace
(
client
,
namespace
)
err
=
createNamespace
(
client
,
namespace
)
...
...
pkg/kube/namespace_test.go
View file @
de5a6a93
...
@@ -20,7 +20,7 @@ import (
...
@@ -20,7 +20,7 @@ import (
"testing"
"testing"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/
kubernetes/pkg/client/clientset_generated/internalclientset
/fake"
"k8s.io/
client-go/kubernetes
/fake"
)
)
func
TestEnsureNamespace
(
t
*
testing
.
T
)
{
func
TestEnsureNamespace
(
t
*
testing
.
T
)
{
...
@@ -31,7 +31,7 @@ func TestEnsureNamespace(t *testing.T) {
...
@@ -31,7 +31,7 @@ func TestEnsureNamespace(t *testing.T) {
if
err
:=
ensureNamespace
(
client
,
"foo"
);
err
!=
nil
{
if
err
:=
ensureNamespace
(
client
,
"foo"
);
err
!=
nil
{
t
.
Fatalf
(
"unexpected error: %s"
,
err
)
t
.
Fatalf
(
"unexpected error: %s"
,
err
)
}
}
if
_
,
err
:=
client
.
Core
()
.
Namespaces
()
.
Get
(
"foo"
,
metav1
.
GetOptions
{});
err
!=
nil
{
if
_
,
err
:=
client
.
Core
V1
()
.
Namespaces
()
.
Get
(
"foo"
,
metav1
.
GetOptions
{});
err
!=
nil
{
t
.
Fatalf
(
"unexpected error: %s"
,
err
)
t
.
Fatalf
(
"unexpected error: %s"
,
err
)
}
}
}
}
pkg/kube/result.go
View file @
de5a6a93
...
@@ -16,7 +16,7 @@ limitations under the License.
...
@@ -16,7 +16,7 @@ limitations under the License.
package
kube
// import "k8s.io/helm/pkg/kube"
package
kube
// import "k8s.io/helm/pkg/kube"
import
"k8s.io/
kubernetes/pkg/kubectl
/genericclioptions/resource"
import
"k8s.io/
cli-runtime/pkg
/genericclioptions/resource"
// Result provides convenience methods for comparing collections of Infos.
// Result provides convenience methods for comparing collections of Infos.
type
Result
[]
*
resource
.
Info
type
Result
[]
*
resource
.
Info
...
...
pkg/kube/result_test.go
View file @
de5a6a93
...
@@ -21,7 +21,7 @@ import (
...
@@ -21,7 +21,7 @@ import (
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/
kubernetes/pkg/kubectl
/genericclioptions/resource"
"k8s.io/
cli-runtime/pkg
/genericclioptions/resource"
)
)
func
TestResult
(
t
*
testing
.
T
)
{
func
TestResult
(
t
*
testing
.
T
)
{
...
...
pkg/releasetesting/environment.go
View file @
de5a6a93
...
@@ -22,7 +22,7 @@ import (
...
@@ -22,7 +22,7 @@ import (
"log"
"log"
"time"
"time"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
"k8s.io/helm/pkg/proto/hapi/release"
"k8s.io/helm/pkg/proto/hapi/release"
"k8s.io/helm/pkg/proto/hapi/services"
"k8s.io/helm/pkg/proto/hapi/services"
...
@@ -49,7 +49,7 @@ func (env *Environment) createTestPod(test *test) error {
...
@@ -49,7 +49,7 @@ func (env *Environment) createTestPod(test *test) error {
return
nil
return
nil
}
}
func
(
env
*
Environment
)
getTestPodStatus
(
test
*
test
)
(
core
.
PodPhase
,
error
)
{
func
(
env
*
Environment
)
getTestPodStatus
(
test
*
test
)
(
v1
.
PodPhase
,
error
)
{
b
:=
bytes
.
NewBufferString
(
test
.
manifest
)
b
:=
bytes
.
NewBufferString
(
test
.
manifest
)
status
,
err
:=
env
.
KubeClient
.
WaitAndGetCompletedPodPhase
(
env
.
Namespace
,
b
,
time
.
Duration
(
env
.
Timeout
)
*
time
.
Second
)
status
,
err
:=
env
.
KubeClient
.
WaitAndGetCompletedPodPhase
(
env
.
Namespace
,
b
,
time
.
Duration
(
env
.
Timeout
)
*
time
.
Second
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/releasetesting/test_suite.go
View file @
de5a6a93
...
@@ -22,7 +22,7 @@ import (
...
@@ -22,7 +22,7 @@ import (
"github.com/ghodss/yaml"
"github.com/ghodss/yaml"
"github.com/golang/protobuf/ptypes/timestamp"
"github.com/golang/protobuf/ptypes/timestamp"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
"k8s.io/helm/pkg/hooks"
"k8s.io/helm/pkg/hooks"
"k8s.io/helm/pkg/proto/hapi/release"
"k8s.io/helm/pkg/proto/hapi/release"
...
@@ -90,7 +90,7 @@ func (ts *TestSuite) Run(env *Environment) error {
...
@@ -90,7 +90,7 @@ func (ts *TestSuite) Run(env *Environment) error {
}
}
resourceCleanExit
:=
true
resourceCleanExit
:=
true
status
:=
core
.
PodUnknown
status
:=
v1
.
PodUnknown
if
resourceCreated
{
if
resourceCreated
{
status
,
err
=
env
.
getTestPodStatus
(
test
)
status
,
err
=
env
.
getTestPodStatus
(
test
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -119,15 +119,15 @@ func (ts *TestSuite) Run(env *Environment) error {
...
@@ -119,15 +119,15 @@ func (ts *TestSuite) Run(env *Environment) error {
return
nil
return
nil
}
}
func
(
t
*
test
)
assignTestResult
(
podStatus
core
.
PodPhase
)
error
{
func
(
t
*
test
)
assignTestResult
(
podStatus
v1
.
PodPhase
)
error
{
switch
podStatus
{
switch
podStatus
{
case
core
.
PodSucceeded
:
case
v1
.
PodSucceeded
:
if
t
.
expectedSuccess
{
if
t
.
expectedSuccess
{
t
.
result
.
Status
=
release
.
TestRun_SUCCESS
t
.
result
.
Status
=
release
.
TestRun_SUCCESS
}
else
{
}
else
{
t
.
result
.
Status
=
release
.
TestRun_FAILURE
t
.
result
.
Status
=
release
.
TestRun_FAILURE
}
}
case
core
.
PodFailed
:
case
v1
.
PodFailed
:
if
!
t
.
expectedSuccess
{
if
!
t
.
expectedSuccess
{
t
.
result
.
Status
=
release
.
TestRun_SUCCESS
t
.
result
.
Status
=
release
.
TestRun_SUCCESS
}
else
{
}
else
{
...
...
pkg/releasetesting/test_suite_test.go
View file @
de5a6a93
...
@@ -26,7 +26,7 @@ import (
...
@@ -26,7 +26,7 @@ import (
"golang.org/x/net/context"
"golang.org/x/net/context"
grpc
"google.golang.org/grpc"
grpc
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/metadata"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/proto/hapi/chart"
...
@@ -324,8 +324,8 @@ func newPodSucceededKubeClient() *podSucceededKubeClient {
...
@@ -324,8 +324,8 @@ func newPodSucceededKubeClient() *podSucceededKubeClient {
}
}
}
}
func
(
p
*
podSucceededKubeClient
)
WaitAndGetCompletedPodPhase
(
ns
string
,
r
io
.
Reader
,
timeout
time
.
Duration
)
(
core
.
PodPhase
,
error
)
{
func
(
p
*
podSucceededKubeClient
)
WaitAndGetCompletedPodPhase
(
ns
string
,
r
io
.
Reader
,
timeout
time
.
Duration
)
(
v1
.
PodPhase
,
error
)
{
return
core
.
PodSucceeded
,
nil
return
v1
.
PodSucceeded
,
nil
}
}
type
podFailedKubeClient
struct
{
type
podFailedKubeClient
struct
{
...
@@ -338,6 +338,6 @@ func newPodFailedKubeClient() *podFailedKubeClient {
...
@@ -338,6 +338,6 @@ func newPodFailedKubeClient() *podFailedKubeClient {
}
}
}
}
func
(
p
*
podFailedKubeClient
)
WaitAndGetCompletedPodPhase
(
ns
string
,
r
io
.
Reader
,
timeout
time
.
Duration
)
(
core
.
PodPhase
,
error
)
{
func
(
p
*
podFailedKubeClient
)
WaitAndGetCompletedPodPhase
(
ns
string
,
r
io
.
Reader
,
timeout
time
.
Duration
)
(
v1
.
PodPhase
,
error
)
{
return
core
.
PodFailed
,
nil
return
v1
.
PodFailed
,
nil
}
}
pkg/storage/driver/cfgmaps.go
View file @
de5a6a93
...
@@ -22,12 +22,12 @@ import (
...
@@ -22,12 +22,12 @@ import (
"strings"
"strings"
"time"
"time"
"k8s.io/api/core/v1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
kblabels
"k8s.io/apimachinery/pkg/labels"
kblabels
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/kubernetes/pkg/apis/core"
corev1
"k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
storageerrors
"k8s.io/helm/pkg/storage/errors"
storageerrors
"k8s.io/helm/pkg/storage/errors"
...
@@ -41,13 +41,13 @@ const ConfigMapsDriverName = "ConfigMap"
...
@@ -41,13 +41,13 @@ const ConfigMapsDriverName = "ConfigMap"
// ConfigMaps is a wrapper around an implementation of a kubernetes
// ConfigMaps is a wrapper around an implementation of a kubernetes
// ConfigMapsInterface.
// ConfigMapsInterface.
type
ConfigMaps
struct
{
type
ConfigMaps
struct
{
impl
internalversion
.
ConfigMapInterface
impl
corev1
.
ConfigMapInterface
Log
func
(
string
,
...
interface
{})
Log
func
(
string
,
...
interface
{})
}
}
// NewConfigMaps initializes a new ConfigMaps wrapping an implementation of
// NewConfigMaps initializes a new ConfigMaps wrapping an implementation of
// the kubernetes ConfigMapsInterface.
// the kubernetes ConfigMapsInterface.
func
NewConfigMaps
(
impl
internalversion
.
ConfigMapInterface
)
*
ConfigMaps
{
func
NewConfigMaps
(
impl
corev1
.
ConfigMapInterface
)
*
ConfigMaps
{
return
&
ConfigMaps
{
return
&
ConfigMaps
{
impl
:
impl
,
impl
:
impl
,
Log
:
func
(
_
string
,
_
...
interface
{})
{},
Log
:
func
(
_
string
,
_
...
interface
{})
{},
...
@@ -229,7 +229,7 @@ func (cfgmaps *ConfigMaps) Delete(key string) (rls *rspb.Release, err error) {
...
@@ -229,7 +229,7 @@ func (cfgmaps *ConfigMaps) Delete(key string) (rls *rspb.Release, err error) {
// "OWNER" - owner of the configmap, currently "TILLER".
// "OWNER" - owner of the configmap, currently "TILLER".
// "NAME" - name of the release.
// "NAME" - name of the release.
//
//
func
newConfigMapsObject
(
key
string
,
rls
*
rspb
.
Release
,
lbs
labels
)
(
*
core
.
ConfigMap
,
error
)
{
func
newConfigMapsObject
(
key
string
,
rls
*
rspb
.
Release
,
lbs
labels
)
(
*
v1
.
ConfigMap
,
error
)
{
const
owner
=
"TILLER"
const
owner
=
"TILLER"
// encode the release
// encode the release
...
@@ -249,7 +249,7 @@ func newConfigMapsObject(key string, rls *rspb.Release, lbs labels) (*core.Confi
...
@@ -249,7 +249,7 @@ func newConfigMapsObject(key string, rls *rspb.Release, lbs labels) (*core.Confi
lbs
.
set
(
"VERSION"
,
strconv
.
Itoa
(
int
(
rls
.
Version
)))
lbs
.
set
(
"VERSION"
,
strconv
.
Itoa
(
int
(
rls
.
Version
)))
// create and return configmap object
// create and return configmap object
return
&
core
.
ConfigMap
{
return
&
v1
.
ConfigMap
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
key
,
Name
:
key
,
Labels
:
lbs
.
toMap
(),
Labels
:
lbs
.
toMap
(),
...
...
pkg/storage/driver/cfgmaps_test.go
View file @
de5a6a93
...
@@ -19,7 +19,7 @@ import (
...
@@ -19,7 +19,7 @@ import (
"testing"
"testing"
"github.com/gogo/protobuf/proto"
"github.com/gogo/protobuf/proto"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
)
)
...
@@ -69,7 +69,7 @@ func TestUNcompressedConfigMapGet(t *testing.T) {
...
@@ -69,7 +69,7 @@ func TestUNcompressedConfigMapGet(t *testing.T) {
}
}
cfgmap
.
Data
[
"release"
]
=
base64
.
StdEncoding
.
EncodeToString
(
b
)
cfgmap
.
Data
[
"release"
]
=
base64
.
StdEncoding
.
EncodeToString
(
b
)
var
mock
MockConfigMapsInterface
var
mock
MockConfigMapsInterface
mock
.
objects
=
map
[
string
]
*
core
.
ConfigMap
{
key
:
cfgmap
}
mock
.
objects
=
map
[
string
]
*
v1
.
ConfigMap
{
key
:
cfgmap
}
cfgmaps
:=
NewConfigMaps
(
&
mock
)
cfgmaps
:=
NewConfigMaps
(
&
mock
)
// get release with key
// get release with key
...
...
pkg/storage/driver/mock_test.go
View file @
de5a6a93
...
@@ -20,10 +20,11 @@ import (
...
@@ -20,10 +20,11 @@ import (
"fmt"
"fmt"
"testing"
"testing"
"k8s.io/api/core/v1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
apimachinery/pkg/runtime/schema
"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion
"
corev1
"k8s.io/client-go/kubernetes/typed/core/v1
"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
)
)
...
@@ -76,14 +77,14 @@ func newTestFixtureCfgMaps(t *testing.T, releases ...*rspb.Release) *ConfigMaps
...
@@ -76,14 +77,14 @@ func newTestFixtureCfgMaps(t *testing.T, releases ...*rspb.Release) *ConfigMaps
// MockConfigMapsInterface mocks a kubernetes ConfigMapsInterface
// MockConfigMapsInterface mocks a kubernetes ConfigMapsInterface
type
MockConfigMapsInterface
struct
{
type
MockConfigMapsInterface
struct
{
internalversion
.
ConfigMapInterface
corev1
.
ConfigMapInterface
objects
map
[
string
]
*
core
.
ConfigMap
objects
map
[
string
]
*
v1
.
ConfigMap
}
}
// Init initializes the MockConfigMapsInterface with the set of releases.
// Init initializes the MockConfigMapsInterface with the set of releases.
func
(
mock
*
MockConfigMapsInterface
)
Init
(
t
*
testing
.
T
,
releases
...*
rspb
.
Release
)
{
func
(
mock
*
MockConfigMapsInterface
)
Init
(
t
*
testing
.
T
,
releases
...*
rspb
.
Release
)
{
mock
.
objects
=
map
[
string
]
*
core
.
ConfigMap
{}
mock
.
objects
=
map
[
string
]
*
v1
.
ConfigMap
{}
for
_
,
rls
:=
range
releases
{
for
_
,
rls
:=
range
releases
{
objkey
:=
testKey
(
rls
.
Name
,
rls
.
Version
)
objkey
:=
testKey
(
rls
.
Name
,
rls
.
Version
)
...
@@ -97,17 +98,17 @@ func (mock *MockConfigMapsInterface) Init(t *testing.T, releases ...*rspb.Releas
...
@@ -97,17 +98,17 @@ func (mock *MockConfigMapsInterface) Init(t *testing.T, releases ...*rspb.Releas
}
}
// Get returns the ConfigMap by name.
// Get returns the ConfigMap by name.
func
(
mock
*
MockConfigMapsInterface
)
Get
(
name
string
,
options
metav1
.
GetOptions
)
(
*
core
.
ConfigMap
,
error
)
{
func
(
mock
*
MockConfigMapsInterface
)
Get
(
name
string
,
options
metav1
.
GetOptions
)
(
*
v1
.
ConfigMap
,
error
)
{
object
,
ok
:=
mock
.
objects
[
name
]
object
,
ok
:=
mock
.
objects
[
name
]
if
!
ok
{
if
!
ok
{
return
nil
,
apierrors
.
NewNotFound
(
core
.
Resource
(
"tests"
)
,
name
)
return
nil
,
apierrors
.
NewNotFound
(
schema
.
GroupResource
{
Resource
:
"tests"
}
,
name
)
}
}
return
object
,
nil
return
object
,
nil
}
}
// List returns the a of ConfigMaps.
// List returns the a of ConfigMaps.
func
(
mock
*
MockConfigMapsInterface
)
List
(
opts
metav1
.
ListOptions
)
(
*
core
.
ConfigMapList
,
error
)
{
func
(
mock
*
MockConfigMapsInterface
)
List
(
opts
metav1
.
ListOptions
)
(
*
v1
.
ConfigMapList
,
error
)
{
var
list
core
.
ConfigMapList
var
list
v1
.
ConfigMapList
for
_
,
cfgmap
:=
range
mock
.
objects
{
for
_
,
cfgmap
:=
range
mock
.
objects
{
list
.
Items
=
append
(
list
.
Items
,
*
cfgmap
)
list
.
Items
=
append
(
list
.
Items
,
*
cfgmap
)
}
}
...
@@ -115,20 +116,20 @@ func (mock *MockConfigMapsInterface) List(opts metav1.ListOptions) (*core.Config
...
@@ -115,20 +116,20 @@ func (mock *MockConfigMapsInterface) List(opts metav1.ListOptions) (*core.Config
}
}
// Create creates a new ConfigMap.
// Create creates a new ConfigMap.
func
(
mock
*
MockConfigMapsInterface
)
Create
(
cfgmap
*
core
.
ConfigMap
)
(
*
core
.
ConfigMap
,
error
)
{
func
(
mock
*
MockConfigMapsInterface
)
Create
(
cfgmap
*
v1
.
ConfigMap
)
(
*
v1
.
ConfigMap
,
error
)
{
name
:=
cfgmap
.
ObjectMeta
.
Name
name
:=
cfgmap
.
ObjectMeta
.
Name
if
object
,
ok
:=
mock
.
objects
[
name
];
ok
{
if
object
,
ok
:=
mock
.
objects
[
name
];
ok
{
return
object
,
apierrors
.
NewAlreadyExists
(
core
.
Resource
(
"tests"
)
,
name
)
return
object
,
apierrors
.
NewAlreadyExists
(
schema
.
GroupResource
{
Resource
:
"tests"
}
,
name
)
}
}
mock
.
objects
[
name
]
=
cfgmap
mock
.
objects
[
name
]
=
cfgmap
return
cfgmap
,
nil
return
cfgmap
,
nil
}
}
// Update updates a ConfigMap.
// Update updates a ConfigMap.
func
(
mock
*
MockConfigMapsInterface
)
Update
(
cfgmap
*
core
.
ConfigMap
)
(
*
core
.
ConfigMap
,
error
)
{
func
(
mock
*
MockConfigMapsInterface
)
Update
(
cfgmap
*
v1
.
ConfigMap
)
(
*
v1
.
ConfigMap
,
error
)
{
name
:=
cfgmap
.
ObjectMeta
.
Name
name
:=
cfgmap
.
ObjectMeta
.
Name
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
return
nil
,
apierrors
.
NewNotFound
(
core
.
Resource
(
"tests"
),
name
)
return
nil
,
apierrors
.
NewNotFound
(
v1
.
Resource
(
"tests"
),
name
)
}
}
mock
.
objects
[
name
]
=
cfgmap
mock
.
objects
[
name
]
=
cfgmap
return
cfgmap
,
nil
return
cfgmap
,
nil
...
@@ -137,7 +138,7 @@ func (mock *MockConfigMapsInterface) Update(cfgmap *core.ConfigMap) (*core.Confi
...
@@ -137,7 +138,7 @@ func (mock *MockConfigMapsInterface) Update(cfgmap *core.ConfigMap) (*core.Confi
// Delete deletes a ConfigMap by name.
// Delete deletes a ConfigMap by name.
func
(
mock
*
MockConfigMapsInterface
)
Delete
(
name
string
,
opts
*
metav1
.
DeleteOptions
)
error
{
func
(
mock
*
MockConfigMapsInterface
)
Delete
(
name
string
,
opts
*
metav1
.
DeleteOptions
)
error
{
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
return
apierrors
.
NewNotFound
(
core
.
Resource
(
"tests"
),
name
)
return
apierrors
.
NewNotFound
(
v1
.
Resource
(
"tests"
),
name
)
}
}
delete
(
mock
.
objects
,
name
)
delete
(
mock
.
objects
,
name
)
return
nil
return
nil
...
@@ -154,14 +155,14 @@ func newTestFixtureSecrets(t *testing.T, releases ...*rspb.Release) *Secrets {
...
@@ -154,14 +155,14 @@ func newTestFixtureSecrets(t *testing.T, releases ...*rspb.Release) *Secrets {
// MockSecretsInterface mocks a kubernetes SecretsInterface
// MockSecretsInterface mocks a kubernetes SecretsInterface
type
MockSecretsInterface
struct
{
type
MockSecretsInterface
struct
{
internalversion
.
SecretInterface
corev1
.
SecretInterface
objects
map
[
string
]
*
core
.
Secret
objects
map
[
string
]
*
v1
.
Secret
}
}
// Init initializes the MockSecretsInterface with the set of releases.
// Init initializes the MockSecretsInterface with the set of releases.
func
(
mock
*
MockSecretsInterface
)
Init
(
t
*
testing
.
T
,
releases
...*
rspb
.
Release
)
{
func
(
mock
*
MockSecretsInterface
)
Init
(
t
*
testing
.
T
,
releases
...*
rspb
.
Release
)
{
mock
.
objects
=
map
[
string
]
*
core
.
Secret
{}
mock
.
objects
=
map
[
string
]
*
v1
.
Secret
{}
for
_
,
rls
:=
range
releases
{
for
_
,
rls
:=
range
releases
{
objkey
:=
testKey
(
rls
.
Name
,
rls
.
Version
)
objkey
:=
testKey
(
rls
.
Name
,
rls
.
Version
)
...
@@ -175,17 +176,17 @@ func (mock *MockSecretsInterface) Init(t *testing.T, releases ...*rspb.Release)
...
@@ -175,17 +176,17 @@ func (mock *MockSecretsInterface) Init(t *testing.T, releases ...*rspb.Release)
}
}
// Get returns the Secret by name.
// Get returns the Secret by name.
func
(
mock
*
MockSecretsInterface
)
Get
(
name
string
,
options
metav1
.
GetOptions
)
(
*
core
.
Secret
,
error
)
{
func
(
mock
*
MockSecretsInterface
)
Get
(
name
string
,
options
metav1
.
GetOptions
)
(
*
v1
.
Secret
,
error
)
{
object
,
ok
:=
mock
.
objects
[
name
]
object
,
ok
:=
mock
.
objects
[
name
]
if
!
ok
{
if
!
ok
{
return
nil
,
apierrors
.
NewNotFound
(
core
.
Resource
(
"tests"
)
,
name
)
return
nil
,
apierrors
.
NewNotFound
(
schema
.
GroupResource
{
Resource
:
"tests"
}
,
name
)
}
}
return
object
,
nil
return
object
,
nil
}
}
// List returns the a of Secret.
// List returns the a of Secret.
func
(
mock
*
MockSecretsInterface
)
List
(
opts
metav1
.
ListOptions
)
(
*
core
.
SecretList
,
error
)
{
func
(
mock
*
MockSecretsInterface
)
List
(
opts
metav1
.
ListOptions
)
(
*
v1
.
SecretList
,
error
)
{
var
list
core
.
SecretList
var
list
v1
.
SecretList
for
_
,
secret
:=
range
mock
.
objects
{
for
_
,
secret
:=
range
mock
.
objects
{
list
.
Items
=
append
(
list
.
Items
,
*
secret
)
list
.
Items
=
append
(
list
.
Items
,
*
secret
)
}
}
...
@@ -193,20 +194,20 @@ func (mock *MockSecretsInterface) List(opts metav1.ListOptions) (*core.SecretLis
...
@@ -193,20 +194,20 @@ func (mock *MockSecretsInterface) List(opts metav1.ListOptions) (*core.SecretLis
}
}
// Create creates a new Secret.
// Create creates a new Secret.
func
(
mock
*
MockSecretsInterface
)
Create
(
secret
*
core
.
Secret
)
(
*
core
.
Secret
,
error
)
{
func
(
mock
*
MockSecretsInterface
)
Create
(
secret
*
v1
.
Secret
)
(
*
v1
.
Secret
,
error
)
{
name
:=
secret
.
ObjectMeta
.
Name
name
:=
secret
.
ObjectMeta
.
Name
if
object
,
ok
:=
mock
.
objects
[
name
];
ok
{
if
object
,
ok
:=
mock
.
objects
[
name
];
ok
{
return
object
,
apierrors
.
NewAlreadyExists
(
core
.
Resource
(
"tests"
)
,
name
)
return
object
,
apierrors
.
NewAlreadyExists
(
schema
.
GroupResource
{
Resource
:
"tests"
}
,
name
)
}
}
mock
.
objects
[
name
]
=
secret
mock
.
objects
[
name
]
=
secret
return
secret
,
nil
return
secret
,
nil
}
}
// Update updates a Secret.
// Update updates a Secret.
func
(
mock
*
MockSecretsInterface
)
Update
(
secret
*
core
.
Secret
)
(
*
core
.
Secret
,
error
)
{
func
(
mock
*
MockSecretsInterface
)
Update
(
secret
*
v1
.
Secret
)
(
*
v1
.
Secret
,
error
)
{
name
:=
secret
.
ObjectMeta
.
Name
name
:=
secret
.
ObjectMeta
.
Name
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
return
nil
,
apierrors
.
NewNotFound
(
core
.
Resource
(
"tests"
)
,
name
)
return
nil
,
apierrors
.
NewNotFound
(
schema
.
GroupResource
{
Resource
:
"tests"
}
,
name
)
}
}
mock
.
objects
[
name
]
=
secret
mock
.
objects
[
name
]
=
secret
return
secret
,
nil
return
secret
,
nil
...
@@ -215,7 +216,7 @@ func (mock *MockSecretsInterface) Update(secret *core.Secret) (*core.Secret, err
...
@@ -215,7 +216,7 @@ func (mock *MockSecretsInterface) Update(secret *core.Secret) (*core.Secret, err
// Delete deletes a Secret by name.
// Delete deletes a Secret by name.
func
(
mock
*
MockSecretsInterface
)
Delete
(
name
string
,
opts
*
metav1
.
DeleteOptions
)
error
{
func
(
mock
*
MockSecretsInterface
)
Delete
(
name
string
,
opts
*
metav1
.
DeleteOptions
)
error
{
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
return
apierrors
.
NewNotFound
(
core
.
Resource
(
"tests"
)
,
name
)
return
apierrors
.
NewNotFound
(
schema
.
GroupResource
{
Resource
:
"tests"
}
,
name
)
}
}
delete
(
mock
.
objects
,
name
)
delete
(
mock
.
objects
,
name
)
return
nil
return
nil
...
...
pkg/storage/driver/secrets.go
View file @
de5a6a93
...
@@ -22,12 +22,12 @@ import (
...
@@ -22,12 +22,12 @@ import (
"strings"
"strings"
"time"
"time"
"k8s.io/api/core/v1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
kblabels
"k8s.io/apimachinery/pkg/labels"
kblabels
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/kubernetes/pkg/apis/core"
corev1
"k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
storageerrors
"k8s.io/helm/pkg/storage/errors"
storageerrors
"k8s.io/helm/pkg/storage/errors"
...
@@ -41,13 +41,13 @@ const SecretsDriverName = "Secret"
...
@@ -41,13 +41,13 @@ const SecretsDriverName = "Secret"
// Secrets is a wrapper around an implementation of a kubernetes
// Secrets is a wrapper around an implementation of a kubernetes
// SecretsInterface.
// SecretsInterface.
type
Secrets
struct
{
type
Secrets
struct
{
impl
internalversion
.
SecretInterface
impl
corev1
.
SecretInterface
Log
func
(
string
,
...
interface
{})
Log
func
(
string
,
...
interface
{})
}
}
// NewSecrets initializes a new Secrets wrapping an implmenetation of
// NewSecrets initializes a new Secrets wrapping an implmenetation of
// the kubernetes SecretsInterface.
// the kubernetes SecretsInterface.
func
NewSecrets
(
impl
internalversion
.
SecretInterface
)
*
Secrets
{
func
NewSecrets
(
impl
corev1
.
SecretInterface
)
*
Secrets
{
return
&
Secrets
{
return
&
Secrets
{
impl
:
impl
,
impl
:
impl
,
Log
:
func
(
_
string
,
_
...
interface
{})
{},
Log
:
func
(
_
string
,
_
...
interface
{})
{},
...
@@ -229,7 +229,7 @@ func (secrets *Secrets) Delete(key string) (rls *rspb.Release, err error) {
...
@@ -229,7 +229,7 @@ func (secrets *Secrets) Delete(key string) (rls *rspb.Release, err error) {
// "OWNER" - owner of the secret, currently "TILLER".
// "OWNER" - owner of the secret, currently "TILLER".
// "NAME" - name of the release.
// "NAME" - name of the release.
//
//
func
newSecretsObject
(
key
string
,
rls
*
rspb
.
Release
,
lbs
labels
)
(
*
core
.
Secret
,
error
)
{
func
newSecretsObject
(
key
string
,
rls
*
rspb
.
Release
,
lbs
labels
)
(
*
v1
.
Secret
,
error
)
{
const
owner
=
"TILLER"
const
owner
=
"TILLER"
// encode the release
// encode the release
...
@@ -249,7 +249,7 @@ func newSecretsObject(key string, rls *rspb.Release, lbs labels) (*core.Secret,
...
@@ -249,7 +249,7 @@ func newSecretsObject(key string, rls *rspb.Release, lbs labels) (*core.Secret,
lbs
.
set
(
"VERSION"
,
strconv
.
Itoa
(
int
(
rls
.
Version
)))
lbs
.
set
(
"VERSION"
,
strconv
.
Itoa
(
int
(
rls
.
Version
)))
// create and return secret object
// create and return secret object
return
&
core
.
Secret
{
return
&
v1
.
Secret
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
key
,
Name
:
key
,
Labels
:
lbs
.
toMap
(),
Labels
:
lbs
.
toMap
(),
...
...
pkg/storage/driver/secrets_test.go
View file @
de5a6a93
...
@@ -19,7 +19,7 @@ import (
...
@@ -19,7 +19,7 @@ import (
"testing"
"testing"
"github.com/gogo/protobuf/proto"
"github.com/gogo/protobuf/proto"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
)
)
...
@@ -69,7 +69,7 @@ func TestUNcompressedSecretGet(t *testing.T) {
...
@@ -69,7 +69,7 @@ func TestUNcompressedSecretGet(t *testing.T) {
}
}
secret
.
Data
[
"release"
]
=
[]
byte
(
base64
.
StdEncoding
.
EncodeToString
(
b
))
secret
.
Data
[
"release"
]
=
[]
byte
(
base64
.
StdEncoding
.
EncodeToString
(
b
))
var
mock
MockSecretsInterface
var
mock
MockSecretsInterface
mock
.
objects
=
map
[
string
]
*
core
.
Secret
{
key
:
secret
}
mock
.
objects
=
map
[
string
]
*
v1
.
Secret
{
key
:
secret
}
secrets
:=
NewSecrets
(
&
mock
)
secrets
:=
NewSecrets
(
&
mock
)
// get release with key
// get release with key
...
...
pkg/tiller/environment/environment.go
View file @
de5a6a93
...
@@ -26,8 +26,8 @@ import (
...
@@ -26,8 +26,8 @@ import (
"io"
"io"
"time"
"time"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
"k8s.io/
kubernetes/pkg/kubectl
/genericclioptions/resource"
"k8s.io/
cli-runtime/pkg
/genericclioptions/resource"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/engine"
"k8s.io/helm/pkg/engine"
...
@@ -140,7 +140,7 @@ type KubeClient interface {
...
@@ -140,7 +140,7 @@ type KubeClient interface {
// WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase
// WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase
// and returns said phase (PodSucceeded or PodFailed qualify).
// and returns said phase (PodSucceeded or PodFailed qualify).
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
core
.
PodPhase
,
error
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
v1
.
PodPhase
,
error
)
}
}
// PrintingKubeClient implements KubeClient, but simply prints the reader to
// PrintingKubeClient implements KubeClient, but simply prints the reader to
...
@@ -192,9 +192,9 @@ func (p *PrintingKubeClient) BuildUnstructured(ns string, reader io.Reader) (kub
...
@@ -192,9 +192,9 @@ func (p *PrintingKubeClient) BuildUnstructured(ns string, reader io.Reader) (kub
}
}
// WaitAndGetCompletedPodPhase implements KubeClient WaitAndGetCompletedPodPhase.
// WaitAndGetCompletedPodPhase implements KubeClient WaitAndGetCompletedPodPhase.
func
(
p
*
PrintingKubeClient
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
core
.
PodPhase
,
error
)
{
func
(
p
*
PrintingKubeClient
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
v1
.
PodPhase
,
error
)
{
_
,
err
:=
io
.
Copy
(
p
.
Out
,
reader
)
_
,
err
:=
io
.
Copy
(
p
.
Out
,
reader
)
return
core
.
PodUnknown
,
err
return
v1
.
PodUnknown
,
err
}
}
// Environment provides the context for executing a client request.
// Environment provides the context for executing a client request.
...
...
pkg/tiller/environment/environment_test.go
View file @
de5a6a93
...
@@ -22,8 +22,8 @@ import (
...
@@ -22,8 +22,8 @@ import (
"testing"
"testing"
"time"
"time"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
"k8s.io/
kubernetes/pkg/kubectl
/genericclioptions/resource"
"k8s.io/
cli-runtime/pkg
/genericclioptions/resource"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/kube"
...
@@ -61,11 +61,11 @@ func (k *mockKubeClient) Build(ns string, reader io.Reader) (kube.Result, error)
...
@@ -61,11 +61,11 @@ func (k *mockKubeClient) Build(ns string, reader io.Reader) (kube.Result, error)
func
(
k
*
mockKubeClient
)
BuildUnstructured
(
ns
string
,
reader
io
.
Reader
)
(
kube
.
Result
,
error
)
{
func
(
k
*
mockKubeClient
)
BuildUnstructured
(
ns
string
,
reader
io
.
Reader
)
(
kube
.
Result
,
error
)
{
return
[]
*
resource
.
Info
{},
nil
return
[]
*
resource
.
Info
{},
nil
}
}
func
(
k
*
mockKubeClient
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
core
.
PodPhase
,
error
)
{
func
(
k
*
mockKubeClient
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
v1
.
PodPhase
,
error
)
{
return
core
.
PodUnknown
,
nil
return
v1
.
PodUnknown
,
nil
}
}
func
(
k
*
mockKubeClient
)
WaitAndGetCompletedPodStatus
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
core
.
PodPhase
,
error
)
{
func
(
k
*
mockKubeClient
)
WaitAndGetCompletedPodStatus
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
v1
.
PodPhase
,
error
)
{
return
""
,
nil
return
""
,
nil
}
}
...
...
pkg/tiller/release_modules.go
View file @
de5a6a93
...
@@ -23,7 +23,7 @@ import (
...
@@ -23,7 +23,7 @@ import (
"log"
"log"
"strings"
"strings"
"k8s.io/
kubernetes/pkg/client/clientset_generated/internalclientset
"
"k8s.io/
client-go/kubernetes
"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/kube"
...
@@ -46,7 +46,7 @@ type ReleaseModule interface {
...
@@ -46,7 +46,7 @@ type ReleaseModule interface {
// LocalReleaseModule is a local implementation of ReleaseModule
// LocalReleaseModule is a local implementation of ReleaseModule
type
LocalReleaseModule
struct
{
type
LocalReleaseModule
struct
{
clientset
internalclientset
.
Interface
clientset
kubernetes
.
Interface
}
}
// Create creates a release via kubeclient from provided environment
// Create creates a release via kubeclient from provided environment
...
...
pkg/tiller/release_server.go
View file @
de5a6a93
...
@@ -28,7 +28,7 @@ import (
...
@@ -28,7 +28,7 @@ import (
"gopkg.in/yaml.v2"
"gopkg.in/yaml.v2"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/discovery"
"k8s.io/client-go/discovery"
"k8s.io/
kubernetes/pkg/client/clientset_generated/internalclientset
"
"k8s.io/
client-go/kubernetes
"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/hooks"
"k8s.io/helm/pkg/hooks"
...
@@ -83,12 +83,12 @@ var ValidName = regexp.MustCompile("^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])+
...
@@ -83,12 +83,12 @@ var ValidName = regexp.MustCompile("^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])+
type
ReleaseServer
struct
{
type
ReleaseServer
struct
{
ReleaseModule
ReleaseModule
env
*
environment
.
Environment
env
*
environment
.
Environment
clientset
internalclientset
.
Interface
clientset
kubernetes
.
Interface
Log
func
(
string
,
...
interface
{})
Log
func
(
string
,
...
interface
{})
}
}
// NewReleaseServer creates a new release server.
// NewReleaseServer creates a new release server.
func
NewReleaseServer
(
env
*
environment
.
Environment
,
clientset
internalclientset
.
Interface
,
useRemote
bool
)
*
ReleaseServer
{
func
NewReleaseServer
(
env
*
environment
.
Environment
,
clientset
kubernetes
.
Interface
,
useRemote
bool
)
*
ReleaseServer
{
var
releaseModule
ReleaseModule
var
releaseModule
ReleaseModule
if
useRemote
{
if
useRemote
{
releaseModule
=
&
RemoteReleaseModule
{}
releaseModule
=
&
RemoteReleaseModule
{}
...
...
pkg/tiller/release_server_test.go
View file @
de5a6a93
...
@@ -31,9 +31,9 @@ import (
...
@@ -31,9 +31,9 @@ import (
"github.com/technosophos/moniker"
"github.com/technosophos/moniker"
"golang.org/x/net/context"
"golang.org/x/net/context"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/metadata"
"k8s.io/
kubernetes/pkg/apis/core
"
"k8s.io/
api/core/v1
"
"k8s.io/
kubernetes/pkg/client/clientset_generated/internalclientset/fak
e"
"k8s.io/
cli-runtime/pkg/genericclioptions/resourc
e"
"k8s.io/
kubernetes/pkg/kubectl/genericclioptions/resourc
e"
"k8s.io/
client-go/kubernetes/fak
e"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/hooks"
"k8s.io/helm/pkg/hooks"
...
@@ -605,8 +605,8 @@ func (kc *mockHooksKubeClient) Build(ns string, reader io.Reader) (kube.Result,
...
@@ -605,8 +605,8 @@ func (kc *mockHooksKubeClient) Build(ns string, reader io.Reader) (kube.Result,
func
(
kc
*
mockHooksKubeClient
)
BuildUnstructured
(
ns
string
,
reader
io
.
Reader
)
(
kube
.
Result
,
error
)
{
func
(
kc
*
mockHooksKubeClient
)
BuildUnstructured
(
ns
string
,
reader
io
.
Reader
)
(
kube
.
Result
,
error
)
{
return
[]
*
resource
.
Info
{},
nil
return
[]
*
resource
.
Info
{},
nil
}
}
func
(
kc
*
mockHooksKubeClient
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
core
.
PodPhase
,
error
)
{
func
(
kc
*
mockHooksKubeClient
)
WaitAndGetCompletedPodPhase
(
namespace
string
,
reader
io
.
Reader
,
timeout
time
.
Duration
)
(
v1
.
PodPhase
,
error
)
{
return
core
.
PodUnknown
,
nil
return
v1
.
PodUnknown
,
nil
}
}
func
deletePolicyStub
(
kubeClient
*
mockHooksKubeClient
)
*
ReleaseServer
{
func
deletePolicyStub
(
kubeClient
*
mockHooksKubeClient
)
*
ReleaseServer
{
...
...
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