@@ -1718,6 +1718,49 @@ func TestAccSqlDatabaseInstance_basicClone(t *testing.T) {
17181718 })
17191719}
17201720
1721+ {{- if ne $ .TargetVersionName " ga" }}
1722+ func TestAccSqlDatabaseInstance_crossProjectClone(t *testing.T ) {
1723+ t.Parallel ()
1724+
1725+ context := map[string]interface{}{
1726+ " random_suffix" : acctest.RandString (t, 10),
1727+ " orgId" : envvar.GetTestOrgFromEnv (t),
1728+ " billingAccount" : envvar.GetTestBillingAccountFromEnv (t),
1729+ " cloneSourceProject" : envvar.GetTestProjectFromEnv (),
1730+ }
1731+
1732+ acctest.VcrTest (t, resource.TestCase {
1733+ PreCheck: func() { acctest.AccTestPreCheck (t) },
1734+ ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories (t),
1735+ ExternalProviders: map[string]resource.ExternalProvider {
1736+ " time" : {},
1737+ },
1738+ Steps: []resource.TestStep {
1739+ {
1740+ Config: testAccSqlDatabaseInstance_crossProjectClone(context),
1741+ },
1742+ {
1743+ ResourceName: " google_sql_database_instance.instance" ,
1744+ ImportState: true,
1745+ ImportStateVerify: true,
1746+ ImportStateIdFunc: testAccSqlDatabaseInstanceImportStateIdFunc(" google_sql_database_instance.instance" ),
1747+ ImportStateVerifyIgnore: []string{" deletion_protection" , " clone" },
1748+ },
1749+ },
1750+ })
1751+ }
1752+ {{- end }}
1753+
1754+ func testAccSqlDatabaseInstanceImportStateIdFunc(resourceName string) resource.ImportStateIdFunc {
1755+ return func(s *terraform.State ) (string, error) {
1756+ rs, ok := s.RootModule ().Resources [resourceName]
1757+ if !ok {
1758+ return " " , fmt.Errorf (" Not found: %s " , resourceName)
1759+ }
1760+ return fmt.Sprintf (" %s /%s " , rs.Primary.Attributes [" project" ], rs.Primary.Attributes [" name" ]), nil
1761+ }
1762+ }
1763+
17211764func TestAccSqlDatabaseInstance_cloneWithSettings(t *testing.T ) {
17221765 // Sqladmin client
17231766 acctest.SkipIfVcr (t)
@@ -8252,6 +8295,118 @@ data "google_sql_backup_run" "backup" {
82528295` , context)
82538296}
82548297
8298+ func testAccSqlDatabaseInstance_crossProjectClone(context map[string]interface{}) string {
8299+ return acctest.Nprintf (`
8300+ resource "google_project" "project" {
8301+ provider = google-beta
8302+ name = "tf-test-cpc-%{random_suffix}"
8303+ project_id = "tf-test-cpc-%{random_suffix}"
8304+ org_id = "%{orgId}"
8305+ billing_account = "%{billingAccount}"
8306+ deletion_policy = "DELETE"
8307+ }
8308+
8309+ resource "time_sleep" "wait_60_seconds" {
8310+ create_duration = "60s"
8311+ depends_on = [google_project.project]
8312+ }
8313+
8314+ resource "google_project_service" "apigee" {
8315+ provider = google-beta
8316+ project = google_project.project.project_id
8317+ service = "apigee.googleapis.com"
8318+ depends_on = [time_sleep.wait_60_seconds]
8319+ }
8320+
8321+ resource "google_project_service" "compute" {
8322+ provider = google-beta
8323+ project = google_project.project.project_id
8324+ service = "compute.googleapis.com"
8325+ depends_on = [google_project_service.apigee]
8326+ }
8327+
8328+ resource "google_project_service" "servicenetworking" {
8329+ provider = google-beta
8330+ project = google_project.project.project_id
8331+ service = "servicenetworking.googleapis.com"
8332+ depends_on = [google_project_service.compute]
8333+ }
8334+
8335+ resource "time_sleep" "wait_300_seconds" {
8336+ create_duration = "300s"
8337+ depends_on = [google_project_service.servicenetworking]
8338+ }
8339+
8340+ resource "google_compute_network" "apigee_network" {
8341+ provider = google-beta
8342+ name = "apigee-network"
8343+ project = google_project.project.project_id
8344+ depends_on = [time_sleep.wait_300_seconds]
8345+ }
8346+
8347+ resource "google_compute_global_address" "apigee_range" {
8348+ provider = google-beta
8349+ name = "apigee-range"
8350+ purpose = "VPC_PEERING"
8351+ address_type = "INTERNAL"
8352+ prefix_length = 16
8353+ network = google_compute_network.apigee_network.id
8354+ project = google_project.project.project_id
8355+ }
8356+
8357+ resource "google_service_networking_connection" "apigee_vpc_connection" {
8358+ provider = google-beta
8359+ network = google_compute_network.apigee_network.id
8360+ service = "servicenetworking.googleapis.com"
8361+ reserved_peering_ranges = [google_compute_global_address.apigee_range.name]
8362+ depends_on = [google_project_service.servicenetworking]
8363+ }
8364+
8365+ resource "google_sql_database_instance" "instance" {
8366+ provider = google-beta
8367+ name = "tf-test-cpc-%{random_suffix}"
8368+ database_version = "POSTGRES_11"
8369+ region = "us-central1"
8370+ project = google_project.destination_project.project_id
8371+
8372+ settings {
8373+ tier = "db-custom-2-3840"
8374+ edition = "ENTERPRISE"
8375+ ip_configuration {
8376+ private_network = google_compute_network.apigee_network.self_link
8377+ }
8378+ backup_configuration {
8379+ enabled = true
8380+ point_in_time_recovery_enabled = true
8381+ }
8382+ }
8383+
8384+ clone {
8385+ source_project = "%{cloneSourceProject}"
8386+ source_instance_name = google_sql_database_instance.source_instance.name
8387+ }
8388+
8389+ deletion_protection = false
8390+
8391+ // Ignore changes, since the most recent backup may change during the test
8392+ lifecycle{
8393+ ignore_changes = [clone[0].point_in_time]
8394+ }
8395+ }
8396+
8397+ resource "google_sql_database_instance" "source_instance" {
8398+ provider = google-beta
8399+ name = "tf-test-cpc-%{random_suffix}"
8400+ database_version = "POSTGRES_11"
8401+ region = "us-central1"
8402+ deletion_protection = false
8403+ settings {
8404+ tier = "db-g1-small"
8405+ }
8406+ }
8407+ ` , context)
8408+ }
8409+
82558410func testAccSqlDatabaseInstance_cloneWithSettings(context map[string]interface{}) string {
82568411 return acctest.Nprintf (`
82578412resource "google_sql_database_instance" "instance" {
0 commit comments