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 56a7b4db16e660a93a1106888704b5ad72cce6bd Author: nferraro <[email protected]> AuthorDate: Thu Oct 4 13:49:11 2018 +0200 Added route trait --- pkg/trait/base.go | 12 +++++++---- pkg/trait/route.go | 42 ++++++++++++++++++++++++++++++++++++--- pkg/trait/service.go | 12 +++++------ pkg/util/kubernetes/collection.go | 9 +++++++++ 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/pkg/trait/base.go b/pkg/trait/base.go index d831d79..6ba4dfc 100644 --- a/pkg/trait/base.go +++ b/pkg/trait/base.go @@ -59,7 +59,9 @@ func (*baseTrait) getConfigMapFor(e Environment) *corev1.ConfigMap { ObjectMeta: metav1.ObjectMeta{ Name: e.Integration.Name, Namespace: e.Integration.Namespace, - Labels: e.Integration.Labels, + Labels: map[string]string{ + "camel.apache.org/integration": e.Integration.Name, + }, Annotations: map[string]string{ "camel.apache.org/source.language": string(e.Integration.Spec.Source.Language), "camel.apache.org/source.name": e.Integration.Spec.Source.Name, @@ -112,9 +114,11 @@ func (*baseTrait) getDeploymentFor(e Environment) *appsv1.Deployment { APIVersion: appsv1.SchemeGroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ - Name: e.Integration.Name, - Namespace: e.Integration.Namespace, - Labels: e.Integration.Labels, + Name: e.Integration.Name, + Namespace: e.Integration.Namespace, + Labels: map[string]string{ + "camel.apache.org/integration": e.Integration.Name, + }, Annotations: e.Integration.Annotations, }, Spec: appsv1.DeploymentSpec{ diff --git a/pkg/trait/route.go b/pkg/trait/route.go index 681c8b1..1906442 100644 --- a/pkg/trait/route.go +++ b/pkg/trait/route.go @@ -20,6 +20,9 @@ package trait import ( "github.com/apache/camel-k/pkg/util/kubernetes" routev1 "github.com/openshift/api/route/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" ) type routeTrait struct { @@ -30,9 +33,42 @@ func (*routeTrait) ID() ID { } func (e *routeTrait) Customize(environment Environment, resources *kubernetes.Collection) (bool, error) { - return true, nil + var 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 == environment.Integration.Name { + service = s + } + } + }) + + if service != nil { + resources.Add(e.getRouteFor(environment, service)) + return true, nil + } + + return false, nil } -func (*routeTrait) getRouteFor(e Environment) *routev1.Route { - return nil +func (*routeTrait) getRouteFor(e Environment, service *corev1.Service) *routev1.Route { + route := routev1.Route{ + TypeMeta: metav1.TypeMeta{ + Kind: "Route", + APIVersion: routev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: service.Name, + Namespace: service.Namespace, + }, + Spec: routev1.RouteSpec{ + Port: &routev1.RoutePort{ + TargetPort: intstr.FromString("http"), + }, + To: routev1.RouteTargetReference{ + Kind: "Service", + Name: service.Name, + }, + }, + } + return &route } diff --git a/pkg/trait/service.go b/pkg/trait/service.go index 3576f94..a6438d8 100644 --- a/pkg/trait/service.go +++ b/pkg/trait/service.go @@ -58,7 +58,9 @@ func (*serviceTrait) getServiceFor(e Environment) *corev1.Service { ObjectMeta: metav1.ObjectMeta{ Name: e.Integration.Name, Namespace: e.Integration.Namespace, - Labels: e.Integration.Labels, + Labels: map[string]string{ + "camel.apache.org/integration": e.Integration.Name, + }, }, Spec: corev1.ServiceSpec{ Ports: []corev1.ServicePort{ @@ -66,11 +68,9 @@ func (*serviceTrait) getServiceFor(e Environment) *corev1.Service { Name: "http", Port: 80, Protocol: corev1.ProtocolTCP, - TargetPort: intstr.IntOrString{ - // TODO discovering the real port is hard - maybe we should just set 8080 as conventional port in the doc - // or allow users to configure it in the trait configuration section - IntVal: 8080, - }, + // TODO discovering the real port is hard - maybe we should just set 8080 as conventional port in the doc + // or allow users to configure it in the trait configuration section + TargetPort: intstr.FromInt(8080), }, }, Selector: map[string]string{ diff --git a/pkg/util/kubernetes/collection.go b/pkg/util/kubernetes/collection.go index 91cb7ee..0b5f217 100644 --- a/pkg/util/kubernetes/collection.go +++ b/pkg/util/kubernetes/collection.go @@ -64,6 +64,15 @@ func (c *Collection) VisitConfigMap(visitor func(*corev1.ConfigMap)) { }) } +// VisitService executes the visitor function on all Service resources +func (c *Collection) VisitService(visitor func(*corev1.Service)) { + c.Visit(func(res runtime.Object) { + if conv, ok := res.(*corev1.Service); ok { + visitor(conv) + } + }) +} + // VisitMetaObject executes the visitor function on all meta.Object resources func (c *Collection) VisitMetaObject(visitor func(metav1.Object)) { c.Visit(func(res runtime.Object) {
