Skip to content

Commit

Permalink
add support for multiple ingress paths
Browse files Browse the repository at this point in the history
  • Loading branch information
cfitzw committed Dec 16, 2024
1 parent 8c26c79 commit 8d2f4f5
Show file tree
Hide file tree
Showing 9 changed files with 211 additions and 44 deletions.
8 changes: 8 additions & 0 deletions docs/modules/ROOT/partials/apis/camel-k-crds.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7331,6 +7331,14 @@ string
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
|`paths` +
[]string
|
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
70 changes: 58 additions & 12 deletions helm/camel-k/crds/camel-k-crds.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4467,9 +4467,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -6656,9 +6662,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -8748,9 +8760,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -10816,9 +10834,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -19265,9 +19289,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -21260,9 +21290,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -31089,6 +31125,16 @@ spec:
description: To configure the path exposed by the ingress
(default `/`).
type: string
path:
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
3 changes: 3 additions & 0 deletions pkg/apis/camel/v1/trait/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ type IngressTrait struct {
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 `['/']`).
// Deprecated: In favor of `paths` - left for backward compatibility.
Paths []string `property:"paths" json:"paths,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,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -3426,9 +3432,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
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,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -3174,9 +3180,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
20 changes: 16 additions & 4 deletions pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7466,9 +7466,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down Expand Up @@ -9461,9 +9467,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
10 changes: 8 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,15 @@ spec:
See https://kubernetes.io/docs/concepts/services-networking/ingress/
type: string
path:
description: To configure the path exposed by the ingress
(default `/`).
description: |-
To configure the path exposed by the ingress (default `/`).
Deprecated: In favor of `paths` - left for backward compatibility.
type: string
paths:
description: To configure the paths exposed by the ingress (default `['/']`).
items:
type: string
type: array
pathType:
description: |-
To configure the path type exposed by the ingress.
Expand Down
45 changes: 27 additions & 18 deletions pkg/trait/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,20 +101,7 @@ 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),
},
},
},
Expand Down Expand Up @@ -148,12 +135,34 @@ 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 t.Path == "" && len(t.Paths) == 0 {
paths = append(paths, createIngressPath(defaultPath))
} else if t.Path != "" {
paths = append(paths, createIngressPath(t.Path))
} else {
for _, p := range t.Paths {
paths = append(paths, createIngressPath(p))
}
}

return t.Path
return paths
}

func (t *ingressTrait) getPathType() *networkingv1.PathType {
Expand Down
Loading

0 comments on commit 8d2f4f5

Please sign in to comment.