Skip to content
This repository has been archived by the owner on Dec 1, 2018. It is now read-only.

Commit

Permalink
Merge pull request #2069 from kawych/release-1.5
Browse files Browse the repository at this point in the history
Bump Kubernetes version used in integration tests to fix presubmits
  • Loading branch information
k8s-ci-robot committed Jul 26, 2018
2 parents b4b5c7a + 8cfd7ce commit bd2bb79
Show file tree
Hide file tree
Showing 7 changed files with 123 additions and 12 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ ifeq ($(INTERACTIVE), 1)
TTY=-t
endif

SUPPORTED_KUBE_VERSIONS=1.7.0-beta.2
SUPPORTED_KUBE_VERSIONS=1.9.3
TEST_NAMESPACE=heapster-e2e-tests

HEAPSTER_LDFLAGS=-w -X k8s.io/heapster/version.HeapsterVersion=$(VERSION) -X k8s.io/heapster/version.GitCommit=$(GIT_COMMIT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ spec:
labels:
k8s-app: heapster-test
spec:
serviceAccountName: heapster
containers:
- name: heapster-test
image: gcr.io/google_containers/heapster-amd64:v1.5.3
Expand Down
12 changes: 12 additions & 0 deletions deploy/kube-config/standalone-test/heapster-rbac.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: heapster
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:heapster
subjects:
- kind: ServiceAccount
name: heapster
namespace: heapster-e2e-tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: heapster
namespace: heapster-e2e-tests
2 changes: 1 addition & 1 deletion integration/.jenkins.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export GOBIN="$GOPATH/bin"
export PATH="$GOBIN:$PATH"

# Kubernetes version(s) to run the integration tests against.
kube_version="1.7.0-beta.2"
kube_version="1.9.3"

if ! git diff --name-only origin/master | grep -c -E "*.go|*.sh|.*yaml|Makefile" &> /dev/null; then
echo "This PR does not touch files that require integration testing. Skipping integration tests!"
Expand Down
62 changes: 62 additions & 0 deletions integration/framework.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ import (
kclient "k8s.io/client-go/kubernetes"
"k8s.io/client-go/pkg/api"
"k8s.io/client-go/pkg/api/v1"
_ "k8s.io/client-go/pkg/apis/rbac/install"
rbacv1beta1 "k8s.io/client-go/pkg/apis/rbac/v1beta1"
kclientcmd "k8s.io/client-go/tools/clientcmd"
kclientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)
Expand All @@ -45,12 +47,24 @@ type kubeFramework interface {
// Parses and Returns a service object contained in 'filePath'
ParseService(filePath string) (*v1.Service, error)

// Parses and Returns a RBAC object contained in 'filePath'
ParseRBAC(filePath string) (*rbacv1beta1.ClusterRoleBinding, error)

// Parses and Returns a ServiceAccount object contained in 'filePath'
ParseServiceAccount(filePath string) (*v1.ServiceAccount, error)

// Creates a kube service.
CreateService(ns string, service *v1.Service) (*v1.Service, error)

// Creates a namespace.
CreateNs(ns *v1.Namespace) (*v1.Namespace, error)

// Creates a RBAC.
CreateRBAC(crb *rbacv1beta1.ClusterRoleBinding) error

// Creates a ServiceAccount.
CreateServiceAccount(sa *v1.ServiceAccount) error

// Creates a kube replication controller.
CreateRC(ns string, rc *v1.ReplicationController) (*v1.ReplicationController, error)

Expand Down Expand Up @@ -371,6 +385,54 @@ func (self *realKubeFramework) ParseRC(filePath string) (*v1.ReplicationControll
return rc, nil
}

// Parses and Returns a RBAC object contained in 'filePath'
func (self *realKubeFramework) ParseRBAC(filePath string) (*rbacv1beta1.ClusterRoleBinding, error) {
obj, err := self.loadRBACObject(filePath)
if err != nil {
return nil, err
}
rbac, ok := obj.(*rbacv1beta1.ClusterRoleBinding)
if !ok {
return nil, fmt.Errorf("Failed to cast clusterrolebinding: %v", obj)
}
return rbac, nil
}

func (self *realKubeFramework) loadRBACObject(filePath string) (runtime.Object, error) {
data, err := ioutil.ReadFile(filePath)
if err != nil {
return nil, fmt.Errorf("failed to read object: %v", err)
}
obj, _, err := api.Codecs.UniversalDecoder(rbacv1beta1.SchemeGroupVersion).Decode(data, nil, nil)
return obj, err
}

// CreateRBAC creates the RBAC object
func (self *realKubeFramework) CreateRBAC(rbac *rbacv1beta1.ClusterRoleBinding) error {
_, err := self.kubeClient.RbacV1beta1().ClusterRoleBindings().Create(rbac)
return err
}

// Parses and Returns a ServiceAccount object contained in 'filePath'
func (self *realKubeFramework) ParseServiceAccount(filePath string) (*v1.ServiceAccount, error) {
obj, err := self.loadObject(filePath)
if err != nil {
return nil, err
}

sa, ok := obj.(*v1.ServiceAccount)
if !ok {
return nil, fmt.Errorf("Failed to cast serviceaccount: %v", obj)
}
return sa, nil
}

// CreateServiceAccount creates the ServiceAccount object
func (self *realKubeFramework) CreateServiceAccount(sa *v1.ServiceAccount) error {
_, err := self.kubeClient.CoreV1().ServiceAccounts(sa.Namespace).Create(sa)
return err
}

func (self *realKubeFramework) ParseService(filePath string) (*v1.Service, error) {
obj, err := self.loadObject(filePath)
if err != nil {
Expand Down
51 changes: 41 additions & 10 deletions integration/heapster_api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,18 @@ const (
)

var (
testZone = flag.String("test_zone", "us-central1-b", "GCE zone where the test will be executed")
kubeVersions = flag.String("kube_versions", "", "Comma separated list of kube versions to test against. By default will run the test against an existing cluster")
heapsterControllerFile = flag.String("heapster_controller", "../deploy/kube-config/standalone-test/heapster-controller.yaml", "Path to heapster replication controller file.")
heapsterServiceFile = flag.String("heapster_service", "../deploy/kube-config/standalone-test/heapster-service.yaml", "Path to heapster service file.")
heapsterImage = flag.String("heapster_image", "heapster:e2e_test", "heapster docker image that needs to be tested.")
avoidBuild = flag.Bool("nobuild", false, "When true, a new heapster docker image will not be created and pushed to test cluster nodes.")
namespace = flag.String("namespace", "heapster-e2e-tests", "namespace to be used for testing, it will be deleted at the beginning of the test if exists")
maxRetries = flag.Int("retries", 20, "Number of attempts before failing this test.")
runForever = flag.Bool("run_forever", false, "If true, the tests are run in a loop forever.")
testUser = flag.String("test_user", "", "GCE user when copy file to host")
testZone = flag.String("test_zone", "us-central1-b", "GCE zone where the test will be executed")
kubeVersions = flag.String("kube_versions", "", "Comma separated list of kube versions to test against. By default will run the test against an existing cluster")
heapsterControllerFile = flag.String("heapster_controller", "../deploy/kube-config/standalone-test/heapster-controller.yaml", "Path to heapster replication controller file.")
heapsterServiceFile = flag.String("heapster_service", "../deploy/kube-config/standalone-test/heapster-service.yaml", "Path to heapster service file.")
heapsterRBACFile = flag.String("heapster_rbac", "../deploy/kube-config/standalone-test/heapster-rbac.yaml", "Path to heapster rbac file.")
heapsterServiceAccountFile = flag.String("heapster_service_account", "../deploy/kube-config/standalone-test/heapster-service-account.yaml", "Path to heapster service account file.")
heapsterImage = flag.String("heapster_image", "heapster:e2e_test", "heapster docker image that needs to be tested.")
avoidBuild = flag.Bool("nobuild", false, "When true, a new heapster docker image will not be created and pushed to test cluster nodes.")
namespace = flag.String("namespace", "heapster-e2e-tests", "namespace to be used for testing, it will be deleted at the beginning of the test if exists")
maxRetries = flag.Int("retries", 20, "Number of attempts before failing this test.")
runForever = flag.Bool("run_forever", false, "If true, the tests are run in a loop forever.")
testUser = flag.String("test_user", "", "GCE user when copy file to host")
)

func deleteAll(fm kubeFramework, ns string, service *kube_v1.Service, rc *kube_v1.ReplicationController) error {
Expand Down Expand Up @@ -164,6 +166,33 @@ func getHeapsterRcAndSvc(fm kubeFramework) (*kube_v1.Service, *kube_v1.Replicati
return svc, rc, nil
}

func setupHeapsterServiceAccount(fm kubeFramework) error {
sa, err := fm.ParseServiceAccount(*heapsterServiceAccountFile)
if err != nil {
return fmt.Errorf("failed to parse heapster serviceaccount - %v", err)
}

glog.V(2).Infof("Creating serviceaccount %s/%s...", (*sa).Namespace, (*sa).Name)
if err := fm.CreateServiceAccount(sa); err != nil {
glog.V(2).Infof("Failed to create serviceaccount: %v", err)
return err
}
return nil
}

func setupHeapsterRBAC(fm kubeFramework) error {
rbac, err := fm.ParseRBAC(*heapsterRBACFile)
if err != nil {
return fmt.Errorf("failed to parse heapster rbac - %v", err)
}
glog.V(2).Infof("Creating rbac %s...", (*rbac).Name)
if err := fm.CreateRBAC(rbac); err != nil {
glog.V(2).Infof("Failed to create rbac: %v", err)
return err
}
return nil
}

func buildAndPushDockerImages(fm kubeFramework, zone string) error {
if *avoidBuild {
return nil
Expand Down Expand Up @@ -1013,6 +1042,8 @@ func apiTest(kubeVersion string, zone string) error {
if err := createAll(fm, ns, &svc, &rc); err != nil {
return err
}
setupHeapsterServiceAccount(fm)
setupHeapsterRBAC(fm)
if err := fm.WaitUntilPodRunning(ns, rc.Spec.Template.Labels, time.Minute); err != nil {
return err
}
Expand Down

0 comments on commit bd2bb79

Please sign in to comment.