A Python client for the Equinix Metal API.
Warning
With the upcoming EoL of Equinix Metal on June 30, 2026, this repo is being archived on February 28, 2026.
This repository is Maintained meaning that this software is supported by Equinix Metal and its community - available to use in production environments.
- Installation
- Documentation
- Authentication
- Examples
- List Projects
- List Plans
- Creating a Device
- Checking the Status and Rebooting a Device
- Listing all Devices Limiting to 50 per Page
- Updating a Device
- Deleting a Device
- Creating a Device Batch
- Creating a Volume
- Attaching and Detaching a Volume
- Creating and Restoring a Volume Snapshot
- Listing Project IP Addresses
- Creating a Project for an Organization
- Creating a VLAN
- Contributing
- Copyright
- Changes
The Equinix Metal python api library can be installed using pip:
pip install packet-python
Package information available here:
https://pypi.python.org/pypi/packet-python
Full Equinix Metal API documenation is available here: https://metal.equinix.com/developers/api/
Provide your credentials when instantiating client:
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
projects = manager.list_projects()
for project in projects:
print(project)import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
plans = manager.list_plans()
for plan in plans:
print(plan)
if 'cpus' in plan.specs:
print(plan.specs['cpus'][0]['count'])import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
device = manager.create_device(project_id='project-id',
hostname='node-name-of-your-choice',
plan='baremetal_1', metro='sv',
operating_system='ubuntu_18_04')
print(device)import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
device = manager.get_device('device-id')
print(device.state)
device.reboot()Equinix Metal API defaults to a limit of 10 per page
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
params = {
'per_page': 50
}
devices = manager.list_devices(project_id='project_id', params = params)
print(devices)import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
device = manager.get_device('device-id')
device.hostname = "test02"
device.description = "new description"
device.update()import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
device = manager.get_device('device-id')
device.delete()import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
batch01 = packet.DeviceBatch({
"hostname": "batch01",
"quantity": 2,
"facility": "ams1",
"operating_system": "centos_7",
"plan": "baremetal_0",
})
device_batch = manager.create_batch(project_id="project_id", params=[batch01])
print(device_batch)import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
volume = manager.create_volume(project_id="project-id",
description="volume description",
plan="storage_1",
size="100",
facility="ewr1",
snapshot_count=7,
snapshot_frequency="1day")
print(volume)import packet
import time
manager = packet.Manager(auth_token="yourapiauthtoken")
volume = manager.get_volume("volume_id")
volume.attach("device_id")
while True:
if manager.get_device("device_id").state == "active":
break
time.sleep(2)
volume.detach()import packet
import time
manager = packet.Manager(auth_token="yourapiauthtoken")
volume = manager.get_volume("volume_id")
volume.create_snapshot()
while True:
if manager.get_volume(volume.id).state == "active":
break
time.sleep(2)
snapshots = manager.get_snapshots(volume.id)
volume.restore(snapshots[0].timestamp)import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
ips = manager.list_project_ips("project_id")
for ip in ips:
print(ip.address)import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
project = manager.create_organization_project(
org_id="organization_id",
name="Integration Tests",
customdata={"tag": "QA"}
)
print(project)import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
vlan = manager.create_vlan(project_id="project_id", facility="ewr1")
print(vlan)- Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
- Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
- Fork the project.
- Start a feature/bugfix branch.
- Commit and push until you are happy with your contribution.
- You can test your changes with the
tox, which is what GitHub Actions use to check builds.
CargoCulted with much gratitude from: https://github.com/koalalorenzo/python-digitalocean
See the Changelog for further details.