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 }