mirror of
https://github.com/wahyd4/cert-manager.git
synced 2026-08-13 15:15:55 +10:00
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:
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -0,0 +1,10 @@
|
||||
replicaCount: 1
|
||||
|
||||
image:
|
||||
tag: build
|
||||
pullPolicy: Never
|
||||
|
||||
ingressShim:
|
||||
image:
|
||||
tag: build
|
||||
pullPolicy: Never
|
||||
@@ -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
|
||||
@@ -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: {}
|
||||
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user