Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix : rules to load client configuration to connect to a kubernetes cluster #419

Merged
merged 3 commits into from
Feb 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions pkg/discovery-api/discovery_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import (
"k8s.io/klog/v2"

"github.com/fairwindsops/pluto/v5/pkg/api"
kube "github.com/fairwindsops/pluto/v5/pkg/kube"
"github.com/fairwindsops/pluto/v5/pkg/kube"
)

// DiscoveryClient is the declaration to hold objects needed for client-go/discovery.
Expand All @@ -60,7 +60,7 @@ func NewDiscoveryClient(namespace string, kubeContext string, instance *api.Inst
}

var err error
cl.ClientSet, cl.restConfig, err = kube.GetKubeDynamicClient(kubeContext)
cl.restConfig, err = kube.GetConfig(kubeContext)
if err != nil {
return nil, err
}
Expand All @@ -71,6 +71,10 @@ func NewDiscoveryClient(namespace string, kubeContext string, instance *api.Inst

cl.namespace = namespace

cl.ClientSet, err = dynamic.NewForConfig(cl.restConfig)
if err != nil {
return nil, err
}
return cl, nil
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/helm/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import (
"k8s.io/klog/v2"

"github.com/fairwindsops/pluto/v5/pkg/api"
kube "github.com/fairwindsops/pluto/v5/pkg/kube"
"github.com/fairwindsops/pluto/v5/pkg/kube"
)

// Helm represents all current releases that we can find in the cluster
Expand Down
19 changes: 10 additions & 9 deletions pkg/helm/helm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,24 @@ import (
"testing"

"github.com/fairwindsops/pluto/v5/pkg/api"
kube "github.com/fairwindsops/pluto/v5/pkg/kube"
"github.com/fairwindsops/pluto/v5/pkg/kube"
"github.com/stretchr/testify/assert"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
testclient "k8s.io/client-go/kubernetes/fake"
_ "k8s.io/client-go/plugin/pkg/client/auth"
"k8s.io/client-go/rest"
)

var kubeClient *kube.Kube

func getMockConfigInstance() *kube.Kube {
kubeClient = &kube.Kube{
Client: testclient.NewSimpleClientset(),
}
return kubeClient
}

var (
helmSecret = v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -153,13 +161,6 @@ var (
}
)

func getMockConfigInstance() *kube.Kube {
kubeClient := &kube.Kube{
Client: testclient.NewSimpleClientset(),
}
return kubeClient
}

func newMockHelm(namespace string) *Helm {
return &Helm{
Namespace: namespace,
Expand Down
41 changes: 16 additions & 25 deletions pkg/kube/kube.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,11 @@
// See the License for the specific language governing permissions and
// limitations under the License

package helm
package kube

import (
"sync"

"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/klog/v2"
Expand All @@ -52,10 +51,16 @@ var once sync.Once
func GetConfigInstance(kubeContext string) (*Kube, error) {
var err error
var client kubernetes.Interface
var kubeConfig *rest.Config

kubeConfig, err = GetConfig(kubeContext)
if err != nil {
return nil, err
}

once.Do(func() {
if kubeClient == nil {
client, err = GetKubeClient(kubeContext)
client, err = GetKubeClient(kubeConfig)

kubeClient = &Kube{
Client: client,
Expand All @@ -68,38 +73,24 @@ func GetConfigInstance(kubeContext string) (*Kube, error) {
return kubeClient, nil
}

// GetKubeClient returns a Kubernetes.Interface based on the current configuration
func GetKubeClient(kubeContext string) (kubernetes.Interface, error) {
// GetConfig returns the current kube config with a specific context
func GetConfig(kubeContext string) (*rest.Config, error) {
if kubeContext != "" {
klog.V(3).Infof("using kube context: %s", kubeContext)
}

config, err := config.GetConfigWithContext(kubeContext)
kubeConfig, err := config.GetConfigWithContext(kubeContext)
if err != nil {
return nil, err
}
return kubeConfig, nil
}

clientset, err := kubernetes.NewForConfig(config)
// GetKubeClient returns a Kubernetes.Interface based on the current configuration
func GetKubeClient(kubeConfig *rest.Config) (kubernetes.Interface, error) {
clientset, err := kubernetes.NewForConfig(kubeConfig)
if err != nil {
return nil, err
}
return clientset, nil
}

// GetKubeDynamicClient returns a dynamic.Interface, rest.Config based on the current configuration
func GetKubeDynamicClient(kubeContext string) (dynamic.Interface, *rest.Config, error) {
if kubeContext != "" {
klog.V(3).Infof("using kube context: %s", kubeContext)
}

config, err := config.GetConfigWithContext(kubeContext)
if err != nil {
return nil, nil, err
}

clientset, err := dynamic.NewForConfig(config)
if err != nil {
return nil, nil, err
}
return clientset, config, nil
}
5 changes: 3 additions & 2 deletions pkg/kube/kube_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package helm
package kube

import (
"os"
"testing"

"github.com/stretchr/testify/assert"
_ "k8s.io/client-go/plugin/pkg/client/auth"
)

func Test_getKubeClient(t *testing.T) {
Expand Down Expand Up @@ -50,7 +51,7 @@ func Test_getKubeClient(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
os.Setenv("KUBECONFIG", tt.kubeConfig)
_, err := GetKubeClient(tt.kubeContext)
_, err := GetConfig(tt.kubeContext)
if tt.wantErr {
assert.Error(t, err)
} else {
Expand Down