Skip to content

Commit

Permalink
make ingress.path a string array
Browse files Browse the repository at this point in the history
  • Loading branch information
cfitzw committed Dec 13, 2024
1 parent 8c26c79 commit 23532bd
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 50 deletions.
4 changes: 2 additions & 2 deletions docs/modules/ROOT/partials/apis/camel-k-crds.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7326,11 +7326,11 @@ string
To configure the host exposed by the ingress.
|`path` +
string
[]string
|
To configure the path exposed by the ingress (default `/`).
To configure the paths exposed by the ingress (default `/`).
|`pathType` +
*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pathtype-v1-networking[Kubernetes networking/v1.PathType]*
Expand Down
42 changes: 28 additions & 14 deletions helm/camel-k/crds/camel-k-crds.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4467,9 +4467,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -6656,9 +6658,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -8748,9 +8752,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -10816,9 +10822,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -19265,9 +19273,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -21260,9 +21270,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -31086,9 +31098,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
4 changes: 2 additions & 2 deletions pkg/apis/camel/v1/trait/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ type IngressTrait struct {
Annotations map[string]string `property:"annotations" json:"annotations,omitempty"`
// To configure the host exposed by the ingress.
Host string `property:"host" json:"host,omitempty"`
// To configure the path exposed by the ingress (default `/`).
Path string `property:"path" json:"path,omitempty"`
// To configure the paths exposed by the ingress (default `/`).
Path []string `property:"path" json:"path,omitempty"`
// To configure the path type exposed by the ingress.
// One of `Exact`, `Prefix`, `ImplementationSpecific` (default to `Prefix`).
// +kubebuilder:validation:Enum=Exact;Prefix;ImplementationSpecific
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1237,9 +1237,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -3426,9 +3428,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1106,9 +1106,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -3174,9 +3176,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7466,9 +7466,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -9461,9 +9463,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
6 changes: 4 additions & 2 deletions pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7531,9 +7531,11 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
description: To configure the paths exposed by the ingress
(default `/`).
type: string
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
44 changes: 26 additions & 18 deletions pkg/trait/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,26 +101,14 @@ func (t *ingressTrait) Apply(e *Environment) error {
Host: t.Host,
IngressRuleValue: networkingv1.IngressRuleValue{
HTTP: &networkingv1.HTTPIngressRuleValue{
Paths: []networkingv1.HTTPIngressPath{
{
Path: t.getPath(),
PathType: t.getPathType(),
Backend: networkingv1.IngressBackend{
Service: &networkingv1.IngressServiceBackend{
Name: service.Name,
Port: networkingv1.ServiceBackendPort{
Name: "http",
},
},
},
},
},
Paths: t.getPaths(service),
},
},
},
},
},
}

if t.IngressClassName != "" {
ingress.Spec.IngressClassName = &t.IngressClassName
}
Expand Down Expand Up @@ -148,12 +136,32 @@ func (t *ingressTrait) Apply(e *Environment) error {
return nil
}

func (t *ingressTrait) getPath() string {
if t.Path == "" {
return defaultPath
func (t *ingressTrait) getPaths(service *corev1.Service) []networkingv1.HTTPIngressPath {
createIngressPath := func(path string) networkingv1.HTTPIngressPath {
return networkingv1.HTTPIngressPath{
Path: path,
PathType: t.getPathType(),
Backend: networkingv1.IngressBackend{
Service: &networkingv1.IngressServiceBackend{
Name: service.Name,
Port: networkingv1.ServiceBackendPort{
Name: "http",
},
},
},
}
}

paths := []networkingv1.HTTPIngressPath{}
if len(t.Path) == 0 {
paths = append(paths, createIngressPath(defaultPath))
} else {
for _, p := range t.Path {
paths = append(paths, createIngressPath(p))
}
}

return t.Path
return paths
}

func (t *ingressTrait) getPathType() *networkingv1.PathType {
Expand Down
30 changes: 30 additions & 0 deletions pkg/trait/ingress_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,36 @@ func TestApplyIngressTraitDoesSucceed(t *testing.T) {
assert.Equal(t, "service-name(hostname) -> service-name(http)", conditions[0].Message)
}

func TestApplyIngressTraitWithPathsDoesSucceed(t *testing.T) {
ingressTrait, environment := createNominalIngressTest()
ingressTrait.Path = []string{"/ding", "/dong"}

err := ingressTrait.Apply(environment)

require.NoError(t, err)
assert.Len(t, environment.Integration.Status.Conditions, 1)

assert.Len(t, environment.Resources.Items(), 2)
environment.Resources.Visit(func(resource runtime.Object) {
if ingress, ok := resource.(*networkingv1.Ingress); ok {
assert.Equal(t, "service-name", ingress.Name)
assert.Equal(t, "namespace", ingress.Namespace)
assert.Len(t, ingress.Spec.Rules, 1)
assert.Equal(t, "hostname", ingress.Spec.Rules[0].Host)
assert.Len(t, ingress.Spec.Rules[0].HTTP.Paths, 2)
assert.Equal(t, "/ding", ingress.Spec.Rules[0].HTTP.Paths[0].Path)
assert.Equal(t, "/dong", ingress.Spec.Rules[0].HTTP.Paths[1].Path)
assert.Equal(t, "service-name", ingress.Spec.Rules[0].HTTP.Paths[0].Backend.Service.Name)
assert.NotNil(t, *ingress.Spec.Rules[0].HTTP.Paths[0].PathType)
assert.Equal(t, networkingv1.PathTypePrefix, *ingress.Spec.Rules[0].HTTP.Paths[0].PathType)
}
})

conditions := environment.Integration.Status.Conditions
assert.Len(t, conditions, 1)
assert.Equal(t, "service-name(hostname) -> service-name(http)", conditions[0].Message)
}

func TestApplyIngressTraitWithIngressClassNameDoesSucceed(t *testing.T) {
ingressTrait, environment := createNominalIngressTestWithIngressClassName("someIngressClass")

Expand Down

0 comments on commit 23532bd

Please sign in to comment.