Skip to content

Commit 97ac1c3

Browse files
Use Preview RPC for GCP estimates (#1288)
* restore estimation provider selector * use new Preview rpc instead of Deploy with preview bool
1 parent ea0c799 commit 97ac1c3

File tree

4 files changed

+24
-14
lines changed

4 files changed

+24
-14
lines changed

src/cmd/cli/command/estimate.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/DefangLabs/defang/src/pkg/cli"
88
cliClient "github.com/DefangLabs/defang/src/pkg/cli/client"
99
"github.com/DefangLabs/defang/src/pkg/cli/client/byoc/aws"
10+
"github.com/DefangLabs/defang/src/pkg/cli/client/byoc/gcp"
1011
"github.com/DefangLabs/defang/src/pkg/term"
1112
defangv1 "github.com/DefangLabs/defang/src/protos/io/defang/v1"
1213
"github.com/spf13/cobra"
@@ -30,13 +31,20 @@ func makeEstimateCmd() *cobra.Command {
3031

3132
var previewProvider cliClient.Provider = &cliClient.PlaygroundProvider{FabricClient: client}
3233
switch providerID {
33-
case cliClient.ProviderAuto:
34-
providerID = cliClient.ProviderAWS // default to AWS for estimates; TODO: show a picker
35-
fallthrough
3634
case cliClient.ProviderAWS:
3735
if awsInEnv() {
3836
previewProvider = aws.NewByocProvider(ctx, client.GetTenantName())
3937
}
38+
case cliClient.ProviderGCP:
39+
if gcpInEnv() {
40+
previewProvider = gcp.NewByocProvider(ctx, client.GetTenantName())
41+
}
42+
case cliClient.ProviderAuto:
43+
fallthrough
44+
case cliClient.ProviderDefang:
45+
if _, err := interactiveSelectProvider([]cliClient.ProviderID{cliClient.ProviderAWS, cliClient.ProviderGCP}); err != nil {
46+
return err
47+
}
4048
default:
4149
return fmt.Errorf("unsupported provider %s; must be one of %v", providerID, []cliClient.ProviderID{cliClient.ProviderAWS})
4250
}
@@ -46,13 +54,6 @@ func makeEstimateCmd() *cobra.Command {
4654
mode = Mode(defangv1.DeploymentMode_DEVELOPMENT)
4755
}
4856

49-
// TODO: bring this back when GCP is supported
50-
// if providerID == cliClient.ProviderAuto || providerID == cliClient.ProviderDefang {
51-
// if _, err := interactiveSelectProvider([]cliClient.ProviderID{cliClient.ProviderAWS, cliClient.ProviderGCP}); err != nil {
52-
// return err
53-
// }
54-
// }
55-
5657
estimate, err := cli.RunEstimate(ctx, project, client, previewProvider, providerID, region, mode.Value())
5758
if err != nil {
5859
return fmt.Errorf("failed to run estimate: %w", err)

src/pkg/cli/client/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type FabricClient interface {
2929
GetTenantName() types.TenantName
3030
GetVersions(context.Context) (*defangv1.Version, error)
3131
ListDeployments(context.Context, *defangv1.ListDeploymentsRequest) (*defangv1.ListDeploymentsResponse, error)
32+
Preview(context.Context, *defangv1.PreviewRequest) (*defangv1.PreviewResponse, error)
3233
Publish(context.Context, *defangv1.PublishRequest) error
3334
PutDeployment(context.Context, *defangv1.PutDeploymentRequest) error
3435
RevokeToken(context.Context) error

src/pkg/cli/client/grpc.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,7 @@ func (g GrpcClient) SetOptions(ctx context.Context, req *defangv1.SetOptionsRequ
173173
func (g GrpcClient) Estimate(ctx context.Context, req *defangv1.EstimateRequest) (*defangv1.EstimateResponse, error) {
174174
return getMsg(g.client.Estimate(ctx, connect.NewRequest(req)))
175175
}
176+
177+
func (g GrpcClient) Preview(ctx context.Context, req *defangv1.PreviewRequest) (*defangv1.PreviewResponse, error) {
178+
return getMsg(g.client.Preview(ctx, connect.NewRequest(req)))
179+
}

src/pkg/cli/estimate.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222

2323
func RunEstimate(ctx context.Context, project *compose.Project, client cliClient.FabricClient, previewProvider cliClient.Provider, estimateProviderID cliClient.ProviderID, region string, mode defangv1.DeploymentMode) (*defangv1.EstimateResponse, error) {
2424
term.Debugf("Running estimate for project %s in region %s with mode %s", project.Name, region, mode)
25-
preview, err := GeneratePreview(ctx, project, client, previewProvider, mode)
25+
preview, err := GeneratePreview(ctx, project, client, previewProvider, estimateProviderID, mode, region)
2626
if err != nil {
2727
return nil, err
2828
}
@@ -40,11 +40,15 @@ func RunEstimate(ctx context.Context, project *compose.Project, client cliClient
4040
return estimate, nil
4141
}
4242

43-
func GeneratePreview(ctx context.Context, project *compose.Project, client client.FabricClient, provider cliClient.Provider, mode defangv1.DeploymentMode) (string, error) {
43+
func GeneratePreview(ctx context.Context, project *compose.Project, client client.FabricClient, previewProvider cliClient.Provider, estimateProviderID cliClient.ProviderID, mode defangv1.DeploymentMode, region string) (string, error) {
4444
os.Setenv("DEFANG_JSON", "1") // HACK: always show JSON output for estimate
4545
since := time.Now()
4646

47-
resp, project, err := ComposeUp(ctx, project, client, provider, compose.UploadModeEstimate, mode)
47+
resp, err := client.Preview(ctx, &defangv1.PreviewRequest{
48+
Provider: estimateProviderID.Value(),
49+
Mode: mode,
50+
Region: region,
51+
})
4852
if err != nil {
4953
return "", err
5054
}
@@ -58,7 +62,7 @@ func GeneratePreview(ctx context.Context, project *compose.Project, client clien
5862
Verbose: true,
5963
}
6064

61-
err = streamLogs(ctx, provider, project.Name, options, func(entry *defangv1.LogEntry, options *TailOptions) error {
65+
err = streamLogs(ctx, previewProvider, project.Name, options, func(entry *defangv1.LogEntry, options *TailOptions) error {
6266
if strings.HasPrefix(entry.Message, "Preview succeeded") {
6367
return io.EOF
6468
} else if strings.HasPrefix(entry.Message, "Preview failed") {

0 commit comments

Comments
 (0)