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

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

commit 660d559a79d767f2c52319c0eff0e31abbb0edae
Author: nferraro <ni.ferr...@gmail.com>
AuthorDate: Fri Jan 4 14:56:21 2019 +0100

    Fix #237: fix cache and runtime conversion
---
 pkg/client/client.go          | 52 ++++++++++++++++++++++++++++++++++---------
 pkg/cmd/root.go               |  2 +-
 pkg/install/cluster.go        |  2 +-
 pkg/install/common.go         |  2 +-
 pkg/install/operator.go       |  2 +-
 pkg/util/kubernetes/loader.go | 12 +++++-----
 test/testing_env.go           |  2 +-
 7 files changed, 54 insertions(+), 20 deletions(-)

diff --git a/pkg/client/client.go b/pkg/client/client.go
index 026e26b..756ac28 100644
--- a/pkg/client/client.go
+++ b/pkg/client/client.go
@@ -19,20 +19,20 @@ package client
 
 import (
        "github.com/apache/camel-k/pkg/apis"
+       "github.com/operator-framework/operator-sdk/pkg/k8sutil"
+       "github.com/pkg/errors"
        "io/ioutil"
+       "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/apimachinery/pkg/runtime/schema"
+       "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/tools/clientcmd"
+       clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
+       clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest"
        "os"
        "os/user"
        "path/filepath"
-       "sigs.k8s.io/controller-runtime/pkg/client/config"
-
-       "github.com/operator-framework/operator-sdk/pkg/k8sutil"
-       "github.com/pkg/errors"
-       "k8s.io/client-go/kubernetes"
-       clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
-       clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest"
        controller "sigs.k8s.io/controller-runtime/pkg/client"
+       "sigs.k8s.io/controller-runtime/pkg/client/config"
        "sigs.k8s.io/controller-runtime/pkg/manager"
 )
 
@@ -40,6 +40,7 @@ import (
 type Client interface {
        controller.Client
        kubernetes.Interface
+       GetScheme() *runtime.Scheme
 }
 
 // Injectable identifies objects that can receive a Client
@@ -50,24 +51,54 @@ type Injectable interface {
 type defaultClient struct {
        controller.Client
        kubernetes.Interface
+       scheme *runtime.Scheme
+}
+
+func (c *defaultClient) GetScheme() *runtime.Scheme {
+       return c.scheme
 }
 
 // NewOutOfClusterClient creates a new k8s client that can be used from 
outside the cluster
-func NewOutOfClusterClient(kubeconfig string, namespace string) (Client, 
error) {
+func NewOutOfClusterClient(kubeconfig string) (Client, error) {
        initialize(kubeconfig)
        // Get a config to talk to the apiserver
        cfg, err := config.GetConfig()
        if err != nil {
                return nil, err
        }
+
+       options := manager.Options{
+               LeaderElection: false,
+       }
+
        // Create a new Cmd to provide shared dependencies and start components
-       mgr, err := manager.New(cfg, manager.Options{Namespace: namespace})
+       mgr, err := manager.New(cfg, options)
 
        // Setup Scheme for all resources
        if err := apis.AddToScheme(mgr.GetScheme()); err != nil {
                return nil, err
        }
-       return FromManager(mgr)
+
+       var clientset kubernetes.Interface
+       if clientset, err = kubernetes.NewForConfig(mgr.GetConfig()); err != 
nil {
+               return nil, err
+       }
+
+       // Create a new client to avoid using cache (enabled by default on 
operator-sdk client)
+       clientOptions := controller.Options{
+               Scheme: mgr.GetScheme(),
+               Mapper: mgr.GetRESTMapper(),
+       }
+       dynClient, err := controller.New(cfg, clientOptions)
+       if err != nil {
+               return nil, err
+       }
+
+       return &defaultClient{
+               Client:    dynClient,
+               Interface: clientset,
+               scheme:    clientOptions.Scheme,
+       }, nil
 }
 
 // FromManager creates a new k8s client from a manager object
@@ -80,6 +111,7 @@ func FromManager(manager manager.Manager) (Client, error) {
        return &defaultClient{
                Client:    manager.GetClient(),
                Interface: clientset,
+               scheme:    manager.GetScheme(),
        }, nil
 }
 
diff --git a/pkg/cmd/root.go b/pkg/cmd/root.go
index 933a8b8..584489e 100644
--- a/pkg/cmd/root.go
+++ b/pkg/cmd/root.go
@@ -86,6 +86,6 @@ func (command *RootCmdOptions) GetCmdClient() (client.Client, 
error) {
                return command._client, nil
        }
        var err error
-       command._client, err = client.NewOutOfClusterClient(command.KubeConfig, 
command.Namespace)
+       command._client, err = client.NewOutOfClusterClient(command.KubeConfig)
        return command._client, err
 }
diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index 66f00d5..4c78f5c 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -151,7 +151,7 @@ func IsClusterRoleInstalled(ctx context.Context, c 
client.Client, ) (bool, error
 }
 
 func installClusterRole(ctx context.Context, c client.Client, collection 
*kubernetes.Collection) error {
-       obj, err := 
kubernetes.LoadRawResourceFromYaml(deploy.Resources["user-cluster-role.yaml"])
+       obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
deploy.Resources["user-cluster-role.yaml"])
        if err != nil {
                return err
        }
diff --git a/pkg/install/common.go b/pkg/install/common.go
index d1f35a8..fe18638 100644
--- a/pkg/install/common.go
+++ b/pkg/install/common.go
@@ -50,7 +50,7 @@ func Resource(ctx context.Context, c client.Client, namespace 
string, name strin
 
 // ResourceOrCollect --
 func ResourceOrCollect(ctx context.Context, c client.Client, namespace string, 
collection *kubernetes.Collection, name string) error {
-       obj, err := kubernetes.LoadRawResourceFromYaml(deploy.Resources[name])
+       obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
deploy.Resources[name])
        if err != nil {
                return err
        }
diff --git a/pkg/install/operator.go b/pkg/install/operator.go
index 6417c37..1c7f871 100644
--- a/pkg/install/operator.go
+++ b/pkg/install/operator.go
@@ -107,7 +107,7 @@ func PlatformOrCollect(ctx context.Context, c 
client.Client, namespace string, r
        if err != nil {
                return nil, err
        }
-       platformObject, err := 
kubernetes.LoadRawResourceFromYaml(deploy.Resources["platform-cr.yaml"])
+       platformObject, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
deploy.Resources["platform-cr.yaml"])
        if err != nil {
                return nil, err
        }
diff --git a/pkg/util/kubernetes/loader.go b/pkg/util/kubernetes/loader.go
index cd30fa2..fb6b909 100644
--- a/pkg/util/kubernetes/loader.go
+++ b/pkg/util/kubernetes/loader.go
@@ -19,12 +19,14 @@ package kubernetes
 
 import (
        "encoding/json"
+       "fmt"
        "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
        "k8s.io/apimachinery/pkg/runtime"
+       "k8s.io/apimachinery/pkg/runtime/serializer"
        "k8s.io/apimachinery/pkg/util/yaml"
 )
 
-/*// LoadResourceFromYaml loads a k8s resource from a yaml definition
+// LoadResourceFromYaml loads a k8s resource from a yaml definition
 func LoadResourceFromYaml(scheme *runtime.Scheme, data string) 
(runtime.Object, error) {
        source := []byte(data)
        jsonSource, err := yaml.ToJSON(source)
@@ -37,7 +39,7 @@ func LoadResourceFromYaml(scheme *runtime.Scheme, data 
string) (runtime.Object,
                return nil, err
        }
        return RuntimeObjectFromUnstructured(scheme, &u)
-}*/
+}
 
 // LoadRawResourceFromYaml loads a k8s resource from a yaml definition without 
making assumptions on the underlying type
 func LoadRawResourceFromYaml(data string) (runtime.Object, error) {
@@ -55,10 +57,10 @@ func LoadRawResourceFromYaml(data string) (runtime.Object, 
error) {
        }, nil
 }
 
-/*// RuntimeObjectFromUnstructured converts an unstructured to a runtime object
+// RuntimeObjectFromUnstructured converts an unstructured to a runtime object
 func RuntimeObjectFromUnstructured(scheme *runtime.Scheme, u 
*unstructured.Unstructured) (runtime.Object, error) {
        gvk := u.GroupVersionKind()
-       codecs      := serializer.NewCodecFactory(scheme)
+       codecs := serializer.NewCodecFactory(scheme)
        decoder := codecs.UniversalDecoder(gvk.GroupVersion())
 
        b, err := u.MarshalJSON()
@@ -70,4 +72,4 @@ func RuntimeObjectFromUnstructured(scheme *runtime.Scheme, u 
*unstructured.Unstr
                return nil, fmt.Errorf("failed to decode json data with 
gvk(%v): %v", gvk.String(), err)
        }
        return ro, nil
-}*/
\ No newline at end of file
+}
diff --git a/test/testing_env.go b/test/testing_env.go
index 5218590..3d393ed 100644
--- a/test/testing_env.go
+++ b/test/testing_env.go
@@ -41,7 +41,7 @@ var testClient client.Client
 func init() {
        testContext = context.TODO()
        var err error
-       testClient, err = client.NewOutOfClusterClient("", getTargetNamespace())
+       testClient, err = client.NewOutOfClusterClient("")
        if err != nil {
                panic(err)
        }

Reply via email to