func configFromEnvAndMD()

in pkg/gcp/gcp-kubeconfig.go [76:177]


func configFromEnvAndMD(ctx context.Context, kr *mesh.KRun) error {
	if kr.ProjectId == "" {
		kr.ProjectId = os.Getenv("PROJECT_ID")
	}

	if kr.ClusterName == "" {
		kr.ClusterName = os.Getenv("CLUSTER_NAME")
	}

	if kr.ClusterLocation == "" {
		kr.ClusterLocation = os.Getenv("CLUSTER_LOCATION")
	}

	if kr.ProjectNumber == "" {
		kr.ProjectNumber = os.Getenv("PROJECT_NUMBER")
	}

	t0 := time.Now()
	var gsa string
	if metadata.OnGCE() {
		// TODO: detect if the cluster is k8s from some env ?
		// If ADC is set, we will only use the env variables. Else attempt to init from metadata server.
		metaProjectId, _ := metadata.ProjectID()
		if kr.ProjectId == "" {
			kr.ProjectId = metaProjectId
		}

		//instanceID, _ := metadata.InstanceID() // 00bf...f23
		//instanceName, _ := metadata.InstanceName()
		//zone, _ := metadata.Zone()
		//pAttr, _ := metadata.ProjectAttributes() //
		//hn, _ := metadata.Hostname() //
		//iAttr, _ := metadata.InstanceAttributes() //  zone us-central1-1

		gsa, _ = metadata.Email("default")

		//log.Println("Additional metadata:", "iid", instanceID, "iname", instanceName, "iattr", iAttr,
		//	"zone", zone, "hostname", hn, "pAttr", pAttr, "email", email)

		if kr.Namespace == "" {
			if strings.HasPrefix(gsa, "k8s-") {
				parts := strings.Split(gsa[4:], "@")
				kr.Namespace = parts[0]
				if mesh.Debug {
					log.Println("Defaulting Namespace based on GSA: ", kr.Namespace, gsa)
				}
			}
		}

		var err error
		if kr.InCluster && kr.ClusterName == "" {
			kr.ClusterName, err = metadata.Get("instance/attributes/cluster-name")
			if err != nil {
				log.Println("Can't find cluster name")
				// Not a critical problem - it's using in-cluster credentials.
			}
		}
		if kr.InCluster && kr.ClusterLocation == "" {
			kr.ClusterLocation, err = metadata.Get("instance/attributes/cluster-location")
			if err != nil {
				// Not a critical problem.
				log.Println("Can't find cluster location")
			}
		}

		if kr.InstanceID == "" {
			kr.InstanceID, _ = metadata.InstanceID()
		}
	}

	if kr.Namespace == "" {
		// Explicitly set ?
		labels, err := ProjectLabels(ctx, kr.ProjectId)
		if err != nil {
			log.Println("Failed to find labels")
			return err
		}
		kr.Namespace = labels["mesh-namespace"]
	}

	if kr.Namespace == "" {
		// Default convention for project-as-namespace:
		// PREFIX-CONFIG_PROJECT-NAMESPACE-SUFFIX
		// Pid may have lowercase letters/digits/hyphens - mostly DNS conventions.
		pidparts := strings.Split(kr.ProjectId, "-")
		if len(pidparts) > 2 {
			kr.Namespace = pidparts[len(pidparts) - 2]
			if mesh.Debug {
				log.Println("Defaulting Namespace based on project ID: ", kr.Namespace, kr.ProjectId)
			}
		}
	}

	log.Println("GCP config ",
		"gsa", gsa,
		"cluster", kr.ProjectId + "/" + kr.ClusterLocation + "/" + kr.ClusterName,
		"projectNumber", kr.ProjectNumber,
		"iid", kr.InstanceID,
		"location", kr.ClusterLocation,
		"sinceStart", time.Since(t0))
	return nil
}