Skip to content
This repository was archived by the owner on Mar 4, 2026. It is now read-only.

Commit b57d0bc

Browse files
committed
Merge branch 'pr31'
Closes #31 * pr31: add termination_time add spot instance support sort long list of params
2 parents 8bab1ab + dcb43b2 commit b57d0bc

2 files changed

Lines changed: 36 additions & 23 deletions

File tree

packet/Device.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,23 @@ class Device():
88
def __init__(self, data, manager):
99
self.manager = manager
1010

11-
self.id = data['id']
12-
self.plan = data['plan']
11+
self.billing_cycle = data['billing_cycle']
12+
self.created_at = data['created_at']
13+
self.facility = data['facility']
1314
self.hostname = data['hostname']
1415
self.href = data['href']
15-
self.userdata = data['userdata']
16-
self.operating_system = OperatingSystem(data['operating_system'])
16+
self.id = data['id']
17+
self.ip_addresses = data['ip_addresses']
1718
self.locked = data['locked']
19+
self.operating_system = OperatingSystem(data['operating_system'])
20+
self.plan = data['plan']
21+
self.spot_instance = data.get('spot_instance')
22+
self.spot_price_max = data.get('spot_price_max')
23+
self.state = data['state']
1824
self.tags = data['tags']
19-
self.created_at = data['created_at']
25+
self.termination_time = data.get('termination_time')
2026
self.updated_at = data['updated_at']
21-
self.state = data['state']
22-
self.billing_cycle = data['billing_cycle']
2327
self.user = data['user']
24-
self.ip_addresses = data['ip_addresses']
25-
self.facility = data['facility']
2628

2729
def update(self):
2830
params = {

packet/Manager.py

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,33 +77,40 @@ def create_device(self,
7777
plan,
7878
facility,
7979
operating_system,
80+
always_pxe=False,
8081
billing_cycle='hourly',
81-
userdata='',
82-
locked=False,
83-
tags={},
8482
features={},
8583
ipxe_script_url='',
86-
always_pxe=False,
87-
public_ipv4_subnet_size=31):
84+
locked=False,
85+
public_ipv4_subnet_size=31,
86+
spot_instance=False,
87+
spot_price_max=-1,
88+
tags={},
89+
termination_time=None,
90+
userdata=''):
8891

8992
params = {
90-
'hostname': hostname,
91-
'project_id': project_id,
92-
'plan': plan,
93-
'facility': facility,
94-
'operating_system': operating_system,
9593
'billing_cycle': billing_cycle,
96-
'userdata': userdata,
97-
'locked': locked,
94+
'facility': facility,
9895
'features': features,
96+
'hostname': hostname,
97+
'locked': locked,
98+
'operating_system': operating_system,
99+
'plan': plan,
100+
'project_id': project_id,
99101
'public_ipv4_subnet_size': public_ipv4_subnet_size,
100102
'tags': tags,
103+
'userdata': userdata,
101104
}
102105

103106
if ipxe_script_url != '':
104-
params['operating_system'] = 'custom_ipxe'
105-
params['ipxe_script_url'] = ipxe_script_url
106107
params['always_pxe'] = always_pxe
108+
params['ipxe_script_url'] = ipxe_script_url
109+
params['operating_system'] = 'custom_ipxe'
110+
if spot_instance:
111+
params['spot_instance'] = spot_instance
112+
params['spot_price_max'] = spot_price_max
113+
params['termination_time'] = termination_time
107114
data = self.call_api('projects/%s/devices' % project_id, type='POST', params=params)
108115
return Device(data, self)
109116

@@ -173,3 +180,7 @@ def validate_capacity(self, servers):
173180
return False
174181
else:
175182
raise e
183+
184+
def get_spot_market_prices(self, params={}):
185+
data = self.call_api('/market/spot/prices', params=params)
186+
return data["spot_market_prices"]

0 commit comments

Comments
 (0)