Skip to content

Commit 876b26f

Browse files
Add Firebase Extensions Instance resource (#8133) (#5832)
* Add Firebase Extensions Instance resource * rename file from Extension to Instance * Change serviceAccountEmail to output * Make extensionRef trigger replacement Signed-off-by: Modular Magician <[email protected]>
1 parent 6391e17 commit 876b26f

14 files changed

+1789
-2
lines changed

.changelog/8133.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
`google_firebase_extensions_instance`
3+
```

google-beta/config_test_utils.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ func configureTestBasePaths(c *transport_tpg.Config, url string) {
7676
c.FilestoreBasePath = url
7777
c.FirebaseBasePath = url
7878
c.FirebaseDatabaseBasePath = url
79+
c.FirebaseExtensionsBasePath = url
7980
c.FirebaseHostingBasePath = url
8081
c.FirebaseStorageBasePath = url
8182
c.FirestoreBasePath = url

google-beta/framework_provider.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,12 @@ func (p *FrameworkProvider) Schema(_ context.Context, _ provider.SchemaRequest,
432432
transport_tpg.CustomEndpointValidator(),
433433
},
434434
},
435+
"firebase_extensions_custom_endpoint": &schema.StringAttribute{
436+
Optional: true,
437+
Validators: []validator.String{
438+
transport_tpg.CustomEndpointValidator(),
439+
},
440+
},
435441
"firebase_hosting_custom_endpoint": &schema.StringAttribute{
436442
Optional: true,
437443
Validators: []validator.String{

google-beta/fwmodels/provider_model.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ type ProviderModel struct {
7777
FilestoreCustomEndpoint types.String `tfsdk:"filestore_custom_endpoint"`
7878
FirebaseCustomEndpoint types.String `tfsdk:"firebase_custom_endpoint"`
7979
FirebaseDatabaseCustomEndpoint types.String `tfsdk:"firebase_database_custom_endpoint"`
80+
FirebaseExtensionsCustomEndpoint types.String `tfsdk:"firebase_extensions_custom_endpoint"`
8081
FirebaseHostingCustomEndpoint types.String `tfsdk:"firebase_hosting_custom_endpoint"`
8182
FirebaseStorageCustomEndpoint types.String `tfsdk:"firebase_storage_custom_endpoint"`
8283
FirestoreCustomEndpoint types.String `tfsdk:"firestore_custom_endpoint"`

google-beta/fwtransport/framework_config.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ type FrameworkProviderConfig struct {
101101
FilestoreBasePath string
102102
FirebaseBasePath string
103103
FirebaseDatabaseBasePath string
104+
FirebaseExtensionsBasePath string
104105
FirebaseHostingBasePath string
105106
FirebaseStorageBasePath string
106107
FirestoreBasePath string
@@ -248,6 +249,7 @@ func (p *FrameworkProviderConfig) LoadAndValidateFramework(ctx context.Context,
248249
p.FilestoreBasePath = data.FilestoreCustomEndpoint.ValueString()
249250
p.FirebaseBasePath = data.FirebaseCustomEndpoint.ValueString()
250251
p.FirebaseDatabaseBasePath = data.FirebaseDatabaseCustomEndpoint.ValueString()
252+
p.FirebaseExtensionsBasePath = data.FirebaseExtensionsCustomEndpoint.ValueString()
251253
p.FirebaseHostingBasePath = data.FirebaseHostingCustomEndpoint.ValueString()
252254
p.FirebaseStorageBasePath = data.FirebaseStorageCustomEndpoint.ValueString()
253255
p.FirestoreBasePath = data.FirestoreCustomEndpoint.ValueString()
@@ -845,6 +847,14 @@ func (p *FrameworkProviderConfig) HandleDefaults(ctx context.Context, data *fwmo
845847
data.FirebaseDatabaseCustomEndpoint = types.StringValue(customEndpoint.(string))
846848
}
847849
}
850+
if data.FirebaseExtensionsCustomEndpoint.IsNull() {
851+
customEndpoint := transport_tpg.MultiEnvDefault([]string{
852+
"GOOGLE_FIREBASE_EXTENSIONS_CUSTOM_ENDPOINT",
853+
}, transport_tpg.DefaultBasePaths[transport_tpg.FirebaseExtensionsBasePathKey])
854+
if customEndpoint != nil {
855+
data.FirebaseExtensionsCustomEndpoint = types.StringValue(customEndpoint.(string))
856+
}
857+
}
848858
if data.FirebaseHostingCustomEndpoint.IsNull() {
849859
customEndpoint := transport_tpg.MultiEnvDefault([]string{
850860
"GOOGLE_FIREBASE_HOSTING_CUSTOM_ENDPOINT",

google-beta/gcp_sweeper_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import (
6060
_ "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/filestore"
6161
_ "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebase"
6262
_ "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebasedatabase"
63+
_ "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebaseextensions"
6364
_ "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebasehosting"
6465
_ "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebasestorage"
6566
_ "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firestore"

google-beta/provider/provider.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import (
6565
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/filestore"
6666
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebase"
6767
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebasedatabase"
68+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebaseextensions"
6869
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebasehosting"
6970
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firebasestorage"
7071
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/firestore"
@@ -496,6 +497,11 @@ func Provider() *schema.Provider {
496497
Optional: true,
497498
ValidateFunc: transport_tpg.ValidateCustomEndpoint,
498499
},
500+
"firebase_extensions_custom_endpoint": {
501+
Type: schema.TypeString,
502+
Optional: true,
503+
ValidateFunc: transport_tpg.ValidateCustomEndpoint,
504+
},
499505
"firebase_hosting_custom_endpoint": {
500506
Type: schema.TypeString,
501507
Optional: true,
@@ -1048,9 +1054,9 @@ func DatasourceMapWithErrors() (map[string]*schema.Resource, error) {
10481054
})
10491055
}
10501056

1051-
// Generated resources: 353
1057+
// Generated resources: 354
10521058
// Generated IAM resources: 228
1053-
// Total generated resources: 581
1059+
// Total generated resources: 582
10541060
func ResourceMap() map[string]*schema.Resource {
10551061
resourceMap, _ := ResourceMapWithErrors()
10561062
return resourceMap
@@ -1402,6 +1408,7 @@ func ResourceMapWithErrors() (map[string]*schema.Resource, error) {
14021408
"google_firebase_project_location": firebase.ResourceFirebaseProjectLocation(),
14031409
"google_firebase_web_app": firebase.ResourceFirebaseWebApp(),
14041410
"google_firebase_database_instance": firebasedatabase.ResourceFirebaseDatabaseInstance(),
1411+
"google_firebase_extensions_instance": firebaseextensions.ResourceFirebaseExtensionsInstance(),
14051412
"google_firebase_hosting_channel": firebasehosting.ResourceFirebaseHostingChannel(),
14061413
"google_firebase_hosting_release": firebasehosting.ResourceFirebaseHostingRelease(),
14071414
"google_firebase_hosting_site": firebasehosting.ResourceFirebaseHostingSite(),
@@ -1938,6 +1945,7 @@ func providerConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr
19381945
config.FilestoreBasePath = d.Get("filestore_custom_endpoint").(string)
19391946
config.FirebaseBasePath = d.Get("firebase_custom_endpoint").(string)
19401947
config.FirebaseDatabaseBasePath = d.Get("firebase_database_custom_endpoint").(string)
1948+
config.FirebaseExtensionsBasePath = d.Get("firebase_extensions_custom_endpoint").(string)
19411949
config.FirebaseHostingBasePath = d.Get("firebase_hosting_custom_endpoint").(string)
19421950
config.FirebaseStorageBasePath = d.Get("firebase_storage_custom_endpoint").(string)
19431951
config.FirestoreBasePath = d.Get("firestore_custom_endpoint").(string)
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
// ----------------------------------------------------------------------------
5+
//
6+
// *** AUTO GENERATED CODE *** Type: MMv1 ***
7+
//
8+
// ----------------------------------------------------------------------------
9+
//
10+
// This file is automatically generated by Magic Modules and manual
11+
// changes will be clobbered when the file is regenerated.
12+
//
13+
// Please read more about how to change this file in
14+
// .github/CONTRIBUTING.md.
15+
//
16+
// ----------------------------------------------------------------------------
17+
18+
package google
19+
20+
import (
21+
"fmt"
22+
"strings"
23+
"testing"
24+
25+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
26+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
27+
28+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
29+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/envvar"
30+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
31+
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
32+
)
33+
34+
func TestAccFirebaseExtensionsInstance_firebaseExtentionsInstanceResizeImageExample(t *testing.T) {
35+
t.Parallel()
36+
37+
context := map[string]interface{}{
38+
"project_id": envvar.GetTestProjectFromEnv(),
39+
"location": "us-central1",
40+
"random_suffix": RandString(t, 10),
41+
}
42+
43+
VcrTest(t, resource.TestCase{
44+
PreCheck: func() { acctest.AccTestPreCheck(t) },
45+
ProtoV5ProviderFactories: ProtoV5ProviderBetaFactories(t),
46+
CheckDestroy: testAccCheckFirebaseExtensionsInstanceDestroyProducer(t),
47+
Steps: []resource.TestStep{
48+
{
49+
Config: testAccFirebaseExtensionsInstance_firebaseExtentionsInstanceResizeImageExample(context),
50+
},
51+
{
52+
ResourceName: "google_firebase_extensions_instance.resize_image",
53+
ImportState: true,
54+
ImportStateVerify: true,
55+
ImportStateVerifyIgnore: []string{"instance_id"},
56+
},
57+
},
58+
})
59+
}
60+
61+
func testAccFirebaseExtensionsInstance_firebaseExtentionsInstanceResizeImageExample(context map[string]interface{}) string {
62+
return tpgresource.Nprintf(`
63+
resource "google_storage_bucket" "images" {
64+
provider = google-beta
65+
project = "%{project_id}"
66+
name = "tf-test-bucket-id%{random_suffix}"
67+
location = "US"
68+
uniform_bucket_level_access = true
69+
70+
# Delete all objects when the bucket is deleted
71+
force_destroy = true
72+
}
73+
74+
resource "google_firebase_extensions_instance" "resize_image" {
75+
provider = google-beta
76+
project = "%{project_id}"
77+
instance_id = "tf-test-storage-resize-images%{random_suffix}"
78+
config {
79+
extension_ref = "firebase/storage-resize-images"
80+
extension_version = "0.1.37"
81+
82+
# The following params apply to the firebase/storage-resize-images extension.
83+
# Different extensions may have different params
84+
params = {
85+
DELETE_ORIGINAL_FILE = false
86+
MAKE_PUBLIC = false
87+
IMAGE_TYPE = false
88+
IS_ANIMATED = true
89+
FUNCTION_MEMORY = 1024
90+
DO_BACKFILL = false
91+
IMG_SIZES = "200x200"
92+
IMG_BUCKET = google_storage_bucket.images.name
93+
LOCATION = "%{location}"
94+
}
95+
96+
system_params = {
97+
"firebaseextensions.v1beta.function/maxInstances" = 3000
98+
"firebaseextensions.v1beta.function/memory" = 256
99+
"firebaseextensions.v1beta.function/minInstances" = 0
100+
"firebaseextensions.v1beta.function/vpcConnectorEgressSettings" = "VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"
101+
}
102+
103+
allowed_event_types = [
104+
"firebase.extensions.storage-resize-images.v1.complete"
105+
]
106+
107+
eventarc_channel = "projects/%{project_id}/locations/%{location}/channels/firebase"
108+
}
109+
}
110+
`, context)
111+
}
112+
113+
func testAccCheckFirebaseExtensionsInstanceDestroyProducer(t *testing.T) func(s *terraform.State) error {
114+
return func(s *terraform.State) error {
115+
for name, rs := range s.RootModule().Resources {
116+
if rs.Type != "google_firebase_extensions_instance" {
117+
continue
118+
}
119+
if strings.HasPrefix(name, "data.") {
120+
continue
121+
}
122+
123+
config := GoogleProviderConfig(t)
124+
125+
url, err := tpgresource.ReplaceVarsForTest(config, rs, "{{FirebaseExtensionsBasePath}}projects/{{project}}/instances/{{instance_id}}")
126+
if err != nil {
127+
return err
128+
}
129+
130+
billingProject := ""
131+
132+
if config.BillingProject != "" {
133+
billingProject = config.BillingProject
134+
}
135+
136+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
137+
Config: config,
138+
Method: "GET",
139+
Project: billingProject,
140+
RawURL: url,
141+
UserAgent: config.UserAgent,
142+
})
143+
if err == nil {
144+
return fmt.Errorf("FirebaseExtensionsInstance still exists at %s", url)
145+
}
146+
}
147+
148+
return nil
149+
}
150+
}

0 commit comments

Comments
 (0)