Skip to content

Commit

Permalink
Merge pull request #54 from TheAntColony/master
Browse files Browse the repository at this point in the history
Live tests, added missing features
  • Loading branch information
jasmingacic committed Aug 20, 2019
2 parents 82e6034 + ef0db65 commit 7e55c71
Show file tree
Hide file tree
Showing 38 changed files with 1,915 additions and 140 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ __pycache__/

# C extensions
*.so
.idea/

# Distribution / packaging
.Python
Expand All @@ -23,6 +24,7 @@ var/
*.egg-info/
.installed.cfg
*.egg
enable/

# PyInstaller
# Usually these files are written by a python script from a template
Expand Down
201 changes: 180 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,35 @@
Packet
======
# Packet

A Python client for the Packet API.

![travis build status badge](https://travis-ci.org/packethost/packet-python.svg?branch=master "Build Status")

Installation
------------
## 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 packet python api library can be installed using pip:

pip install packet-python
Expand All @@ -15,14 +38,23 @@ Package information available here:

https://pypi.python.org/pypi/packet-python

Documentation
-------------
## Documentation

Full Packet API documenation is available here:
[https://www.packet.net/developers/api/](https://www.packet.net/developers/api/)

Examples
--------
### List projects
## Authentication

Provide your credentials when instantiating client:

```python
import packet
manager = packet.Manager(auth_token="yourapiauthtoken")
```

## Examples

### List Projects

```python
import packet
Expand All @@ -33,7 +65,7 @@ for project in projects:
print(project)
```

### List plans
### List Plans

```python
import packet
Expand All @@ -55,11 +87,11 @@ manager = packet.Manager(auth_token="yourapiauthtoken")
device = manager.create_device(project_id='project-id',
hostname='node-name-of-your-choice',
plan='baremetal_1', facility='ewr1',
operating_system='ubuntu_14_04')
operating_system='ubuntu_18_04')
print(device)
```

### Checking the status and rebooting a Device
### Checking the Status and Rebooting a Device

```python
import packet
Expand All @@ -70,7 +102,7 @@ print(device.state)
device.reboot()
```

### Listing all devices, limiting to 50 per page
### Listing all Devices Limiting to 50 per Page

_Packet API defaults to a limit of 10 per page_

Expand All @@ -84,8 +116,138 @@ devices = manager.list_devices(project_id='project_id', params = params)
print(devices)
```

Contributing
------------
### 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.
Expand All @@ -94,18 +256,15 @@ Contributing
* Commit and push until you are happy with your contribution.
* You can test your changes with the `test/tests.sh` script, which is what travis uses to check builds.

Credits
-------
## Credits

CargoCulted with much gratitude from:
https://github.com/koalalorenzo/python-digitalocean

Copyright
---------
## Copyright

Copyright (c) 2017 Packet Host. See [License](LICENSE.txt) for further details.

Changes
-------
## Changes

See the [Changelog](CHANGELOG.md) for further details.
25 changes: 25 additions & 0 deletions packet/BGPConfig.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: LGPL-3.0-only


class BGPConfig:
def __init__(self, data):
self.id = data.get("id")
self.status = data.get("status")
self.deployment_type = data.get("deployment_type")
self.asn = data.get("asn")
self.md5 = data.get("md5")
self.route_object = data.get("route_object")
self.max_prefix = data.get("max_prefix")
self.created_at = data.get("created_at")
self.requested_at = data.get("requested_at")
self.project = data.get("project")
self.sessions = data.get("sessions")
self.ranges = data.get("ranges")
self.href = data.get("href")

def __str__(self):
return "%s" % self.id

def __repr__(self):
return "{}: {}".format(self.__class__.__name__, self.id)
22 changes: 22 additions & 0 deletions packet/BGPSession.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: LGPL-3.0-only


class BGPSession:
def __init__(self, data):
self.id = data.get("id")
self.status = data.get("status")
self.learned_routes = data.get("learned_routes")
self.switch_name = data.get("switch_name")
self.default_route = data.get("default_route")
self.created_at = data.get("created_at")
self.updated_at = data.get("updated_at")
self.device = data.get("device")
self.address_family = data.get("address_family")
self.href = data.get("href")

def __str__(self):
return "%s" % self.id

def __repr__(self):
return "{}: {}".format(self.__class__.__name__, self.id)
22 changes: 22 additions & 0 deletions packet/Batch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: LGPL-3.0-only


class Batch:
def __init__(self, data):
self.id = data.get("id")
self.error_messages = data.get("error_messages")
self.quantity = data.get("quantity")
self.state = data.get("state")
self.created_at = data.get("created_at")
self.updated_at = data.get("updated_at")
self.devices = data.get("devices")
self.project = data.get("project")
self.state = data.get("state")
self.error_messages = data.get("error_messages")

def __str__(self):
return "%s" % self.id

def __repr__(self):
return "{}: {}".format(self.__class__.__name__, self.id)
Loading

0 comments on commit 7e55c71

Please sign in to comment.