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  }