Skip to content

Commit

Permalink
Updating create, delete and get to newer networking v1 extension v1 u…
Browse files Browse the repository at this point in the history
…nion functions (#4853)

* Moving to KubernetesIngressList for list ops

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Cleaning up

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Localizing check ingress support

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Fixing gosimple issue

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Removing remaining refs for old list ingress func

This also upgrades uts for listingress to use netv1 ingress
with a single case to validate extensionv1 ingress

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Removing GetIngressExtensionv1 and updating tests

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Updating create, delete ingress

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Fixing code smells

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Using kubernetesingress func to get urlstring

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Fixing generator as per errors and commenting as needed

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Remove unneeded line

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Removing unnessasary comments

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Addressing comments by @mrdas

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>

* Adding changelog entry

Signed-off-by: Mohammed Zeeshan Ahmed <mohammed.zee1000@gmail.com>
  • Loading branch information
mohammedzee1000 authored Jul 2, 2021
1 parent 3f084ad commit 34c11ca
Show file tree
Hide file tree
Showing 10 changed files with 342 additions and 150 deletions.
2 changes: 2 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

### Bug Fixes

- Completely move to using networking v1 and extensions v1 ingresses based on cluster support as extensions v1 ingress is deprecated ([#4853](https://github.com/openshift/odo/pull/4853))

### Tests

### Documentation
Expand Down
1 change: 1 addition & 0 deletions pkg/kclient/fakeclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ func FakeNewWithIngressSupports(networkingv1Supported, extensionV1Supported bool
client.appsClient = fkclientset.Kubernetes.AppsV1()
client.isExtensionV1Beta1IngressSupported = extensionV1Supported
client.isNetworkingV1IngressSupported = networkingv1Supported
client.checkIngressSupports = false
client.SetDiscoveryInterface(NewKubernetesFakedDiscovery(true, true))

return &client, &fkclientset
Expand Down
77 changes: 26 additions & 51 deletions pkg/kclient/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,66 +5,24 @@ import (
"fmt"
"github.com/openshift/odo/pkg/unions"

"github.com/pkg/errors"

extensionsv1 "k8s.io/api/extensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// CreateIngressExtensionV1 creates an ingress object for the given service and with the given labels
func (c *Client) CreateIngressExtensionV1(ingress extensionsv1.Ingress) (*extensionsv1.Ingress, error) {
if ingress.GetName() == "" {
return nil, fmt.Errorf("ingress name is empty")
}
ingressObj, err := c.KubeClient.ExtensionsV1beta1().Ingresses(c.Namespace).Create(context.TODO(), &ingress, metav1.CreateOptions{FieldManager: FieldManager})
if err != nil {
return nil, errors.Wrap(err, "error creating ingress")
}
return ingressObj, nil
}

// DeleteIngressExtensionV1 deletes the given ingress
func (c *Client) DeleteIngressExtensionV1(name string) error {
err := c.KubeClient.ExtensionsV1beta1().Ingresses(c.Namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
if err != nil {
return errors.Wrap(err, "unable to delete ingress")
}
return nil
}

// ListIngressesExtensionV1 lists all the ingresses based on the given label selector
func (c *Client) ListIngressesExtensionV1(labelSelector string) ([]extensionsv1.Ingress, error) {
ingressList, err := c.KubeClient.ExtensionsV1beta1().Ingresses(c.Namespace).List(context.TODO(), metav1.ListOptions{
LabelSelector: labelSelector,
})
if err != nil {
return nil, errors.Wrap(err, "unable to get ingress list")
}

return ingressList.Items, nil
}

// GetOneIngressFromSelector gets one ingress with the given selector
// if no or multiple ingresses are found with the given selector, it throws an error
func (c *Client) GetOneIngressFromSelector(selector string) (*extensionsv1.Ingress, error) {
ingresses, err := c.ListIngressesExtensionV1(selector)
func (c *Client) GetOneIngressFromSelector(selector string) (*unions.KubernetesIngress, error) {
ingresses, err := c.ListIngresses(selector)
if err != nil {
return nil, err
}

if num := len(ingresses); num == 0 {
if num := len(ingresses.Items); num == 0 {
return nil, fmt.Errorf("no ingress was found for the selector: %v", selector)
} else if num > 1 {
return nil, fmt.Errorf("multiple ingresses exist for the selector: %v. Only one must be present", selector)
}

return &ingresses[0], nil
}

// GetIngressExtensionV1 gets an ingress based on the given name
func (c *Client) GetIngressExtensionV1(name string) (*extensionsv1.Ingress, error) {
ingress, err := c.KubeClient.ExtensionsV1beta1().Ingresses(c.Namespace).Get(context.TODO(), name, metav1.GetOptions{})
return ingress, err
return ingresses.Items[0], nil
}

//CreateIngress creates a specified Kubernetes Ingress as a networking v1 or extensions v1beta1 ingress depending on what
Expand All @@ -75,6 +33,13 @@ func (c *Client) CreateIngress(ingress unions.KubernetesIngress) (*unions.Kubern
if !ingress.IsGenerated() {
return nil, fmt.Errorf("create ingress should get a generated ingress. If you are hiting this, contact the developer")
}
if ingress.GetName() == "" {
return nil, fmt.Errorf("cannot create an ingress without a name")
}
err = c.checkIngressSupport()
if err != nil {
return nil, err
}
created := false
kubernetesIngress := unions.NewNonGeneratedKubernetesIngress()
if c.isNetworkingV1IngressSupported {
Expand All @@ -98,6 +63,10 @@ func (c *Client) CreateIngress(ingress unions.KubernetesIngress) (*unions.Kubern

func (c *Client) DeleteIngress(name string) error {
var err error
err = c.checkIngressSupport()
if err != nil {
return err
}
if c.isNetworkingV1IngressSupported {
err = c.KubeClient.NetworkingV1().Ingresses(c.Namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
if err != nil {
Expand All @@ -113,8 +82,12 @@ func (c *Client) DeleteIngress(name string) error {
}

//ListIngresses lists all the ingresses based on given label selector
func (c *Client) ListIngresses(labelSelector string) ([]*unions.KubernetesIngress, error) {
var kubernetesIngressList []*unions.KubernetesIngress
func (c *Client) ListIngresses(labelSelector string) (*unions.KubernetesIngressList, error) {
kubernetesIngressList := unions.NewEmptyKubernetesIngressList()
err := c.checkIngressSupport()
if err != nil {
return nil, err
}
// if networking v1 ingress is supported then extension v1 ingress are automatically wrapped
// by net v1 ingresses
if c.isNetworkingV1IngressSupported {
Expand All @@ -127,9 +100,10 @@ func (c *Client) ListIngresses(labelSelector string) ([]*unions.KubernetesIngres
for k := range ingressList.Items {
ki := unions.NewNonGeneratedKubernetesIngress()
ki.NetworkingV1Ingress = &ingressList.Items[k]
kubernetesIngressList = append(kubernetesIngressList, ki)
kubernetesIngressList.Items = append(kubernetesIngressList.Items, ki)
}
}
return kubernetesIngressList, nil
} else if c.isExtensionV1Beta1IngressSupported {
ingressList, err := c.KubeClient.ExtensionsV1beta1().Ingresses(c.Namespace).List(context.TODO(), metav1.ListOptions{
LabelSelector: labelSelector,
Expand All @@ -140,11 +114,12 @@ func (c *Client) ListIngresses(labelSelector string) ([]*unions.KubernetesIngres
for k := range ingressList.Items {
ki := unions.NewNonGeneratedKubernetesIngress()
ki.ExtensionV1Beta1Ingress = &ingressList.Items[k]
kubernetesIngressList = append(kubernetesIngressList, ki)
kubernetesIngressList.Items = append(kubernetesIngressList.Items, ki)
}
}
return kubernetesIngressList, nil
}
return kubernetesIngressList, nil
return kubernetesIngressList, fmt.Errorf("ingresses on cluster are not supported")
}

func (c *Client) GetIngress(name string) (*unions.KubernetesIngress, error) {
Expand Down
Loading

0 comments on commit 34c11ca

Please sign in to comment.