%global _empty_manifest_terminate_build 0 Name: python-packet-python Version: 1.44.3 Release: 1 Summary: Equinix Metal (Packet) API client License: LGPL v3 URL: https://github.com/packethost/packet-python Source0: https://mirrors.nju.edu.cn/pypi/web/packages/36/a5/ce1dbc68f65d3be09afe3702687fad82b03d590906429a4b5533cb0a23cb/packet-python-1.44.3.tar.gz BuildArch: noarch Requires: python3-requests %description # Equinix Metal A Python client for the Equinix Metal API. [![Build Status](https://github.com/packethost/packet-python/actions/workflows/test.yml/badge.svg)](https://github.com/packethost/packet-python/actions/workflows/test.yml) [![Stability: Maintained](https://img.shields.io/badge/Stability-Maintained-green.svg)](https://github.com/packethost/standards/blob/main/maintained-statement.md#maintained-statements) This repository is [Maintained](https://github.com/packethost/standards/blob/master/maintained-statement.md) meaning that this software is supported by Equinix Metal and its community - available to use in production environments. ## Table of Contents * [Installation](#installation) * [Documentation](#documentation) * [Authentication](#authentication) * [Examples](#examples) * [List Projects](#list-projects) * [List Plans](#list-plans) * [Creating a Device](#creating-a-device) * [Checking the Status and Rebooting a Device](#checking-the-status-and-rebooting-a-device) * [Listing all Devices Limiting to 50 per Page](#listing-all-devices-limiting-to-50-per-page) * [Updating a Device](#updating-a-device) * [Deleting a Device](#deleting-a-device) * [Creating a Device Batch](#creating-a-device-batch) * [Creating a Volume](#creating-a-volume) * [Attaching and Detaching a Volume](#attaching-and-detaching-a-volume) * [Creating and Restoring a Volume Snapshot](#creating-and-restoring-a-volume-snapshot) * [Listing Project IP Addresses](#listing-project-ip-addresses) * [Creating a Project for an Organization](#creating-a-project-for-an-organization) * [Creating a VLAN](#creating-a-vlan) * [Contributing](#contributing) * [Copyright](#copyright) * [Changes](#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/](https://metal.equinix.com/developers/api/) ## Authentication Provide your credentials when instantiating client: ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") ``` ## Examples ### List Projects ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") projects = manager.list_projects() for project in projects: print(project) ``` ### List Plans ```python 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 ```python 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 ```python 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_ ```python 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 ```python 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 ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") device = manager.get_device('device-id') device.delete() ``` ### Creating a Device Batch ```python 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 ```python 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 ```python 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 ```python 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 ```python 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 ```python 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 ```python 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](CHANGELOG.md) for further details. # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [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 to `DeviceBatch`, `Device`, `IPAddress`, `VLan` #110 - Adds `metro` to `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110 - Adds `list_metros`, `validate_metro_capacity` to `Manager` #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 in `create_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 availability - `Manager.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`, and `provisioning_percentage` to `Device` - 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 to `get_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 %package -n python3-packet-python Summary: Equinix Metal (Packet) API client Provides: python-packet-python BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-packet-python # Equinix Metal A Python client for the Equinix Metal API. [![Build Status](https://github.com/packethost/packet-python/actions/workflows/test.yml/badge.svg)](https://github.com/packethost/packet-python/actions/workflows/test.yml) [![Stability: Maintained](https://img.shields.io/badge/Stability-Maintained-green.svg)](https://github.com/packethost/standards/blob/main/maintained-statement.md#maintained-statements) This repository is [Maintained](https://github.com/packethost/standards/blob/master/maintained-statement.md) meaning that this software is supported by Equinix Metal and its community - available to use in production environments. ## Table of Contents * [Installation](#installation) * [Documentation](#documentation) * [Authentication](#authentication) * [Examples](#examples) * [List Projects](#list-projects) * [List Plans](#list-plans) * [Creating a Device](#creating-a-device) * [Checking the Status and Rebooting a Device](#checking-the-status-and-rebooting-a-device) * [Listing all Devices Limiting to 50 per Page](#listing-all-devices-limiting-to-50-per-page) * [Updating a Device](#updating-a-device) * [Deleting a Device](#deleting-a-device) * [Creating a Device Batch](#creating-a-device-batch) * [Creating a Volume](#creating-a-volume) * [Attaching and Detaching a Volume](#attaching-and-detaching-a-volume) * [Creating and Restoring a Volume Snapshot](#creating-and-restoring-a-volume-snapshot) * [Listing Project IP Addresses](#listing-project-ip-addresses) * [Creating a Project for an Organization](#creating-a-project-for-an-organization) * [Creating a VLAN](#creating-a-vlan) * [Contributing](#contributing) * [Copyright](#copyright) * [Changes](#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/](https://metal.equinix.com/developers/api/) ## Authentication Provide your credentials when instantiating client: ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") ``` ## Examples ### List Projects ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") projects = manager.list_projects() for project in projects: print(project) ``` ### List Plans ```python 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 ```python 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 ```python 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_ ```python 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 ```python 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 ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") device = manager.get_device('device-id') device.delete() ``` ### Creating a Device Batch ```python 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 ```python 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 ```python 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 ```python 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 ```python 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 ```python 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 ```python 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](CHANGELOG.md) for further details. # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [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 to `DeviceBatch`, `Device`, `IPAddress`, `VLan` #110 - Adds `metro` to `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110 - Adds `list_metros`, `validate_metro_capacity` to `Manager` #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 in `create_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 availability - `Manager.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`, and `provisioning_percentage` to `Device` - 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 to `get_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 %package help Summary: Development documents and examples for packet-python Provides: python3-packet-python-doc %description help # Equinix Metal A Python client for the Equinix Metal API. [![Build Status](https://github.com/packethost/packet-python/actions/workflows/test.yml/badge.svg)](https://github.com/packethost/packet-python/actions/workflows/test.yml) [![Stability: Maintained](https://img.shields.io/badge/Stability-Maintained-green.svg)](https://github.com/packethost/standards/blob/main/maintained-statement.md#maintained-statements) This repository is [Maintained](https://github.com/packethost/standards/blob/master/maintained-statement.md) meaning that this software is supported by Equinix Metal and its community - available to use in production environments. ## Table of Contents * [Installation](#installation) * [Documentation](#documentation) * [Authentication](#authentication) * [Examples](#examples) * [List Projects](#list-projects) * [List Plans](#list-plans) * [Creating a Device](#creating-a-device) * [Checking the Status and Rebooting a Device](#checking-the-status-and-rebooting-a-device) * [Listing all Devices Limiting to 50 per Page](#listing-all-devices-limiting-to-50-per-page) * [Updating a Device](#updating-a-device) * [Deleting a Device](#deleting-a-device) * [Creating a Device Batch](#creating-a-device-batch) * [Creating a Volume](#creating-a-volume) * [Attaching and Detaching a Volume](#attaching-and-detaching-a-volume) * [Creating and Restoring a Volume Snapshot](#creating-and-restoring-a-volume-snapshot) * [Listing Project IP Addresses](#listing-project-ip-addresses) * [Creating a Project for an Organization](#creating-a-project-for-an-organization) * [Creating a VLAN](#creating-a-vlan) * [Contributing](#contributing) * [Copyright](#copyright) * [Changes](#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/](https://metal.equinix.com/developers/api/) ## Authentication Provide your credentials when instantiating client: ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") ``` ## Examples ### List Projects ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") projects = manager.list_projects() for project in projects: print(project) ``` ### List Plans ```python 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 ```python 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 ```python 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_ ```python 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 ```python 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 ```python import packet manager = packet.Manager(auth_token="yourapiauthtoken") device = manager.get_device('device-id') device.delete() ``` ### Creating a Device Batch ```python 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 ```python 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 ```python 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 ```python 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 ```python 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 ```python 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 ```python 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](CHANGELOG.md) for further details. # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [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 to `DeviceBatch`, `Device`, `IPAddress`, `VLan` #110 - Adds `metro` to `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110 - Adds `list_metros`, `validate_metro_capacity` to `Manager` #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 in `create_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 availability - `Manager.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`, and `provisioning_percentage` to `Device` - 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 to `get_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 %prep %autosetup -n packet-python-1.44.3 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-packet-python -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri May 05 2023 Python_Bot - 1.44.3-1 - Package Spec generated