You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2018/11/05 19:46:31 UTC
[camel-k] 02/06: Add ingress trait
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 9b9f7437eae8872480c0e5facaf4cf5809912524
Author: nferraro <ni...@gmail.com>
AuthorDate: Wed Oct 31 00:17:20 2018 +0100
Add ingress trait
---
pkg/trait/catalog.go | 4 +++
pkg/trait/{route.go => ingress.go} | 55 +++++++++++++++++++++++---------------
pkg/trait/route.go | 6 +++--
3 files changed, 41 insertions(+), 24 deletions(-)
diff --git a/pkg/trait/catalog.go b/pkg/trait/catalog.go
index 049b1a6..d5cf865 100644
--- a/pkg/trait/catalog.go
+++ b/pkg/trait/catalog.go
@@ -30,6 +30,7 @@ type Catalog struct {
tDeployment ITrait
tService ITrait
tRoute ITrait
+ tIngress ITrait
tOwner ITrait
}
@@ -39,6 +40,7 @@ func NewCatalog() *Catalog {
tDeployment: newDeploymentTrait(),
tService: newServiceTrait(),
tRoute: newRouteTrait(),
+ tIngress: newIngressTrait(),
tOwner: newOwnerTrait(),
}
}
@@ -48,6 +50,7 @@ func (c *Catalog) allTraits() []ITrait {
c.tDeployment,
c.tService,
c.tRoute,
+ c.tIngress,
c.tOwner,
}
}
@@ -65,6 +68,7 @@ func (c *Catalog) traitsFor(environment *environment) []ITrait {
return []ITrait{
c.tDeployment,
c.tService,
+ c.tIngress,
c.tOwner,
}
// case Knative: ...
diff --git a/pkg/trait/route.go b/pkg/trait/ingress.go
similarity index 54%
copy from pkg/trait/route.go
copy to pkg/trait/ingress.go
index 1553bae..bbd7017 100644
--- a/pkg/trait/route.go
+++ b/pkg/trait/ingress.go
@@ -18,41 +18,50 @@ limitations under the License.
package trait
import (
+ "errors"
"github.com/apache/camel-k/pkg/util/kubernetes"
- routev1 "github.com/openshift/api/route/v1"
corev1 "k8s.io/api/core/v1"
+ "k8s.io/api/extensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
)
-type routeTrait struct {
+type ingressTrait struct {
BaseTrait `property:",squash"`
+ Host string `property:"host"`
}
-func newRouteTrait() *routeTrait {
- return &routeTrait{
- BaseTrait: newBaseTrait("route"),
+func newIngressTrait() *ingressTrait {
+ return &ingressTrait{
+ BaseTrait: newBaseTrait("ingress"),
+ Host: "",
}
}
-func (e *routeTrait) autoconfigure(environment *environment, resources *kubernetes.Collection) error {
+func (e *ingressTrait) autoconfigure(environment *environment, resources *kubernetes.Collection) error {
if e.Enabled == nil {
hasService := e.getTargetService(environment, resources) != nil
- e.Enabled = &hasService
+ hasHost := e.Host != ""
+ enabled := hasService && hasHost
+ e.Enabled = &enabled
}
return nil
}
-func (e *routeTrait) customize(environment *environment, resources *kubernetes.Collection) error {
+func (e *ingressTrait) customize(environment *environment, resources *kubernetes.Collection) error {
+ if e.Host == "" {
+ return errors.New("cannot apply ingress trait: no host defined")
+ }
service := e.getTargetService(environment, resources)
- if service != nil {
- resources.Add(e.getRouteFor(environment, service))
+ if service == nil {
+ return errors.New("cannot apply ingress trait: no target service")
}
+ resources.Add(e.getIngressFor(environment, service))
return nil
}
-func (*routeTrait) getTargetService(e *environment, resources *kubernetes.Collection) (service *corev1.Service) {
+func (*ingressTrait) getTargetService(e *environment, resources *kubernetes.Collection) (service *corev1.Service) {
resources.VisitService(func(s *corev1.Service) {
if s.ObjectMeta.Labels != nil {
if intName, ok := s.ObjectMeta.Labels["camel.apache.org/integration"]; ok && intName == e.Integration.Name {
@@ -63,25 +72,27 @@ func (*routeTrait) getTargetService(e *environment, resources *kubernetes.Collec
return
}
-func (*routeTrait) getRouteFor(e *environment, service *corev1.Service) *routev1.Route {
- route := routev1.Route{
+func (e *ingressTrait) getIngressFor(env *environment, service *corev1.Service) *v1beta1.Ingress {
+ ingress := v1beta1.Ingress{
TypeMeta: metav1.TypeMeta{
- Kind: "Route",
- APIVersion: routev1.SchemeGroupVersion.String(),
+ Kind: "Ingress",
+ APIVersion: v1beta1.SchemeGroupVersion.String(),
},
ObjectMeta: metav1.ObjectMeta{
Name: service.Name,
Namespace: service.Namespace,
},
- Spec: routev1.RouteSpec{
- Port: &routev1.RoutePort{
- TargetPort: intstr.FromString("http"),
+ Spec: v1beta1.IngressSpec{
+ Backend: &v1beta1.IngressBackend{
+ ServiceName: service.Name,
+ ServicePort: intstr.FromString("http"),
},
- To: routev1.RouteTargetReference{
- Kind: "Service",
- Name: service.Name,
+ Rules: []v1beta1.IngressRule{
+ {
+ Host: e.Host,
+ },
},
},
}
- return &route
+ return &ingress
}
diff --git a/pkg/trait/route.go b/pkg/trait/route.go
index 1553bae..b3efa1a 100644
--- a/pkg/trait/route.go
+++ b/pkg/trait/route.go
@@ -18,6 +18,7 @@ limitations under the License.
package trait
import (
+ "errors"
"github.com/apache/camel-k/pkg/util/kubernetes"
routev1 "github.com/openshift/api/route/v1"
corev1 "k8s.io/api/core/v1"
@@ -45,10 +46,11 @@ func (e *routeTrait) autoconfigure(environment *environment, resources *kubernet
func (e *routeTrait) customize(environment *environment, resources *kubernetes.Collection) error {
service := e.getTargetService(environment, resources)
- if service != nil {
- resources.Add(e.getRouteFor(environment, service))
+ if service == nil {
+ return errors.New("cannot apply route trait: no target service")
}
+ resources.Add(e.getRouteFor(environment, service))
return nil
}