Skip to content

feat!: drop support for Equinix Metal#1006

Open
displague wants to merge 3 commits intomainfrom
metal_extraction
Open

feat!: drop support for Equinix Metal#1006
displague wants to merge 3 commits intomainfrom
metal_extraction

Conversation

@displague
Copy link
Copy Markdown
Member

Equinix Metal is sunsetting on June 30, 2026. See https://docs.equinix.com/metal/ for more information.

Terraform support for Equinix Metal resources is available in the v4 Terraform provider. When removing equinix_metal_* resources from Equinix Terraform configurations, provider configuration parameters specific to Equinix Metal, such as auth_token must also be removed.

See https://registry.terraform.io/providers/equinix/equinix/latest/docs

BREAKING CHANGE: equinix_metal_* resource support has been removed in Equinix Terraform provider v5

Copilot AI review requested due to automatic review settings April 3, 2026 04:11
@displague displague requested review from a team as code owners April 3, 2026 04:11
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes Equinix Metal support from the v5 provider, aligning with Metal’s announced sunset timeline and making equinix_metal_* resources/data sources unavailable going forward.

Changes:

  • Removed Metal resources/data sources (Framework + SDKv2 implementations) and associated helpers/sweepers.
  • Removed Metal acceptance tests and test utilities.
  • Removed Metal-related docs and examples from the repository.

Reviewed changes

Copilot reviewed 198 out of 280 changed files in this pull request and generated no comments.

Show a summary per file
File Description
internal/resources/metal/project/datasource_schema.go Removed Metal project data source schema (Framework).
internal/resources/metal/project/datasource.go Removed Metal project data source implementation (Framework).
internal/resources/metal/project/bgp_config.go Removed Metal project BGP config helper logic.
internal/resources/metal/port/datasource_test.go Removed Metal port data source acceptance tests.
internal/resources/metal/port/datasource.go Removed Metal port data source (SDKv2).
internal/resources/metal/organization_member/resource_schema.go Removed Metal organization member resource schema (Framework).
internal/resources/metal/organization_member/models.go Removed Metal organization member state model/parse logic.
internal/resources/metal/organization/sweeper.go Removed Metal organization test sweeper.
internal/resources/metal/organization/resource_schema.go Removed Metal organization resource schema (Framework).
internal/resources/metal/organization/models.go Removed Metal organization resource/data source models and parsing helpers.
internal/resources/metal/organization/datasource_schema.go Removed Metal organization data source schema (Framework).
internal/resources/metal/organization/datasource.go Removed Metal organization data source implementation (Framework).
internal/resources/metal/gateway/resource_schema.go Removed Metal gateway resource schema (Framework).
internal/resources/metal/gateway/datasource_test.go Removed Metal gateway data source acceptance tests (incl. upgrade test).
internal/resources/metal/gateway/datasource_schema.go Removed Metal gateway data source schema (Framework).
internal/resources/metal/gateway/datasource.go Removed Metal gateway data source implementation (Framework).
internal/resources/metal/device/sweeper.go Removed Metal device test sweeper.
internal/resources/metal/device/list_datasource_test.go Removed Metal devices list data source acceptance tests.
internal/resources/metal/device/list_datasource.go Removed Metal devices list data source (SDKv2).
internal/resources/metal/device/datasource_test.go Removed Metal device data source acceptance tests.
internal/resources/metal/connection/sweeper.go Removed Metal connection test sweeper.
internal/resources/metal/connection/speed_test.go Removed unit tests for Metal connection speed formatting.
internal/resources/metal/connection/speed.go Removed Metal connection speed parsing/formatting helpers.
internal/resources/metal/connection/datasource.go Removed Metal connection data source implementation (Framework).
internal/resources/metal/batch/doc.go Removed Metal batch package doc (VLAN helper).
internal/provider/services/metal.go Removed Metal service registration (resources + data sources) from Framework provider wiring.
internal/mutexkv/mutexkv.go Removed Metal-scoped mutex KV helper.
internal/deprecations/metal.go Removed standard Metal deprecation message constant.
internal/acceptance/ssh_key_helpers.go Removed Metal SSH key acceptance helper.
internal/acceptance/device_helpers_test.go Removed tests for Metal acceptance helper utilities.
internal/acceptance/device_helpers.go Removed Metal device acceptance config helpers (plan/metro/os selection + termination time).
examples/resources/equinix_metal_vrf/example_3.tf Removed Metal VRF example (virtual circuit attachment).
examples/resources/equinix_metal_vrf/example_2.tf Removed Metal VRF example (gateway + reserved block + VLAN).
examples/resources/equinix_metal_vrf/example_1.tf Removed Metal VRF example (project + VRF).
examples/resources/equinix_metal_vlan/example_1.tf Removed Metal VLAN example.
examples/resources/equinix_metal_virtual_circuit/resource.tf Removed Metal virtual circuit example configuration.
examples/resources/equinix_metal_virtual_circuit/import.sh Removed Metal virtual circuit import example.
examples/resources/equinix_metal_user_api_key/example_1.tf Removed Metal user API key example.
examples/resources/equinix_metal_ssh_key/example_1.tf Removed Metal SSH key example (and dependent device).
examples/resources/equinix_metal_spot_market_request/example_1.tf Removed Metal spot market request example.
examples/resources/equinix_metal_reserved_ip_block/example_2.tf Removed Metal reserved IP block example (device assignment).
examples/resources/equinix_metal_reserved_ip_block/example_1.tf Removed Metal reserved IP block examples.
examples/resources/equinix_metal_project_ssh_key/example_1.tf Removed Metal project SSH key example.
examples/resources/equinix_metal_project_api_key/example_1.tf Removed Metal project API key example.
examples/resources/equinix_metal_project/example_3.tf Removed Metal project example (existing project + BGP).
examples/resources/equinix_metal_project/example_2.tf Removed Metal project example (BGP config).
examples/resources/equinix_metal_project/example_1.tf Removed Metal project example (basic).
examples/resources/equinix_metal_port_vlan_attachment/example_2.tf Removed Metal port VLAN attachment example (layer2-individual).
examples/resources/equinix_metal_port_vlan_attachment/example_1.tf Removed Metal port VLAN attachment example (hybrid).
examples/resources/equinix_metal_organization_member/example_2.tf Removed Metal org member example (owner).
examples/resources/equinix_metal_organization_member/example_1.tf Removed Metal org member example (member).
examples/resources/equinix_metal_organization/example_1.tf Removed Metal organization example.
examples/resources/equinix_metal_ip_attachment/example_1.tf Removed Metal IP attachment example.
examples/resources/equinix_metal_gateway/example_2.tf Removed Metal gateway example (reserved block).
examples/resources/equinix_metal_gateway/example_1.tf Removed Metal gateway example (private subnet).
examples/resources/equinix_metal_device/example_5.tf Removed Metal device example (PXE + behavior).
examples/resources/equinix_metal_device/example_4.tf Removed Metal device example (storage JSON).
examples/resources/equinix_metal_device/example_3.tf Removed Metal device example (private IPv4 block).
examples/resources/equinix_metal_device/example_2.tf Removed Metal device example (custom iPXE).
examples/resources/equinix_metal_device/example_1.tf Removed Metal device example (basic).
examples/resources/equinix_metal_connection/metal_billed_metal_to_fabric_port.tf Removed Metal↔Fabric connection example (Metal-billed).
examples/resources/equinix_metal_connection/metal_billed_metal_to_csp.tf Removed Metal↔CSP connection example (Azure).
examples/resources/equinix_metal_connection/fabric_billed_metal_from_network_edge.tf Removed Fabric-billed Metal-from-NetworkEdge example.
examples/resources/equinix_metal_connection/fabric_billed_metal_from_fcr.tf Removed Fabric-billed Metal-from-FCR example.
examples/resources/equinix_metal_connection/fabric_billed_metal_from_fabric_port.tf Removed Fabric-billed Metal-from-port example.
examples/resources/equinix_metal_bgp_session/example_1.tf Removed Metal BGP session example.
examples/resources/equinix_fabric_connection/metal_to_aws.tf Removed Fabric connection example that used Metal auth code.
examples/resources/equinix_fabric_connection/fcr_to_metal.tf Removed Fabric connection example that used Metal auth code.
examples/example_2.tf Removed example provider config for Metal-only credentials (auth_token).
examples/data-sources/equinix_metal_vrf/example_1.tf Removed Metal VRF data source example.
examples/data-sources/equinix_metal_vlan/example_2.tf Removed Metal VLAN data source example (project+vxlan+metro).
examples/data-sources/equinix_metal_vlan/example_1.tf Removed Metal VLAN data source example (by ID).
examples/data-sources/equinix_metal_virtual_circuit/data-source.tf Removed Metal virtual circuit data source example.
examples/data-sources/equinix_metal_spot_market_request/example_1.tf Removed Metal spot market request data source example.
examples/data-sources/equinix_metal_spot_market_price/example_1.tf Removed Metal spot market price data source example.
examples/data-sources/equinix_metal_reserved_ip_block/example_1.tf Removed Metal reserved IP block data source example.
examples/data-sources/equinix_metal_project_ssh_key/example_1.tf Removed Metal project SSH key data source example.
examples/data-sources/equinix_metal_project/example_1.tf Removed Metal project data source example.
examples/data-sources/equinix_metal_precreated_ip_block/example_1.tf Removed Metal precreated IP block data source example.
examples/data-sources/equinix_metal_port/example_1.tf Removed Metal port data source example.
examples/data-sources/equinix_metal_plans/example_4.tf Removed Metal plans example (ignore_changes pattern).
examples/data-sources/equinix_metal_plans/example_3.tf Removed Metal plans example (cheapest plan selection).
examples/data-sources/equinix_metal_plans/example_2.tf Removed Metal plans example (class + spot + metros).
examples/data-sources/equinix_metal_plans/example_1.tf Removed Metal plans example (pricing + metros).
examples/data-sources/equinix_metal_organization/example_1.tf Removed Metal organization data source example.
examples/data-sources/equinix_metal_operating_system/example_1.tf Removed Metal OS data source example.
examples/data-sources/equinix_metal_metro/example_2.tf Removed Metal metro capacity example.
examples/data-sources/equinix_metal_metro/example_1.tf Removed Metal metro data source example.
examples/data-sources/equinix_metal_ip_block_ranges/example_1.tf Removed Metal IP block ranges data source example.
examples/data-sources/equinix_metal_hardware_reservation/example_1.tf Removed Metal hardware reservation data source example.
examples/data-sources/equinix_metal_gateway/example_1.tf Removed Metal gateway data source example.
examples/data-sources/equinix_metal_facility/example_2.tf Removed Metal facility capacity example.
examples/data-sources/equinix_metal_facility/example_1.tf Removed Metal facility data source example.
examples/data-sources/equinix_metal_devices/example_2.tf Removed Metal devices data source example (search).
examples/data-sources/equinix_metal_devices/example_1.tf Removed Metal devices data source example (filters).
examples/data-sources/equinix_metal_device_bgp_neighbors/example_1.tf Removed Metal BGP neighbors data source example.
examples/data-sources/equinix_metal_device/example_2.tf Removed Metal device data source example (by ID).
examples/data-sources/equinix_metal_device/example_1.tf Removed Metal device data source example (by hostname).
examples/data-sources/equinix_metal_connection/example_1.tf Removed Metal connection data source example.
equinix/resource_metal_user_api_key_acc_test.go Removed (commented-out) Metal user API key acceptance test file.
equinix/resource_metal_user_api_key.go Removed Metal user API key resource (SDKv2).
equinix/resource_metal_project_api_key_acc_test.go Removed Metal project API key acceptance tests.
equinix/resource_metal_ip_attachment.go Removed Metal IP attachment resource (SDKv2).
equinix/resource_metal_device_network_type.go Removed Metal device network type resource (SDKv2).
equinix/resource_metal_bgp_setup_acc_test.go Removed Metal BGP setup acceptance tests.
equinix/resource_metal_bgp_session.go Removed Metal BGP session resource (SDKv2).
equinix/metal_provider_maps.go Removed Metal resource/data source registration maps (SDKv2 provider wiring).
equinix/data_source_metal_spot_market_price.go Removed Metal spot market price data source (SDKv2).
equinix/data_source_metal_reserved_ip_block_acc_test.go Removed Metal reserved IP block data source acceptance tests.
equinix/data_source_metal_precreated_ip_block_acc_test.go Removed Metal precreated IP block data source acceptance tests.
equinix/data_source_metal_plans_acc_test.go Removed Metal plans data source acceptance tests.
equinix/data_source_metal_operating_system_acc_test.go Removed Metal OS data source acceptance tests.
equinix/data_source_metal_operating_system.go Removed Metal OS data source (SDKv2).
equinix/data_source_metal_metro_acc_test.go Removed Metal metro data source acceptance tests.
equinix/data_source_metal_metro.go Removed Metal metro data source (SDKv2).
equinix/data_source_metal_ip_block_ranges_acc_test.go Removed Metal IP block ranges data source acceptance tests.
equinix/data_source_metal_hardware_reservation.go Removed Metal hardware reservation data source (SDKv2).
equinix/data_source_metal_facility.go Removed Metal facility data source (SDKv2) and capacity helpers.
equinix/data_source_metal_device_bgp_neighbors_acc_test.go Removed Metal device BGP neighbors data source acceptance tests.
equinix/common_test.go Removed common Metal acceptance helpers duplicated in SDKv2 tests.
docs/resources/metal_vrf.md Removed generated docs for Metal VRF resource.
docs/resources/metal_vlan.md Removed generated docs for Metal VLAN resource.
docs/resources/metal_virtual_circuit.md Removed generated docs for Metal virtual circuit resource.
docs/resources/metal_user_api_key.md Removed generated docs for Metal user API key resource.
docs/resources/metal_ssh_key.md Removed generated docs for Metal SSH key resource.
docs/resources/metal_project_ssh_key.md Removed generated docs for Metal project SSH key resource.
docs/resources/metal_project_api_key.md Removed generated docs for Metal project API key resource.
docs/resources/metal_project.md Removed generated docs for Metal project resource.
docs/resources/metal_port_vlan_attachment.md Removed generated docs for Metal port VLAN attachment resource.
docs/resources/metal_port.md Removed generated docs for Metal port resource.
docs/resources/metal_organization_member.md Removed generated docs for Metal org member resource.
docs/resources/metal_organization.md Removed generated docs for Metal organization resource.
docs/resources/metal_ip_attachment.md Removed generated docs for Metal IP attachment resource.
docs/resources/metal_gateway.md Removed generated docs for Metal gateway resource.
docs/resources/metal_device_network_type.md Removed generated docs for Metal device_network_type resource.
docs/guides/migration_guide_facilities_to_metros_devices.md Removed Metal-specific migration guide documentation.
docs/data-sources/metal_vrf.md Removed generated docs for Metal VRF data source.
docs/data-sources/metal_vlan.md Removed generated docs for Metal VLAN data source.
docs/data-sources/metal_virtual_circuit.md Removed generated docs for Metal virtual circuit data source.
docs/data-sources/metal_spot_market_price.md Removed generated docs for Metal spot market price data source.
docs/data-sources/metal_reserved_ip_block.md Removed generated docs for Metal reserved IP block data source.
docs/data-sources/metal_project_ssh_key.md Removed generated docs for Metal project SSH key data source.
docs/data-sources/metal_project.md Removed generated docs for Metal project data source.
docs/data-sources/metal_precreated_ip_block.md Removed generated docs for Metal precreated IP block data source.
docs/data-sources/metal_port.md Removed generated docs for Metal port data source.
docs/data-sources/metal_organization.md Removed generated docs for Metal organization data source.
docs/data-sources/metal_operating_system.md Removed generated docs for Metal OS data source.
docs/data-sources/metal_metro.md Removed generated docs for Metal metro data source.
docs/data-sources/metal_ip_block_ranges.md Removed generated docs for Metal IP block ranges data source.
docs/data-sources/metal_hardware_reservation.md Removed generated docs for Metal hardware reservation data source.
docs/data-sources/metal_gateway.md Removed generated docs for Metal gateway data source.
docs/data-sources/metal_facility.md Removed generated docs for Metal facility data source.
docs/data-sources/metal_devices.md Removed generated docs for Metal devices data source.
docs/data-sources/metal_device_bgp_neighbors.md Removed generated docs for Metal BGP neighbors data source.
docs/data-sources/metal_device.md Removed generated docs for Metal device data source.
docs/data-sources/metal_connection.md Removed generated docs for Metal connection data source.

Equinix Metal is sunsetting on June 30, 2026. See https://docs.equinix.com/metal/ for more information.

Terraform support for Equinix Metal resources is available in the v4 Terraform provider.
When removing `equinix_metal_*` resources from Equinix Terraform configurations, provider configuration
parameters specific to Equinix Metal, such as `auth_token` must also be removed.

See https://registry.terraform.io/providers/equinix/equinix/latest/docs

Signed-off-by: Marques Johansson <[email protected]>
BREAKING CHANGE: equinix_metal_* resource support has been removed in Equinix Terraform provider v5
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 3, 2026

Codecov Report

❌ Patch coverage is 10.00000% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 64.23%. Comparing base (31781d0) to head (f178c80).

Files with missing lines Patch % Lines
internal/resources/fabric/connection/resource.go 0.00% 3 Missing ⚠️
internal/acceptance/acceptance.go 0.00% 2 Missing ⚠️
internal/errors/errors.go 0.00% 1 Missing ⚠️
internal/framework/resource_base.go 0.00% 1 Missing ⚠️
internal/framework/types/objectof.go 0.00% 1 Missing ⚠️
internal/nprintf/nprintf.go 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##             main    #1006       +/-   ##
===========================================
+ Coverage   28.72%   64.23%   +35.51%     
===========================================
  Files         252      172       -80     
  Lines       29225    21845     -7380     
===========================================
+ Hits         8394    14033     +5639     
+ Misses      20677     7228    -13449     
- Partials      154      584      +430     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@displague
Copy link
Copy Markdown
Member Author

Linters are mainly failing on touched files that were only partially touched to remove Metal.

We may want to add a golangci-lint block, like that removed for Metal files, to the NE and Fabric space (at least until this PR is merged).

diff --git a/.golangci.yaml b/.golangci.yaml
index 672030c9..d8cfe092 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -29,25 +29,6 @@ linters:
       linters:
         - revive
       text: "don't use an underscore in package name"
-    # Ignore linter errors in Metal files (deprecated code to be removed in v5.0.0)
-    - path: equinix/data_source_metal_.*\.go
-      linters:
-        - errcheck
-        - revive
-        - staticcheck
-        - unused
-    - path: equinix/resource_metal_.*\.go
-      linters:
-        - errcheck
-        - revive
-        - staticcheck
-        - unused
-    - path: internal/resources/metal/.*\.go
-      linters:
-        - errcheck
-        - revive
-        - staticcheck
-        - unused
 formatters:
   enable:
     - goimports

@displague
Copy link
Copy Markdown
Member Author

Ideally this is merged in the same release as #1008

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants