internal/deployers/eksapi/kubeconfig.go (69 lines of code) (raw):

package eksapi import ( "bytes" "fmt" "os" "text/template" "k8s.io/klog" ) const kubeconfigPerm = 0666 var kubeconfigTemplate = `--- apiVersion: v1 kind: Config clusters: - cluster: certificate-authority-data: {{ .ClusterCertificateAuthority }} server: {{ .ClusterEndpoint }} name: {{ .ClusterARN }} contexts: - context: cluster: {{ .ClusterARN }} user: {{ .ClusterARN }} name: {{ .ClusterARN }} current-context: {{ .ClusterARN }} preferences: {} users: - name: {{ .ClusterARN }} user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: aws args: - eks - get-token - --cluster-name - {{ .ClusterName }} ` type kubeconfigTemplateParameters struct { ClusterCertificateAuthority string ClusterARN string ClusterEndpoint string ClusterName string } func writeKubeconfig(cluster *Cluster, kubeconfigPath string) error { if cluster == nil { return fmt.Errorf("Cluster is nil, you might need set --static-cluster-name or set --up to initial cluster resrouces") } klog.Infof("writing kubeconfig to %s for cluster: %s", kubeconfigPath, cluster.arn) templateParams := kubeconfigTemplateParameters{ ClusterCertificateAuthority: cluster.certificateAuthorityData, ClusterARN: cluster.arn, ClusterEndpoint: cluster.endpoint, ClusterName: cluster.name, } kubeconfig := bytes.Buffer{} t, err := template.New("kubeconfig").Parse(kubeconfigTemplate) if err != nil { return err } err = t.Execute(&kubeconfig, templateParams) if err != nil { return err } err = os.WriteFile(kubeconfigPath, kubeconfig.Bytes(), kubeconfigPerm) if err != nil { return err } klog.Infof("wrote kubeconfig: %s\n%s", kubeconfigPath, kubeconfig.String()) return nil }