TPT-4275: IP Reservation (IPv4) Project#987
Conversation
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
| type ReserveIPOptions struct { | ||
| Region string `json:"region"` | ||
| Region string `json:"region"` | ||
| Tags []string `json:"tags,omitempty"` | ||
| } |
| // 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"` |
| 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) | ||
| } |
| type ReserveIPOptions struct { | ||
| Region string `json:"region"` | ||
| Region string `json:"region"` | ||
| Tags []string `json:"tags,omitempty"` |
There was a problem hiding this comment.
We need to replace all omitempty with omitzero since linodego v2
There was a problem hiding this comment.
Good catch! Just pushed up a fix
📝 Description
This pull request merges the changes from the Reserved IPv4 project into the main branch for release.