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
}