Skip to content

Commit f3671b8

Browse files
Fix for desired_auto_created_endpoints incorrect update (#14777) (#24212)
[upstream:e0ff702260d00103d005d230263de7a3e6e5fa21] Signed-off-by: Modular Magician <[email protected]>
1 parent 3f88298 commit f3671b8

File tree

4 files changed

+260
-6
lines changed

4 files changed

+260
-6
lines changed

.changelog/14777.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
memorystore: `desired_auto_created_endpoints` field incorrectly updated when desired_psc_auto_connections should have been
3+
```

google/services/memorystore/resource_memorystore_instance.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -908,9 +908,9 @@ DELETING`,
908908
"desired_psc_auto_connections": {
909909
Type: schema.TypeList,
910910
Optional: true,
911-
Deprecated: "`desired_psc_auto_connections` is deprecated Use `desired_auto_created_endpoints` instead.",
911+
Deprecated: "`desired_psc_auto_connections` is deprecated. Use `desired_auto_created_endpoints` instead. `terraform import` will only work with desired_auto_created_endpoints`.",
912912
ForceNew: true,
913-
Description: `'desired_psc_auto_connections' is deprecated Use 'desired_auto_created_endpoints' instead.`,
913+
Description: `'desired_psc_auto_connections' is deprecated Use 'desired_auto_created_endpoints' instead 'terraform import' will only work with desired_auto_created_endpoints'.`,
914914
Elem: &schema.Resource{
915915
Schema: map[string]*schema.Schema{
916916
"network": {
@@ -3371,10 +3371,28 @@ func resourceMemorystoreInstanceDecoder(d *schema.ResourceData, meta interface{}
33713371
}
33723372
}
33733373
}
3374+
// We want to make these fields detect API-side drift, so if the API returns a value for them and they're set in config, we set them in state.
3375+
// On import, we only set `desired_auto_created_endpoints` because that's the non-deprecated field.
33743376
if len(transformed) > 0 {
3375-
d.Set("desired_auto_created_endpoints", transformed)
3376-
log.Printf("[DEBUG] Setting desired_auto_created_endpoints in decoder for %#v", transformed)
3377-
3377+
_, okEndpoint := d.GetOk("desired_auto_created_endpoints")
3378+
_, okPsc := d.GetOk("desired_psc_auto_connections")
3379+
if okEndpoint {
3380+
d.Set("desired_auto_created_endpoints", transformed)
3381+
log.Printf("[DEBUG] Setting desired_auto_created_endpoints in decoder within endpoints for %#v", transformed)
3382+
} else if okPsc {
3383+
d.Set("desired_auto_created_endpoints", []interface{}{})
3384+
}
3385+
if okPsc {
3386+
d.Set("desired_psc_auto_connections", transformed)
3387+
log.Printf("[DEBUG] Setting desired_psc_auto_connections in decoder within endpoints for %#v", transformed)
3388+
} else if okEndpoint {
3389+
d.Set("desired_psc_auto_connections", []interface{}{})
3390+
}
3391+
// Set preferred field on import
3392+
if !okPsc && !okEndpoint {
3393+
d.Set("desired_auto_created_endpoints", transformed)
3394+
log.Printf("[DEBUG] Setting desired_auto_created_endpoints in decoder within endpoints for %#v", transformed)
3395+
}
33783396
}
33793397
}
33803398

google/services/memorystore/resource_memorystore_instance_test.go

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,3 +1553,236 @@ data "google_project" "project" {
15531553
}
15541554
`, context)
15551555
}
1556+
1557+
func TestAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabled(t *testing.T) {
1558+
t.Parallel()
1559+
1560+
context := map[string]interface{}{
1561+
"random_suffix": acctest.RandString(t, 10),
1562+
"location": "us-central1",
1563+
}
1564+
1565+
acctest.VcrTest(t, resource.TestCase{
1566+
PreCheck: func() { acctest.AccTestPreCheck(t) },
1567+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
1568+
CheckDestroy: testAccCheckMemorystoreInstanceDestroyProducer(t),
1569+
Steps: []resource.TestStep{
1570+
{
1571+
Config: testAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabled_bothConnections(context),
1572+
},
1573+
{
1574+
ResourceName: "google_memorystore_instance.instance-cluster-disabled",
1575+
ImportState: true,
1576+
ImportStateVerify: true,
1577+
ImportStateVerifyIgnore: []string{"desired_auto_created_endpoints.#", "desired_auto_created_endpoints.0.%", "desired_auto_created_endpoints.0.project_id", "desired_auto_created_endpoints.0.network", "desired_psc_auto_connections.#", "desired_psc_auto_connections.0.%", "desired_psc_auto_connections.0.network", "desired_psc_auto_connections.0.project_id"},
1578+
},
1579+
{
1580+
Config: testAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabledPscAutoConnections(context),
1581+
},
1582+
{
1583+
ResourceName: "google_memorystore_instance.instance-cluster-disabled",
1584+
ImportState: true,
1585+
ImportStateVerify: true,
1586+
ImportStateVerifyIgnore: []string{"desired_auto_created_endpoints.#", "desired_auto_created_endpoints.0.%", "desired_auto_created_endpoints.0.project_id", "desired_auto_created_endpoints.0.network", "desired_psc_auto_connections.#", "desired_psc_auto_connections.0.%", "desired_psc_auto_connections.0.network", "desired_psc_auto_connections.0.project_id"},
1587+
},
1588+
{
1589+
Config: testAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabled_onlyAutoCreatedEndpoints(context),
1590+
},
1591+
{
1592+
ResourceName: "google_memorystore_instance.instance-cluster-disabled",
1593+
ImportState: true,
1594+
ImportStateVerify: true,
1595+
ImportStateVerifyIgnore: []string{"desired_auto_created_endpoints.#", "desired_auto_created_endpoints.0.%", "desired_auto_created_endpoints.0.project_id", "desired_auto_created_endpoints.0.network", "desired_psc_auto_connections.#", "desired_psc_auto_connections.0.%", "desired_psc_auto_connections.0.network", "desired_psc_auto_connections.0.project_id"},
1596+
},
1597+
{
1598+
Config: testAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabled_neitherConnection(context),
1599+
},
1600+
{
1601+
ResourceName: "google_memorystore_instance.instance-cluster-disabled",
1602+
ImportState: true,
1603+
ImportStateVerify: true,
1604+
ImportStateVerifyIgnore: []string{"desired_auto_created_endpoints.#", "desired_auto_created_endpoints.0.%", "desired_auto_created_endpoints.0.project_id", "desired_auto_created_endpoints.0.network", "desired_psc_auto_connections.#", "desired_psc_auto_connections.0.%", "desired_psc_auto_connections.0.network", "desired_psc_auto_connections.0.project_id"},
1605+
},
1606+
},
1607+
})
1608+
}
1609+
1610+
func testAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabledPscAutoConnections(context map[string]interface{}) string {
1611+
return acctest.Nprintf(`
1612+
resource "google_memorystore_instance" "instance-cluster-disabled" {
1613+
instance_id = "tf-test-instance-psc%{random_suffix}"
1614+
shard_count = 1
1615+
desired_psc_auto_connections {
1616+
network = google_compute_network.producer_net.id
1617+
project_id = data.google_project.project.project_id
1618+
}
1619+
location = "%{location}"
1620+
deletion_protection_enabled = false
1621+
mode = "CLUSTER_DISABLED"
1622+
depends_on = [
1623+
google_network_connectivity_service_connection_policy.default
1624+
]
1625+
}
1626+
1627+
resource "google_network_connectivity_service_connection_policy" "default" {
1628+
name = "tf-test-my-policy%{random_suffix}"
1629+
location = "%{location}"
1630+
service_class = "gcp-memorystore"
1631+
description = "my basic service connection policy"
1632+
network = google_compute_network.producer_net.id
1633+
psc_config {
1634+
subnetworks = [google_compute_subnetwork.producer_subnet.id]
1635+
}
1636+
}
1637+
1638+
resource "google_compute_subnetwork" "producer_subnet" {
1639+
name = "tf-test-my-subnet%{random_suffix}"
1640+
ip_cidr_range = "10.0.0.248/29"
1641+
region = "%{location}"
1642+
network = google_compute_network.producer_net.id
1643+
}
1644+
1645+
resource "google_compute_network" "producer_net" {
1646+
name = "tf-test-my-network%{random_suffix}"
1647+
auto_create_subnetworks = false
1648+
}
1649+
1650+
data "google_project" "project" {
1651+
}
1652+
`, context)
1653+
}
1654+
1655+
func testAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabled_bothConnections(context map[string]interface{}) string {
1656+
return acctest.Nprintf(`
1657+
resource "google_memorystore_instance" "instance-cluster-disabled" {
1658+
instance_id = "tf-test-instance-psc%{random_suffix}"
1659+
shard_count = 1
1660+
desired_psc_auto_connections {
1661+
network = google_compute_network.producer_net.id
1662+
project_id = data.google_project.project.project_id
1663+
}
1664+
desired_auto_created_endpoints {
1665+
network = google_compute_network.producer_net.id
1666+
project_id = data.google_project.project.project_id
1667+
}
1668+
location = "%{location}"
1669+
deletion_protection_enabled = false
1670+
mode = "CLUSTER_DISABLED"
1671+
depends_on = [
1672+
google_network_connectivity_service_connection_policy.default
1673+
]
1674+
}
1675+
1676+
resource "google_network_connectivity_service_connection_policy" "default" {
1677+
name = "tf-test-my-policy%{random_suffix}"
1678+
location = "%{location}"
1679+
service_class = "gcp-memorystore"
1680+
description = "my basic service connection policy"
1681+
network = google_compute_network.producer_net.id
1682+
psc_config {
1683+
subnetworks = [google_compute_subnetwork.producer_subnet.id]
1684+
}
1685+
}
1686+
1687+
resource "google_compute_subnetwork" "producer_subnet" {
1688+
name = "tf-test-my-subnet%{random_suffix}"
1689+
ip_cidr_range = "10.0.0.248/29"
1690+
region = "%{location}"
1691+
network = google_compute_network.producer_net.id
1692+
}
1693+
1694+
resource "google_compute_network" "producer_net" {
1695+
name = "tf-test-my-network%{random_suffix}"
1696+
auto_create_subnetworks = false
1697+
}
1698+
1699+
data "google_project" "project" {
1700+
}
1701+
`, context)
1702+
}
1703+
1704+
func testAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabled_onlyAutoCreatedEndpoints(context map[string]interface{}) string {
1705+
return acctest.Nprintf(`
1706+
resource "google_memorystore_instance" "instance-cluster-disabled" {
1707+
instance_id = "tf-test-instance-psc%{random_suffix}"
1708+
shard_count = 1
1709+
desired_auto_created_endpoints {
1710+
network = google_compute_network.producer_net.id
1711+
project_id = data.google_project.project.project_id
1712+
}
1713+
location = "%{location}"
1714+
deletion_protection_enabled = false
1715+
mode = "CLUSTER_DISABLED"
1716+
depends_on = [
1717+
google_network_connectivity_service_connection_policy.default
1718+
]
1719+
}
1720+
1721+
resource "google_network_connectivity_service_connection_policy" "default" {
1722+
name = "tf-test-my-policy%{random_suffix}"
1723+
location = "%{location}"
1724+
service_class = "gcp-memorystore"
1725+
description = "my basic service connection policy"
1726+
network = google_compute_network.producer_net.id
1727+
psc_config {
1728+
subnetworks = [google_compute_subnetwork.producer_subnet.id]
1729+
}
1730+
}
1731+
1732+
resource "google_compute_subnetwork" "producer_subnet" {
1733+
name = "tf-test-my-subnet%{random_suffix}"
1734+
ip_cidr_range = "10.0.0.248/29"
1735+
region = "%{location}"
1736+
network = google_compute_network.producer_net.id
1737+
}
1738+
1739+
resource "google_compute_network" "producer_net" {
1740+
name = "tf-test-my-network%{random_suffix}"
1741+
auto_create_subnetworks = false
1742+
}
1743+
1744+
data "google_project" "project" {
1745+
}
1746+
`, context)
1747+
}
1748+
1749+
func testAccMemorystoreInstance_memorystorePscAutoInstanceClusterDisabled_neitherConnection(context map[string]interface{}) string {
1750+
return acctest.Nprintf(`
1751+
resource "google_memorystore_instance" "instance-cluster-disabled" {
1752+
instance_id = "tf-test-instance-psc%{random_suffix}"
1753+
shard_count = 1
1754+
location = "%{location}"
1755+
deletion_protection_enabled = false
1756+
mode = "CLUSTER_DISABLED"
1757+
depends_on = [
1758+
google_network_connectivity_service_connection_policy.default
1759+
]
1760+
}
1761+
1762+
resource "google_network_connectivity_service_connection_policy" "default" {
1763+
name = "tf-test-my-policy%{random_suffix}"
1764+
location = "%{location}"
1765+
service_class = "gcp-memorystore"
1766+
description = "my basic service connection policy"
1767+
network = google_compute_network.producer_net.id
1768+
psc_config {
1769+
subnetworks = [google_compute_subnetwork.producer_subnet.id]
1770+
}
1771+
}
1772+
1773+
resource "google_compute_subnetwork" "producer_subnet" {
1774+
name = "tf-test-my-subnet%{random_suffix}"
1775+
ip_cidr_range = "10.0.0.248/29"
1776+
region = "%{location}"
1777+
network = google_compute_network.producer_net.id
1778+
}
1779+
1780+
resource "google_compute_network" "producer_net" {
1781+
name = "tf-test-my-network%{random_suffix}"
1782+
auto_create_subnetworks = false
1783+
}
1784+
1785+
data "google_project" "project" {
1786+
}
1787+
`, context)
1788+
}

website/docs/r/memorystore_instance.html.markdown

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ The following arguments are supported:
501501
* `project` - (Optional) The ID of the project in which the resource belongs.
502502
If it is not provided, the provider project is used.
503503

504-
* `desired_psc_auto_connections` - (Optional) `desired_psc_auto_connections` is deprecated Use `desired_auto_created_endpoints` instead.
504+
* `desired_psc_auto_connections` - (Optional) `desired_psc_auto_connections` is deprecated Use `desired_auto_created_endpoints` instead `terraform import` will only work with desired_auto_created_endpoints`.
505505
* `desired_auto_created_endpoints` - (Optional) Immutable. User inputs for the auto-created endpoints connections.
506506

507507

0 commit comments

Comments
 (0)