Equinix Metal (Packet) API client
Project description
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
Metro
class added (https://feedback.equinixmetal.com/changelog/new-metros-feature-live) #110- Adds
metro
property toDeviceBatch
,Device
,IPAddress
,VLan
#110 - Adds
metro
tocreate_device
,reserve_ip_address
,create_vlan
,create_connection
#110 - Adds
list_metros
,validate_metro_capacity
toManager
#110 - Adds
CODE_OF_CONDUCT.md
,SUPPORT.md
,OWNERS.md
#102, #101, #100 - Adds package metadata for
author
,author_email
,copyright
#114
Changed
facility
is 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_vlan
now includes a description argument
Changed
ResponseError
will now be raised when an API call results in an error
Fixed
Manager.validate_capacity
now considers availabilityManager.create_project_ssh_key
will 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_in
to Plan - Capturing of
hardware_reservation
,spot_price_max
,termination_time
, andprovisioning_percentage
toDevice
- Support for creating project ssh keys
- Support for passing
custom_data
when 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_API
envvar 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
legacy
param toget_capacity
function
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_pxe
setting - Volume coloning
- Device Tags
Fixed
- Handling of error messages from api response
[1.33] - 2017-03-15
Fixed
- Default payment method
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file packet-python-1.44.3.tar.gz
.
File metadata
- Download URL: packet-python-1.44.3.tar.gz
- Upload date:
- Size: 41.3 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5957cc10b3a89a5ec7c7bf23cba4c0c251512ee490bbd76db1be8a86cebf7202 |
|
MD5 | 2a82b54eec69110c40f9dcb0f212e199 |
|
BLAKE2b-256 | 36a5ce1dbc68f65d3be09afe3702687fad82b03d590906429a4b5533cb0a23cb |
File details
Details for the file packet_python-1.44.3-py2.py3-none-any.whl
.
File metadata
- Download URL: packet_python-1.44.3-py2.py3-none-any.whl
- Upload date:
- Size: 26.4 kB
- Tags: Python 2, Python 3
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea1f1eed38e017dbb486572823272ccfac8aad95a4709c0e67f69f6eba72b527 |
|
MD5 | 08f16e27f149a3c67aadbe4993e22bd1 |
|
BLAKE2b-256 | a52a59778fc963f6a987296a1641aa48aedd8afc2faf053a0947dc412592f721 |