Skip to content

Commit 90fe250

Browse files
AniJ98ezilber-akamaidependabot[bot]yec-akamailgarber-akamai
authored
Added support for updated Reserved IP behavior to existing resources (instance, network_ips) (#610)
* added reserved field to InstanceIP struct for IP Reservation response * Reserved IP resource for handling IP reservation API's * Added integration test covering multiple scenarios of reserving IP addresses * The fixture files for different scenarios of IP Reservation - EndToEnd, InsuffecientPermission, ReserveIP, GetReservedIP, getReservedIPs, DeleteReservedIPs * Updated the fixture files with responses after the user has permissions to reserve IP * Changed the error message to relay invalid token for insufficient permission tests * Updated the error message for Insufficient Permission tests to display appropriate error message along with code * Made changes to Delete, List, Get, Reserve, EndtoEnd fixtures to record user with adequate permissions * changed variable name from id to address to keep it consistent with other functions * Made changes to variable names, achanged logf statements to errorf and fatalf wherever necessary * changed fixture file names to improve consistency, re-recorded fixtures with latest error messages * removed debugging fmt statement * Made changes to reserve IP addresses before listing them using fitler feature. Removed for loop to reserve IPs till limit is reached. * uncommenting unaffected tests * Made changes to error messages, added mandatory checks and re-recorded fixtures to reflect new error messages * Added new middleware system (#571) * build(deps): bump golang.org/x/oauth2 from 0.22.0 to 0.23.0 (#574) * build(deps): bump golang.org/x/oauth2 from 0.22.0 to 0.23.0 Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.22.0 to 0.23.0. - [Commits](golang/oauth2@v0.22.0...v0.23.0) --- updated-dependencies: - dependency-name: golang.org/x/oauth2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Ran make tidy --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: ezilber-akamai <ezilber@akamai.com> * build(deps): bump golang.org/x/text from 0.17.0 to 0.18.0 (#575) * build(deps): bump golang.org/x/text from 0.17.0 to 0.18.0 Bumps [golang.org/x/text](https://github.com/golang/text) from 0.17.0 to 0.18.0. - [Release notes](https://github.com/golang/text/releases) - [Commits](golang/text@v0.17.0...v0.18.0) --- updated-dependencies: - dependency-name: golang.org/x/text dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * make tidy --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ye Chen <yechen@akamai.com> * new: Add support LKE, Volume, NodeBalancer, and network transfer pricing endpoints (#573) * Add LKE types endpoints * Support base struct; add NB types endpoints * Add volume types * Add network transfer prices * Add price and region price structs * Revert IPv6 fixtures * Add missing fixtures * Add test case for ip limit exceed * add cleanup for TestReservedIPAddresses_ExceedLimit * added interactions to fixture and changed the ecpected error message * Added note indicating feature is currently not available to all users * added support for creating a linode with reserved IP address along with associated tests * Added support for adding additional reserved IP to linodes along with the corresponding tests and fixtures * added ipv4 field in the InstanceCreateOptions struct * moved InstanceReservedIPOptions and the method to AddReservedIPToInsatance to instance_ips.go * Split the variants tests of createInstanceWithReservedIP into individual test funcitons and removed debugging log statements * Re-recorded fixtures after splitting variants test into individual test functions, made changes to error messages * added teardown funcitnality to handle accidental instance creations * removed unnecessary defer keyword from test functions * moved tests related to creating a linode with reserved IP and adding additonal reserved IPs to a linode to a separate file * Removing the sensitive token from the previous commit * made changes to maintain consistency and improve readability * added tests for deletion of linode created with reserved IP address * added test for verifying the status of the reserved field when listing addresses of a linode * Added support for existing resources to support reserved IP feature and corresponding tests * Updated fixtures with required interactions for reserved IP feature and recorded new ones for allocating and assigning reserved IPs * changed the name of the test function to keeop it more succinct * setting reserved as an optional field * Made change to make reserved a part of the update IP address functionality * Removed test for exceeding IP MAX and changed the type of the reserved field in the IPAddressUpdateOptions struct * Changed struct name from LinodeReserveIPOptions to AllocateReserveIPOptions --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Erik Zilber <ezilber@akamai.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ye Chen <yechen@akamai.com> Co-authored-by: Lena Garber <114949949+lgarber-akamai@users.noreply.github.com> Co-authored-by: ykim-1 <ykim@akamai.com> Co-authored-by: Zhiwei Liang <121905282+zliang-akamai@users.noreply.github.com>
1 parent 87775e1 commit 90fe250

11 files changed

+8391
-967
lines changed

network_ips.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77
// IPAddressUpdateOptions fields are those accepted by UpdateToken
88
type IPAddressUpdateOptions struct {
99
// The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if set to nil.
10-
RDNS *string `json:"rdns"`
10+
Reserved *bool `json:"reserved,omitempty"`
11+
RDNS *string `json:"rdns,omitempty"`
1112
}
1213

1314
// LinodeIPAssignment stores an assignment between an IP address and a Linode instance.
@@ -16,6 +17,14 @@ type LinodeIPAssignment struct {
1617
LinodeID int `json:"linode_id"`
1718
}
1819

20+
type AllocateReserveIPOptions struct {
21+
Type string `json:"type"`
22+
Public bool `json:"public"`
23+
Reserved bool `json:"reserved,omitempty"`
24+
Region string `json:"region,omitempty"`
25+
LinodeID int `json:"linode_id,omitempty"`
26+
}
27+
1928
// LinodesAssignIPsOptions fields are those accepted by InstancesAssignIPs.
2029
type LinodesAssignIPsOptions struct {
2130
Region string `json:"region"`
@@ -88,3 +97,14 @@ func (c *Client) ShareIPAddresses(ctx context.Context, opts IPAddressesShareOpti
8897
_, err := doPOSTRequest[InstanceIP](ctx, c, e, opts)
8998
return err
9099
}
100+
101+
// AllocateReserveIP allocates a new IPv4 address to the Account, with the option to reserve it
102+
// and optionally assign it to a Linode.
103+
func (c *Client) AllocateReserveIP(ctx context.Context, opts AllocateReserveIPOptions) (*InstanceIP, error) {
104+
e := "networking/ips"
105+
result, err := doPOSTRequest[InstanceIP](ctx, c, e, opts)
106+
if err != nil {
107+
return nil, err
108+
}
109+
return result, nil
110+
}

0 commit comments

Comments
 (0)