github.com/itscaro/cli@v0.0.0-20190705081621-c9db0fe93829/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  	experimental  bool
    22  }
    23  
    24  // NewFactory creates a kubernetes client factory
    25  func NewFactory(namespace string, config *restclient.Config, clientSet *kubeclient.Clientset, experimental bool) (*Factory, error) {
    26  	coreClientSet, err := corev1.NewForConfig(config)
    27  	if err != nil {
    28  		return nil, err
    29  	}
    30  
    31  	appsClientSet, err := appsv1beta2.NewForConfig(config)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  
    36  	return &Factory{
    37  		namespace:     namespace,
    38  		config:        config,
    39  		coreClientSet: coreClientSet,
    40  		appsClientSet: appsClientSet,
    41  		clientSet:     clientSet,
    42  		experimental:  experimental,
    43  	}, nil
    44  }
    45  
    46  // ConfigMaps returns a client for kubernetes's config maps
    47  func (s *Factory) ConfigMaps() corev1.ConfigMapInterface {
    48  	return s.coreClientSet.ConfigMaps(s.namespace)
    49  }
    50  
    51  // Secrets returns a client for kubernetes's secrets
    52  func (s *Factory) Secrets() corev1.SecretInterface {
    53  	return s.coreClientSet.Secrets(s.namespace)
    54  }
    55  
    56  // Services returns a client for kubernetes's secrets
    57  func (s *Factory) Services() corev1.ServiceInterface {
    58  	return s.coreClientSet.Services(s.namespace)
    59  }
    60  
    61  // Pods returns a client for kubernetes's pods
    62  func (s *Factory) Pods() corev1.PodInterface {
    63  	return s.coreClientSet.Pods(s.namespace)
    64  }
    65  
    66  // Nodes returns a client for kubernetes's nodes
    67  func (s *Factory) Nodes() corev1.NodeInterface {
    68  	return s.coreClientSet.Nodes()
    69  }
    70  
    71  // ReplicationControllers returns a client for kubernetes replication controllers
    72  func (s *Factory) ReplicationControllers() corev1.ReplicationControllerInterface {
    73  	return s.coreClientSet.ReplicationControllers(s.namespace)
    74  }
    75  
    76  // ReplicaSets returns a client for kubernetes replace sets
    77  func (s *Factory) ReplicaSets() typesappsv1beta2.ReplicaSetInterface {
    78  	return s.appsClientSet.ReplicaSets(s.namespace)
    79  }
    80  
    81  // DaemonSets returns a client for kubernetes daemon sets
    82  func (s *Factory) DaemonSets() typesappsv1beta2.DaemonSetInterface {
    83  	return s.appsClientSet.DaemonSets(s.namespace)
    84  }
    85  
    86  // Stacks returns a client for Docker's Stack on Kubernetes
    87  func (s *Factory) Stacks(allNamespaces bool) (StackClient, error) {
    88  	version, err := kubernetes.GetStackAPIVersion(s.clientSet.Discovery(), s.experimental)
    89  	if err != nil {
    90  		return nil, err
    91  	}
    92  	namespace := s.namespace
    93  	if allNamespaces {
    94  		namespace = metav1.NamespaceAll
    95  	}
    96  
    97  	switch version {
    98  	case kubernetes.StackAPIV1Beta1:
    99  		return newStackV1Beta1(s.config, namespace)
   100  	case kubernetes.StackAPIV1Beta2:
   101  		return newStackV1Beta2(s.config, namespace)
   102  	case kubernetes.StackAPIV1Alpha3:
   103  		return newStackV1Alpha3(s.config, namespace)
   104  	default:
   105  		return nil, errors.Errorf("unsupported stack API version: %q", version)
   106  	}
   107  }