From ca3fc1a12c98992acb1bfa16c26e6bf18b09b367 Mon Sep 17 00:00:00 2001 From: Daniel Barnes Date: Sun, 15 Feb 2026 10:28:26 +0900 Subject: [PATCH 1/7] intial conversion --- cmd/ctrlc/root/sync/aws/eks/eks.go | 40 +++----------------- cmd/ctrlc/root/sync/aws/networks/networks.go | 30 +-------------- cmd/ctrlc/root/sync/aws/rds/rds.go | 9 +++-- cmd/ctrlc/root/sync/kubernetes/kubernetes.go | 5 ++- internal/common/common.go | 39 +++++++++++++++++++ 5 files changed, 54 insertions(+), 69 deletions(-) create mode 100644 internal/common/common.go 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..0a93b1f 100644 --- a/cmd/ctrlc/root/sync/aws/rds/rds.go +++ b/cmd/ctrlc/root/sync/aws/rds/rds.go @@ -14,6 +14,7 @@ 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" @@ -30,13 +31,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 +139,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) } } diff --git a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go index b86dec4..dbc8818 100644 --- a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go +++ b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go @@ -8,6 +8,7 @@ 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/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -78,6 +79,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 +101,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 +150,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") diff --git a/internal/common/common.go b/internal/common/common.go new file mode 100644 index 0000000..44d4137 --- /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 == "" { + 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 +} From 1de4299f6f9710b584986920c688a2757081c01f Mon Sep 17 00:00:00 2001 From: Daniel Barnes Date: Sun, 15 Feb 2026 10:42:22 +0900 Subject: [PATCH 2/7] mass update --- cmd/ctrlc/root/sync/aws/rds/rds.go | 33 ---------- cmd/ctrlc/root/sync/azure/aks/aks.go | 36 +---------- .../root/sync/azure/networks/networks.go | 31 +--------- cmd/ctrlc/root/sync/github/pullrequests.go | 62 +++---------------- .../root/sync/google/bigtable/bigtable.go | 37 +++-------- cmd/ctrlc/root/sync/google/buckets/buckets.go | 37 +++-------- .../root/sync/google/cloudrun/cloudrun.go | 55 ++++++++-------- .../root/sync/google/cloudsql/cloudsql.go | 43 +++---------- cmd/ctrlc/root/sync/google/gke/gke.go | 44 +++---------- .../root/sync/google/networks/networks.go | 37 +++-------- cmd/ctrlc/root/sync/google/redis/redis.go | 37 +++-------- cmd/ctrlc/root/sync/google/secrets/secrets.go | 37 +++-------- cmd/ctrlc/root/sync/google/vms/vms.go | 37 +++-------- cmd/ctrlc/root/sync/kubernetes/kubernetes.go | 24 ------- 14 files changed, 96 insertions(+), 454 deletions(-) diff --git a/cmd/ctrlc/root/sync/aws/rds/rds.go b/cmd/ctrlc/root/sync/aws/rds/rds.go index 0a93b1f..e85da54 100644 --- a/cmd/ctrlc/root/sync/aws/rds/rds.go +++ b/cmd/ctrlc/root/sync/aws/rds/rds.go @@ -515,36 +515,3 @@ func fetchParameterGroupDetails(ctx context.Context, rdsClient *rds.Client, para } } -// 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..2c27654 100644 --- a/cmd/ctrlc/root/sync/azure/aks/aks.go +++ b/cmd/ctrlc/root/sync/azure/aks/aks.go @@ -18,6 +18,7 @@ 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" @@ -99,7 +100,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 +436,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..09ab743 100644 --- a/cmd/ctrlc/root/sync/azure/networks/networks.go +++ b/cmd/ctrlc/root/sync/azure/networks/networks.go @@ -16,6 +16,7 @@ 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" @@ -95,7 +96,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 +405,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..1f2d2d0 100644 --- a/cmd/ctrlc/root/sync/github/pullrequests.go +++ b/cmd/ctrlc/root/sync/github/pullrequests.go @@ -11,6 +11,7 @@ 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" @@ -161,9 +162,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 +616,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..6784cba 100644 --- a/cmd/ctrlc/root/sync/google/bigtable/bigtable.go +++ b/cmd/ctrlc/root/sync/google/bigtable/bigtable.go @@ -11,6 +11,7 @@ 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" @@ -87,8 +88,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 +297,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..978aa82 100644 --- a/cmd/ctrlc/root/sync/google/buckets/buckets.go +++ b/cmd/ctrlc/root/sync/google/buckets/buckets.go @@ -11,6 +11,7 @@ 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/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -78,8 +79,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 +464,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..9577076 100644 --- a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go +++ b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go @@ -10,6 +10,7 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" "github.com/ctrlplanedev/cli/internal/cliutil" + ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -102,34 +103,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 { @@ -153,10 +126,34 @@ func runSync(project, providerName *string, regions *[]string) func(cmd *cobra.C allResources = append(allResources, resource) } - upsertResp, err := upsertToCtrlplane(ctx, allResources, project, providerName) + // Set default provider name if not provided + if *providerName == "" { + *providerName = fmt.Sprintf("google-cloudrun-%s", *project) + } + + // Upsert resources to Ctrlplane using common logic + // We need to get the response for HandleResponseOutput, so we inline part of the logic + 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) + } + + upsertResp, err := rp.UpsertResource(ctx, allResources) if err != nil { return fmt.Errorf("failed to upsert Cloud Run services: %w", err) } + + log.Info("Response from upserting resources", "status", upsertResp.Status) fmt.Println(upsertResp) return cliutil.HandleResponseOutput(cmd, upsertResp) diff --git a/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go b/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go index 5f283aa..018573e 100644 --- a/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go +++ b/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go @@ -10,6 +10,7 @@ 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" @@ -220,8 +221,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 +395,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..ececc65 100644 --- a/cmd/ctrlc/root/sync/google/gke/gke.go +++ b/cmd/ctrlc/root/sync/google/gke/gke.go @@ -11,6 +11,7 @@ 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" @@ -73,8 +74,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 +407,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..6d93df7 100644 --- a/cmd/ctrlc/root/sync/google/networks/networks.go +++ b/cmd/ctrlc/root/sync/google/networks/networks.go @@ -10,6 +10,7 @@ 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/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -94,8 +95,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 +768,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..b8f7ed4 100644 --- a/cmd/ctrlc/root/sync/google/redis/redis.go +++ b/cmd/ctrlc/root/sync/google/redis/redis.go @@ -10,6 +10,7 @@ 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" @@ -72,8 +73,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 +294,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..6b3f902 100644 --- a/cmd/ctrlc/root/sync/google/secrets/secrets.go +++ b/cmd/ctrlc/root/sync/google/secrets/secrets.go @@ -10,6 +10,7 @@ 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/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -71,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-secrets-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -285,32 +291,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..486d3d8 100644 --- a/cmd/ctrlc/root/sync/google/vms/vms.go +++ b/cmd/ctrlc/root/sync/google/vms/vms.go @@ -10,6 +10,7 @@ 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/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -71,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-vms-project-%s", *project) + } + // Upsert resources to Ctrlplane - return upsertToCtrlplane(ctx, resources, project, name) + return ctrlp.UpsertResources(ctx, resources, name) } } @@ -394,32 +400,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 dbc8818..f41514f 100644 --- a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go +++ b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go @@ -160,27 +160,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 -} From e6e73ba8ae6a5e08192200e8e8e337ed49f21a36 Mon Sep 17 00:00:00 2001 From: Daniel Barnes Date: Sun, 15 Feb 2026 10:42:45 +0900 Subject: [PATCH 3/7] make format --- cmd/ctrlc/root/sync/aws/rds/rds.go | 1 - cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go | 1 - cmd/ctrlc/root/sync/kubernetes/kubernetes.go | 1 - 3 files changed, 3 deletions(-) diff --git a/cmd/ctrlc/root/sync/aws/rds/rds.go b/cmd/ctrlc/root/sync/aws/rds/rds.go index e85da54..8bcaffa 100644 --- a/cmd/ctrlc/root/sync/aws/rds/rds.go +++ b/cmd/ctrlc/root/sync/aws/rds/rds.go @@ -514,4 +514,3 @@ func fetchParameterGroupDetails(ctx context.Context, rdsClient *rds.Client, para metadata["database/parameter-count"] = strconv.Itoa(paramCount) } } - diff --git a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go index 9577076..7d0dbe3 100644 --- a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go +++ b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go @@ -103,7 +103,6 @@ func processService(service *run.Service) api.ResourceProviderResource { return resource } - 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) diff --git a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go index f41514f..301977f 100644 --- a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go +++ b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go @@ -159,4 +159,3 @@ func NewSyncKubernetesCmd() *cobra.Command { return cmd } - From 4373fc0d1b9a9506cae53e415a2f6523da9b7c23 Mon Sep 17 00:00:00 2001 From: Daniel Barnes Date: Sun, 15 Feb 2026 10:45:12 +0900 Subject: [PATCH 4/7] clean up imports --- cmd/ctrlc/root/sync/aws/rds/rds.go | 2 -- cmd/ctrlc/root/sync/azure/aks/aks.go | 1 - cmd/ctrlc/root/sync/azure/networks/networks.go | 1 - cmd/ctrlc/root/sync/github/pullrequests.go | 2 -- cmd/ctrlc/root/sync/google/bigtable/bigtable.go | 2 -- cmd/ctrlc/root/sync/google/buckets/buckets.go | 2 -- cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go | 2 -- cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go | 2 -- cmd/ctrlc/root/sync/google/gke/gke.go | 2 -- cmd/ctrlc/root/sync/google/networks/networks.go | 2 -- cmd/ctrlc/root/sync/google/redis/redis.go | 2 -- cmd/ctrlc/root/sync/google/secrets/secrets.go | 2 -- cmd/ctrlc/root/sync/google/vms/vms.go | 2 -- cmd/ctrlc/root/sync/kubernetes/kubernetes.go | 1 - 14 files changed, 25 deletions(-) diff --git a/cmd/ctrlc/root/sync/aws/rds/rds.go b/cmd/ctrlc/root/sync/aws/rds/rds.go index 8bcaffa..6c1c927 100644 --- a/cmd/ctrlc/root/sync/aws/rds/rds.go +++ b/cmd/ctrlc/root/sync/aws/rds/rds.go @@ -16,9 +16,7 @@ import ( "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 diff --git a/cmd/ctrlc/root/sync/azure/aks/aks.go b/cmd/ctrlc/root/sync/azure/aks/aks.go index 2c27654..04996fe 100644 --- a/cmd/ctrlc/root/sync/azure/aks/aks.go +++ b/cmd/ctrlc/root/sync/azure/aks/aks.go @@ -20,7 +20,6 @@ import ( "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" ) diff --git a/cmd/ctrlc/root/sync/azure/networks/networks.go b/cmd/ctrlc/root/sync/azure/networks/networks.go index 09ab743..b87ecb3 100644 --- a/cmd/ctrlc/root/sync/azure/networks/networks.go +++ b/cmd/ctrlc/root/sync/azure/networks/networks.go @@ -18,7 +18,6 @@ import ( "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" ) diff --git a/cmd/ctrlc/root/sync/github/pullrequests.go b/cmd/ctrlc/root/sync/github/pullrequests.go index 1f2d2d0..00ba2f8 100644 --- a/cmd/ctrlc/root/sync/github/pullrequests.go +++ b/cmd/ctrlc/root/sync/github/pullrequests.go @@ -13,10 +13,8 @@ import ( "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" ) diff --git a/cmd/ctrlc/root/sync/google/bigtable/bigtable.go b/cmd/ctrlc/root/sync/google/bigtable/bigtable.go index 6784cba..34a6591 100644 --- a/cmd/ctrlc/root/sync/google/bigtable/bigtable.go +++ b/cmd/ctrlc/root/sync/google/bigtable/bigtable.go @@ -13,9 +13,7 @@ import ( "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" ) diff --git a/cmd/ctrlc/root/sync/google/buckets/buckets.go b/cmd/ctrlc/root/sync/google/buckets/buckets.go index 978aa82..33f576f 100644 --- a/cmd/ctrlc/root/sync/google/buckets/buckets.go +++ b/cmd/ctrlc/root/sync/google/buckets/buckets.go @@ -12,9 +12,7 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" ctrlp "github.com/ctrlplanedev/cli/internal/common" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/storage/v1" ) diff --git a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go index 7d0dbe3..7e2e134 100644 --- a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go +++ b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go @@ -4,13 +4,11 @@ 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" - ctrlp "github.com/ctrlplanedev/cli/internal/common" "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" diff --git a/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go b/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go index 018573e..589c2af 100644 --- a/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go +++ b/cmd/ctrlc/root/sync/google/cloudsql/cloudsql.go @@ -12,9 +12,7 @@ import ( "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" ) diff --git a/cmd/ctrlc/root/sync/google/gke/gke.go b/cmd/ctrlc/root/sync/google/gke/gke.go index ececc65..9100cab 100644 --- a/cmd/ctrlc/root/sync/google/gke/gke.go +++ b/cmd/ctrlc/root/sync/google/gke/gke.go @@ -13,9 +13,7 @@ import ( "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" ) diff --git a/cmd/ctrlc/root/sync/google/networks/networks.go b/cmd/ctrlc/root/sync/google/networks/networks.go index 6d93df7..2fed4f4 100644 --- a/cmd/ctrlc/root/sync/google/networks/networks.go +++ b/cmd/ctrlc/root/sync/google/networks/networks.go @@ -11,9 +11,7 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" ctrlp "github.com/ctrlplanedev/cli/internal/common" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/compute/v1" ) diff --git a/cmd/ctrlc/root/sync/google/redis/redis.go b/cmd/ctrlc/root/sync/google/redis/redis.go index b8f7ed4..0924bbb 100644 --- a/cmd/ctrlc/root/sync/google/redis/redis.go +++ b/cmd/ctrlc/root/sync/google/redis/redis.go @@ -12,9 +12,7 @@ import ( "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" ) diff --git a/cmd/ctrlc/root/sync/google/secrets/secrets.go b/cmd/ctrlc/root/sync/google/secrets/secrets.go index 6b3f902..beb8de6 100644 --- a/cmd/ctrlc/root/sync/google/secrets/secrets.go +++ b/cmd/ctrlc/root/sync/google/secrets/secrets.go @@ -11,9 +11,7 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" ctrlp "github.com/ctrlplanedev/cli/internal/common" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/secretmanager/v1" ) diff --git a/cmd/ctrlc/root/sync/google/vms/vms.go b/cmd/ctrlc/root/sync/google/vms/vms.go index 486d3d8..2bc8ab0 100644 --- a/cmd/ctrlc/root/sync/google/vms/vms.go +++ b/cmd/ctrlc/root/sync/google/vms/vms.go @@ -11,9 +11,7 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" ctrlp "github.com/ctrlplanedev/cli/internal/common" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/api/compute/v1" ) diff --git a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go index 301977f..db371cb 100644 --- a/cmd/ctrlc/root/sync/kubernetes/kubernetes.go +++ b/cmd/ctrlc/root/sync/kubernetes/kubernetes.go @@ -9,7 +9,6 @@ import ( "github.com/charmbracelet/log" "github.com/ctrlplanedev/cli/internal/api" ctrlp "github.com/ctrlplanedev/cli/internal/common" - "github.com/ctrlplanedev/cli/pkg/resourceprovider" "github.com/spf13/cobra" "github.com/spf13/viper" appsv1 "k8s.io/api/apps/v1" From 086c0f48b47c2f34ecdde20270fea929993acbff Mon Sep 17 00:00:00 2001 From: Daniel Barnes Date: Sun, 15 Feb 2026 10:51:38 +0900 Subject: [PATCH 5/7] update cloudrun --- .../root/sync/google/cloudrun/cloudrun.go | 32 ++----------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go index 7e2e134..86fc582 100644 --- a/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go +++ b/cmd/ctrlc/root/sync/google/cloudrun/cloudrun.go @@ -8,10 +8,8 @@ import ( "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" ) @@ -128,32 +126,8 @@ func runSync(project, providerName *string, regions *[]string) func(cmd *cobra.C *providerName = fmt.Sprintf("google-cloudrun-%s", *project) } - // Upsert resources to Ctrlplane using common logic - // We need to get the response for HandleResponseOutput, so we inline part of the logic - 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) - } - - upsertResp, err := rp.UpsertResource(ctx, allResources) - if err != nil { - return fmt.Errorf("failed to upsert Cloud Run services: %w", err) - } - - log.Info("Response from upserting resources", "status", upsertResp.Status) - fmt.Println(upsertResp) - - return cliutil.HandleResponseOutput(cmd, upsertResp) + // Upsert resources to Ctrlplane + return ctrlp.UpsertResources(ctx, allResources, providerName) } } From 7d7af966157ce7a837e5355bbca21934bae57aae Mon Sep 17 00:00:00 2001 From: Daniel Barnes Date: Sun, 15 Feb 2026 10:53:04 +0900 Subject: [PATCH 6/7] nil guard --- internal/common/common.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/common/common.go b/internal/common/common.go index 44d4137..8221691 100644 --- a/internal/common/common.go +++ b/internal/common/common.go @@ -11,7 +11,7 @@ import ( ) func UpsertResources(ctx context.Context, resources []api.ResourceProviderResource, name *string) error { - if *name == "" { + if name == nil || *name == "" { return fmt.Errorf("name is unset, invalid usage.") } From 4551a094f6574328cb0c05bbb5d8e0d06664180c Mon Sep 17 00:00:00 2001 From: Daniel Barnes Date: Sun, 15 Feb 2026 11:05:03 +0900 Subject: [PATCH 7/7] tweak error string --- internal/common/common.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/common/common.go b/internal/common/common.go index 8221691..bd459bf 100644 --- a/internal/common/common.go +++ b/internal/common/common.go @@ -12,7 +12,7 @@ import ( func UpsertResources(ctx context.Context, resources []api.ResourceProviderResource, name *string) error { if name == nil || *name == "" { - return fmt.Errorf("name is unset, invalid usage.") + return fmt.Errorf("name is unset, invalid usage") } apiURL := viper.GetString("url")