Skip to content

Commit 3e4e954

Browse files
authored
feat(vpcgw): add wait_for_dhcp to dhcp reservation datasource (#1456)
1 parent ab81096 commit 3e4e954

7 files changed

+1241
-1356
lines changed

docs/data-sources/vpc_public_gateway_dhcp_reservation.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ data "scaleway_vpc_public_gateway_dhcp_reservation" "by_id" {
123123

124124
- `reservation_id` (Required) The ID of the Reservation to retrieve
125125
- `mac_address` (Optional) The MAC address of the reservation to retrieve
126+
- `wait_for_dhcp` (Optional) Boolean to wait for mac_address to exist in dhcp
126127
- `zone` - (Defaults to [provider](../index.md#zone) `zone`) The [zone](../guides/regions_and_zones.md#zones) in which
127128
the image exists.
128129

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ require (
1313
github.com/hashicorp/terraform-plugin-log v0.7.0
1414
github.com/hashicorp/terraform-plugin-sdk/v2 v2.21.0
1515
github.com/robfig/cron/v3 v3.0.1
16-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9.0.20220805144307-2228017fa4e8
16+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9.0.20220907082605-794394649db9
1717
github.com/stretchr/testify v1.8.0
1818
)
1919

go.sum

Lines changed: 2 additions & 46 deletions
Large diffs are not rendered by default.

scaleway/data_source_vpc_public_gateway_dhcp_reservation.go

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func dataSourceScalewayVPCPublicGatewayDHCPReservation() *schema.Resource {
1515
dsSchema := datasourceSchemaFromResourceSchema(resourceScalewayVPCPublicGatewayDHCPReservation().Schema)
1616

1717
// Set 'Optional' schema elements
18-
addOptionalFieldsToSchema(dsSchema, "mac_address")
18+
addOptionalFieldsToSchema(dsSchema, "mac_address", "gateway_network_id")
1919

2020
dsSchema["mac_address"].ConflictsWith = []string{"reservation_id"}
2121
dsSchema["reservation_id"] = &schema.Schema{
@@ -24,6 +24,12 @@ func dataSourceScalewayVPCPublicGatewayDHCPReservation() *schema.Resource {
2424
Description: "The ID of dhcp entry reservation",
2525
ValidateFunc: validationUUIDorUUIDWithLocality(),
2626
}
27+
dsSchema["wait_for_dhcp"] = &schema.Schema{
28+
Type: schema.TypeBool,
29+
Optional: true,
30+
Default: false,
31+
Description: "Wait the the mac address in dhcp entries",
32+
}
2733

2834
// Set 'Optional' schema elements
2935
addOptionalFieldsToSchema(dsSchema, "zone")
@@ -42,13 +48,23 @@ func dataSourceScalewayVPCPublicGatewayDHCPReservationRead(ctx context.Context,
4248

4349
reservationIDRaw, ok := d.GetOk("reservation_id")
4450
if !ok {
45-
res, err := vpcgwAPI.ListDHCPEntries(
46-
&vpcgw.ListDHCPEntriesRequest{
47-
MacAddress: expandStringPtr(d.Get("mac_address").(string)),
48-
}, scw.WithContext(ctx))
51+
var res *vpcgw.ListDHCPEntriesResponse
52+
gatewayNetworkID := d.Get("gateway_network_id").(string)
53+
macAddress := d.Get("mac_address").(string)
54+
55+
if d.Get("wait_for_dhcp").(bool) {
56+
res, err = waitForDHCPEntries(ctx, vpcgwAPI, zone, gatewayNetworkID, macAddress, d.Timeout(schema.TimeoutRead))
57+
} else {
58+
res, err = vpcgwAPI.ListDHCPEntries(
59+
&vpcgw.ListDHCPEntriesRequest{
60+
GatewayNetworkID: expandStringPtr(gatewayNetworkID),
61+
MacAddress: expandStringPtr(macAddress),
62+
}, scw.WithContext(ctx))
63+
}
4964
if err != nil {
5065
return diag.FromErr(err)
5166
}
67+
5268
if res.TotalCount == 0 {
5369
return diag.FromErr(
5470
fmt.Errorf(

scaleway/data_source_vpc_public_gateway_dhcp_reservation_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ func TestAccScalewayDataSourceVPCPublicGatewayDHCPReservation_Basic(t *testing.T
9696
9797
data "scaleway_vpc_public_gateway_dhcp_reservation" "by_mac_address" {
9898
mac_address = "${scaleway_instance_server.main.private_network.0.mac_address}"
99+
wait_for_dhcp = true
99100
depends_on = [scaleway_vpc_gateway_network.main, scaleway_vpc_public_gateway_dhcp.main, scaleway_vpc_private_network.main]
100101
}
101102
`, pnName),

scaleway/helpers_vpcgw.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,24 @@ func waitForVPCGatewayNetwork(ctx context.Context, api *vpcgw.API, zone scw.Zone
6969

7070
return gatewayNetwork, err
7171
}
72+
73+
func waitForDHCPEntries(ctx context.Context, api *vpcgw.API, zone scw.Zone, gatewayID string, macAddress string, timeout time.Duration) (*vpcgw.ListDHCPEntriesResponse, error) {
74+
retryIntervalDHCPEntries := defaultVPCGatewayRetry
75+
if DefaultWaitRetryInterval != nil {
76+
retryIntervalDHCPEntries = *DefaultWaitRetryInterval
77+
}
78+
79+
req := &vpcgw.WaitForDHCPEntriesRequest{
80+
MacAddress: macAddress,
81+
Zone: zone,
82+
Timeout: scw.TimeDurationPtr(timeout),
83+
RetryInterval: &retryIntervalDHCPEntries,
84+
}
85+
86+
if gatewayID != "" {
87+
req.GatewayNetworkID = &gatewayID
88+
}
89+
90+
dhcpEntries, err := api.WaitForDHCPEntries(req, scw.WithContext(ctx))
91+
return dhcpEntries, err
92+
}

0 commit comments

Comments
 (0)