func importKubernetes()

in cmd/hub/cmd/cluster.go [202:309]


func importKubernetes(args []string) error {
	if len(args) != 2 {
		return errors.New("Import command has two argument - type of imported Kubernetes cluster and desired cluster name/domain")
	}
	kind := args[0]
	name := strings.ToLower(args[1])

	if !util.Contains(knownImportKinds, kind) {
		return fmt.Errorf("Kubernetes cluster kind must be one of %v", knownImportKinds)
	}

	nativeEndpoint := ""
	nativeClusterName := ""
	switch kind {
	case "k8s-aws":
		if k8sEndpoint == "" {
			return errors.New("EPAM HubCTL K8S cluster API endpoint must be specified by --k8s-endpoint")
		}
		nativeEndpoint = k8sEndpoint

	case "hybrid":
		if metalEndpoint == "" {
			return errors.New("Hybrid bare-metal cluster API endpoint must be specified by --metal-endpoint")
		}
		nativeEndpoint = metalEndpoint

	case "metal":
		if metalEndpoint == "" {
			return errors.New("Bare-metal cluster API endpoint must be specified by --metal-endpoint")
		}
		nativeEndpoint = metalEndpoint

	case "openshift":
		if bearerToken == "" {
			return errors.New("OpenShift authentication must be specified with --bearer-token")
		}

	case "eks":
		if eksClusterName == "" {
			if strings.Contains(name, ".") {
				return errors.New("EKS cluster name (--eks-cluster) must be provided")
			}
			log.Printf("Setting --eks-cluster=%s", name)
			eksClusterName = name
		}
		nativeEndpoint = eksEndpoint
		nativeClusterName = eksClusterName

	case "gke":
		if gkeClusterName == "" {
			if strings.Contains(name, ".") {
				return errors.New("GKE cluster name (--gke-cluster) must be provided")
			}
			log.Printf("Setting --gke-cluster=%s", name)
			gkeClusterName = name
		}
		nativeClusterName = gkeClusterName

	case "aks":
		if aksClusterName == "" {
			if strings.Contains(name, ".") {
				return errors.New("AKS cluster name (--aks-cluster) must be provided")
			}
			log.Printf("Setting --aks-cluster=%s", name)
			aksClusterName = name
		}
		nativeClusterName = aksClusterName
		if azureResourceGroup == "" {
			log.Printf("Azure resource group name (--azure-resource-group) not be provided - using default Cloud Account resource group")
		}
	}
	if len(nativeEndpoint) >= 8 && strings.HasPrefix(nativeEndpoint, "https://") {
		nativeEndpoint = nativeEndpoint[8:]
	}

	if !maybeValidHostname.MatchString(name) {
		return fmt.Errorf("`%s` doesn't look like a valid hostname", name)
	}

	if environmentSelector == "" {
		return errors.New("Environment name or id must be specified by --environment / -e")
	}

	// TODO review interaction of these options
	// if templateSelector != "" {
	// 	autoCreateTemplate = false
	// }

	// if createNewTemplate && templateSelector != "" {
	// 	return fmt.Errorf("If --template is specified then omit --create-new-template")
	// }

	if dryRun {
		waitAndTailDeployLogs = false
	}

	config.AggWarnings = false

	api.ImportKubernetes(kind, name, environmentSelector, templateSelector,
		autoCreateTemplate, createNewTemplate, waitAndTailDeployLogs, dryRun,
		os.Stdin, bearerToken,
		clusterRegion, clusterZone, nativeEndpoint, nativeClusterName,
		metalIngress, azureResourceGroup,
		api.ClusterOptions{Acm: acm, CertManager: certManager, Autoscaler: autoscaler,
			KubeDashboard: kubeDashboard, KubeDashboardMode: kubeDashboardMode})

	return nil
}