Skip to content
This repository was archived by the owner on May 17, 2024. It is now read-only.

Commit a3e150a

Browse files
authored
Merge pull request #130 from JoshVanL/dev-cluster-deploy
Adds `make dev_cluster_deploy`
2 parents 9fdc8e4 + 11b67cb commit a3e150a

File tree

8 files changed

+180
-55
lines changed

8 files changed

+180
-55
lines changed

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,8 @@ image: all docker_build ## runs tests, build and docker build
108108
dev_cluster_create: ## create dev cluster for development testing
109109
KUBE_OIDC_PROXY_ROOT_PATH="$$(pwd)" go run -v ./test/environment/dev create
110110

111+
dev_cluster_deploy: ## deploy into dev cluster
112+
KUBE_OIDC_PROXY_ROOT_PATH="$$(pwd)" go run -v ./test/environment/dev deploy
113+
111114
dev_cluster_destroy: ## destroy dev cluster
112115
KUBE_OIDC_PROXY_ROOT_PATH="$$(pwd)" go run -v ./test/environment/dev destroy

test/e2e/framework/framework.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package framework
44
import (
55
"fmt"
66
"net/url"
7+
"time"
78

89
. "github.com/onsi/ginkgo"
910
. "github.com/onsi/gomega"
@@ -20,10 +21,6 @@ import (
2021

2122
var DefaultConfig = &config.Config{}
2223

23-
const (
24-
clientID = "kube-oidc-proxy-e1e-client_id"
25-
)
26-
2724
type Framework struct {
2825
BaseName string
2926

@@ -105,17 +102,16 @@ func (f *Framework) AfterEach() {
105102
By("Deleting test namespace")
106103
err = f.DeleteKubeNamespace(f.Namespace.Name)
107104
Expect(err).NotTo(HaveOccurred())
108-
109-
By("Waiting for test namespace to no longer exist")
110-
err = f.WaitForKubeNamespaceNotExist(f.Namespace.Name)
111-
Expect(err).NotTo(HaveOccurred())
112105
}
113106

114107
func (f *Framework) DeployProxyWith(extraVolumes []corev1.Volume, extraArgs ...string) {
115108
By("Deleting kube-oidc-proxy deployment")
116109
err := f.Helper().DeleteProxy(f.Namespace.Name)
117110
Expect(err).NotTo(HaveOccurred())
118111

112+
err = f.Helper().WaitForDeploymentToDelete(f.Namespace.Name, helper.ProxyName, time.Second*30)
113+
Expect(err).NotTo(HaveOccurred())
114+
119115
By(fmt.Sprintf("Deploying kube-oidc-proxy with extra args %s", extraArgs))
120116
f.proxyKeyBundle, f.proxyURL, err = f.helper.DeployProxy(f.Namespace, f.issuerURL,
121117
clientID, f.issuerKeyBundle, extraVolumes, extraArgs...)

test/e2e/framework/helper/deploy.go

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"strconv"
99
"time"
1010

11+
appsv1 "k8s.io/api/apps/v1"
1112
corev1 "k8s.io/api/core/v1"
1213
rbacv1 "k8s.io/api/rbac/v1"
1314
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
@@ -303,27 +304,42 @@ func (h *Helper) deployApp(ns, name string, serviceType corev1.ServiceType, cont
303304
},
304305
}
305306

306-
pod := &corev1.Pod{
307+
deploy := &appsv1.Deployment{
307308
ObjectMeta: metav1.ObjectMeta{
308309
Name: name,
309310
Namespace: ns,
310311
Labels: map[string]string{
311312
"app": name,
312313
},
313314
},
314-
Spec: corev1.PodSpec{
315-
ServiceAccountName: name,
316-
Containers: []corev1.Container{container},
317-
Volumes: append(volumes,
318-
corev1.Volume{
319-
Name: "tls",
320-
VolumeSource: corev1.VolumeSource{
321-
Secret: &corev1.SecretVolumeSource{
322-
SecretName: name,
323-
},
315+
Spec: appsv1.DeploymentSpec{
316+
Selector: &metav1.LabelSelector{
317+
MatchLabels: map[string]string{
318+
"app": name,
319+
},
320+
},
321+
Template: corev1.PodTemplateSpec{
322+
ObjectMeta: metav1.ObjectMeta{
323+
Labels: map[string]string{
324+
"app": name,
324325
},
325326
},
326-
),
327+
328+
Spec: corev1.PodSpec{
329+
ServiceAccountName: name,
330+
Containers: []corev1.Container{container},
331+
Volumes: append(volumes,
332+
corev1.Volume{
333+
Name: "tls",
334+
VolumeSource: corev1.VolumeSource{
335+
Secret: &corev1.SecretVolumeSource{
336+
SecretName: name,
337+
},
338+
},
339+
},
340+
),
341+
},
342+
},
327343
},
328344
}
329345

@@ -347,12 +363,12 @@ func (h *Helper) deployApp(ns, name string, serviceType corev1.ServiceType, cont
347363
return nil, nil, err
348364
}
349365

350-
_, err = h.KubeClient.CoreV1().Pods(ns).Create(pod)
366+
_, err = h.KubeClient.AppsV1().Deployments(ns).Create(deploy)
351367
if err != nil {
352368
return nil, nil, err
353369
}
354370

355-
if err := h.WaitForPodReady(ns, name, time.Second*20); err != nil {
371+
if err := h.WaitForDeploymentReady(ns, name, time.Second*20); err != nil {
356372
return nil, nil, err
357373
}
358374

@@ -376,7 +392,7 @@ func (h *Helper) DeleteFakeAPIServer(ns string) error {
376392
}
377393

378394
func (h *Helper) deleteApp(ns, name string, extraSecrets ...string) error {
379-
err := h.KubeClient.CoreV1().Pods(ns).Delete(name, nil)
395+
err := h.KubeClient.AppsV1().Deployments(ns).Delete(name, nil)
380396
if err != nil && !k8sErrors.IsNotFound(err) {
381397
return err
382398
}
@@ -398,10 +414,6 @@ func (h *Helper) deleteApp(ns, name string, extraSecrets ...string) error {
398414
return err
399415
}
400416

401-
if err := h.WaitForPodDeletion(ns, name, time.Second*30); err != nil {
402-
return err
403-
}
404-
405417
return nil
406418
}
407419

test/e2e/framework/helper/pod.go renamed to test/e2e/framework/helper/poll.go

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,42 @@ import (
1212
"k8s.io/apimachinery/pkg/util/wait"
1313
)
1414

15+
func (h *Helper) WaitForDeploymentReady(namespace, name string, timeout time.Duration) error {
16+
log.Infof("Waiting for Deployment to become ready %s/%s", namespace, name)
17+
18+
err := wait.PollImmediate(time.Second*2, timeout, func() (bool, error) {
19+
deploy, err := h.KubeClient.AppsV1().Deployments(namespace).Get(name, metav1.GetOptions{})
20+
if err != nil {
21+
return false, err
22+
}
23+
24+
if deploy.Spec.Replicas == nil {
25+
return false, nil
26+
}
27+
28+
if *deploy.Spec.Replicas == deploy.Status.ReadyReplicas {
29+
return true, nil
30+
}
31+
32+
return false, nil
33+
})
34+
35+
if err != nil {
36+
kErr := h.Kubectl(namespace).DescribeResource("deployment", name)
37+
if kErr != nil {
38+
err = fmt.Errorf("%s\n%s", err, kErr)
39+
}
40+
41+
return err
42+
}
43+
44+
return nil
45+
}
46+
1547
func (h *Helper) WaitForPodReady(namespace, name string, timeout time.Duration) error {
1648
log.Infof("Waiting for Pod to become ready %s/%s", namespace, name)
1749

18-
err := wait.PollImmediate(time.Second*5, timeout, func() (bool, error) {
50+
err := wait.PollImmediate(time.Second*2, timeout, func() (bool, error) {
1951
pod, err := h.KubeClient.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{})
2052
if err != nil {
2153
return false, err
@@ -54,26 +86,24 @@ func (h *Helper) WaitForPodReady(namespace, name string, timeout time.Duration)
5486
return nil
5587
}
5688

57-
func (h *Helper) WaitForPodDeletion(namespace, name string, timeout time.Duration) error {
58-
log.Infof("Waiting for Pod to be deleted %s/%s", namespace, name)
89+
func (h *Helper) WaitForDeploymentToDelete(namespace, name string, timeout time.Duration) error {
90+
log.Infof("Waiting for Deployment to be deleted: %s/%s", namespace, name)
5991

60-
err := wait.PollImmediate(time.Second*5, timeout, func() (bool, error) {
61-
pod, err := h.KubeClient.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{})
92+
err := wait.PollImmediate(time.Second*2, timeout, func() (bool, error) {
93+
_, err := h.KubeClient.AppsV1().Deployments(namespace).Get(name, metav1.GetOptions{})
6294
if k8sErrors.IsNotFound(err) {
6395
return true, nil
6496
}
6597

6698
if err != nil {
67-
return false, err
99+
return false, nil
68100
}
69101

70-
log.Infof("helper: pod not deleted %s/%s: %v",
71-
pod.Namespace, pod.Name, pod.Status.Conditions)
72-
73102
return false, nil
74103
})
104+
75105
if err != nil {
76-
kErr := h.Kubectl(namespace).DescribeResource("pod", name)
106+
kErr := h.Kubectl(namespace).DescribeResource("deployment", name)
77107
if kErr != nil {
78108
err = fmt.Errorf("%s\n%s", err, kErr)
79109
}

test/e2e/framework/util.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ import (
1212
"k8s.io/client-go/kubernetes"
1313
)
1414

15+
const (
16+
clientID = "kube-oidc-proxy-e2e-client_id"
17+
)
18+
1519
// CreateKubeNamespace creates a new Kubernetes Namespace for a test.
1620
func (f *Framework) CreateKubeNamespace(baseName string) (*corev1.Namespace, error) {
1721
ns := &corev1.Namespace{

test/e2e/suite/cases/probe/probe.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var _ = framework.CasesDescribe("Readiness Probe", func() {
3434

3535
time.Sleep(time.Second * 10)
3636

37-
err := f.Helper().WaitForPodReady(f.Namespace.Name, helper.ProxyName, time.Second*5)
37+
err := f.Helper().WaitForDeploymentReady(f.Namespace.Name, helper.ProxyName, time.Second*5)
3838
Expect(err).NotTo(HaveOccurred())
3939
})
4040
})

test/environment/dev/dev.go

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,24 @@ package main
44
import (
55
"fmt"
66
"os"
7+
"path/filepath"
8+
"time"
79

10+
corev1 "k8s.io/api/core/v1"
11+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
"k8s.io/cli-runtime/pkg/genericclioptions"
13+
"k8s.io/client-go/kubernetes"
14+
15+
"github.com/jetstack/kube-oidc-proxy/test/e2e/framework/config"
16+
"github.com/jetstack/kube-oidc-proxy/test/e2e/framework/helper"
817
"github.com/jetstack/kube-oidc-proxy/test/environment"
918
"github.com/jetstack/kube-oidc-proxy/test/kind"
1019
)
1120

21+
const (
22+
clientID = "kube-oidc-proxy-e2e-client-id"
23+
)
24+
1225
func main() {
1326
if len(os.Args) != 2 {
1427
errExit(fmt.Errorf("expecting 2 arguments, got=%d",
@@ -18,11 +31,13 @@ func main() {
1831
switch os.Args[1] {
1932
case "create":
2033
create()
34+
case "deploy":
35+
deploy()
2136
case "destroy":
2237
destroy()
2338
default:
24-
errExit(fmt.Errorf("unexpected argument %q, expecting %q or %q",
25-
os.Args[1], "create", "destroy"))
39+
errExit(fmt.Errorf("unexpected argument %q, expecting [%q %q %q]",
40+
os.Args[1], "create", "deploy", "destroy"))
2641
}
2742

2843
os.Exit(0)
@@ -32,13 +47,69 @@ func create() {
3247
env, err := environment.Create(1, 1)
3348
errExit(err)
3449

35-
fmt.Printf("dev environment created.\n")
50+
fmt.Printf("> dev environment created.\n")
3651
fmt.Printf("export KUBECONFIG=%s\n", env.KubeConfigPath())
3752
}
3853

54+
func deploy() {
55+
k := new(kind.Kind)
56+
kubeconfig := k.KubeConfigPath()
57+
rootPath, err := environment.RootPath()
58+
errExit(err)
59+
60+
cfg := &config.Config{
61+
KubeConfigPath: kubeconfig,
62+
RepoRoot: rootPath,
63+
Kubectl: filepath.Join(rootPath, "bin", "kubectl"),
64+
}
65+
66+
err = cfg.Validate()
67+
errExit(err)
68+
69+
helper := helper.NewHelper(cfg)
70+
71+
clientConfigFlags := genericclioptions.NewConfigFlags(true)
72+
clientConfigFlags.KubeConfig = &kubeconfig
73+
config, err := clientConfigFlags.ToRESTConfig()
74+
errExit(err)
75+
76+
kubeClient, err := kubernetes.NewForConfig(config)
77+
errExit(err)
78+
79+
helper.KubeClient = kubeClient
80+
81+
ns := &corev1.Namespace{
82+
ObjectMeta: metav1.ObjectMeta{
83+
GenerateName: "kube-oidc-proxy-e2e-",
84+
},
85+
}
86+
ns, err = kubeClient.CoreV1().Namespaces().Create(ns)
87+
errExit(err)
88+
89+
fmt.Printf("> created new namespace %s\n", ns.Name)
90+
91+
issuerKeyBundle, issuerURL, err := helper.DeployIssuer(ns.Name)
92+
errExit(err)
93+
94+
fmt.Printf("> deployed issuer at url %s\n", issuerURL)
95+
96+
_, proxyURL, err := helper.DeployProxy(ns, issuerURL,
97+
"kube-oidc-proxy-e2e-client-id", issuerKeyBundle, nil)
98+
errExit(err)
99+
fmt.Printf("> deployed proxy at url %s\n", proxyURL)
100+
101+
tokenPayload := helper.NewTokenPayload(issuerURL, clientID, time.Now().Add(time.Hour*48))
102+
103+
signedToken, err := helper.SignToken(issuerKeyBundle, tokenPayload)
104+
errExit(err)
105+
fmt.Printf("> signed token valid for 48 hours:\n%s\n", signedToken)
106+
107+
fmt.Printf("export KUBECONFIG=%s\n", kubeconfig)
108+
}
109+
39110
func destroy() {
40111
errExit(kind.DeleteCluster("kube-oidc-proxy-e2e"))
41-
fmt.Printf("dev environment destroyed.\n")
112+
fmt.Printf("> dev environment destroyed.\n")
42113
}
43114

44115
func errExit(err error) {

0 commit comments

Comments
 (0)