Use cert-manager installed via helm in e2e tests

Print pod logs on test failure

Remove old flags from e2e_test makefile target
This commit is contained in:
James Munnelly
2018-01-15 19:15:07 +00:00
parent 66a3b155ee
commit 102cfeb8a6
10 changed files with 83 additions and 189 deletions
-4
View File
@@ -100,10 +100,6 @@ e2e_test:
# Run e2e tests
KUBECONFIG=$$HOME/.kube/config CERTMANAGERCONFIG=$$HOME/.kube/config \
./e2e-tests \
-cert-manager-image-pull-policy=Never \
-cert-manager-image=$(REGISTRY)/$(APP_NAME)-controller:$(BUILD_TAG) \
-ingress-shim-image-pull-policy=Never \
-ingress-shim-image=$(REGISTRY)/$(APP_NAME)-ingress-shim:$(BUILD_TAG) \
-acme-nginx-certificate-domain=$(E2E_NGINX_CERTIFICATE_DOMAIN)
# Docker targets
+31 -1
View File
@@ -4,4 +4,34 @@ set -o errexit
set -o nounset
set -o pipefail
while true; do if kubectl get nodes; then break; fi; echo "Waiting 5s for kubernetes to be ready..."; sleep 5; done
while true; do if kubectl get nodes; then break; fi; echo "Waiting 5s for kubernetes to be ready..."; sleep 5; done
echo "Installing helm..."
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: List
items:
### Tiller ###
# Create a ServiceAccount for tiller to use
- apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
# Bind tiller to the cluster-admin role
- apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: "tiller"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: "cluster-admin"
subjects:
- apiGroup: ""
kind: ServiceAccount
name: tiller
namespace: kube-system
EOF
helm init --service-account=tiller
+41 -1
View File
@@ -14,6 +14,8 @@ limitations under the License.
package e2e
import (
"os"
"os/exec"
"testing"
"github.com/golang/glog"
@@ -42,6 +44,44 @@ func RunE2ETests(t *testing.T) {
config.GinkgoConfig.SkipString = `\[Flaky\]|\[Feature:.+\]`
}
glog.Infof("Install cert-manager helm chart")
InstallHelmChart(t)
glog.Infof("Starting e2e run %q on Ginkgo node %d", framework.RunId, config.GinkgoConfig.ParallelNode)
ginkgo.RunSpecs(t, "cert-manager e2e suite")
if !ginkgo.RunSpecs(t, "cert-manager e2e suite") {
PrintPodLogs(t)
}
}
const releaseName = "cm"
func InstallHelmChart(t *testing.T) {
cmd := exec.Command("helm", "install", "./contrib/charts/cert-manager", "--namespace", "cert-manager", "--name", releaseName, "--values", "./test/fixtures/cert-manager-values.yaml", "--wait")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
t.Errorf("Error installing cert-manager: %s", err)
t.FailNow()
return
}
}
func PrintPodLogs(t *testing.T) {
glog.Infof("Printing cert-manager logs")
cmd := exec.Command("kubectl", "logs", "--namespace", "cert-manager", "-l", "app=cert-manager", "-l", "release=cm", "-c", "cert-manager")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
t.Errorf("Error printing cert-manager logs: %s", err)
}
glog.Infof("Printing ingress-shim logs")
cmdShim := exec.Command("kubectl", "logs", "--namespace", "cert-manager", "-l", "app=cert-manager", "-l", "release=cm", "-c", "ingress-shim")
cmdShim.Stdout = os.Stdout
cmdShim.Stderr = os.Stderr
err = cmdShim.Run()
if err != nil {
t.Errorf("Error printing ingress-shim logs: %s", err)
}
}
+1 -65
View File
@@ -15,7 +15,6 @@ package framework
import (
"k8s.io/api/core/v1"
corev1 "k8s.io/api/core/v1"
apiextcs "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
"k8s.io/client-go/kubernetes"
@@ -23,12 +22,6 @@ import (
. "github.com/onsi/gomega"
clientset "github.com/jetstack/cert-manager/pkg/client/clientset/versioned"
"github.com/jetstack/cert-manager/test/util"
)
const (
certManagerPodName = "test-cert-manager"
ingressShimPodName = "test-ingress-shim"
)
// Framework supports common operations used by e2e tests; it will keep a client & a namespace for you.
@@ -86,73 +79,16 @@ func (f *Framework) BeforeEach() {
By("Building a namespace api object")
f.Namespace, err = CreateKubeNamespace(f.BaseName, f.KubeClientSet)
Expect(err).NotTo(HaveOccurred())
By("Building an Issuer CustomResourceDefinition api object")
err = CreateIssuerCRD(f.APIExtensionsClientSet)
Expect(err).NotTo(HaveOccurred())
By("Building a ClusterIssuer CustomResourceDefinition api object")
err = CreateClusterIssuerCRD(f.APIExtensionsClientSet)
Expect(err).NotTo(HaveOccurred())
By("Building an Certificate CustomResourceDefinition api object")
err = CreateCertificateCRD(f.APIExtensionsClientSet)
Expect(err).NotTo(HaveOccurred())
By("Creating a cert-manager pod")
pod, err := f.KubeClientSet.CoreV1().Pods(f.Namespace.Name).Create(util.NewCertManagerControllerPod(certManagerPodName, "--cluster-resource-namespace="+f.Namespace.Name, "--v=4"))
Expect(err).NotTo(HaveOccurred())
By("Creating an ingress-shim pod")
pod, err = f.KubeClientSet.CoreV1().Pods(f.Namespace.Name).Create(util.NewIngressShimControllerPod(ingressShimPodName, "--v=4"))
Expect(err).NotTo(HaveOccurred())
By("Waiting for cert-manager to be running")
err = WaitForPodRunningInNamespace(f.KubeClientSet, pod)
Expect(err).NotTo(HaveOccurred())
}
// AfterEach deletes the namespace, after reading its events.
func (f *Framework) AfterEach() {
RemoveCleanupAction(f.cleanupHandle)
By("Retrieving the cert-manager pod logs")
b, err := f.KubeClientSet.CoreV1().Pods(f.Namespace.Name).GetLogs(certManagerPodName, &corev1.PodLogOptions{}).Do().Raw()
Expect(err).NotTo(HaveOccurred())
_, err = GinkgoWriter.Write(b)
Expect(err).NotTo(HaveOccurred())
By("Retrieving the ingress-shim pod logs")
b, err = f.KubeClientSet.CoreV1().Pods(f.Namespace.Name).GetLogs(ingressShimPodName, &corev1.PodLogOptions{}).Do().Raw()
Expect(err).NotTo(HaveOccurred())
_, err = GinkgoWriter.Write(b)
Expect(err).NotTo(HaveOccurred())
By("Deleting test namespace")
err = DeleteKubeNamespace(f.KubeClientSet, f.Namespace.Name)
err := DeleteKubeNamespace(f.KubeClientSet, f.Namespace.Name)
Expect(err).NotTo(HaveOccurred())
By("Deleting Issuer CustomResourceDefinition")
err = DeleteIssuerCRD(f.APIExtensionsClientSet)
Expect(err).NotTo(HaveOccurred())
By("Deleting ClusterIssuer CustomResourceDefinition")
err = DeleteClusterIssuerCRD(f.APIExtensionsClientSet)
Expect(err).NotTo(HaveOccurred())
By("Deleting Certificate CustomResourceDefinition")
err = DeleteCertificateCRD(f.APIExtensionsClientSet)
Expect(err).NotTo(HaveOccurred())
By("Waiting for Issuer CRD to no longer exist")
err = util.WaitForCRDToNotExist(f.APIExtensionsClientSet.ApiextensionsV1beta1().CustomResourceDefinitions(), issuerCrd().Name)
Expect(err).NotTo(HaveOccurred())
By("Waiting for ClusterIssuer CRD to no longer exist")
err = util.WaitForCRDToNotExist(f.APIExtensionsClientSet.ApiextensionsV1beta1().CustomResourceDefinitions(), clusterIssuerCrd().Name)
Expect(err).NotTo(HaveOccurred())
By("Waiting for Certificate CRD to no longer exist")
err = util.WaitForCRDToNotExist(f.APIExtensionsClientSet.ApiextensionsV1beta1().CustomResourceDefinitions(), certificateCrd().Name)
Expect(err).NotTo(HaveOccurred())
By("Waiting for test namespace to no longer exist")
err = WaitForKubeNamespaceNotExist(f.KubeClientSet, f.Namespace.Name)
Expect(err).NotTo(HaveOccurred())
+10
View File
@@ -0,0 +1,10 @@
replicaCount: 1
image:
tag: build
pullPolicy: Never
ingressShim:
image:
tag: build
pullPolicy: Never
-18
View File
@@ -1,18 +0,0 @@
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: acme-http-cert-2
namespace: "default"
spec:
acme:
config:
- http01:
ingressClass: nginx
domains:
- acme-http-2.k8s.school
- acme-cn-2.k8s.school
commonName: acme-http-2.k8s.school
issuerRef:
kind: ClusterIssuer
name: letsencrypt-staging
secretName: acme-http-k8s-school-2
-20
View File
@@ -1,20 +0,0 @@
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: acme-http-cert
namespace: "default"
spec:
acme:
config:
- http01:
ingressClass: nginx
domains:
- acme-http.k8s.school
- acme-cn.k8s.school
commonName: acme-cn.k8s.school
dnsNames:
- acme-http.k8s.school
issuerRef:
kind: ClusterIssuer
name: letsencrypt-staging
secretName: acme-http-k8s-school
@@ -1,12 +0,0 @@
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: james@jetstack.io
privateKeySecretRef:
key: "priv.key"
name: letsencrypt-prod
server: https://acme-v01.api.letsencrypt.org/directory
http01: {}
@@ -1,12 +0,0 @@
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
email: james@jetstack.io
privateKeySecretRef:
key: "priv.key"
name: letsencrypt-staging
server: https://acme-staging.api.letsencrypt.org/directory
http01: {}
-56
View File
@@ -20,21 +20,9 @@ import (
"github.com/jetstack/cert-manager/pkg/util"
)
var certManagerImageFlag string
var certManagerImagePullPolicy string
var ingressShimImageFlag string
var ingressShimImagePullPolicy string
var ACMECertificateDomain string
func init() {
flag.StringVar(&certManagerImageFlag, "cert-manager-image", "quay.io/jetstack/cert-manager-controller:canary",
"The container image for cert-manager to test against")
flag.StringVar(&certManagerImagePullPolicy, "cert-manager-image-pull-policy", "Never",
"The image pull policy to use for cert-manager when running tests")
flag.StringVar(&ingressShimImageFlag, "ingress-shim-image", "quay.io/jetstack/cert-manager-ingress-shim:canary",
"The container image for ingress-shim to test against")
flag.StringVar(&ingressShimImagePullPolicy, "ingress-shim-image-pull-policy", "Never",
"The image pull policy to use for ingress-shim when running tests")
flag.StringVar(&ACMECertificateDomain, "acme-nginx-certificate-domain", "",
"The provided domain and all sub-domains should resolve to the nginx ingress controller")
}
@@ -143,50 +131,6 @@ func WaitForCRDToNotExist(client apiextcs.CustomResourceDefinitionInterface, nam
)
}
func NewCertManagerControllerPod(name string, args ...string) *v1.Pod {
return &v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Labels: map[string]string{
"app": name,
},
},
Spec: v1.PodSpec{
HostNetwork: true,
Containers: []v1.Container{
{
Name: name,
Image: certManagerImageFlag,
Args: args,
ImagePullPolicy: v1.PullPolicy(certManagerImagePullPolicy),
},
},
},
}
}
func NewIngressShimControllerPod(name string, args ...string) *v1.Pod {
return &v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Labels: map[string]string{
"app": name,
},
},
Spec: v1.PodSpec{
HostNetwork: true,
Containers: []v1.Container{
{
Name: name,
Image: ingressShimImageFlag,
Args: args,
ImagePullPolicy: v1.PullPolicy(ingressShimImagePullPolicy),
},
},
},
}
}
func NewCertManagerCAClusterIssuer(name, secretName string) *v1alpha1.ClusterIssuer {
return &v1alpha1.ClusterIssuer{
ObjectMeta: metav1.ObjectMeta{