-
Notifications
You must be signed in to change notification settings - Fork 142
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* initial commit for akamai beta command with github * unable to run cli, package issue * need to add this back * Update go.mod * cleanup mod file --------- Co-authored-by: Cristhian Fernández <[email protected]>
- Loading branch information
1 parent
1db2022
commit 204a548
Showing
12 changed files
with
393 additions
and
141 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
/* | ||
Copyright (C) 2021-2023, Kubefirst | ||
This program is licensed under MIT. | ||
See the LICENSE file for more details. | ||
*/ | ||
package akamai | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/kubefirst/kubefirst-api/pkg/constants" | ||
"github.com/kubefirst/kubefirst/internal/common" | ||
"github.com/kubefirst/kubefirst/internal/progress" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var ( | ||
// Create | ||
alertsEmailFlag string | ||
ciFlag bool | ||
cloudRegionFlag string | ||
clusterNameFlag string | ||
clusterTypeFlag string | ||
dnsProviderFlag string | ||
subdomainNameFlag string | ||
domainNameFlag string | ||
githubOrgFlag string | ||
gitlabGroupFlag string | ||
gitProviderFlag string | ||
gitProtocolFlag string | ||
gitopsTemplateURLFlag string | ||
gitopsTemplateBranchFlag string | ||
useTelemetryFlag bool | ||
nodeTypeFlag string | ||
nodeCountFlag string | ||
installCatalogApps string | ||
|
||
// RootCredentials | ||
copyArgoCDPasswordToClipboardFlag bool | ||
copyKbotPasswordToClipboardFlag bool | ||
copyVaultPasswordToClipboardFlag bool | ||
|
||
// Supported providers | ||
supportedDNSProviders = []string{"cloudflare"} | ||
supportedGitProviders = []string{"github", "gitlab"} | ||
// Supported git protocols | ||
supportedGitProtocolOverride = []string{"https", "ssh"} | ||
) | ||
|
||
func NewCommand() *cobra.Command { | ||
akamaiCmd := &cobra.Command{ | ||
Use: "akamai", | ||
Short: "kubefirst akamai installation", | ||
Long: "kubefirst akamai", | ||
Run: func(cmd *cobra.Command, args []string) { | ||
fmt.Println("To learn more about akamai in kubefirst, run:") | ||
fmt.Println(" kubefirst akamai --help") | ||
|
||
if progress.Progress != nil { | ||
progress.Progress.Quit() | ||
} | ||
}, | ||
} | ||
|
||
// wire up new commands | ||
akamaiCmd.AddCommand(Create(), Destroy(), RootCredentials()) | ||
|
||
return akamaiCmd | ||
} | ||
|
||
func Create() *cobra.Command { | ||
createCmd := &cobra.Command{ | ||
Use: "create", | ||
Short: "create the kubefirst platform running on akamai kubernetes", | ||
TraverseChildren: true, | ||
RunE: createAkamai, | ||
} | ||
|
||
akamaiDefaults := constants.GetCloudDefaults().Akamai | ||
|
||
// todo review defaults and update descriptions | ||
createCmd.Flags().StringVar(&alertsEmailFlag, "alerts-email", "", "email address for let's encrypt certificate notifications (required)") | ||
createCmd.MarkFlagRequired("alerts-email") | ||
createCmd.Flags().BoolVar(&ciFlag, "ci", false, "if running kubefirst in ci, set this flag to disable interactive features") | ||
createCmd.Flags().StringVar(&cloudRegionFlag, "cloud-region", "us-central", "the akamai region to provision infrastructure in") | ||
createCmd.Flags().StringVar(&clusterNameFlag, "cluster-name", "kubefirst", "the name of the cluster to create") | ||
createCmd.Flags().StringVar(&clusterTypeFlag, "cluster-type", "mgmt", "the type of cluster to create (i.e. mgmt|workload)") | ||
createCmd.Flags().StringVar(&nodeCountFlag, "node-count", akamaiDefaults.NodeCount, "the node count for the cluster") | ||
createCmd.Flags().StringVar(&nodeTypeFlag, "node-type", akamaiDefaults.InstanceSize, "the instance size of the cluster to create") | ||
createCmd.Flags().StringVar(&dnsProviderFlag, "dns-provider", "cloudflare", fmt.Sprintf("the dns provider - one of: %s", supportedDNSProviders)) | ||
createCmd.Flags().StringVar(&subdomainNameFlag, "subdomain", "", "the subdomain to use for DNS records (Cloudflare)") | ||
createCmd.Flags().StringVar(&domainNameFlag, "domain-name", "", "the DNS Name to use for DNS records (i.e. your-domain.com|subdomain.your-domain.com) (required)") | ||
createCmd.MarkFlagRequired("domain-name") | ||
createCmd.Flags().StringVar(&gitProviderFlag, "git-provider", "github", fmt.Sprintf("the git provider - one of: %s", supportedGitProviders)) | ||
createCmd.Flags().StringVar(&gitProtocolFlag, "git-protocol", "https", fmt.Sprintf("the git protocol - one of: %s", supportedGitProtocolOverride)) | ||
createCmd.Flags().StringVar(&githubOrgFlag, "github-org", "", "the GitHub organization for the new gitops and metaphor repositories - required if using github") | ||
createCmd.Flags().StringVar(&gitlabGroupFlag, "gitlab-group", "", "the GitLab group for the new gitops and metaphor projects - required if using gitlab") | ||
createCmd.Flags().StringVar(&gitopsTemplateBranchFlag, "gitops-template-branch", "", "the branch to clone for the gitops-template repository") | ||
createCmd.Flags().StringVar(&gitopsTemplateURLFlag, "gitops-template-url", "https://github.com/kubefirst/gitops-template.git", "the fully qualified url to the gitops-template repository to clone") | ||
createCmd.Flags().StringVar(&installCatalogApps, "install-catalog-apps", "", "comma seperated values to install after provision") | ||
createCmd.Flags().BoolVar(&useTelemetryFlag, "use-telemetry", true, "whether to emit telemetry") | ||
|
||
return createCmd | ||
} | ||
|
||
func Destroy() *cobra.Command { | ||
destroyCmd := &cobra.Command{ | ||
Use: "destroy", | ||
Short: "destroy the kubefirst platform", | ||
Long: "destroy the kubefirst platform running in akamai and remove all resources", | ||
RunE: common.Destroy, | ||
// PreRun: common.CheckDocker, | ||
} | ||
|
||
return destroyCmd | ||
} | ||
|
||
func RootCredentials() *cobra.Command { | ||
authCmd := &cobra.Command{ | ||
Use: "root-credentials", | ||
Short: "retrieve root authentication information for platform components", | ||
Long: "retrieve root authentication information for platform components", | ||
RunE: common.GetRootCredentials, | ||
} | ||
|
||
authCmd.Flags().BoolVar(©ArgoCDPasswordToClipboardFlag, "argocd", false, "copy the argocd password to the clipboard (optional)") | ||
authCmd.Flags().BoolVar(©KbotPasswordToClipboardFlag, "kbot", false, "copy the kbot password to the clipboard (optional)") | ||
authCmd.Flags().BoolVar(©VaultPasswordToClipboardFlag, "vault", false, "copy the vault password to the clipboard (optional)") | ||
|
||
return authCmd | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
/* | ||
Copyright (C) 2021-2023, Kubefirst | ||
This program is licensed under MIT. | ||
See the LICENSE file for more details. | ||
*/ | ||
package akamai | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
|
||
"github.com/kubefirst/kubefirst/internal/catalog" | ||
"github.com/kubefirst/kubefirst/internal/cluster" | ||
"github.com/kubefirst/kubefirst/internal/gitShim" | ||
"github.com/kubefirst/kubefirst/internal/progress" | ||
"github.com/kubefirst/kubefirst/internal/provision" | ||
"github.com/kubefirst/kubefirst/internal/utilities" | ||
"github.com/kubefirst/runtime/pkg" | ||
"github.com/spf13/cobra" | ||
"github.com/spf13/viper" | ||
) | ||
|
||
func createAkamai(cmd *cobra.Command, args []string) error { | ||
cliFlags, err := utilities.GetFlags(cmd, "akamai") | ||
if err != nil { | ||
progress.Error(err.Error()) | ||
return nil | ||
} | ||
|
||
progress.DisplayLogHints(15) | ||
|
||
isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) | ||
if !isValid { | ||
return err | ||
} | ||
|
||
err = ValidateProvidedFlags(cliFlags.GitProvider) | ||
if err != nil { | ||
progress.Error(err.Error()) | ||
return nil | ||
} | ||
|
||
// If cluster setup is complete, return | ||
|
||
utilities.CreateK1ClusterDirectory(clusterNameFlag) | ||
|
||
gitAuth, err := gitShim.ValidateGitCredentials(cliFlags.GitProvider, cliFlags.GithubOrg, cliFlags.GitlabGroup) | ||
|
||
if err != nil { | ||
progress.Error(err.Error()) | ||
return nil | ||
} | ||
|
||
// Validate git | ||
executionControl := viper.GetBool(fmt.Sprintf("kubefirst-checks.%s-credentials", cliFlags.GitProvider)) | ||
if !executionControl { | ||
newRepositoryNames := []string{"gitops", "metaphor"} | ||
newTeamNames := []string{"admins", "developers"} | ||
|
||
initGitParameters := gitShim.GitInitParameters{ | ||
GitProvider: cliFlags.GitProvider, | ||
GitToken: gitAuth.Token, | ||
GitOwner: gitAuth.Owner, | ||
Repositories: newRepositoryNames, | ||
Teams: newTeamNames, | ||
} | ||
|
||
err = gitShim.InitializeGitProvider(&initGitParameters) | ||
if err != nil { | ||
progress.Error(err.Error()) | ||
return nil | ||
} | ||
} | ||
viper.Set(fmt.Sprintf("kubefirst-checks.%s-credentials", cliFlags.GitProvider), true) | ||
viper.WriteConfig() | ||
|
||
// k3dClusterCreationComplete := viper.GetBool("launch.deployed") | ||
// if !k3dClusterCreationComplete { | ||
// launch.Up(nil, true, cliFlags.UseTelemetry) | ||
// } | ||
|
||
err = pkg.IsAppAvailable(fmt.Sprintf("%s/api/proxyHealth", cluster.GetConsoleIngresUrl()), "kubefirst api") | ||
if err != nil { | ||
progress.Error("unable to start kubefirst api") | ||
} | ||
|
||
provision.CreateMgmtCluster(gitAuth, cliFlags, catalogApps) | ||
|
||
return nil | ||
} | ||
|
||
func ValidateProvidedFlags(gitProvider string) error { | ||
progress.AddStep("Validate provided flags") | ||
|
||
if os.Getenv("LINODE_TOKEN") == "" { | ||
// telemetryShim.Transmit(useTelemetryFlag, segmentClient, segment.MetricCloudCredentialsCheckFailed, "LINODE_TOKEN environment variable was not set") | ||
return fmt.Errorf("your LINODE_TOKEN is not set - please set and re-run your last command") | ||
} | ||
|
||
// Validate required environment variables for dns provider | ||
if dnsProviderFlag == "cloudflare" { | ||
if os.Getenv("CF_API_TOKEN") == "" { | ||
return fmt.Errorf("your CF_API_TOKEN environment variable is not set. Please set and try again") | ||
} | ||
} | ||
|
||
// switch gitProvider { | ||
// case "github": | ||
// key, err := internalssh.GetHostKey("github.com") | ||
// if err != nil { | ||
// return fmt.Errorf("known_hosts file does not exist - please run `ssh-keyscan github.com >> ~/.ssh/known_hosts` to remedy") | ||
// } else { | ||
// log.Info().Msgf("%s %s\n", "github.com", key.Type()) | ||
// } | ||
// case "gitlab": | ||
// key, err := internalssh.GetHostKey("gitlab.com") | ||
// if err != nil { | ||
// return fmt.Errorf("known_hosts file does not exist - please run `ssh-keyscan gitlab.com >> ~/.ssh/known_hosts` to remedy") | ||
// } else { | ||
// log.Info().Msgf("%s %s\n", "gitlab.com", key.Type()) | ||
// } | ||
// } | ||
|
||
progress.CompleteStep("Validate provided flags") | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.