@@ -416,3 +416,200 @@ func testAccCheckIBMIsInstanceNetworkAttachmentDestroy(s *terraform.State) error
416416
417417 return nil
418418}
419+
420+ // TestAccIBMIsInstanceNetworkAttachmentVniResourceGroupChange tests attachment with external VNI's resource group change
421+ func TestAccIBMIsInstanceNetworkAttachmentVniResourceGroupChange (t * testing.T ) {
422+ var conf vpcv1.InstanceNetworkAttachment
423+ vpcname := fmt .Sprintf ("tf-vpc-%d" , acctest .RandIntRange (10 , 100 ))
424+ name := fmt .Sprintf ("tf-vsi-%d" , acctest .RandIntRange (10 , 100 ))
425+ vniname := fmt .Sprintf ("tf-vni-%d" , acctest .RandIntRange (10 , 100 ))
426+ subnetname := fmt .Sprintf ("tvni-subnet-%d" , acctest .RandIntRange (10 , 100 ))
427+ naname := fmt .Sprintf ("tvni-na-%d" , acctest .RandIntRange (10 , 100 ))
428+ publicKey := strings .TrimSpace (`
429+ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCKVmnMOlHKcZK8tpt3MP1lqOLAcqcJzhsvJcjscgVERRN7/9484SOBJ3HSKxxNG5JN8owAjy5f9yYwcUg+JaUVuytn5Pv3aeYROHGGg+5G346xaq3DAwX6Y5ykr2fvjObgncQBnuU5KHWCECO/4h8uWuwh/kfniXPVjFToc+gnkqA+3RKpAecZhFXwfalQ9mMuYGFxn+fwn8cYEApsJbsEmb0iJwPiZ5hjFC8wREuiTlhPHDgkBLOiycd20op2nXzDbHfCHInquEe/gYxEitALONxm0swBOwJZwlTDOB7C6y2dzlrtxr1L59m7pCkWI4EtTRLvleehBoj3u7jB4usR
430+ ` )
431+ sshname := fmt .Sprintf ("tf-sshname-%d" , acctest .RandIntRange (10 , 100 ))
432+ rg1 := acc .IsResourceGroupID
433+ rg2 := acc .IsResourceGroupIDUpdate
434+
435+ resource .Test (t , resource.TestCase {
436+ PreCheck : func () { acc .TestAccPreCheck (t ) },
437+ Providers : acc .TestAccProviders ,
438+ CheckDestroy : testAccCheckIBMIsInstanceNetworkAttachmentDestroy ,
439+ Steps : []resource.TestStep {
440+ // Initial setup with resource group 1
441+ {
442+ Config : testAccCheckIBMIsInstanceNetworkAttachmentVniResourceGroup (vpcname , subnetname , sshname , publicKey , vniname , name , naname , rg1 ),
443+ Check : resource .ComposeAggregateTestCheckFunc (
444+ testAccCheckIBMIsInstanceNetworkAttachmentExists ("ibm_is_instance_network_attachment.is_instance_network_attachment" , conf ),
445+ resource .TestCheckResourceAttr ("ibm_is_instance_network_attachment.is_instance_network_attachment" , "name" , naname ),
446+ resource .TestCheckResourceAttr ("ibm_is_virtual_network_interface.testacc_vni2" , "resource_group" , rg1 ),
447+ resource .TestCheckResourceAttrSet ("ibm_is_instance_network_attachment.is_instance_network_attachment" , "virtual_network_interface.#" ),
448+ ),
449+ },
450+ // Change to resource group 2, should trigger force-new for VNI and recreate attachment
451+ {
452+ Config : testAccCheckIBMIsInstanceNetworkAttachmentVniResourceGroup (vpcname , subnetname , sshname , publicKey , vniname , name , naname , rg2 ),
453+ Check : resource .ComposeAggregateTestCheckFunc (
454+ testAccCheckIBMIsInstanceNetworkAttachmentExists ("ibm_is_instance_network_attachment.is_instance_network_attachment" , conf ),
455+ resource .TestCheckResourceAttr ("ibm_is_instance_network_attachment.is_instance_network_attachment" , "name" , naname ),
456+ resource .TestCheckResourceAttr ("ibm_is_virtual_network_interface.testacc_vni2" , "resource_group" , rg2 ),
457+ resource .TestCheckResourceAttrSet ("ibm_is_instance_network_attachment.is_instance_network_attachment" , "virtual_network_interface.#" ),
458+ ),
459+ },
460+ },
461+ })
462+ }
463+
464+ // TestAccIBMIsInstanceNetworkAttachmentInlineVniResourceGroupChange tests attachment with inline VNI resource group change
465+ func TestAccIBMIsInstanceNetworkAttachmentInlineVniResourceGroupChange (t * testing.T ) {
466+ var conf vpcv1.InstanceNetworkAttachment
467+ vpcname := fmt .Sprintf ("tf-vpc-%d" , acctest .RandIntRange (10 , 100 ))
468+ name := fmt .Sprintf ("tf-vsi-%d" , acctest .RandIntRange (10 , 100 ))
469+ subnetname := fmt .Sprintf ("tvni-subnet-%d" , acctest .RandIntRange (10 , 100 ))
470+ naname := fmt .Sprintf ("tvni-na-%d" , acctest .RandIntRange (10 , 100 ))
471+ publicKey := strings .TrimSpace (`
472+ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCKVmnMOlHKcZK8tpt3MP1lqOLAcqcJzhsvJcjscgVERRN7/9484SOBJ3HSKxxNG5JN8owAjy5f9yYwcUg+JaUVuytn5Pv3aeYROHGGg+5G346xaq3DAwX6Y5ykr2fvjObgncQBnuU5KHWCECO/4h8uWuwh/kfniXPVjFToc+gnkqA+3RKpAecZhFXwfalQ9mMuYGFxn+fwn8cYEApsJbsEmb0iJwPiZ5hjFC8wREuiTlhPHDgkBLOiycd20op2nXzDbHfCHInquEe/gYxEitALONxm0swBOwJZwlTDOB7C6y2dzlrtxr1L59m7pCkWI4EtTRLvleehBoj3u7jB4usR
473+ ` )
474+ sshname := fmt .Sprintf ("tf-sshname-%d" , acctest .RandIntRange (10 , 100 ))
475+ vniname := fmt .Sprintf ("tf-vni-%d" , acctest .RandIntRange (10 , 100 ))
476+ rg1 := acc .IsResourceGroupID
477+ rg2 := acc .IsResourceGroupIDUpdate
478+
479+ resource .Test (t , resource.TestCase {
480+ PreCheck : func () { acc .TestAccPreCheck (t ) },
481+ Providers : acc .TestAccProviders ,
482+ CheckDestroy : testAccCheckIBMIsInstanceNetworkAttachmentDestroy ,
483+ Steps : []resource.TestStep {
484+ // Initial setup with resource group 1
485+ {
486+ Config : testAccCheckIBMIsInstanceNetworkAttachmentInlineVniResourceGroup (vpcname , subnetname , sshname , publicKey , vniname , name , naname , rg1 ),
487+ Check : resource .ComposeAggregateTestCheckFunc (
488+ testAccCheckIBMIsInstanceNetworkAttachmentExists ("ibm_is_instance_network_attachment.is_instance_network_attachment" , conf ),
489+ resource .TestCheckResourceAttr ("ibm_is_instance_network_attachment.is_instance_network_attachment" , "name" , naname ),
490+ resource .TestCheckResourceAttr ("ibm_is_instance_network_attachment.is_instance_network_attachment" , "virtual_network_interface.0.resource_group" , rg1 ),
491+ ),
492+ },
493+ // Change to resource group 2, should trigger force-new
494+ {
495+ Config : testAccCheckIBMIsInstanceNetworkAttachmentInlineVniResourceGroup (vpcname , subnetname , sshname , publicKey , vniname , name , naname , rg2 ),
496+ Check : resource .ComposeAggregateTestCheckFunc (
497+ testAccCheckIBMIsInstanceNetworkAttachmentExists ("ibm_is_instance_network_attachment.is_instance_network_attachment" , conf ),
498+ resource .TestCheckResourceAttr ("ibm_is_instance_network_attachment.is_instance_network_attachment" , "name" , naname ),
499+ resource .TestCheckResourceAttr ("ibm_is_instance_network_attachment.is_instance_network_attachment" , "virtual_network_interface.0.resource_group" , rg2 ),
500+ ),
501+ },
502+ },
503+ })
504+ }
505+
506+ // Config generators
507+
508+ func testAccCheckIBMIsInstanceNetworkAttachmentVniResourceGroup (vpcname , subnetname , sshname , publicKey , vniname , name , naname , resourceGroup string ) string {
509+ return fmt .Sprintf (`
510+ resource "ibm_is_vpc" "testacc_vpc" {
511+ name = "%s"
512+ }
513+
514+ resource "ibm_is_subnet" "testacc_subnet" {
515+ name = "%s"
516+ vpc = ibm_is_vpc.testacc_vpc.id
517+ zone = "%s"
518+ total_ipv4_address_count = 16
519+ }
520+
521+ resource "ibm_is_ssh_key" "testacc_sshkey" {
522+ name = "%s"
523+ public_key = "%s"
524+ }
525+
526+ resource "ibm_is_virtual_network_interface" "testacc_vni" {
527+ name = "%s"
528+ subnet = ibm_is_subnet.testacc_subnet.id
529+ auto_delete = false
530+ }
531+
532+ resource "ibm_is_virtual_network_interface" "testacc_vni2" {
533+ name = "%s2"
534+ subnet = ibm_is_subnet.testacc_subnet.id
535+ resource_group = "%s"
536+ auto_delete = false
537+ }
538+
539+ resource "ibm_is_instance" "testacc_vsi" {
540+ profile = "%s"
541+ name = "%s"
542+ image = "%s"
543+ zone = "%s"
544+ keys = [ibm_is_ssh_key.testacc_sshkey.id]
545+ primary_network_attachment {
546+ name = "vni-primary"
547+ virtual_network_interface {
548+ id = ibm_is_virtual_network_interface.testacc_vni.id
549+ }
550+ }
551+ vpc = ibm_is_vpc.testacc_vpc.id
552+ }
553+
554+ resource "ibm_is_instance_network_attachment" "is_instance_network_attachment" {
555+ instance = ibm_is_instance.testacc_vsi.id
556+ name = "%s"
557+ virtual_network_interface {
558+ id = ibm_is_virtual_network_interface.testacc_vni2.id
559+ }
560+ }
561+ ` , vpcname , subnetname , acc .ISZoneName , sshname , publicKey , vniname , vniname , resourceGroup , acc .InstanceProfileName , name , acc .IsImage , acc .ISZoneName , naname )
562+ }
563+
564+ func testAccCheckIBMIsInstanceNetworkAttachmentInlineVniResourceGroup (vpcname , subnetname , sshname , publicKey , vniname , name , naname , resourceGroup string ) string {
565+ return fmt .Sprintf (`
566+ resource "ibm_is_vpc" "testacc_vpc" {
567+ name = "%s"
568+ }
569+
570+ resource "ibm_is_subnet" "testacc_subnet" {
571+ name = "%s"
572+ vpc = ibm_is_vpc.testacc_vpc.id
573+ zone = "%s"
574+ total_ipv4_address_count = 16
575+ }
576+
577+ resource "ibm_is_ssh_key" "testacc_sshkey" {
578+ name = "%s"
579+ public_key = "%s"
580+ }
581+
582+ resource "ibm_is_virtual_network_interface" "testacc_vni" {
583+ name = "%s"
584+ subnet = ibm_is_subnet.testacc_subnet.id
585+ enable_infrastructure_nat = true
586+ auto_delete = false
587+ }
588+
589+ resource "ibm_is_instance" "testacc_vsi" {
590+ profile = "%s"
591+ name = "%s"
592+ image = "%s"
593+ zone = "%s"
594+ keys = [ibm_is_ssh_key.testacc_sshkey.id]
595+ primary_network_attachment {
596+ name = "vni-primary"
597+ virtual_network_interface {
598+ id = ibm_is_virtual_network_interface.testacc_vni.id
599+ }
600+ }
601+ vpc = ibm_is_vpc.testacc_vpc.id
602+ }
603+
604+ resource "ibm_is_instance_network_attachment" "is_instance_network_attachment" {
605+ instance = ibm_is_instance.testacc_vsi.id
606+ name = "%s"
607+ virtual_network_interface {
608+ subnet = ibm_is_subnet.testacc_subnet.id
609+ resource_group = "%s"
610+ name = "inline-vni-na"
611+ auto_delete = true
612+ }
613+ }
614+ ` , vpcname , subnetname , acc .ISZoneName , sshname , publicKey , vniname , acc .InstanceProfileName , name , acc .IsImage , acc .ISZoneName , naname , resourceGroup )
615+ }
0 commit comments