in tooling/templatize/pkg/aks/kubeconfig.go [28:76]
func GetKubeConfig(ctx context.Context, subscriptionID, resourceGroupName, aksClusterName string) (string, error) {
if aksClusterName == "" {
return "", fmt.Errorf("AKSClusterName is required to build a kubeconfig")
}
// Create a new Azure identity client
cred, err := azauth.GetAzureTokenCredentials()
if err != nil {
return "", fmt.Errorf("failed to obtain a credential: %v", err)
}
// Create a new AKS client
client, err := armcontainerservice.NewManagedClustersClient(subscriptionID, cred, nil)
if err != nil {
return "", fmt.Errorf("failed to create AKS client: %v", err)
}
// Get the cluster access credentials
resp, err := client.ListClusterUserCredentials(ctx, resourceGroupName, aksClusterName, nil)
if err != nil {
return "", fmt.Errorf("failed to get cluster access credentials: %v", err)
}
if len(resp.Kubeconfigs) == 0 {
return "", fmt.Errorf("no kubeconfig found")
}
kubeconfigContent := resp.Kubeconfigs[0].Value
// store the kubeconfig content into a temporary file
// generate a unique temporary filename
tmpfile, err := os.CreateTemp("", "kubeconfig-*.yaml")
if err != nil {
return "", fmt.Errorf("failed to create temporary file for kubeconfig: %v", err)
}
defer tmpfile.Close()
// store the kubeconfig content into the temporary file
if _, err := tmpfile.Write([]byte(kubeconfigContent)); err != nil {
return "", fmt.Errorf("failed to write to temporary kubeconfigfile %s: %v", tmpfile.Name(), err)
}
// Run kubelogin to transform the kubeconfig
cmd := exec.CommandContext(ctx, "kubelogin", "convert-kubeconfig", "-l", "azurecli", "--kubeconfig", tmpfile.Name())
output, err := cmd.CombinedOutput()
if err != nil {
return "", fmt.Errorf("failed to run kubelogin: %s %v", string(output), err)
}
return tmpfile.Name(), nil
}