Skip to content

Commit eb2f598

Browse files
committed
amde reserved ip changes
1 parent 4375a36 commit eb2f598

17 files changed

+1073
-125
lines changed

examples/ibm-is-ng/main.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,6 +1257,7 @@ data "ibm_is_share" "is_share" {
12571257

12581258
data "ibm_is_shares" "is_shares" {
12591259
}
1260+
12601261
// vpc dns resolution bindings
12611262

12621263
// list all dns resolution bindings on a vpc
@@ -1434,4 +1435,12 @@ data "ibm_is_virtual_network_interface_floating_ip" "vni_fip" {
14341435

14351436
data "ibm_is_virtual_network_interface_floating_ips" "vni_fips" {
14361437
virtual_network_interface = <vni_id>
1438+
}
1439+
1440+
data "ibm_is_virtual_network_interface_ips" "is_vni_ips" {
1441+
virtual_network_interface = "0726-89789ff7-3157-4261-8aa9-75140a4710bb"
1442+
}
1443+
data "ibm_is_virtual_network_interface_ip" "is_vni_ip" {
1444+
virtual_network_interface = "0726-89789ff7-3157-4261-8aa9-75140a4710bb"
1445+
reserved_ip = "0726-9880e9da-8ef2-4088-bfd0-a260b927dc44"
14371446
}

ibm/provider/provider.go

Lines changed: 112 additions & 106 deletions
Large diffs are not rendered by default.

ibm/service/vpc/data_source_ibm_is_bare_metal_servers.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -485,17 +485,18 @@ func dataSourceIBMISBareMetalServersRead(context context.Context, d *schema.Reso
485485
vpcCrn := vpcCrnIntf.(string)
486486
listBareMetalServersOptions.VPCCRN = &vpcCrn
487487
}
488+
//sdk
488489
// if subnetIntf, ok := d.GetOk("network_interfaces_subnet"); ok {
489-
// // subnetId := subnetIntf.(string)
490-
// // listBareMetalServersOptions.NetworkInterfacesSubnetID = &subnetId
490+
// subnetId := subnetIntf.(string)
491+
// listBareMetalServersOptions.NetworkInterfacesSubnetID = &subnetId
491492
// }
492493
// if subnetNameIntf, ok := d.GetOk("network_interfaces_subnet_name"); ok {
493-
// // subnetName := subnetNameIntf.(string)
494-
// // listBareMetalServersOptions.NetworkInterfacesSubnetName = &subnetName
494+
// subnetName := subnetNameIntf.(string)
495+
// listBareMetalServersOptions.NetworkInterfacesSubnetName = &subnetName
495496
// }
496497
// if subnetCrnIntf, ok := d.GetOk("network_interfaces_subnet_crn"); ok {
497-
// // subnetCrn := subnetCrnIntf.(string)
498-
// // listBareMetalServersOptions.NetworkInterfacesSubnetCRN = &subnetCrn
498+
// subnetCrn := subnetCrnIntf.(string)
499+
// listBareMetalServersOptions.NetworkInterfacesSubnetCRN = &subnetCrn
499500
// }
500501
for {
501502

ibm/service/vpc/data_source_ibm_is_share_mount_target.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,7 @@ func dataSourceShareTargetVNIToMap(VNIItem vpcv1.VirtualNetworkInterfaceReferenc
443443
if VNIItem.CRN != nil {
444444
subnetMap["crn"] = VNIItem.CRN
445445
}
446+
// sdk
446447
// if VNIItem.Deleted != nil {
447448
// deletedList := []map[string]interface{}{}
448449
// deletedMap := dataSourceShareTargetVNIDeletedToMap(*VNIItem.Deleted)

ibm/service/vpc/data_source_ibm_is_virtual_network_interface_floating_ip.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ func dataSourceIBMIsVirtualNetworkInterfaceFloatingIPRead(context context.Contex
8989
log.Printf("[DEBUG] GetVirtualNetworkInterfaceFloatingIPWithContext failed %s\n%s", err, response)
9090
return diag.FromErr(fmt.Errorf("GetVirtualNetworkInterfaceFloatingIPWithContext failed %s\n%s", err, response))
9191
}
92+
d.SetId(*floatingIP.ID)
9293
resourceIBMIsVirtualNetworkInterfaceFloatingIPGet(d, floatingIP)
9394
return nil
9495
}

ibm/service/vpc/data_source_ibm_is_virtual_network_interface_floating_ip_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func testAccCheckIBMIsVirtualNetworkInterfaceFloatingIPDataSourceConfigBasic() s
7575
7676
data "ibm_is_virtual_network_interface_floating_ip" "is_floating_ip_instance" {
7777
virtual_network_interface = "virtual_network_interface_id"
78-
flating_ip = "flating_ip_id"
78+
floating_ip = "floating_ip_id"
7979
}
8080
`)
8181
}

ibm/service/vpc/data_source_ibm_is_virtual_network_interface_floating_ips.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ func DataSourceIBMIsVirtualNetworkInterfaceFloatingIPs() *schema.Resource {
3232
Computed: true,
3333
Elem: &schema.Resource{
3434
Schema: map[string]*schema.Schema{
35-
"floating_ip": &schema.Schema{
35+
"id": &schema.Schema{
3636
Type: schema.TypeString,
37-
Required: true,
37+
Computed: true,
3838
Description: "The floating IP identifier",
3939
},
4040
"name": &schema.Schema{
@@ -44,13 +44,13 @@ func DataSourceIBMIsVirtualNetworkInterfaceFloatingIPs() *schema.Resource {
4444
},
4545
"deleted": &schema.Schema{
4646
Type: schema.TypeList,
47-
Optional: true,
47+
Computed: true,
4848
Description: "If present, this property indicates the referenced resource has been deleted, and provides some supplementary information.",
4949
Elem: &schema.Resource{
5050
Schema: map[string]*schema.Schema{
5151
"more_info": &schema.Schema{
5252
Type: schema.TypeString,
53-
Required: true,
53+
Computed: true,
5454
Description: "Link to documentation about deleted resources",
5555
},
5656
},
@@ -106,21 +106,20 @@ func dataSourceIBMIsVirtualNetworkInterfaceFloatingIPsRead(context context.Conte
106106
floatingIpsInfo := make([]map[string]interface{}, 0)
107107
for _, floatingIP := range allrecs {
108108
l := map[string]interface{}{}
109-
109+
l["id"] = *floatingIP.ID
110110
if !core.IsNil(floatingIP.Name) {
111111
l["name"] = floatingIP.Name
112112
}
113113
l["address"] = floatingIP.Address
114114

115115
l["crn"] = floatingIP.CRN
116116
l["href"] = floatingIP.Href
117-
if deleted, err := resourceIBMIsVirtualNetworkInterfaceFloatingIPNetworkInterfaceReferenceDeletedToMap(floatingIP.Deleted); err != nil {
118-
return diag.FromErr(fmt.Errorf("Error setting status: %s", err))
119-
} else {
120-
l["deleted"] = deleted
121-
}
117+
// if deleted, err := resourceIBMIsVirtualNetworkInterfaceFloatingIPNetworkInterfaceReferenceDeletedToMap(floatingIP.Deleted); err != nil {
118+
// return diag.FromErr(fmt.Errorf("[ERROR] Error setting status: %s", err))
119+
// } else {
120+
// l["deleted"] = deleted
121+
// }
122122
floatingIpsInfo = append(floatingIpsInfo, l)
123-
124123
}
125124
d.SetId(dataSourceIBMISVirtualNetworkInterfaceFloatingIPsID(d))
126125
d.Set("floating_ips", floatingIpsInfo)
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
// Copyright IBM Corp. 2023 All Rights Reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package vpc
5+
6+
import (
7+
"context"
8+
"fmt"
9+
"log"
10+
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
13+
14+
"github.com/IBM/vpc-go-sdk/vpcv1"
15+
)
16+
17+
func DataSourceIBMIsVirtualNetworkInterfaceIP() *schema.Resource {
18+
return &schema.Resource{
19+
ReadContext: dataSourceIsVirtualNetworkInterfaceIPRead,
20+
21+
Schema: map[string]*schema.Schema{
22+
"virtual_network_interface": &schema.Schema{
23+
Type: schema.TypeString,
24+
Required: true,
25+
Description: "The virtual network interface identifier",
26+
},
27+
"id": &schema.Schema{
28+
Type: schema.TypeString,
29+
Computed: true,
30+
Description: "The reserved IP identifier.",
31+
},
32+
"address": &schema.Schema{
33+
Type: schema.TypeString,
34+
Computed: true,
35+
Description: "The IP address.If the address has not yet been selected, the value will be `0.0.0.0`.This property may add support for IPv6 addresses in the future. When processing a value in this property, verify that the address is in an expected format. If it is not, log an error. Optionally halt processing and surface the error, or bypass the resource on which the unexpected IP address format was encountered.",
36+
},
37+
"href": &schema.Schema{
38+
Type: schema.TypeString,
39+
Computed: true,
40+
Description: "The URL for this reserved IP.",
41+
},
42+
"reserved_ip": &schema.Schema{
43+
Type: schema.TypeString,
44+
Required: true,
45+
Description: "The unique identifier for this reserved IP.",
46+
},
47+
"name": &schema.Schema{
48+
Type: schema.TypeString,
49+
Computed: true,
50+
Description: "The name for this reserved IP. The name is unique across all reserved IPs in a subnet.",
51+
},
52+
"resource_type": &schema.Schema{
53+
Type: schema.TypeString,
54+
Computed: true,
55+
Description: "The resource type.",
56+
},
57+
},
58+
}
59+
}
60+
61+
func dataSourceIsVirtualNetworkInterfaceIPRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
62+
vpcClient, err := vpcClient(meta)
63+
if err != nil {
64+
return diag.FromErr(err)
65+
}
66+
67+
getVirtualNetworkInterfaceIPOptions := &vpcv1.GetVirtualNetworkInterfaceIPOptions{}
68+
69+
getVirtualNetworkInterfaceIPOptions.SetVirtualNetworkInterfaceID(d.Get("virtual_network_interface").(string))
70+
getVirtualNetworkInterfaceIPOptions.SetID(d.Get("reserved_ip").(string))
71+
72+
reservedIP, response, err := vpcClient.GetVirtualNetworkInterfaceIPWithContext(context, getVirtualNetworkInterfaceIPOptions)
73+
if err != nil {
74+
log.Printf("[DEBUG] GetVirtualNetworkInterfaceIPWithContext failed %s\n%s", err, response)
75+
return diag.FromErr(fmt.Errorf("GetVirtualNetworkInterfaceIPWithContext failed %s\n%s", err, response))
76+
}
77+
78+
d.SetId(*reservedIP.ID)
79+
80+
if err = d.Set("address", reservedIP.Address); err != nil {
81+
return diag.FromErr(fmt.Errorf("Error setting address: %s", err))
82+
}
83+
if err = d.Set("href", reservedIP.Href); err != nil {
84+
return diag.FromErr(fmt.Errorf("Error setting href: %s", err))
85+
}
86+
87+
if err = d.Set("reserved_ip", reservedIP.ID); err != nil {
88+
return diag.FromErr(fmt.Errorf("Error setting reserved_ip: %s", err))
89+
}
90+
91+
if err = d.Set("name", reservedIP.Name); err != nil {
92+
return diag.FromErr(fmt.Errorf("Error setting name: %s", err))
93+
}
94+
95+
if err = d.Set("resource_type", reservedIP.ResourceType); err != nil {
96+
return diag.FromErr(fmt.Errorf("Error setting resource_type: %s", err))
97+
}
98+
99+
return nil
100+
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
// Copyright IBM Corp. 2023 All Rights Reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package vpc_test
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
12+
13+
acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"
14+
)
15+
16+
func TestAccIBMIsVirtualNetworkInterfaceIpDataSourceBasic(t *testing.T) {
17+
virtualNetworkInterfaceIpSubnetID := fmt.Sprintf("tf_vni_id_%d", acctest.RandIntRange(10, 100))
18+
19+
resource.Test(t, resource.TestCase{
20+
PreCheck: func() { acc.TestAccPreCheck(t) },
21+
Providers: acc.TestAccProviders,
22+
Steps: []resource.TestStep{
23+
resource.TestStep{
24+
Config: testAccCheckIBMIsVirtualNetworkInterfaceIpDataSourceConfigBasic(virtualNetworkInterfaceIpSubnetID),
25+
Check: resource.ComposeTestCheckFunc(
26+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "id"),
27+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "subnet_id"),
28+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "id"),
29+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "address"),
30+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "auto_delete"),
31+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "created_at"),
32+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "href"),
33+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "reserved_ip_id"),
34+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "lifecycle_state"),
35+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "name"),
36+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "owner"),
37+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "resource_type"),
38+
),
39+
},
40+
},
41+
})
42+
}
43+
44+
func TestAccIBMIsVirtualNetworkInterfaceIpDataSourceAllArgs(t *testing.T) {
45+
virtualNetworkInterfaceIpSubnetID := fmt.Sprintf("tf_subnet_id_%d", acctest.RandIntRange(10, 100))
46+
virtualNetworkInterfaceIpAddress := fmt.Sprintf("tf_address_%d", acctest.RandIntRange(10, 100))
47+
virtualNetworkInterfaceIpAutoDelete := "false"
48+
virtualNetworkInterfaceIpName := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100))
49+
50+
resource.Test(t, resource.TestCase{
51+
PreCheck: func() { acc.TestAccPreCheck(t) },
52+
Providers: acc.TestAccProviders,
53+
Steps: []resource.TestStep{
54+
resource.TestStep{
55+
Config: testAccCheckIBMIsVirtualNetworkInterfaceIpDataSourceConfig(virtualNetworkInterfaceIpSubnetID, virtualNetworkInterfaceIpAddress, virtualNetworkInterfaceIpAutoDelete, virtualNetworkInterfaceIpName),
56+
Check: resource.ComposeTestCheckFunc(
57+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "id"),
58+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "subnet_id"),
59+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "id"),
60+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "address"),
61+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "auto_delete"),
62+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "created_at"),
63+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "href"),
64+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "reserved_ip_id"),
65+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "lifecycle_state"),
66+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "name"),
67+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "owner"),
68+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "resource_type"),
69+
resource.TestCheckResourceAttrSet("data.ibm_is_reserved_ip.is_reserved_ip", "target.#"),
70+
),
71+
},
72+
},
73+
})
74+
}
75+
76+
func testAccCheckIBMIsVirtualNetworkInterfaceIpDataSourceConfigBasic(virtualNetworkInterfaceIpSubnetID string) string {
77+
return fmt.Sprintf(`
78+
resource "ibm_is_reserved_ip" "is_reserved_ip_instance" {
79+
subnet_id = "%s"
80+
}
81+
82+
data "ibm_is_reserved_ip" "is_reserved_ip_instance" {
83+
subnet_id = ibm_is_reserved_ip.is_reserved_ip.subnet_id
84+
id = "id"
85+
}
86+
`, virtualNetworkInterfaceIpSubnetID)
87+
}
88+
89+
func testAccCheckIBMIsVirtualNetworkInterfaceIpDataSourceConfig(virtualNetworkInterfaceIpSubnetID string, virtualNetworkInterfaceIpAddress string, virtualNetworkInterfaceIpAutoDelete string, virtualNetworkInterfaceIpName string) string {
90+
return fmt.Sprintf(`
91+
resource "ibm_is_reserved_ip" "is_reserved_ip_instance" {
92+
subnet_id = "%s"
93+
address = "%s"
94+
auto_delete = %s
95+
name = "%s"
96+
target {
97+
crn = "crn:v1:bluemix:public:is:us-south:a/123456::endpoint-gateway:r134-d7cc5196-9864-48c4-82d8-3f30da41fcc5"
98+
deleted {
99+
more_info = "https://cloud.ibm.com/apidocs/vpc#deleted-resources"
100+
}
101+
href = "https://us-south.iaas.cloud.ibm.com/v1/endpoint_gateways/r134-d7cc5196-9864-48c4-82d8-3f30da41fcc5"
102+
id = "r134-d7cc5196-9864-48c4-82d8-3f30da41fcc5"
103+
name = "my-endpoint-gateway"
104+
resource_type = "endpoint_gateway"
105+
}
106+
}
107+
108+
data "ibm_is_reserved_ip" "is_reserved_ip_instance" {
109+
subnet_id = ibm_is_reserved_ip.is_reserved_ip.subnet_id
110+
id = "id"
111+
}
112+
`, virtualNetworkInterfaceIpSubnetID, virtualNetworkInterfaceIpAddress, virtualNetworkInterfaceIpAutoDelete, virtualNetworkInterfaceIpName)
113+
}

0 commit comments

Comments
 (0)