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 }