Skip to content

Commit f50db22

Browse files
Adding Memcache Instance datasource (#13591) (#22477)
[upstream:f4add305e0ed9c6fedb2f3b3dce9d284ec8461fa] Signed-off-by: Modular Magician <[email protected]>
1 parent c2dea66 commit f50db22

File tree

5 files changed

+173
-0
lines changed

5 files changed

+173
-0
lines changed

.changelog/13591.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-datasource
2+
`google_memcache_instance`
3+
```

google/provider/provider_mmv1_resources.go

+1
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ var handwrittenDatasources = map[string]*schema.Resource{
378378
"google_tpu_tensorflow_versions": tpu.DataSourceTpuTensorflowVersions(),
379379
"google_vpc_access_connector": vpcaccess.DataSourceVPCAccessConnector(),
380380
"google_memorystore_instance": memorystore.DataSourceMemorystoreInstance(),
381+
"google_memcache_instance": memcache.DataSourceMemcacheInstance(),
381382
"google_redis_instance": redis.DataSourceGoogleRedisInstance(),
382383
"google_vertex_ai_index": vertexai.DataSourceVertexAIIndex(),
383384
"google_vmwareengine_cluster": vmwareengine.DataSourceVmwareengineCluster(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
// Copyright (c) HashiCorp, Inc.
4+
// SPDX-License-Identifier: MPL-2.0
5+
package memcache
6+
7+
import (
8+
"fmt"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
12+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
13+
)
14+
15+
func DataSourceMemcacheInstance() *schema.Resource {
16+
// Generate datasource schema from resource
17+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceMemcacheInstance().Schema)
18+
19+
// Set 'Required' schema elements
20+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "name")
21+
// Set 'Optional' schema elements
22+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project", "region")
23+
24+
return &schema.Resource{
25+
Read: dataSourceMemcacheInstanceRead,
26+
Schema: dsSchema,
27+
}
28+
}
29+
30+
func dataSourceMemcacheInstanceRead(d *schema.ResourceData, meta interface{}) error {
31+
config := meta.(*transport_tpg.Config)
32+
33+
region, err := tpgresource.GetRegion(d, config)
34+
if err != nil {
35+
return err
36+
}
37+
38+
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/locations/{{region}}/instances/{{name}}")
39+
if err != nil {
40+
return fmt.Errorf("Error constructing id: %s", err)
41+
}
42+
d.SetId(id)
43+
44+
// Setting location field, as this is set as a required field in instance resource to build the url
45+
d.Set("region", region)
46+
47+
err = resourceMemcacheInstanceRead(d, meta)
48+
if err != nil {
49+
return err
50+
}
51+
52+
if err := tpgresource.SetDataSourceLabels(d); err != nil {
53+
return err
54+
}
55+
56+
if d.Id() == "" {
57+
return fmt.Errorf("%s not found", id)
58+
}
59+
return nil
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package memcache_test
4+
5+
import (
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/hashicorp/terraform-provider-google/google/acctest"
10+
)
11+
12+
func TestAccMemcacheInstanceDatasourceConfig(t *testing.T) {
13+
t.Parallel()
14+
15+
context := map[string]interface{}{
16+
"random_suffix": acctest.RandString(t, 10),
17+
}
18+
19+
acctest.VcrTest(t, resource.TestCase{
20+
PreCheck: func() { acctest.AccTestPreCheck(t) },
21+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
22+
CheckDestroy: testAccCheckMemcacheInstanceDestroyProducer(t),
23+
Steps: []resource.TestStep{
24+
{
25+
Config: testAccMemcacheInstanceDatasourceConfig(context),
26+
Check: acctest.CheckDataSourceStateMatchesResourceState(
27+
"data.google_memcache_instance.default",
28+
"google_memcache_instance.instance",
29+
),
30+
},
31+
},
32+
})
33+
}
34+
35+
func testAccMemcacheInstanceDatasourceConfig(context map[string]interface{}) string {
36+
return acctest.Nprintf(`
37+
resource "google_compute_network" "memcache_network" {
38+
name = "test-network"
39+
}
40+
41+
resource "google_compute_global_address" "service_range" {
42+
name = "address"
43+
purpose = "VPC_PEERING"
44+
address_type = "INTERNAL"
45+
prefix_length = 16
46+
network = google_compute_network.memcache_network.id
47+
}
48+
49+
resource "google_service_networking_connection" "private_service_connection" {
50+
network = google_compute_network.memcache_network.id
51+
service = "servicenetworking.googleapis.com"
52+
reserved_peering_ranges = [google_compute_global_address.service_range.name]
53+
}
54+
55+
resource "google_memcache_instance" "instance" {
56+
name = "test-instance"
57+
authorized_network = google_service_networking_connection.private_service_connection.network
58+
region = "us-central1"
59+
node_config {
60+
cpu_count = 1
61+
memory_size_mb = 1024
62+
}
63+
node_count = 1
64+
}
65+
data "google_memcache_instance" "default" {
66+
name = google_memcache_instance.instance.name
67+
region = "us-central1"
68+
}
69+
`, context)
70+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
subcategory: "Memcache"
3+
description: |-
4+
Fetches the details of available instance.
5+
---
6+
7+
# google_memcache_instance
8+
9+
Use this data source to get information about the available instance. For more details refer the [API docs](https://cloud.google.com/memorystore/docs/memcached/reference/rest/v1/projects.locations.instances).
10+
11+
## Example Usage
12+
13+
14+
```hcl
15+
data "google_memcache_instance" "qa" {
16+
}
17+
```
18+
19+
## Argument Reference
20+
21+
The following arguments are supported:
22+
23+
24+
* `name` -
25+
(Required)
26+
The ID of the memcache instance.
27+
'memcache_instance_id'
28+
29+
* `project` -
30+
(optional)
31+
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
32+
33+
* `region` -
34+
(optional)
35+
The canonical id of the region. If it is not provided, the provider project is used. For example: us-east1.
36+
37+
## Attributes Reference
38+
39+
See [google_memcache_instance](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/memcache_instance) resource for details of all the available attributes.

0 commit comments

Comments
 (0)