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 2019/01/25 11:47:20 UTC
[camel-k] branch master updated: Service and Prometheus traits
aggregate into a single service per integration
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
The following commit(s) were added to refs/heads/master by this push:
new 03f8af7 Service and Prometheus traits aggregate into a single service per integration
03f8af7 is described below
commit 03f8af7f7df12567f20a0087ff18db02f7d2df4d
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Fri Jan 25 12:29:33 2019 +0100
Service and Prometheus traits aggregate into a single service per integration
---
pkg/trait/prometheus.go | 56 +++++++++++++++++++------------------------------
pkg/trait/service.go | 30 ++++++++++++++++----------
2 files changed, 40 insertions(+), 46 deletions(-)
diff --git a/pkg/trait/prometheus.go b/pkg/trait/prometheus.go
index a0c983d..3e71587 100644
--- a/pkg/trait/prometheus.go
+++ b/pkg/trait/prometheus.go
@@ -61,43 +61,28 @@ func (t *prometheusTrait) Apply(e *Environment) (err error) {
// Configure the Prometheus Java agent
envvar.SetVal(&e.EnvVars, "AB_PROMETHEUS_PORT", strconv.Itoa(t.Port))
- // TODO: update the existing integration service instead of
- // creating an extra service dedicated to Prometheus
- svc := t.getServiceFor(e)
- e.Resources.Add(svc)
+ // Expose the Prometheus endpoint
+ // Either update the existing service added by previously executed traits
+ // (e.g. the service trait) or add a new service resource
+ svc := e.Resources.GetService(func (svc *corev1.Service) bool {
+ return svc.Name == e.Integration.Name
+ })
+ if svc == nil {
+ svc = getServiceFor(e)
+ e.Resources.Add(svc)
+ }
+ port := corev1.ServicePort{
+ Name: "prometheus",
+ Port: int32(t.Port),
+ Protocol: corev1.ProtocolTCP,
+ }
+ svc.Spec.Ports = append(svc.Spec.Ports, port)
+
+ // Add the ServiceMonitor resource
smt := t.getServiceMonitorFor(e)
e.Resources.Add(smt)
- return nil
-}
-func (t *prometheusTrait) getServiceFor(e *Environment) *corev1.Service {
- svc := corev1.Service{
- TypeMeta: metav1.TypeMeta{
- Kind: "Service",
- APIVersion: "v1",
- },
- ObjectMeta: metav1.ObjectMeta{
- Name: e.Integration.Name + "-prometheus",
- Namespace: e.Integration.Namespace,
- Labels: map[string]string{
- "camel.apache.org/integration": e.Integration.Name,
- },
- },
- Spec: corev1.ServiceSpec{
- Ports: []corev1.ServicePort{
- {
- Name: "prometheus",
- Port: int32(t.Port),
- Protocol: corev1.ProtocolTCP,
- },
- },
- Selector: map[string]string{
- "camel.apache.org/integration": e.Integration.Name,
- },
- },
- }
-
- return &svc
+ return nil
}
func (t *prometheusTrait) getServiceMonitorFor(e *Environment) *monitoringv1.ServiceMonitor {
@@ -107,11 +92,12 @@ func (t *prometheusTrait) getServiceMonitorFor(e *Environment) *monitoringv1.Ser
APIVersion: "monitoring.coreos.com/v1",
},
ObjectMeta: metav1.ObjectMeta{
- Name: e.Integration.Name + "-prometheus",
+ Name: e.Integration.Name,
Namespace: e.Integration.Namespace,
Labels: map[string]string{
// TODO: add the ability to configure additional labels
"camel.apache.org/integration": e.Integration.Name,
+ "team": "fuse",
},
},
Spec: monitoringv1.ServiceMonitorSpec{
diff --git a/pkg/trait/service.go b/pkg/trait/service.go
index d04a0dd..043444c 100644
--- a/pkg/trait/service.go
+++ b/pkg/trait/service.go
@@ -65,12 +65,27 @@ func (t *serviceTrait) Configure(e *Environment) (bool, error) {
}
func (t *serviceTrait) Apply(e *Environment) (err error) {
- svc := t.getServiceFor(e)
- e.Resources.Add(svc)
+ // Either update the existing service added by previously executed traits
+ // (e.g. the prometheus trait) or add a new service resource
+ svc := e.Resources.GetService(func(svc *corev1.Service) bool {
+ return svc.Name == e.Integration.Name
+ })
+ if svc == nil {
+ svc = getServiceFor(e)
+ e.Resources.Add(svc)
+ }
+ port := corev1.ServicePort{
+ Name: "http",
+ Port: 80,
+ Protocol: corev1.ProtocolTCP,
+ TargetPort: intstr.FromInt(t.Port),
+ }
+ svc.Spec.Ports = append(svc.Spec.Ports, port)
+
return nil
}
-func (t *serviceTrait) getServiceFor(e *Environment) *corev1.Service {
+func getServiceFor(e *Environment) *corev1.Service {
svc := corev1.Service{
TypeMeta: metav1.TypeMeta{
Kind: "Service",
@@ -84,14 +99,7 @@ func (t *serviceTrait) getServiceFor(e *Environment) *corev1.Service {
},
},
Spec: corev1.ServiceSpec{
- Ports: []corev1.ServicePort{
- {
- Name: "http",
- Port: 80,
- Protocol: corev1.ProtocolTCP,
- TargetPort: intstr.FromInt(t.Port),
- },
- },
+ Ports: []corev1.ServicePort{},
Selector: map[string]string{
"camel.apache.org/integration": e.Integration.Name,
},