Skip to content

Commit 4647643

Browse files
authored
feat(vpc): added support for default_address_prefixes (IBM-Cloud#5938)
1 parent a7fc85f commit 4647643

File tree

3 files changed

+113
-0
lines changed

3 files changed

+113
-0
lines changed

ibm/service/vpc/resource_ibm_is_vpc.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,15 @@ func ResourceIBMISVPC() *schema.Resource {
117117
),
118118

119119
Schema: map[string]*schema.Schema{
120+
121+
"default_address_prefixes": {
122+
Type: schema.TypeMap,
123+
Elem: &schema.Schema{
124+
Type: schema.TypeString,
125+
},
126+
Computed: true,
127+
Description: "Default address prefixes for each zone.",
128+
},
120129
isVPCAddressPrefixManagement: {
121130
Type: schema.TypeString,
122131
Optional: true,
@@ -937,6 +946,51 @@ func vpcGet(d *schema.ResourceData, meta interface{}, id string) error {
937946
return fmt.Errorf("[ERROR] Error getting VPC : %s\n%s", err, response)
938947
}
939948

949+
// address prefixes
950+
951+
vpcID := id // Assuming the VPC ID is stored in the resource ID
952+
953+
// Fetch all address prefixes for the VPC
954+
startAdd := ""
955+
allRecs := []vpcv1.AddressPrefix{}
956+
for {
957+
listVpcAddressPrefixesOptions := &vpcv1.ListVPCAddressPrefixesOptions{
958+
VPCID: &vpcID,
959+
}
960+
961+
if startAdd != "" {
962+
listVpcAddressPrefixesOptions.Start = &startAdd
963+
}
964+
965+
addressPrefixCollection, response, err := sess.ListVPCAddressPrefixes(listVpcAddressPrefixesOptions)
966+
if err != nil {
967+
log.Printf("[DEBUG] ListVpcAddressPrefixesWithContext failed %s\n%s", err, response)
968+
return fmt.Errorf("ListVpcAddressPrefixesWithContext failed %s\n%s", err, response)
969+
}
970+
971+
allRecs = append(allRecs, addressPrefixCollection.AddressPrefixes...)
972+
startAdd = flex.GetNext(addressPrefixCollection.Next)
973+
if startAdd == "" {
974+
break
975+
}
976+
}
977+
978+
// Process address prefixes
979+
defaultAddressPrefixes := map[string]string{}
980+
981+
for _, prefix := range allRecs {
982+
zoneName := *prefix.Zone.Name
983+
cidr := *prefix.CIDR
984+
// Populate default_address_prefixes
985+
if *prefix.IsDefault {
986+
defaultAddressPrefixes[zoneName] = cidr
987+
}
988+
}
989+
990+
// Set the default_address_prefixes attribute in the Terraform state
991+
if err := d.Set("default_address_prefixes", defaultAddressPrefixes); err != nil {
992+
return fmt.Errorf("error setting default_address_prefixes: %w", err)
993+
}
940994
d.Set(isVPCName, *vpc.Name)
941995
d.Set(isVPCClassicAccess, *vpc.ClassicAccess)
942996
d.Set(isVPCStatus, *vpc.Status)

ibm/service/vpc/resource_ibm_is_vpc_test.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -962,3 +962,52 @@ func testAccCheckIBMISVPCNoSgAclRulesConfig(vpcname string) string {
962962
`, vpcname)
963963

964964
}
965+
966+
// default address prefixes
967+
968+
func TestAccIBMISVPC_basicAddressPrefix(t *testing.T) {
969+
var vpc string
970+
name1 := fmt.Sprintf("terraformvpcuat-%d", acctest.RandIntRange(10, 100))
971+
name2 := fmt.Sprintf("terraformvpcuat-%d", acctest.RandIntRange(10, 100))
972+
apm := "manual"
973+
974+
resource.Test(t, resource.TestCase{
975+
PreCheck: func() { acc.TestAccPreCheck(t) },
976+
Providers: acc.TestAccProviders,
977+
CheckDestroy: testAccCheckIBMISVPCDestroy,
978+
Steps: []resource.TestStep{
979+
{
980+
Config: testAccCheckIBMISVPCConfig(name1),
981+
Check: resource.ComposeTestCheckFunc(
982+
testAccCheckIBMISVPCExists("ibm_is_vpc.testacc_vpc", vpc),
983+
resource.TestCheckResourceAttr(
984+
"ibm_is_vpc.testacc_vpc", "name", name1),
985+
resource.TestCheckResourceAttr(
986+
"ibm_is_vpc.testacc_vpc", "default_network_acl_name", "dnwacln"),
987+
resource.TestCheckResourceAttr(
988+
"ibm_is_vpc.testacc_vpc", "default_security_group_name", "dsgn"),
989+
resource.TestCheckResourceAttr(
990+
"ibm_is_vpc.testacc_vpc", "default_routing_table_name", "drtn"),
991+
resource.TestCheckResourceAttr(
992+
"ibm_is_vpc.testacc_vpc", "tags.#", "2"),
993+
resource.TestCheckResourceAttrSet(
994+
"ibm_is_vpc.testacc_vpc", "default_address_prefixes.%"),
995+
),
996+
},
997+
{
998+
Config: testAccCheckIBMISVPCConfig1(name2, apm),
999+
Check: resource.ComposeTestCheckFunc(
1000+
testAccCheckIBMISVPCExists("ibm_is_vpc.testacc_vpc1", vpc),
1001+
resource.TestCheckResourceAttr(
1002+
"ibm_is_vpc.testacc_vpc1", "name", name2),
1003+
resource.TestCheckResourceAttr(
1004+
"ibm_is_vpc.testacc_vpc1", "tags.#", "2"),
1005+
resource.TestCheckResourceAttrSet(
1006+
"ibm_is_vpc.testacc_vpc1", "cse_source_addresses.#"),
1007+
resource.TestCheckResourceAttr(
1008+
"ibm_is_vpc.testacc_vpc1", "default_address_prefixes.#", "0"),
1009+
),
1010+
},
1011+
},
1012+
})
1013+
}

website/docs/r/is_vpc.html.markdown

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,16 @@ In addition to all argument reference list, you can access the following attribu
186186
- `cse_source_addresses`- (List) A list of the cloud service endpoints that are associated with your VPC, including their source IP address and zone.
187187
- `address` - (String) The IP address of the cloud service endpoint.
188188
- `zone_name` - (String) The zone where the cloud service endpoint is located.
189+
- `default_address_prefixes` - (Map) A map of default address prefixes for each zone in the VPC. The keys are the zone names, and the values are the corresponding address prefixes.
190+
Example:
191+
```hcl
192+
default_address_prefixes = {
193+
"us-south-1" = "10.240.0.0/18"
194+
"us-south-2" = "10.240.64.0/18"
195+
"us-south-3" = "10.240.128.0/18"
196+
"us-south-4" = "10.240.192.0/18"
197+
}
198+
```
189199
- `default_security_group_crn` - (String) CRN of the default security group created and attached to the VPC.
190200
- `default_security_group` - (String) The default security group ID created and attached to the VPC.
191201
- `default_network_acl_crn`- (String) CRN of the default network ACL ID created and attached to the VPC.

0 commit comments

Comments
 (0)