github.com/ali-iotechsys/cli@v20.10.0+incompatible/cli/command/stack/kubernetes/client.go (about)

     1  package kubernetes
     2  
     3  import (
     4  	"github.com/docker/cli/kubernetes"
     5  	"github.com/pkg/errors"
     6  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     7  	kubeclient "k8s.io/client-go/kubernetes"
     8  	appsv1beta2 "k8s.io/client-go/kubernetes/typed/apps/v1beta2"
     9  	typesappsv1beta2 "k8s.io/client-go/kubernetes/typed/apps/v1beta2"
    10  	corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
    11  	restclient "k8s.io/client-go/rest"
    12  )
    13  
    14  // Factory is the kubernetes client factory
    15  type Factory struct {
    16  	namespace     string
    17  	config        *restclient.Config
    18  	coreClientSet corev1.CoreV1Interface
    19  	appsClientSet appsv1beta2.AppsV1beta2Interface
    20  	clientSet     *kubeclient.Clientset
    21  }
    22  
    23  // NewFactory creates a kubernetes client factory
    24  func NewFactory(namespace string, config *restclient.Config, clientSet *kubeclient.Clientset) (*Factory, error) {
    25  	coreClientSet, err := corev1.NewForConfig(config)
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  
    30  	appsClientSet, err := appsv1beta2.NewForConfig(config)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	return &Factory{
    36  		namespace:     namespace,
    37  		config:        config,
    38  		coreClientSet: coreClientSet,
    39  		appsClientSet: appsClientSet,
    40  		clientSet:     clientSet,
    41  	}, nil
    42  }
    43  
    44  // ConfigMaps returns a client for kubernetes's config maps
    45  func (s *Factory) ConfigMaps() corev1.ConfigMapInterface {
    46  	return s.coreClientSet.ConfigMaps(s.namespace)
    47  }
    48  
    49  // Secrets returns a client for kubernetes's secrets
    50  func (s *Factory) Secrets() corev1.SecretInterface {
    51  	return s.coreClientSet.Secrets(s.namespace)
    52  }
    53  
    54  // Services returns a client for kubernetes's secrets
    55  func (s *Factory) Services() corev1.ServiceInterface {
    56  	return s.coreClientSet.Services(s.namespace)
    57  }
    58  
    59  // Pods returns a client for kubernetes's pods
    60  func (s *Factory) Pods() corev1.PodInterface {
    61  	return s.coreClientSet.Pods(s.namespace)
    62  }
    63  
    64  // Nodes returns a client for kubernetes's nodes
    65  func (s *Factory) Nodes() corev1.NodeInterface {
    66  	return s.coreClientSet.Nodes()
    67  }
    68  
    69  // ReplicationControllers returns a client for kubernetes replication controllers
    70  func (s *Factory) ReplicationControllers() corev1.ReplicationControllerInterface {
    71  	return s.coreClientSet.ReplicationControllers(s.namespace)
    72  }
    73  
    74  // ReplicaSets returns a client for kubernetes replace sets
    75  func (s *Factory) ReplicaSets() typesappsv1beta2.ReplicaSetInterface {
    76  	return s.appsClientSet.ReplicaSets(s.namespace)
    77  }
    78  
    79  // DaemonSets returns a client for kubernetes daemon sets
    80  func (s *Factory) DaemonSets() typesappsv1beta2.DaemonSetInterface {
    81  	return s.appsClientSet.DaemonSets(s.namespace)
    82  }
    83  
    84  // Stacks returns a client for Docker's Stack on Kubernetes
    85  func (s *Factory) Stacks(allNamespaces bool) (StackClient, error) {
    86  	version, err := kubernetes.GetStackAPIVersion(s.clientSet.Discovery())
    87  	if err != nil {
    88  		return nil, err
    89  	}
    90  	namespace := s.namespace
    91  	if allNamespaces {
    92  		namespace = metav1.NamespaceAll
    93  	}
    94  
    95  	switch version {
    96  	case kubernetes.StackAPIV1Beta1:
    97  		return newStackV1Beta1(s.config, namespace)
    98  	case kubernetes.StackAPIV1Beta2:
    99  		return newStackV1Beta2(s.config, namespace)
   100  	case kubernetes.StackAPIV1Alpha3:
   101  		return newStackV1Alpha3(s.config, namespace)
   102  	default:
   103  		return nil, errors.Errorf("unsupported stack API version: %q", version)
   104  	}
   105  }