Fix e2e tests on Kube 1.16 by removing last references to NetworkingV1

Signed-off-by: Jake Sanders <i@am.so-aweso.me>
This commit is contained in:
Jake Sanders 2021-07-26 22:30:41 +01:00
parent edcbd4fff6
commit fc428d763e
No known key found for this signature in database
GPG Key ID: 7E708D7933B84690
7 changed files with 57 additions and 29 deletions

View File

@ -53,6 +53,7 @@ type InternalIngressInterface interface {
Create(ctx context.Context, ingress *networkingv1.Ingress, opts metav1.CreateOptions) (*networkingv1.Ingress, error)
Update(ctx context.Context, ingress *networkingv1.Ingress, opts metav1.UpdateOptions) (*networkingv1.Ingress, error)
Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
Get(ctx context.Context, name string, opts metav1.GetOptions) (*networkingv1.Ingress, error)
}
// InternalIngressLister mimics a client-go networking/v1/IngressLister.
@ -107,28 +108,41 @@ func NewCreateUpdater(ctx *controller.Context) (InternalIngressCreateUpdater, er
func hasVersion(d discovery.DiscoveryInterface, GroupVersion string) bool {
// check whether the GroupVersion is already known
knownVersions := knownAPIVersionCache.Load().(map[string]bool)
if knownVersions[GroupVersion] == true {
return true
knownVersion, found := knownVersions[GroupVersion]
if found {
return knownVersion
}
resourceList, err := d.ServerResourcesForGroupVersion(GroupVersion)
if err != nil {
return false
}
if len(resourceList.APIResources) > 0 {
// Now we know the APIServer supports this GroupVersion, store the result atomically
// in the knownVersions cache. Lock, get the latest copy, atomically update.
cacheLock.Lock()
defer cacheLock.Unlock()
oldCache := knownAPIVersionCache.Load().(map[string]bool)
newCache := make(map[string]bool)
for k, v := range oldCache {
newCache[k] = v
for _, r := range resourceList.APIResources {
if r.Kind == "Ingress" {
// Now we know the APIServer supports this GroupVersion, store the result atomically
// in the knownVersions cache. Lock, get the latest copy, atomically update.
cacheLock.Lock()
oldCache := knownAPIVersionCache.Load().(map[string]bool)
newCache := make(map[string]bool)
for k, v := range oldCache {
newCache[k] = v
}
newCache[GroupVersion] = true
knownAPIVersionCache.Store(newCache)
cacheLock.Unlock()
return true
}
newCache[GroupVersion] = true
knownAPIVersionCache.Store(newCache)
return true
}
// no networking error and no Ingresses found in networking.k8s.io/<version>, cache negative result
cacheLock.Lock()
oldCache := knownAPIVersionCache.Load().(map[string]bool)
newCache := make(map[string]bool)
for k, v := range oldCache {
newCache[k] = v
}
newCache[GroupVersion] = false
knownAPIVersionCache.Store(newCache)
cacheLock.Unlock()
return false
}

View File

@ -66,6 +66,10 @@ type v1Interface struct {
ns string
}
func (v1 *v1Interface) Get(ctx context.Context, name string, opts metav1.GetOptions) (*networkingv1.Ingress, error) {
return v1.client.NetworkingV1().Ingresses(v1.ns).Get(ctx, name, opts)
}
func (v1 *v1Interface) Create(ctx context.Context, ingress *networkingv1.Ingress, opts metav1.CreateOptions) (*networkingv1.Ingress, error) {
return v1.client.NetworkingV1().Ingresses(v1.ns).Create(ctx, ingress, opts)
}

View File

@ -133,6 +133,14 @@ type v1beta1Interface struct {
ns string
}
func (v *v1beta1Interface) Get(ctx context.Context, name string, opts metav1.GetOptions) (*networkingv1.Ingress, error) {
ing, err := v.client.NetworkingV1beta1().Ingresses(v.ns).Get(ctx, name, opts)
if err != nil {
return nil, err
}
return convertV1Beta1ToV1(ing)
}
func (v *v1beta1Interface) Create(ctx context.Context, ingress *networkingv1.Ingress, opts metav1.CreateOptions) (*networkingv1.Ingress, error) {
ing, err := convertV1ToV1Beta1(ingress)
if err != nil {

View File

@ -284,7 +284,7 @@ func (s *Solver) cleanupIngresses(ctx context.Context, ch *cmacme.Challenge) err
log := logf.WithRelatedResource(log, ingress).V(logf.DebugLevel)
log.V(logf.DebugLevel).Info("deleting ingress resource")
err := s.Client.NetworkingV1().Ingresses(ingress.Namespace).Delete(ctx, ingress.Name, metav1.DeleteOptions{})
err := s.ingressCreateUpdater.Ingresses(ingress.Namespace).Delete(ctx, ingress.Name, metav1.DeleteOptions{})
if err != nil {
log.V(logf.WarnLevel).Info("failed to delete ingress resource", "error", err)
errs = append(errs, err)
@ -296,7 +296,7 @@ func (s *Solver) cleanupIngresses(ctx context.Context, ch *cmacme.Challenge) err
}
// otherwise, we need to remove any cert-manager added rules from the ingress resource
ing, err := s.Client.NetworkingV1().Ingresses(ch.Namespace).Get(ctx, existingIngressName, metav1.GetOptions{})
ing, err := s.ingressCreateUpdater.Ingresses(ch.Namespace).Get(ctx, existingIngressName, metav1.GetOptions{})
if k8sErrors.IsNotFound(err) {
log.Error(err, "named ingress resource not found, skipping cleanup")
return nil
@ -339,7 +339,7 @@ func (s *Solver) cleanupIngresses(ctx context.Context, ch *cmacme.Challenge) err
ing.Spec.Rules = ingRules
_, err = s.Client.NetworkingV1().Ingresses(ing.Namespace).Update(ctx, ing, metav1.UpdateOptions{})
_, err = s.ingressCreateUpdater.Ingresses(ing.Namespace).Update(ctx, ing, metav1.UpdateOptions{})
if err != nil {
return err
}

View File

@ -645,7 +645,7 @@ func (s *Suite) Define() {
s.it(f, "should issue a certificate for a single distinct DNS Name defined by an ingress with annotations", func(issuerRef cmmeta.ObjectReference) {
var certName string
switch {
case e2eutil.HasAPIVersion(f.KubeClientSet.Discovery(), networkingv1.SchemeGroupVersion.String()):
case e2eutil.HasIngresses(f.KubeClientSet.Discovery(), networkingv1.SchemeGroupVersion.String()):
ingClient := f.KubeClientSet.NetworkingV1().Ingresses(f.Namespace.Name)
name := "testcert-ingress"
@ -659,7 +659,7 @@ func (s *Suite) Define() {
}, e2eutil.RandomSubdomain(s.DomainSuffix)), metav1.CreateOptions{})
Expect(err).NotTo(HaveOccurred())
certName = ingress.Spec.TLS[0].SecretName
case e2eutil.HasAPIVersion(f.KubeClientSet.Discovery(), networkingv1beta1.SchemeGroupVersion.String()):
case e2eutil.HasIngresses(f.KubeClientSet.Discovery(), networkingv1beta1.SchemeGroupVersion.String()):
ingClient := f.KubeClientSet.NetworkingV1beta1().Ingresses(f.Namespace.Name)
name := "testcert-ingress"
secretName := "testcert-ingress-tls"
@ -697,7 +697,7 @@ func (s *Suite) Define() {
renewBefore := time.Hour * 111
switch {
case e2eutil.HasAPIVersion(f.KubeClientSet.Discovery(), networkingv1.SchemeGroupVersion.String()):
case e2eutil.HasIngresses(f.KubeClientSet.Discovery(), networkingv1.SchemeGroupVersion.String()):
ingClient := f.KubeClientSet.NetworkingV1().Ingresses(f.Namespace.Name)
name := "testcert-ingress"
@ -715,7 +715,7 @@ func (s *Suite) Define() {
Expect(err).NotTo(HaveOccurred())
certName = ingress.Spec.TLS[0].SecretName
case e2eutil.HasAPIVersion(f.KubeClientSet.Discovery(), networkingv1beta1.SchemeGroupVersion.String()):
case e2eutil.HasIngresses(f.KubeClientSet.Discovery(), networkingv1beta1.SchemeGroupVersion.String()):
ingClient := f.KubeClientSet.NetworkingV1beta1().Ingresses(f.Namespace.Name)
name := "testcert-ingress"

View File

@ -229,14 +229,14 @@ var _ = framework.CertManagerDescribe("ACME Certificate (HTTP01)", func() {
It("should obtain a signed certificate with a single CN from the ACME server when putting an annotation on an ingress resource", func() {
switch {
case util.HasAPIVersion(f.KubeClientSet.Discovery(), networkingv1.SchemeGroupVersion.String()):
case util.HasIngresses(f.KubeClientSet.Discovery(), networkingv1.SchemeGroupVersion.String()):
ingClient := f.KubeClientSet.NetworkingV1().Ingresses(f.Namespace.Name)
By("Creating an Ingress with the issuer name annotation set")
_, err := ingClient.Create(context.TODO(), util.NewIngress(certificateSecretName, certificateSecretName, map[string]string{
"cert-manager.io/issuer": issuerName,
}, acmeIngressDomain), metav1.CreateOptions{})
Expect(err).NotTo(HaveOccurred())
case util.HasAPIVersion(f.KubeClientSet.Discovery(), networkingv1beta1.SchemeGroupVersion.String()):
case util.HasIngresses(f.KubeClientSet.Discovery(), networkingv1beta1.SchemeGroupVersion.String()):
ingClient := f.KubeClientSet.NetworkingV1beta1().Ingresses(f.Namespace.Name)
By("Creating an Ingress with the issuer name annotation set")
_, err := ingClient.Create(context.TODO(), util.NewV1Beta1Ingress(certificateSecretName, certificateSecretName, map[string]string{
@ -302,7 +302,7 @@ var _ = framework.CertManagerDescribe("ACME Certificate (HTTP01)", func() {
// using the TLS secret that we just got from the self-sign
switch {
case util.HasAPIVersion(f.KubeClientSet.Discovery(), networkingv1.SchemeGroupVersion.String()):
case util.HasIngresses(f.KubeClientSet.Discovery(), networkingv1.SchemeGroupVersion.String()):
ingress := f.KubeClientSet.NetworkingV1().Ingresses(f.Namespace.Name)
_, err = ingress.Create(context.TODO(), &networkingv1.Ingress{
ObjectMeta: metav1.ObjectMeta{
@ -345,7 +345,7 @@ var _ = framework.CertManagerDescribe("ACME Certificate (HTTP01)", func() {
},
}, metav1.CreateOptions{})
Expect(err).NotTo(HaveOccurred())
case util.HasAPIVersion(f.KubeClientSet.Discovery(), networkingv1beta1.SchemeGroupVersion.String()):
case util.HasIngresses(f.KubeClientSet.Discovery(), networkingv1beta1.SchemeGroupVersion.String()):
ingress := f.KubeClientSet.NetworkingV1beta1().Ingresses(f.Namespace.Name)
_, err = ingress.Create(context.TODO(), &networkingv1beta1.Ingress{
ObjectMeta: metav1.ObjectMeta{

View File

@ -574,15 +574,17 @@ func ptrPort(port int32) *gwapiv1alpha1.PortNumber {
return &p
}
// HasAPIVersion lets you know if an API exists in the discovery API
// HasIngresses lets you know if an API exists in the discovery API
// calling this function always performs a request to the API server.
func HasAPIVersion(d discovery.DiscoveryInterface, GroupVersion string) bool {
func HasIngresses(d discovery.DiscoveryInterface, GroupVersion string) bool {
resourceList, err := d.ServerResourcesForGroupVersion(GroupVersion)
if err != nil {
return false
}
if len(resourceList.APIResources) > 0 {
return true
for _, r := range resourceList.APIResources {
if r.Kind == "Ingress" {
return true
}
}
return false
}