talos
1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5package cluster
6
7import (
8"context"
9
10k8s "k8s.io/client-go/kubernetes"
11
12"github.com/siderolabs/talos/pkg/kubernetes"
13)
14
15// KubernetesFromKubeletClient provides Kubernetes client built from local kubelet config.
16type KubernetesFromKubeletClient struct {
17KubeHelper *kubernetes.Client
18clientset *k8s.Clientset
19}
20
21// K8sClient builds Kubernetes client from local kubelet config.
22//
23// Kubernetes client instance is cached.
24func (k *KubernetesFromKubeletClient) K8sClient(ctx context.Context) (*k8s.Clientset, error) {
25if k.clientset != nil {
26return k.clientset, nil
27}
28
29var err error
30if k.KubeHelper, err = kubernetes.NewClientFromKubeletKubeconfig(); err != nil {
31return nil, err
32}
33
34k.clientset = k.KubeHelper.Clientset
35
36return k.clientset, nil
37}
38
39// K8sHelper returns wrapper around K8sClient.
40func (k *KubernetesFromKubeletClient) K8sHelper(ctx context.Context) (*kubernetes.Client, error) {
41if k.KubeHelper != nil {
42return k.KubeHelper, nil
43}
44
45_, err := k.K8sClient(ctx)
46if err != nil {
47return nil, err
48}
49
50return k.KubeHelper, nil
51}
52
53// K8sClose closes Kubernetes client.
54func (k *KubernetesFromKubeletClient) K8sClose() error {
55if k.KubeHelper == nil {
56return nil
57}
58
59return k.KubeHelper.Close()
60}
61