github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/creds/kubernetes/manager.go (about) 1 package kubernetes 2 3 import ( 4 "encoding/json" 5 "errors" 6 7 "code.cloudfoundry.org/lager" 8 9 "github.com/pf-qiu/concourse/v6/atc/creds" 10 "k8s.io/client-go/kubernetes" 11 "k8s.io/client-go/rest" 12 "k8s.io/client-go/tools/clientcmd" 13 ) 14 15 type KubernetesManager struct { 16 InClusterConfig bool `long:"in-cluster" description:"Enables the in-cluster client."` 17 ConfigPath string `long:"config-path" description:"Path to Kubernetes config when running ATC outside Kubernetes."` 18 NamespacePrefix string `long:"namespace-prefix" default:"concourse-" description:"Prefix to use for Kubernetes namespaces under which secrets will be looked up."` 19 } 20 21 func (manager *KubernetesManager) MarshalJSON() ([]byte, error) { 22 // XXX: Get Health 23 return json.Marshal(&map[string]interface{}{ 24 "in_cluster_config": manager.InClusterConfig, 25 "config_path": manager.ConfigPath, 26 "namespace_config": manager.NamespacePrefix, 27 }) 28 } 29 30 func (manager KubernetesManager) Init(log lager.Logger) error { 31 return nil 32 } 33 34 func (manager KubernetesManager) IsConfigured() bool { 35 return manager.InClusterConfig || manager.ConfigPath != "" 36 } 37 38 func (manager KubernetesManager) buildConfig() (*rest.Config, error) { 39 if manager.InClusterConfig { 40 return rest.InClusterConfig() 41 } 42 43 return clientcmd.BuildConfigFromFlags("", manager.ConfigPath) 44 } 45 46 func (manager KubernetesManager) Health() (*creds.HealthResponse, error) { 47 return nil, nil 48 } 49 50 func (manager KubernetesManager) Validate() error { 51 if manager.InClusterConfig && manager.ConfigPath != "" { 52 return errors.New("Either in-cluster or config-path can be used, not both.") 53 } 54 _, err := manager.buildConfig() 55 return err 56 } 57 58 func (manager KubernetesManager) NewSecretsFactory(logger lager.Logger) (creds.SecretsFactory, error) { 59 config, err := manager.buildConfig() 60 if err != nil { 61 return nil, err 62 } 63 64 config.QPS = 100 65 config.Burst = 100 66 67 clientset, err := kubernetes.NewForConfig(config) 68 if err != nil { 69 return nil, err 70 } 71 72 return NewKubernetesFactory(logger, clientset, manager.NamespacePrefix), nil 73 } 74 75 func (manager KubernetesManager) Close(logger lager.Logger) { 76 // TODO - to implement 77 }