TPT-4275: IP Reservation (IPv4) Project#987
Open
lgarber-akamai wants to merge 3 commits into
Open
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR merges the “Reserved IPv4” work into linodego, extending the client/models to support reserving IPv4 addresses (including tagging and assignment metadata) and wiring that through tags, instances, and related tests/fixtures. It also includes several adjacent API model updates (Monitor alerts/channels, Firewall entities/devices, Object Storage quotas), dependency bumps, and CI/workflow adjustments.
Changes:
- Add/extend Reserved IPv4 support (reserve/list/update/delete/types, tagging, and richer IP response fields).
- Expand Monitor alert definitions/channels support (scope/regions/entities listing; channel schema updates).
- Update Firewall and Object Storage quota models/APIs, plus extensive unit/integration test + fixture updates and workflow/tooling bumps.
Reviewed changes
Copilot reviewed 50 out of 117 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| volumes.go | Minor struct field formatting/comment adjustment. |
| tags.go | Add reserved_ipv4_addresses tagging + decode tagged reserved IP objects. |
| network_reserved_ips.go | Add reserved IP tagging/update + reserved IP types listing. |
| instance_ips.go | Add tags + assigned entity metadata to IP response model. |
| object_storage_quota.go | Add quota fields + new global quota APIs/types. |
| monitor_alert_definitions.go | Add scope/regions/entities and entity listing endpoint. |
| monitor_alert_channels.go | Update alert channel schema (content removal, details usage). |
| lke_node_pools.go | Add disk encryption create option + include in GetCreateOptions. |
| interfaces.go | Change interface create options firewall ID type. |
| instances.go | Reformat instance structs + ensure create supports disk encryption/placement group fields ordering. |
| instance_disks.go | Reformat disk struct; keep disk encryption field. |
| firewalls.go | Add firewall entities + rename device create field to linode interfaces. |
| firewall_devices.go | Add parent entity support to firewall device entity. |
| retries.go | Add linter suppression comment for nginx retry content-type constant. |
| retries_http.go | Add linter suppression comment for nginx retry content-type constant. |
| request_helpers.go | Update pointer-kind reflection check. |
| client.go | Add header redaction for debug logging and resty log sanitization (req+resp). |
| client_test.go | Add tests for header redaction and log sanitization. |
| CODEOWNERS | Add additional code owners team. |
| .github/workflows/release-notify-slack.yml | Bump Slack action major version. |
| .github/workflows/nightly_smoke_tests.yml | Bump Slack action major version. |
| .github/workflows/integration_tests_pr.yml | Bump github-script action major version. |
| .github/workflows/clean-release-notes.yml | Add workflow to strip ticket prefixes from release notes. |
| .github/workflows/ci.yml | Add PR-title validation + bump Slack action major version. |
| go.mod | Bump x/* and ini dependencies. |
| go.sum | Dependency checksum updates. |
| k8s/go.mod | Dependency bumps for k8s module. |
| k8s/go.sum | Dependency checksum updates for k8s module. |
| test/go.mod | Dependency bumps for test module. |
| test/go.sum | Dependency checksum updates for test module. |
| test/unit/tag_test.go | Add unit coverage for reserved IPv4 tagging behavior. |
| test/unit/nodebalancer_test.go | Add request-body unit test for NodeBalancer IPv4 field. |
| test/unit/network_reserved_ips_test.go | Extend reserved IP unit tests for tags/assigned entity/types/update. |
| test/unit/network_ips_test.go | Add unit tests for reserved+rdns request body and reserved filtering. |
| test/unit/monitor_alert_definitions_test.go | Update fixtures/assertions for expanded alert definition schema + entities listing. |
| test/unit/monitor_alert_channels_test.go | Add unit test for listing alert channels (new file). |
| test/unit/interface_test.go | Update unit test to use single-pointer firewall ID. |
| test/unit/instance_test.go | Add request-body unit test for instance IPv4 reserved IP list. |
| test/unit/instance_ip_test.go | Extend reserved IP assign test + add request-body validation. |
| test/unit/firewalls_test.go | Update firewall create test for linode interfaces + entities + timestamps. |
| test/unit/firewall_devices_test.go | Add parent entity assertions and new test coverage for parent entity response. |
| test/unit/client_test.go | Add httpmock import for new tests. |
| test/unit/fixtures/tagged_objects_reserved_ip_list.json | Add fixture for tagged reserved IP object. |
| test/unit/fixtures/network_reserved_ips.json | Extend reserved IP fixture with reserved/tags fields. |
| test/unit/fixtures/network_reserved_ips_list.json | Extend reserved IP list fixture with reserved/tags fields. |
| test/unit/fixtures/network_reserved_ips_get.json | Extend reserved IP get fixture with reserved/tags/assigned entity. |
| test/unit/fixtures/network_reserved_ip_update.json | Add reserved IP update fixture. |
| test/unit/fixtures/network_reserved_ip_types_list.json | Add reserved IP types fixture. |
| test/unit/fixtures/instance_ip_reserved.json | Extend reserved instance IP fixture with reserved/assigned entity. |
| test/unit/fixtures/firewall_create.json | Extend firewall fixture with entities. |
| test/integration/tags_test.go | Add integration coverage for tagging reserved IPs. |
| test/integration/object_storage_quota_test.go | Relax assertions and validate new quota fields. |
| test/integration/object_storage_global_quota_test.go | Add integration coverage for global object storage quotas (new file). |
| test/integration/network_reserved_ips_test.go | Add/expand integration coverage for reserved IP tags/types/status and region selection. |
| test/integration/network_ips_test.go | Add assertions around tags presence/absence based on reserved status. |
| test/integration/monitor_alert_definitions_test.go | Add assertions for channel email details + entities listing test. |
| test/integration/lke_node_pools_test.go | Update node pool create opts for disk encryption + expectation fix. |
| test/integration/instance_reserved_ips_test.go | Expand reserved IP instance tests; parameterize region; update image. |
| test/integration/instance_interfaces_test.go | Update firewall ID pointer usage for interfaces. |
| test/integration/fixtures/TestReservedIPTypes_List.yaml | Add fixture for reserved IP types list. |
| test/integration/fixtures/TestObjectStorageQuotas_Get.yaml | Update fixture to include new quota fields. |
| test/integration/fixtures/TestObjectStorageGlobalQuotaUsage_Get.yaml | Add fixture for global quota usage flow. |
| test/integration/fixtures/TestObjectStorageGlobalQuotas_List.yaml | Add fixture for listing global quotas. |
| test/integration/fixtures/TestObjectStorageGlobalQuotas_Get.yaml | Add fixture for getting a global quota. |
| test/integration/fixtures/TestMonitorAlertDefinitions_List.yaml | Update monitor alert definitions list fixture to new schema. |
| test/integration/fixtures/TestMonitorAlertDefinitionEntities_List.yaml | Add fixture for alert definition entities listing. |
| test/integration/fixtures/TestMonitorAlertDefinition.yaml | Update monitor alert definition fixture to new schema. |
| test/integration/fixtures/TestMonitorAlertDefinition_CreateWithIdempotency.yaml | Update idempotency fixture to new channel schema and entities block. |
| test/integration/fixtures/TestMonitorAlertChannels_List.yaml | Update monitor alert channels fixture to new schema. |
| test/integration/fixtures/TestLKENodePool_GetMissing.yaml | Update fixture headers/values for node pool missing case. |
| test/integration/fixtures/TestLKENodePool_GetFound_k8s.yaml | Update kube fixture content (host/arch/metadata) for node pool test. |
| test/integration/TestReservedIPAddresses_GetInstanceIPReservationStatus.yaml | Remove old top-level fixture file (moved/renamed under fixtures). |
| test/integration/fixtures/TestListMonitorAlertChannels.yaml | Remove obsolete fixture file. |
| test/integration/firewalls_test.go | Add assertions for firewall entities being empty in create/update responses. |
| test/integration/firewalls_devices_test.go | Add assertions for firewall/entities and parent entity behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…IPv4 (#945) * TPT-4277 Implement support for Reserved IP for IPv4 * Refactor existing tests for ReservedIPs - replace hardcoded regions with getRegionsWithCaps - skip tests that will fail on DevCloud * Update fixtures for existing ReservedIPs tests * Add assertions for ReservedIPs in existing tests * Add assertions for ReservedIP Tags * Add test for Tag with ReservedIP * Linter & fixtures fixes * Extend assertions in TestTag_CreateTagWithReservedIP * Regenerate fixtures after merge with proj/reserved-ips * Remove redundant unit tests added accidentally during rebase --------- Co-authored-by: Michal Wojcik <miwojci@akamai.com>
fd56a69 to
93e1b58
Compare
Comment on lines
18
to
+21
| type ReserveIPOptions struct { | ||
| Region string `json:"region"` | ||
| Region string `json:"region"` | ||
| Tags []string `json:"tags,omitempty"` | ||
| } |
Comment on lines
+7
to
+11
| // ReservedIPAssignedEntity represents the entity that a reserved IP is assigned to. | ||
| // NOTE: Reserved IP feature may not currently be available to all users. | ||
| type ReservedIPAssignedEntity struct { | ||
| ID int `json:"id"` | ||
| Label string `json:"label"` |
Comment on lines
+108
to
+110
| if len(tagObjects) == 0 || tagObjects[0].Type != "reserved_ipv4_address" || !tagObjects[0].Data.(InstanceIP).Reserved || tagObjects[0].Data.(InstanceIP).Tags[0] != tag.Label { | ||
| t.Fatalf("Should have found Tag in tagged objects list, got %v", tagObjects) | ||
| } |
yec-akamai
approved these changes
Jun 9, 2026
| type ReserveIPOptions struct { | ||
| Region string `json:"region"` | ||
| Region string `json:"region"` | ||
| Tags []string `json:"tags,omitempty"` |
Member
There was a problem hiding this comment.
We need to replace all omitempty with omitzero since linodego v2
mawilk90
approved these changes
Jun 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📝 Description
This pull request merges the changes from the Reserved IPv4 project into the main branch for release.