Skip to content

Commit e04d874

Browse files
feat(gcp): create firestore database as pre step (#598)
1 parent 5bb91f5 commit e04d874

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

cloud/gcp/deploy/deploy.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,22 @@
1717
package deploy
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"os"
2223
"strings"
2324

2425
_ "embed"
2526

27+
apiv1 "cloud.google.com/go/firestore/apiv1/admin"
28+
"cloud.google.com/go/firestore/apiv1/admin/adminpb"
2629
"github.com/nitrictech/nitric/cloud/common/deploy"
2730
"github.com/nitrictech/nitric/cloud/common/deploy/provider"
2831
deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1"
2932
"github.com/pkg/errors"
3033
"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway"
3134
"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudtasks"
35+
"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/firestore"
3236
"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations"
3337
"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects"
3438
"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/pubsub"
@@ -37,6 +41,7 @@ import (
3741
"github.com/pulumi/pulumi-random/sdk/v4/go/random"
3842
"github.com/pulumi/pulumi/sdk/v3/go/auto"
3943
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
44+
"github.com/samber/lo"
4045
"golang.org/x/oauth2"
4146
"golang.org/x/oauth2/google"
4247
"google.golang.org/api/iamcredentials/v1"
@@ -235,6 +240,19 @@ func (a *NitricGcpPulumiProvider) Pre(ctx *pulumi.Context, resources []*deployme
235240
return errors.WithMessage(err, "base customRole")
236241
}
237242

243+
// Check if a key value store exists, if so get/create a (default) firestore database
244+
kvStoreExists := lo.SomeBy(resources, func(res *deploymentspb.Resource) bool {
245+
_, ok := res.Config.(*deploymentspb.Resource_KeyValueStore)
246+
return ok
247+
})
248+
249+
if kvStoreExists {
250+
err := createFirestoreDatabase(ctx, *project.ProjectId, a.region)
251+
if err != nil {
252+
return err
253+
}
254+
}
255+
238256
return nil
239257
}
240258

@@ -342,3 +360,35 @@ func NewNitricGcpProvider() *NitricGcpPulumiProvider {
342360
secrets: make(map[string]*secretmanager.Secret),
343361
}
344362
}
363+
364+
func createFirestoreDatabase(ctx *pulumi.Context, projectId string, location string) error {
365+
fsAdminClient, err := apiv1.NewFirestoreAdminClient(context.TODO())
366+
if err != nil {
367+
return err
368+
}
369+
370+
defaultDb, _ := fsAdminClient.GetDatabase(context.TODO(), &adminpb.GetDatabaseRequest{
371+
Name: fmt.Sprintf("projects/%s/databases/(default)", projectId),
372+
})
373+
374+
defaultFirestoreId := pulumi.ID("(default)")
375+
376+
if defaultDb != nil {
377+
_, err = firestore.GetDatabase(ctx, "default", defaultFirestoreId, nil)
378+
if err != nil {
379+
return err
380+
}
381+
} else {
382+
_, err = firestore.NewDatabase(ctx, "default", &firestore.DatabaseArgs{
383+
Name: defaultFirestoreId,
384+
AppEngineIntegrationMode: pulumi.String("DISABLED"),
385+
LocationId: pulumi.String(location),
386+
Type: pulumi.String("FIRESTORE_NATIVE"),
387+
}, pulumi.RetainOnDelete(true))
388+
if err != nil {
389+
return err
390+
}
391+
}
392+
393+
return nil
394+
}

0 commit comments

Comments
 (0)