@@ -459,6 +459,199 @@ resource "google_apigee_instance" "apigee_instance" {
459459` , context )
460460}
461461
462+ func TestAccApigeeInstance_apigeeInstanceServiceAttachmentBasicTestExample (t * testing.T ) {
463+ skipIfVcr (t )
464+ t .Parallel ()
465+
466+ context := map [string ]interface {}{
467+ "org_id" : getTestOrgFromEnv (t ),
468+ "billing_account" : getTestBillingAccountFromEnv (t ),
469+ "random_suffix" : randString (t , 10 ),
470+ }
471+
472+ vcrTest (t , resource.TestCase {
473+ PreCheck : func () { testAccPreCheck (t ) },
474+ Providers : testAccProviders ,
475+ CheckDestroy : testAccCheckApigeeInstanceDestroyProducer (t ),
476+ Steps : []resource.TestStep {
477+ {
478+ Config : testAccApigeeInstance_apigeeInstanceServiceAttachmentBasicTestExample (context ),
479+ },
480+ {
481+ ResourceName : "google_apigee_instance.apigee_instance" ,
482+ ImportState : true ,
483+ ImportStateVerify : true ,
484+ ImportStateVerifyIgnore : []string {"ip_range" , "org_id" },
485+ },
486+ },
487+ })
488+ }
489+
490+ func testAccApigeeInstance_apigeeInstanceServiceAttachmentBasicTestExample (context map [string ]interface {}) string {
491+ return Nprintf (`
492+ resource "google_project" "project" {
493+ project_id = "tf-test%{random_suffix}"
494+ name = "tf-test%{random_suffix}"
495+ org_id = "%{org_id}"
496+ billing_account = "%{billing_account}"
497+ }
498+
499+ resource "google_project_service" "apigee" {
500+ project = google_project.project.project_id
501+ service = "apigee.googleapis.com"
502+ }
503+
504+ resource "google_project_service" "compute" {
505+ project = google_project.project.project_id
506+ service = "compute.googleapis.com"
507+ }
508+
509+ resource "google_project_service" "servicenetworking" {
510+ project = google_project.project.project_id
511+ service = "servicenetworking.googleapis.com"
512+ }
513+
514+ resource "google_compute_network" "apigee_network" {
515+ name = "apigee-network"
516+ project = google_project.project.project_id
517+ depends_on = [google_project_service.compute]
518+ }
519+
520+ resource "google_compute_global_address" "apigee_range" {
521+ name = "apigee-range"
522+ purpose = "VPC_PEERING"
523+ address_type = "INTERNAL"
524+ prefix_length = 16
525+ network = google_compute_network.apigee_network.id
526+ project = google_project.project.project_id
527+ }
528+
529+ resource "google_service_networking_connection" "apigee_vpc_connection" {
530+ network = google_compute_network.apigee_network.id
531+ service = "servicenetworking.googleapis.com"
532+ reserved_peering_ranges = [google_compute_global_address.apigee_range.name]
533+ depends_on = [google_project_service.servicenetworking]
534+ }
535+
536+ resource "google_compute_address" "psc_ilb_consumer_address" {
537+ name = "psc-ilb-consumer-address"
538+ region = "us-west2"
539+
540+ subnetwork = "default"
541+ address_type = "INTERNAL"
542+
543+ project = google_project.project.project_id
544+ depends_on = [google_project_service.compute]
545+ }
546+
547+ resource "google_compute_forwarding_rule" "psc_ilb_consumer" {
548+ name = "psc-ilb-consumer-forwarding-rule"
549+ region = "us-west2"
550+
551+ target = google_compute_service_attachment.psc_ilb_service_attachment.id
552+ load_balancing_scheme = "" # need to override EXTERNAL default when target is a service attachment
553+ network = "default"
554+ ip_address = google_compute_address.psc_ilb_consumer_address.id
555+
556+ project = google_project.project.project_id
557+ }
558+
559+ resource "google_compute_forwarding_rule" "psc_ilb_target_service" {
560+ name = "producer-forwarding-rule"
561+ region = "us-west2"
562+
563+ load_balancing_scheme = "INTERNAL"
564+ backend_service = google_compute_region_backend_service.producer_service_backend.id
565+ all_ports = true
566+ network = google_compute_network.psc_ilb_network.name
567+ subnetwork = google_compute_subnetwork.psc_ilb_producer_subnetwork.name
568+
569+ project = google_project.project.project_id
570+ }
571+
572+ resource "google_compute_region_backend_service" "producer_service_backend" {
573+ name = "producer-service"
574+ region = "us-west2"
575+
576+ health_checks = [google_compute_health_check.producer_service_health_check.id]
577+
578+ project = google_project.project.project_id
579+ }
580+
581+ resource "google_compute_health_check" "producer_service_health_check" {
582+ name = "producer-service-health-check"
583+
584+ check_interval_sec = 1
585+ timeout_sec = 1
586+ tcp_health_check {
587+ port = "80"
588+ }
589+
590+ project = google_project.project.project_id
591+ depends_on = [google_project_service.compute]
592+ }
593+
594+ resource "google_compute_network" "psc_ilb_network" {
595+ name = "psc-ilb-network"
596+ auto_create_subnetworks = false
597+
598+ project = google_project.project.project_id
599+ depends_on = [google_project_service.compute]
600+ }
601+
602+ resource "google_compute_subnetwork" "psc_ilb_producer_subnetwork" {
603+ name = "psc-ilb-producer-subnetwork"
604+ region = "us-west2"
605+
606+ network = google_compute_network.psc_ilb_network.id
607+ ip_cidr_range = "10.0.0.0/16"
608+
609+ project = google_project.project.project_id
610+ }
611+
612+ resource "google_compute_subnetwork" "psc_ilb_nat" {
613+ name = "psc-ilb-nat"
614+ region = "us-west2"
615+
616+ network = google_compute_network.psc_ilb_network.id
617+ purpose = "PRIVATE_SERVICE_CONNECT"
618+ ip_cidr_range = "10.1.0.0/16"
619+
620+ project = google_project.project.project_id
621+ }
622+
623+ resource "google_compute_service_attachment" "psc_ilb_service_attachment" {
624+ name = "my-psc-ilb"
625+ region = "us-west2"
626+ description = "A service attachment configured with Terraform"
627+
628+ enable_proxy_protocol = true
629+ connection_preference = "ACCEPT_AUTOMATIC"
630+ nat_subnets = [google_compute_subnetwork.psc_ilb_nat.id]
631+ target_service = google_compute_forwarding_rule.psc_ilb_target_service.id
632+
633+ project = google_project.project.project_id
634+ }
635+
636+ resource "google_apigee_organization" "apigee_org" {
637+ analytics_region = "us-central1"
638+ project_id = google_project.project.project_id
639+ authorized_network = google_compute_network.apigee_network.id
640+ depends_on = [
641+ google_service_networking_connection.apigee_vpc_connection,
642+ google_project_service.apigee,
643+ ]
644+ }
645+
646+ resource "google_apigee_instance" "apigee_instance" {
647+ name = "tf-test%{random_suffix}"
648+ location = "us-central1"
649+ org_id = google_apigee_organization.apigee_org.id
650+ consumer_accept_list = [123456, google_project.project.number]
651+ }
652+ ` , context )
653+ }
654+
462655func testAccCheckApigeeInstanceDestroyProducer (t * testing.T ) func (s * terraform.State ) error {
463656 return func (s * terraform.State ) error {
464657 for name , rs := range s .RootModule ().Resources {
0 commit comments