Equinix Metal
A Python client for the Equinix Metal API.
This repository is Maintained meaning that this software is supported by Equinix Metal and its community - available to use in production environments.
Table of Contents
- 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
Installation
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
Documentation
Full Equinix Metal API documenation is available here: https://metal.equinix.com/developers/api/
Authentication
Provide your credentials when instantiating client:
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
Examples
List Projects
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
projects = manager.list_projects()
for project in projects:
print(project)
List Plans
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'])
Creating a Device
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)
Checking the Status and Rebooting a Device
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
device = manager.get_device('device-id')
print(device.state)
device.reboot()
Listing all Devices Limiting to 50 per Page
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)
Updating a Device
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
device = manager.get_device('device-id')
device.hostname = "test02"
device.description = "new description"
device.update()
Deleting a Device
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
device = manager.get_device('device-id')
device.delete()
Creating a Device Batch
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)
Creating a Volume
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)
Attaching and Detaching a 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()
Creating and Restoring a Volume Snapshot
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)
Listing Project IP Addresses
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
ips = manager.list_project_ips("project_id")
for ip in ips:
print(ip.address)
Creating a Project for an Organization
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)
Creating a VLAN
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
vlan = manager.create_vlan(project_id="project_id", facility="ewr1")
print(vlan)
Contributing
- 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.
Credits
CargoCulted with much gratitude from: https://github.com/koalalorenzo/python-digitalocean
Changes
See the Changelog for further details.
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog. This project adheres to Semantic Versioning.
[1.45.0] - Unreleased
Added
Changed
Fixed
[1.44.3] - 2022-07-27
Fixed
- Fix handling non-dict error data in ResponseError #128 #129
[1.44.2] - 2021-11-18
Fixed
- Fix logic behind
validate_metro_capacity#125
[1.44.1] - 2021-09-20
Fixed
- Fix metros URL used in Metro API lists #122
- Catch TypeError when HardwareReservations do not have a device assignment #120
[1.44.0] - 2021-05-19
Added
- User-Agent header added to client requests #113
Metroclass added (https://feedback.equinixmetal.com/changelog/new-metros-feature-live) #110- Adds
metroproperty toDeviceBatch,Device,IPAddress,VLan#110 - Adds
metrotocreate_device,reserve_ip_address,create_vlan,create_connection#110 - Adds
list_metros,validate_metro_capacitytoManager#110 - Adds
CODE_OF_CONDUCT.md,SUPPORT.md,OWNERS.md#102, #101, #100 - Adds package metadata for
author,author_email,copyright#114
Changed
facilityis now optional increate_device,reserve_ip_address,create_vlan,create_connection#110- CI is using GH Actions instead of Drone #115
Fixed
- Handles when IPAddress Facility is null in API responses #117
[1.43.1] - 2020-09-04
Fixed
- ResponseError fixed for Python2.7 compatibility
[1.43.0] - 2020-07-14
Added
- Support for reinstalling the operating system to a device, including changing the operating system.
Manager.create_vlannow includes a description argument
Changed
ResponseErrorwill now be raised when an API call results in an error
Fixed
Manager.validate_capacitynow considers availabilityManager.create_project_ssh_keywill retry when it encounters 404 responses following a successful creation.- API responses with
{"error":""}keys were not handled well, and will now be handled just like{"errors":[""]}keys.
[1.42.0] - 2020-02-14
Added
- Capturing of
available_into Plan - Capturing of
hardware_reservation,spot_price_max,termination_time, andprovisioning_percentagetoDevice - Support for creating project ssh keys
- Support for passing
custom_datawhen creating a device
Fixed
- Black not building for CI and thus failing
[1.41.0] - 2019-10-16
Added
- Support for retrieval of hardware reservations
- CPR support at device creation
[1.40.0] - 2019-10-14
Added
- Integration tests are only run if
PACKET_PYTHON_TEST_ACTUAL_APIenvvar is set - Rescue action and along with test
- Missing SPDX and source encoding meta comments
Removed
- Use of Travis CI
[1.39.1] - 2019-09-17
Added
- Support for
hardware_reservation_id
[1.39.0] - 2019-08-26
Added
- Support for Organizations, Events, Emails, VLAN, Snapshot Policies, Batches, Ports, VPN and IPs.
- Live tests
[1.38.2] - 2019-05-30
Added
- Test fixtures to sdist
[1.38.1] - 2019-05-30
Fixed
- Changelog
[1.38.0] - 2019-05-30
Added
- Support for python3.7
legacyparam toget_capacityfunction
Removed
- Support for python3.3
Changed
- setup.py no longer converts markdown to reST because pypi now supports markdown, woop.
[1.37.1] - 2018-01-08
Fixed
- Version number in setup.py
[1.37.0] - 2018-01-08
Added
- Spot Market Support
- Ability to specify ssh keys on device creation
[1.36.0] - 2017-10-16
Added
- Better tests using PacketMockManager
- Test on 2.7 and 3.[3-6]
- Changelog
Changed
- Use tox for testing
[1.35] - 2017-08-04
Fixed
- Some tests were broken
[1.35]
Added
public_ipv4_subnet_size
[1.34] - 2017-08-04
Added
- Custom iPXE and
always_pxesetting - Volume coloning
- Device Tags
Fixed
- Handling of error messages from api response
[1.33] - 2017-03-15
Fixed
- Default payment method
Release files for packet-python 1.44.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| packet-python-1.44.3.tar.gz | 41.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| packet_python-1.44.3-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 67.7 kB
Release files / packet-python-1.44.3.tar.gz
| Download URL | packet-python-1.44.3.tar.gz |
|---|---|
| Size | 41.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5957cc10b3a89a5ec7c7bf23cba4c0c251512ee490bbd76db1be8a86cebf7202
|
|
BLAKE2b-256 checksum How to use checksums |
36a5ce1dbc68f65d3be09afe3702687fad82b03d590906429a4b5533cb0a23cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.13
|
Release files / packet_python-1.44.3-py2.py3-none-any.whl
| Download URL | packet_python-1.44.3-py2.py3-none-any.whl |
|---|---|
| Size | 26.4 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
ea1f1eed38e017dbb486572823272ccfac8aad95a4709c0e67f69f6eba72b527
|
|
BLAKE2b-256 checksum How to use checksums |
a52a59778fc963f6a987296a1641aa48aedd8afc2faf053a0947dc412592f721
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.13
|