From b33ca86a79fbe503d6db9117b535362e4b1d1548 Mon Sep 17 00:00:00 2001 From: Patrick D'appollonio <930925+patrickdappollonio@users.noreply.github.com> Date: Mon, 13 Jan 2025 12:25:59 -0500 Subject: [PATCH 1/2] Fix catalog apps generation and validation. --- cmd/akamai/create.go | 6 ++-- cmd/aws/create.go | 6 ++-- cmd/azure/create.go | 7 ++--- cmd/civo/create.go | 6 ++-- cmd/digitalocean/create.go | 9 ++---- cmd/google/create.go | 6 ++-- cmd/k3d/create.go | 6 +--- cmd/k3s/create.go | 8 ++--- cmd/vultr/create.go | 9 ++---- internal/catalog/catalog.go | 60 ++++++++++++++++++------------------- 10 files changed, 51 insertions(+), 72 deletions(-) diff --git a/cmd/akamai/create.go b/cmd/akamai/create.go index 682308132..f2bc6bbff 100644 --- a/cmd/akamai/create.go +++ b/cmd/akamai/create.go @@ -34,9 +34,9 @@ func createAkamai(cmd *cobra.Command, _ []string) error { progress.DisplayLogHints(25) - isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) - if !isValid { - return fmt.Errorf("catalog validation failed: %w", err) + catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) + if err != nil { + return fmt.Errorf("failed to validate catalog apps: %w", err) } err = ValidateProvidedFlags(cliFlags.GitProvider) diff --git a/cmd/aws/create.go b/cmd/aws/create.go index d39a8e440..bb2b3a50c 100644 --- a/cmd/aws/create.go +++ b/cmd/aws/create.go @@ -41,9 +41,9 @@ func createAws(cmd *cobra.Command, _ []string) error { progress.DisplayLogHints(40) - isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) - if !isValid { - return fmt.Errorf("invalid catalog apps: %w", err) + catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) + if err != nil { + return fmt.Errorf("failed to validate catalog apps: %w", err) } ctx := cmd.Context() diff --git a/cmd/azure/create.go b/cmd/azure/create.go index 4297229fd..c64c1b48b 100644 --- a/cmd/azure/create.go +++ b/cmd/azure/create.go @@ -45,10 +45,9 @@ func createAzure(cmd *cobra.Command, _ []string) error { progress.DisplayLogHints(20) - isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) - if !isValid { - progress.Error(err.Error()) - return nil + catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) + if err != nil { + return fmt.Errorf("failed to validate catalog apps: %w", err) } err = ValidateProvidedFlags(cliFlags.GitProvider) diff --git a/cmd/civo/create.go b/cmd/civo/create.go index 14592cea4..8abc49124 100644 --- a/cmd/civo/create.go +++ b/cmd/civo/create.go @@ -34,9 +34,9 @@ func createCivo(cmd *cobra.Command, _ []string) error { progress.DisplayLogHints(15) - isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) - if !isValid { - return fmt.Errorf("catalog apps validation failed: %w", err) + catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) + if err != nil { + return fmt.Errorf("failed to validate catalog apps: %w", err) } err = ValidateProvidedFlags(cliFlags.GitProvider) diff --git a/cmd/digitalocean/create.go b/cmd/digitalocean/create.go index c12134962..09895f072 100644 --- a/cmd/digitalocean/create.go +++ b/cmd/digitalocean/create.go @@ -7,7 +7,6 @@ See the LICENSE file for more details. package digitalocean import ( - "errors" "fmt" "os" "strings" @@ -35,13 +34,9 @@ func createDigitalocean(cmd *cobra.Command, _ []string) error { progress.DisplayLogHints(20) - isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) + catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) if err != nil { - return fmt.Errorf("catalog validation error: %w", err) - } - - if !isValid { - return errors.New("catalog did not pass a validation check") + return fmt.Errorf("failed to validate catalog apps: %w", err) } err = ValidateProvidedFlags(cliFlags.GitProvider) diff --git a/cmd/google/create.go b/cmd/google/create.go index bb074d9bb..b2466bb8e 100644 --- a/cmd/google/create.go +++ b/cmd/google/create.go @@ -35,9 +35,9 @@ func createGoogle(cmd *cobra.Command, _ []string) error { progress.DisplayLogHints(20) - isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) - if !isValid { - return fmt.Errorf("catalog apps validation failed: %w", err) + catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) + if err != nil { + return fmt.Errorf("failed to validate catalog apps: %w", err) } err = ValidateProvidedFlags(cliFlags.GitProvider) diff --git a/cmd/k3d/create.go b/cmd/k3d/create.go index adedfa5a9..21988ed06 100644 --- a/cmd/k3d/create.go +++ b/cmd/k3d/create.go @@ -121,15 +121,11 @@ func runK3d(cmd *cobra.Command, _ []string) error { utilities.CreateK1ClusterDirectory(clusterNameFlag) utils.DisplayLogHints() - isValid, catalogApps, err := catalog.ValidateCatalogApps(installCatalogAppsFlag) + catalogApps, err := catalog.ValidateCatalogApps(installCatalogAppsFlag) if err != nil { return fmt.Errorf("failed to validate catalog apps: %w", err) } - if !isValid { - return errors.New("catalog apps validation failed") - } - switch gitProviderFlag { case "github": key, err := internalssh.GetHostKey("github.com") diff --git a/cmd/k3s/create.go b/cmd/k3s/create.go index 038337759..74c1695d6 100644 --- a/cmd/k3s/create.go +++ b/cmd/k3s/create.go @@ -37,13 +37,9 @@ func createK3s(cmd *cobra.Command, _ []string) error { progress.DisplayLogHints(20) - isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) + catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) if err != nil { - return fmt.Errorf("validation of catalog apps failed: %w", err) - } - - if !isValid { - return errors.New("catalog validation failed") + return fmt.Errorf("failed to validate catalog apps: %w", err) } err = ValidateProvidedFlags(cliFlags.GitProvider) diff --git a/cmd/vultr/create.go b/cmd/vultr/create.go index 6086ae2b4..ac26a411b 100644 --- a/cmd/vultr/create.go +++ b/cmd/vultr/create.go @@ -7,7 +7,6 @@ See the LICENSE file for more details. package vultr import ( - "errors" "fmt" "os" "strings" @@ -35,13 +34,9 @@ func createVultr(cmd *cobra.Command, _ []string) error { progress.DisplayLogHints(15) - isValid, catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) + catalogApps, err := catalog.ValidateCatalogApps(cliFlags.InstallCatalogApps) if err != nil { - return fmt.Errorf("catalog apps validation failed: %w", err) - } - - if !isValid { - return errors.New("catalog validation failed") + return fmt.Errorf("failed to validate catalog apps: %w", err) } err = ValidateProvidedFlags(cliFlags.GitProvider) diff --git a/internal/catalog/catalog.go b/internal/catalog/catalog.go index 1cd7e9d88..171f3f629 100644 --- a/internal/catalog/catalog.go +++ b/internal/catalog/catalog.go @@ -17,7 +17,6 @@ import ( apiTypes "github.com/konstructio/kubefirst-api/pkg/types" - "github.com/rs/zerolog/log" "gopkg.in/yaml.v3" ) @@ -36,71 +35,69 @@ func NewGitHub() *git.Client { return git.NewClient(nil) } -func ReadActiveApplications() (apiTypes.GitopsCatalogApps, error) { +func ReadActiveApplications() (*apiTypes.GitopsCatalogApps, error) { gh := GitHubClient{ Client: NewGitHub(), } activeContent, err := gh.ReadGitopsCatalogRepoContents() if err != nil { - return apiTypes.GitopsCatalogApps{}, fmt.Errorf("error retrieving gitops catalog repository content: %w", err) + return nil, fmt.Errorf("error retrieving gitops catalog repository content: %w", err) } index, err := gh.ReadGitopsCatalogIndex(activeContent) if err != nil { - return apiTypes.GitopsCatalogApps{}, fmt.Errorf("error retrieving gitops catalog index content: %w", err) + return nil, fmt.Errorf("error retrieving gitops catalog index content: %w", err) } var out apiTypes.GitopsCatalogApps err = yaml.Unmarshal(index, &out) if err != nil { - return apiTypes.GitopsCatalogApps{}, fmt.Errorf("error retrieving gitops catalog applications: %w", err) + return nil, fmt.Errorf("error retrieving gitops catalog applications: %w", err) } - return out, nil + return &out, nil } -func ValidateCatalogApps(catalogApps string) (bool, []apiTypes.GitopsCatalogApp, error) { - items := strings.Split(catalogApps, ",") - - gitopsCatalogapps := []apiTypes.GitopsCatalogApp{} +func ValidateCatalogApps(catalogApps string) ([]apiTypes.GitopsCatalogApp, error) { if catalogApps == "" { - return true, gitopsCatalogapps, nil + // No catalog apps to install + return nil, nil } apps, err := ReadActiveApplications() if err != nil { - log.Error().Msgf("error getting gitops catalog applications: %s", err) - return false, gitopsCatalogapps, err + return nil, err } + items := strings.Split(catalogApps, ",") + gitopsCatalogapps := make([]apiTypes.GitopsCatalogApp, 0, len(items)) for _, app := range items { found := false + for _, catalogApp := range apps.Apps { if app == catalogApp.Name { found = true - if catalogApp.SecretKeys != nil { - for _, secret := range catalogApp.SecretKeys { - secretValue := os.Getenv(secret.Env) - - if secretValue == "" { - return false, gitopsCatalogapps, fmt.Errorf("your %q environment variable is not set for %q catalog application. Please set and try again", secret.Env, app) - } - - secret.Value = secretValue + for pos, secret := range catalogApp.SecretKeys { + secretValue := os.Getenv(secret.Env) + if secretValue == "" { + return nil, fmt.Errorf("your %q environment variable is not set for %q catalog application. Please set and try again", secret.Env, app) } + + secret.Value = secretValue + catalogApp.SecretKeys[pos] = secret } - if catalogApp.ConfigKeys != nil { - for _, config := range catalogApp.ConfigKeys { - configValue := os.Getenv(config.Env) - if configValue == "" { - return false, gitopsCatalogapps, fmt.Errorf("your %q environment variable is not set for %q catalog application. Please set and try again", config.Env, app) - } - config.Value = configValue + for pos, config := range catalogApp.ConfigKeys { + configValue := os.Getenv(config.Env) + if configValue == "" { + return nil, fmt.Errorf("your %q environment variable is not set for %q catalog application. Please set and try again", config.Env, app) } + + config.Value = configValue + catalogApp.ConfigKeys[pos] = config } gitopsCatalogapps = append(gitopsCatalogapps, catalogApp) @@ -108,12 +105,13 @@ func ValidateCatalogApps(catalogApps string) (bool, []apiTypes.GitopsCatalogApp, break } } + if !found { - return false, gitopsCatalogapps, fmt.Errorf("catalog app is not supported: %q", app) + return nil, fmt.Errorf("catalog app is not supported: %q", app) } } - return true, gitopsCatalogapps, nil + return gitopsCatalogapps, nil } func (gh *GitHubClient) ReadGitopsCatalogRepoContents() ([]*git.RepositoryContent, error) { From 515ef2b877aa6e1843e92907ca7e0d7972bd4963 Mon Sep 17 00:00:00 2001 From: nathan-nicholson Date: Tue, 4 Feb 2025 15:43:40 -0600 Subject: [PATCH 2/2] chore: fix function signature Signed-off-by: nathan-nicholson