This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit ed143d184a59a6cf14b0854c96f893c7e45261b9
Author: Antonin Stefanutti <[email protected]>
AuthorDate: Tue Jan 14 17:54:31 2020 +0100

    chore(jolokia): Declare client certificate Jolokia trait option as an array
---
 pkg/trait/jolokia.go | 37 ++++++++++++++++++++++++++-----------
 1 file changed, 26 insertions(+), 11 deletions(-)

diff --git a/pkg/trait/jolokia.go b/pkg/trait/jolokia.go
index 1eb22cb..e7dfa1f 100644
--- a/pkg/trait/jolokia.go
+++ b/pkg/trait/jolokia.go
@@ -44,7 +44,7 @@ type jolokiaTrait struct {
        // The principal which must be given in a client certificate to allow 
access to the Jolokia endpoint,
        // applicable when `protocol` is `https` and 
`use-ssl-client-authentication` is `true`
        // (default `clientPrincipal=cn=system:master-proxy` for OpenShift).
-       ClientPrincipal *string `property:"client-principal"`
+       ClientPrincipal []string `property:"client-principal"`
        // Listen for multicast requests (default `false`)
        DiscoveryEnabled *bool `property:"discovery-enabled"`
        // Mandate the client certificate contains a client flag in the 
extended key usage section,
@@ -90,6 +90,11 @@ func (t *jolokiaTrait) Configure(e *Environment) (bool, 
error) {
                return false, err
        }
 
+       if len(t.ClientPrincipal) == 1 {
+               // Work-around the lack of proper support for multi-valued 
trait options from the CLI
+               t.ClientPrincipal = strings.Split(t.ClientPrincipal[0], ",")
+       }
+
        setDefaultJolokiaOption(options, &t.Host, "host", "*")
        setDefaultJolokiaOption(options, &t.DiscoveryEnabled, 
"discoveryEnabled", false)
 
@@ -99,6 +104,13 @@ func (t *jolokiaTrait) Configure(e *Environment) (bool, 
error) {
                setDefaultJolokiaOption(options, &t.CaCert, "caCert", 
"/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt")
                setDefaultJolokiaOption(options, &t.ExtendedClientCheck, 
"extendedClientCheck", true)
                setDefaultJolokiaOption(options, &t.UseSslClientAuthentication, 
"useSslClientAuthentication", true)
+               setDefaultJolokiaOption(options, &t.ClientPrincipal, 
"clientPrincipal", []string{
+                       // Master API proxy for OpenShift 3
+                       "cn=system:master-proxy",
+                       // Default Hawtio and Fuse consoles for OpenShift 4
+                       "cn=hawtio-online.hawtio.svc",
+                       "cn=fuse-console.fuse.svc",
+               })
        }
 
        return e.IntegrationInPhase(
@@ -153,16 +165,7 @@ func (t *jolokiaTrait) Apply(e *Environment) (err error) {
 
        // Then add explicitly set trait configuration properties
        addToJolokiaOptions(options, "caCert", t.CaCert)
-       if options["clientPrincipal"] == "" && t.ClientPrincipal == nil && 
e.DetermineProfile() == v1.TraitProfileOpenShift {
-               // TODO: simplify when trait array options are supported
-               // Master API proxy for OpenShift 3
-               addToJolokiaOptions(options, "clientPrincipal.1", 
"cn=system:master-proxy")
-               // Default Hawtio and Fuse consoles for OpenShift 4
-               addToJolokiaOptions(options, "clientPrincipal.2", 
"cn=hawtio-online.hawtio.svc")
-               addToJolokiaOptions(options, "clientPrincipal.3", 
"cn=fuse-console.fuse.svc")
-       } else {
-               addToJolokiaOptions(options, "clientPrincipal", 
t.ClientPrincipal)
-       }
+       addToJolokiaOptions(options, "clientPrincipal", t.ClientPrincipal)
        addToJolokiaOptions(options, "discoveryEnabled", t.DiscoveryEnabled)
        addToJolokiaOptions(options, "extendedClientCheck", 
t.ExtendedClientCheck)
        addToJolokiaOptions(options, "host", t.Host)
@@ -227,6 +230,10 @@ func setDefaultJolokiaOption(options map[string]string, 
option interface{}, key
                        v := value.(string)
                        *o = &v
                }
+       case *[]string:
+               if len(*o) == 0 {
+                       *o = value.([]string)
+               }
        }
 }
 
@@ -250,5 +257,13 @@ func addToJolokiaOptions(options map[string]string, key 
string, value interface{
                if v != "" {
                        options[key] = v
                }
+       case []string:
+               if len(v) == 1 {
+                       options[key] = v[0]
+               } else {
+                       for i, vi := range v {
+                               options[key+"."+strconv.Itoa(i+1)] = vi
+                       }
+               }
        }
 }

Reply via email to