diff --git a/cmd/ctrlc/root/sync/aws/eks/eks.go b/cmd/ctrlc/root/sync/aws/eks/eks.go index 96ed7e2..ef2096f 100644 --- a/cmd/ctrlc/root/sync/aws/eks/eks.go +++ b/cmd/ctrlc/root/sync/aws/eks/eks.go @@ -16,10 +16,9 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/sync/aws/common" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" ) // NewSyncEKSCmd creates a new cobra command for syncing EKS clusters @@ -32,13 +31,13 @@ func NewSyncEKSCmd() *cobra.Command { Short: "Sync Amazon Elastic Kubernetes Service clusters into Ctrlplane", Example: heredoc.Doc(` # Make sure AWS credentials are configured via environment variables or AWS CLI - + # Sync all EKS clusters from a region $ ctrlc sync aws eks --region us-west-2 - + # Sync all EKS clusters from multiple regions $ ctrlc sync aws eks --region us-west-2 --region us-east-1 - + # Sync all EKS clusters from all regions $ ctrlc sync aws eks `), @@ -117,7 +116,7 @@ func runSync(regions *[]string, name *string) func(cmd *cobra.Command, args []st common.EnsureProviderDetails(ctx, "aws-eks", regionsToSync, name) // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, allResources, name) + return ctrlp.UpsertResources(ctx, allResources, name) } } @@ -281,32 +280,3 @@ func initClusterMetadata(cluster *types.Cluster, region string) map[string]strin return metadata } - -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, name *string) error { - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - // err = rp.AddResourceRelationshipRule(ctx, relationshipRules) - // if err != nil { - // log.Error("Failed to add resource relationship rule", "name", *name, "error", err) - // } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/aws/networks/networks.go b/cmd/ctrlc/root/sync/aws/networks/networks.go index ce5985f..8c02e58 100644 --- a/cmd/ctrlc/root/sync/aws/networks/networks.go +++ b/cmd/ctrlc/root/sync/aws/networks/networks.go @@ -14,9 +14,8 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/sync/aws/common" "github.com/ctrlplanedev/cli/internal/api" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/spf13/cobra" - "github.com/spf13/viper" ) // NewSyncNetworksCmd creates a new cobra command for syncing AWS Networks @@ -137,7 +136,7 @@ func runSync(regions *[]string, name *string) func(cmd *cobra.Command, args []st common.EnsureProviderDetails(ctx, "aws-networks", regionsToSync, name) // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, allResources, name) + return ctrlp.UpsertResources(ctx, allResources, name) } } @@ -432,28 +431,3 @@ func getSubnetName(subnet types.Subnet) string { } return subnetName } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, name *string) error { - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/aws/rds/rds.go b/cmd/ctrlc/root/sync/aws/rds/rds.go index f764568..6c1c927 100644 --- a/cmd/ctrlc/root/sync/aws/rds/rds.go +++ b/cmd/ctrlc/root/sync/aws/rds/rds.go @@ -14,10 +14,9 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/sync/aws/common" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" ) // NewSyncRDSCmd creates a new cobra command for syncing AWS RDS instances @@ -30,13 +29,13 @@ func NewSyncRDSCmd() *cobra.Command { Short: "Sync Amazon Relational Database Service instances into Ctrlplane", Example: heredoc.Doc(` # Make sure AWS credentials are configured via environment variables or AWS CLI - + # Sync all RDS instances from a region $ ctrlc sync aws rds --region us-west-2 - + # Sync all RDS instances from multiple regions $ ctrlc sync aws rds --region us-west-2 --region us-east-1 - + # Sync all RDS instances from all regions $ ctrlc sync aws rds `), @@ -138,7 +137,7 @@ func runSync(regions *[]string, name *string) func(cmd *cobra.Command, args []st } // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, allResources, &providerRegion, name) + return ctrlp.UpsertResources(ctx, allResources, name) } } @@ -513,37 +512,3 @@ func fetchParameterGroupDetails(ctx context.Context, rdsClient *rds.Client, para metadata["database/parameter-count"] = strconv.Itoa(paramCount) } } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, region, name *string) error { - if *name == "" { - *name = fmt.Sprintf("aws-rds-%s", *region) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - // err = rp.AddResourceRelationshipRule(ctx, relationshipRules) - // if err != nil { - // log.Error("Failed to add resource relationship rule", "name", *name, "error", err) - // } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/azure/aks/aks.go b/cmd/ctrlc/root/sync/azure/aks/aks.go index 0b1ec6f..04996fe 100644 --- a/cmd/ctrlc/root/sync/azure/aks/aks.go +++ b/cmd/ctrlc/root/sync/azure/aks/aks.go @@ -18,8 +18,8 @@ import ( "github.com/Masterminds/semver" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -99,7 +99,7 @@ func runSync(subscriptionID, name *string) func(cmd *cobra.Command, args []strin } // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, subscriptionID, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -435,36 +435,3 @@ func extractResourceGroupFromID(id string) string { // }, // }, // } - -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, subscriptionID, name *string) error { - if *name == "" { - *name = fmt.Sprintf("azure-aks-%s", *subscriptionID) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - // err = rp.AddResourceRelationshipRule(ctx, relationshipRules) - // if err != nil { - // log.Error("Failed to add resource relationship rule", "name", *name, "error", err) - // } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/azure/networks/networks.go b/cmd/ctrlc/root/sync/azure/networks/networks.go index 7f18204..b87ecb3 100644 --- a/cmd/ctrlc/root/sync/azure/networks/networks.go +++ b/cmd/ctrlc/root/sync/azure/networks/networks.go @@ -16,8 +16,8 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/sync/azure/common" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -95,7 +95,7 @@ func runSync(subscriptionID, name *string) func(cmd *cobra.Command, args []strin } // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, subscriptionID, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -404,31 +404,3 @@ func getSubnetState(subnet *armnetwork.Subnet) string { } return "" } - -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, subscriptionID, name *string) error { - if *name == "" { - *name = fmt.Sprintf("azure-networks-%s", *subscriptionID) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/github/pullrequests.go b/cmd/ctrlc/root/sync/github/pullrequests.go index 7f5351d..00ba2f8 100644 --- a/cmd/ctrlc/root/sync/github/pullrequests.go +++ b/cmd/ctrlc/root/sync/github/pullrequests.go @@ -11,11 +11,10 @@ import ( "github.com/MakeNowJust/heredoc/v2" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/google/go-github/v57/github" "github.com/spf13/cobra" - "github.com/spf13/viper" "golang.org/x/oauth2" ) @@ -161,9 +160,17 @@ func runSync(repoPath, token, name *string, states *[]string) func(cmd *cobra.Co } log.Debug("Pull requests processed successfully", "count", len(resources)) + // Set default provider name if not provided + if *name == "" { + *name = fmt.Sprintf("github-prs-%s-%s", owner, repo) + log.Debug("Using generated provider name", "name", *name) + } else { + log.Debug("Using provided provider name", "name", *name) + } + // Upsert resources to Ctrlplane log.Debug("Upserting resources to Ctrlplane", "count", len(resources)) - return upsertToCtrlplane(ctx, resources, owner, repo, *name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -607,54 +614,3 @@ func initPullRequestMetadata(pr *github.PullRequest, owner, repo string) map[str } // var relationshipRules = []api.Relationship{} - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, owner, repo, name string) error { - log.Debug("Upserting resources to Ctrlplane", "count", len(resources)) - - if name == "" { - name = fmt.Sprintf("github-prs-%s-%s", owner, repo) - log.Debug("Using generated provider name", "name", name) - } else { - log.Debug("Using provided provider name", "name", name) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - log.Debug("API configuration", "url", apiURL, "workspace", workspaceId) - - log.Debug("Creating API client") - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - log.Error("Failed to create API client", "error", err) - return fmt.Errorf("failed to create API client: %w", err) - } - - log.Debug("Creating resource provider", "name", name) - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, name) - if err != nil { - log.Error("Failed to create resource provider", "name", name, "error", err) - return fmt.Errorf("failed to create resource provider: %w", err) - } - - // log.Debug("Adding resource relationship rules", "rules_count", len(relationshipRules)) - // err = rp.AddResourceRelationshipRule(ctx, relationshipRules) - // if err != nil { - // log.Error("Failed to add resource relationship rule", "name", name, "error", err) - // } else { - // log.Debug("Successfully added relationship rules") - // } - - log.Debug("Upserting resources", "count", len(resources)) - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - log.Error("Failed to upsert resources", "error", err) - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - log.Debug("Successfully upserted resources to Ctrlplane") - return nil -} diff --git a/cmd/ctrlc/root/sync/google/bigtable/bigtable.go b/cmd/ctrlc/root/sync/google/bigtable/bigtable.go index 3d3215b..34a6591 100644 --- a/cmd/ctrlc/root/sync/google/bigtable/bigtable.go +++ b/cmd/ctrlc/root/sync/google/bigtable/bigtable.go @@ -11,10 +11,9 @@ import ( "github.com/MakeNowJust/heredoc/v2" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/bigtableadmin/v2" ) @@ -87,8 +86,13 @@ func runSync(project, name *string) func(cmd *cobra.Command, args []string) erro return err } + // Set default provider name if not provided + if *name == "" { + *name = fmt.Sprintf("google-bigtable-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -291,32 +295,3 @@ func processTables(adminClient *bigtableadmin.Service, instance *bigtableadmin.I return nil } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project, name *string) error { - if *name == "" { - *name = fmt.Sprintf("google-bigtable-project-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/google/buckets/buckets.go b/cmd/ctrlc/root/sync/google/buckets/buckets.go index 8975123..33f576f 100644 --- a/cmd/ctrlc/root/sync/google/buckets/buckets.go +++ b/cmd/ctrlc/root/sync/google/buckets/buckets.go @@ -11,9 +11,8 @@ import ( "github.com/MakeNowJust/heredoc/v2" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/storage/v1" ) @@ -78,8 +77,13 @@ func runSync(project, name *string) func(cmd *cobra.Command, args []string) erro return err } + // Set default provider name if not provided + if *name == "" { + *name = fmt.Sprintf("google-buckets-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -458,32 +462,3 @@ func processBucketStats(storageClient *storage.Service, bucket *storage.Bucket, } } } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project, name *string) error { - if *name == "" { - *name = fmt.Sprintf("google-buckets-project-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go index 529873d..86fc582 100644 --- a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go +++ b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go @@ -4,15 +4,12 @@ import ( "context" "encoding/json" "fmt" - "net/http" "github.com/MakeNowJust/heredoc" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" - "github.com/ctrlplanedev/cli/internal/cliutil" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/run/v1" ) @@ -102,35 +99,6 @@ func processService(service *run.Service) api.ResourceProviderResource { return resource } -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project *string, providerName *string) (*http.Response, error) { - if *providerName == "" { - *providerName = fmt.Sprintf("google-cloudrun-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return nil, fmt.Errorf("failed to create API client: %w", err) - } - - log.Info("Upserting resource provider", "name", *providerName) - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *providerName) - if err != nil { - return nil, fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return nil, fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return upsertResp, nil -} - func runSync(project, providerName *string, regions *[]string) func(cmd *cobra.Command, args []string) error { return func(cmd *cobra.Command, args []string) error { log.Info("Syncing Cloud Run services into Ctrlplane", "project", *project) @@ -153,13 +121,13 @@ func runSync(project, providerName *string, regions *[]string) func(cmd *cobra.C allResources = append(allResources, resource) } - upsertResp, err := upsertToCtrlplane(ctx, allResources, project, providerName) - if err != nil { - return fmt.Errorf("failed to upsert Cloud Run services: %w", err) + // Set default provider name if not provided + if *providerName == "" { + *providerName = fmt.Sprintf("google-cloudrun-%s", *project) } - fmt.Println(upsertResp) - return cliutil.HandleResponseOutput(cmd, upsertResp) + // Upsert resources to Ctrlplane + return ctrlp.UpsertResources(ctx, allResources, providerName) } } diff --git a/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go b/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go index 5f283aa..589c2af 100644 --- a/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go +++ b/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go @@ -10,10 +10,9 @@ import ( "github.com/Masterminds/semver" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/sqladmin/v1" ) @@ -220,8 +219,13 @@ func runSync(project, providerName *string) func(cmd *cobra.Command, args []stri return err } + // Set default provider name if not provided + if *providerName == "" { + *providerName = fmt.Sprintf("google-cloudsql-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, providerName) + return ctrlp.UpsertResources(ctx, resources, providerName) } } @@ -389,38 +393,3 @@ func buildInstanceMetadata(instance *sqladmin.DatabaseInstance, project, region, // }, // }, // } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project, providerName *string) error { - if *providerName == "" { - *providerName = fmt.Sprintf("google-cloudsql-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - log.Info("Upserting resource provider", "name", *providerName) - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *providerName) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - // err = rp.AddResourceRelationshipRule(ctx, relationshipRules) - // if err != nil { - // log.Error("Failed to add resource relationship rule", "name", *providerName, "error", err) - // } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/google/gke/gke.go b/cmd/ctrlc/root/sync/google/gke/gke.go index 83ae3a2..9100cab 100644 --- a/cmd/ctrlc/root/sync/google/gke/gke.go +++ b/cmd/ctrlc/root/sync/google/gke/gke.go @@ -11,10 +11,9 @@ import ( "github.com/Masterminds/semver" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/container/v1" ) @@ -73,8 +72,13 @@ func runSync(project, name *string) func(cmd *cobra.Command, args []string) erro return err } + // Set default provider name if not provided + if *name == "" { + *name = fmt.Sprintf("google-gke-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -401,39 +405,3 @@ func getResourceName(fullPath string) string { // }, // }, // } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project, name *string) error { - if *name == "" { - *name = fmt.Sprintf("google-gke-project-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspace := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - workspaceId := ctrlplaneClient.GetWorkspaceID(ctx, workspace) - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId.String(), *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - // err = rp.AddResourceRelationshipRule(ctx, relationshipRules) - // if err != nil { - // log.Error("Failed to add resource relationship rule", "name", *name, "error", err) - // } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/google/networks/networks.go b/cmd/ctrlc/root/sync/google/networks/networks.go index 9c467d1..2fed4f4 100644 --- a/cmd/ctrlc/root/sync/google/networks/networks.go +++ b/cmd/ctrlc/root/sync/google/networks/networks.go @@ -10,9 +10,8 @@ import ( "github.com/MakeNowJust/heredoc/v2" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/compute/v1" ) @@ -94,8 +93,13 @@ func runSync(project, name *string) func(cmd *cobra.Command, args []string) erro resources = append(resources, firewallResources...) resources = append(resources, forwardingRuleResources...) + // Set default provider name if not provided + if *name == "" { + *name = fmt.Sprintf("google-networks-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -762,32 +766,3 @@ func getResourceName(fullPath string) string { parts := strings.Split(fullPath, "/") return parts[len(parts)-1] } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project, name *string) error { - if *name == "" { - *name = fmt.Sprintf("google-networks-project-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/google/redis/redis.go b/cmd/ctrlc/root/sync/google/redis/redis.go index f1fe3a3..0924bbb 100644 --- a/cmd/ctrlc/root/sync/google/redis/redis.go +++ b/cmd/ctrlc/root/sync/google/redis/redis.go @@ -10,10 +10,9 @@ import ( "github.com/Masterminds/semver" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/internal/kinds" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/redis/v1" ) @@ -72,8 +71,13 @@ func runSync(project, name *string) func(cmd *cobra.Command, args []string) erro return err } + // Set default provider name if not provided + if *name == "" { + *name = fmt.Sprintf("google-redis-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -288,32 +292,3 @@ func getInstanceName(fullName string) string { } return fullName } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project, name *string) error { - if *name == "" { - *name = fmt.Sprintf("google-redis-project-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/google/secrets/secrets.go b/cmd/ctrlc/root/sync/google/secrets/secrets.go index e184778..beb8de6 100644 --- a/cmd/ctrlc/root/sync/google/secrets/secrets.go +++ b/cmd/ctrlc/root/sync/google/secrets/secrets.go @@ -10,9 +10,8 @@ import ( "github.com/MakeNowJust/heredoc/v2" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/secretmanager/v1" ) @@ -71,8 +70,13 @@ func runSync(project, name *string) func(cmd *cobra.Command, args []string) erro return err } + // Set default provider name if not provided + if *name == "" { + *name = fmt.Sprintf("google-secrets-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -285,32 +289,3 @@ func getResourceName(fullPath string) string { parts := strings.Split(fullPath, "/") return parts[len(parts)-1] } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project, name *string) error { - if *name == "" { - *name = fmt.Sprintf("google-secrets-project-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/google/vms/vms.go b/cmd/ctrlc/root/sync/google/vms/vms.go index 768e30f..2bc8ab0 100644 --- a/cmd/ctrlc/root/sync/google/vms/vms.go +++ b/cmd/ctrlc/root/sync/google/vms/vms.go @@ -10,9 +10,8 @@ import ( "github.com/MakeNowJust/heredoc/v2" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/compute/v1" ) @@ -71,8 +70,13 @@ func runSync(project, name *string) func(cmd *cobra.Command, args []string) erro return err } + // Set default provider name if not provided + if *name == "" { + *name = fmt.Sprintf("google-vms-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -394,32 +398,3 @@ func getResourceName(fullPath string) string { parts := strings.Split(fullPath, "/") return parts[len(parts)-1] } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctx context.Context, resources []api.ResourceProviderResource, project, name *string) error { - if *name == "" { - *name = fmt.Sprintf("google-vms-project-%s", *project) - } - - apiURL := viper.GetString("url") - apiKey := viper.GetString("api-key") - workspaceId := viper.GetString("workspace") - - ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) - if err != nil { - return fmt.Errorf("failed to create API client: %w", err) - } - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go index b86dec4..db371cb 100644 --- a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go +++ b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go @@ -8,7 +8,7 @@ import ( "github.com/MakeNowJust/heredoc/v2" "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/spf13/cobra" "github.com/spf13/viper" appsv1 "k8s.io/api/apps/v1" @@ -78,6 +78,7 @@ func NewSyncKubernetesCmd() *cobra.Command { $ ctrlc sync kubernetes --cluster-identifier 1234567890 --cluster-name my-cluster `), RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() log.Info("Syncing Kubernetes resources on a cluster") if clusterIdentifier == "" { clusterIdentifier = viper.GetString("cluster-identifier") @@ -99,7 +100,6 @@ func NewSyncKubernetesCmd() *cobra.Command { return fmt.Errorf("failed to create API client: %w", err) } - ctx := context.Background() clusterResource, _ := ctrlplaneClient.GetResourceByIdentifierWithResponse(ctx, workspaceId, clusterIdentifier) if clusterResource.JSON200 != nil { clusterName = clusterResource.JSON200.Name @@ -149,7 +149,7 @@ func NewSyncKubernetesCmd() *cobra.Command { } } - return upsertToCtrlplane(ctrlplaneClient, resources, clusterIdentifier, clusterName, providerName) + return ctrlp.UpsertResources(ctx, resources, &providerName) }, } cmd.Flags().StringVarP(&providerName, "provider", "p", "", "Name of the resource provider") @@ -158,28 +158,3 @@ func NewSyncKubernetesCmd() *cobra.Command { return cmd } - -// upsertToCtrlplane handles upserting resources to Ctrlplane -func upsertToCtrlplane(ctrlplaneClient *api.ClientWithResponses, resources []api.ResourceProviderResource, clusterIdentifier string, clusterName string, providerName string) error { - ctx := context.Background() - workspaceId := viper.GetString("workspace") - - if providerName == "" { - providerName = fmt.Sprintf("kubernetes-cluster-%s", clusterName) - } - - log.Info("Using provider name", "provider", providerName) - - rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, providerName) - if err != nil { - return fmt.Errorf("failed to create resource provider: %w", err) - } - - upsertResp, err := rp.UpsertResource(ctx, resources) - if err != nil { - return fmt.Errorf("failed to upsert resources: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - return nil -} diff --git a/internal/common/common.go b/internal/common/common.go new file mode 100644 index 0000000..bd459bf --- /dev/null +++ b/internal/common/common.go @@ -0,0 +1,39 @@ +package common + +import ( + "context" + "fmt" + + "github.com/charmbracelet/log" + "github.com/ctrlplanedev/cli/internal/api" + "github.com/ctrlplanedev/cli/pkg/resourceprovider" + "github.com/spf13/viper" +) + +func UpsertResources(ctx context.Context, resources []api.ResourceProviderResource, name *string) error { + if name == nil || *name == "" { + return fmt.Errorf("name is unset, invalid usage") + } + + apiURL := viper.GetString("url") + apiKey := viper.GetString("api-key") + workspaceId := viper.GetString("workspace") + + ctrlplaneClient, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) + if err != nil { + return fmt.Errorf("failed to create API client: %w", err) + } + + rp, err := resourceprovider.New(ctrlplaneClient, workspaceId, *name) + if err != nil { + return fmt.Errorf("failed to create resource provider: %w", err) + } + + upsertResp, err := rp.UpsertResource(ctx, resources) + if err != nil { + return fmt.Errorf("failed to upsert resources: %w", err) + } + + log.Info("Response from upserting resources", "status", upsertResp.Status) + return nil +}