Skip to content

Commit 745f545

Browse files
author
Elias Nygren
committed
refactor IP, Firewall and Tags
1 parent f853c81 commit 745f545

18 files changed

+229
-258
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ servers = manager.get_servers()
191191
server1 = manager.get_server(UUID) # e.g servers[0].uuid
192192
storages = manager.get_storages()
193193
storage1 = manager.get_storage(UUID) # e.g sever1.storage_devices[0].uuid
194-
ip_addrs = manager.get_IPs()
195-
ip_addr = manager.get_IP(address) # e.g server1.ip_addresses[0].address
194+
ip_addrs = manager.get_ips()
195+
ip_addr = manager.get_ip(address) # e.g server1.ip_addresses[0].address
196196

197197
```
198198

docs/IP-address-mixin.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,38 +19,38 @@ manager.method()
1919

2020

2121
```python
22-
def get_IP(self, address):
22+
def get_ip(self, address):
2323
"""
24-
Get an IP_address object with the IP address (string) from the API.
25-
e.g manager.get_IP("80.69.175.210")
24+
Get an IPAddress object with the IP address (string) from the API.
25+
e.g manager.get_ip("80.69.175.210")
2626
"""
2727
```
2828

2929
```python
30-
def get_IPs(self):
30+
def get_ips(self):
3131
"""
32-
Get all IP_address objects from the API.
32+
Get all IPAddress objects from the API.
3333
"""
3434
```
3535

3636
```python
37-
def attach_IP(self, server, family="IPv4"):
37+
def attach_ip(self, server, family="IPv4"):
3838
"""
39-
Attach a new (random) IP_address to the given server (object or UUID)
39+
Attach a new (random) IPAddress to the given server (object or UUID)
4040
"""
4141
```
4242
```python
43-
def modify_IP(self, IP_addr, ptr_record):
43+
def modify_ip(self, ip_addr, ptr_record):
4444
"""
4545
Modify an IP address' ptr-record (Reverse DNS).
46-
Accepts an IP_address instance (object) or its address (string).
46+
Accepts an IPAddress instance (object) or its address (string).
4747
"""
4848
```
4949

5050
```python
51-
def release_IP(self, IP_addr):
51+
def release_ip(self, ip_addr):
5252
"""
53-
Destroy an IP_address. Returns an empty object.
54-
Accepts an IP_address instance (object) or its address (string).
53+
Destroy an IPAddress. Returns an empty object.
54+
Accepts an IPAddress instance (object) or its address (string).
5555
"""
5656
```

docs/IP-address.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ CloudManager returns IP-address objects.
2121

2222
```python
2323

24-
manager.get_IPs()
25-
manager.get_IP("185.20.31.125")
24+
manager.get_ips()
25+
manager.get_ip("185.20.31.125")
2626

2727
```
2828

@@ -33,19 +33,19 @@ The new IP-address must be attached to a server and has a random address.
3333
```python
3434

3535
# params: server uuid or a Server object and family, for which default is IPv4
36-
manager.attach_IP(server_uuid)
37-
manager.attach_IP(server_uuid, "IPv4")
38-
manager.attach_IP(server_uuid, "IPv6")
39-
manager.attach_IP(Server)
40-
manager.attach_IP(Server, "IPv4")
41-
manager.attach_IP(Server, "IPv6")
36+
manager.attach_ip(server_uuid)
37+
manager.attach_ip(server_uuid, "IPv4")
38+
manager.attach_ip(server_uuid, "IPv6")
39+
manager.attach_ip(Server)
40+
manager.attach_ip(Server, "IPv4")
41+
manager.attach_ip(Server, "IPv6")
4242

4343

4444
# or use Server instance
4545
server = manager.get_server(uuid)
46-
server.add_IP() # default is IPv4
47-
server.add_IP("IPv4")
48-
server.add_IP("IPv6")
46+
server.add_ip() # default is IPv4
47+
server.add_ip("IPv4")
48+
server.add_ip("IPv6")
4949

5050
```
5151

@@ -55,7 +55,7 @@ At the moment only the ptr_record (reverse DNS) of an IP can be changed.
5555

5656
```python
5757

58-
ip = manager.get_IP("185.20.31.125")
58+
ip = manager.get_ip("185.20.31.125")
5959
ip.ptr_record = "the.new.ptr.record"
6060
ip.save()
6161

@@ -65,7 +65,7 @@ ip.save()
6565

6666
```python
6767

68-
ip = manager.get_IP("185.20.31.125")
68+
ip = manager.get_ip("185.20.31.125")
6969
ip.destroy()
7070

7171
```

docs/Server.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,15 @@ server.remove_storage(storage)
121121

122122
### IP-addresses
123123

124-
A Server's Storages can be attached and detached with `.add_IP()` and `.remove_IP()`. Both requests issue an API request instantly. Note that the attached IP is allocated randomly as UpCloud's does not (yet) support floating IPs.
124+
A Server's Storages can be attached and detached with `.add_ip()` and `.remove_ip()`. Both requests issue an API request instantly. Note that the attached IP is allocated randomly as UpCloud's does not (yet) support floating IPs.
125125

126126
```python
127127

128128
# attach
129-
IP = server.add_IP()
129+
IP = server.add_ip()
130130

131131
# detach
132-
server.remove_IP(IP)
132+
server.remove_ip(IP)
133133

134134
```
135135

test/helpers/infra_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def server_test(manager, server):
5050
server.memory_amount = '1024'
5151
server.save()
5252

53-
server.add_IP()
53+
server.add_ip()
5454

5555
storage = manager.create_storage(size=10, tier='maxiops', zone=ZONE.London)
5656
server.add_storage(storage)

test/test_ip_manager.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,48 +10,48 @@ class TestIP(object):
1010
@responses.activate
1111
def test_get_ip(self, manager):
1212
data = Mock.mock_get('ip_address/10.1.0.101')
13-
ip_addr = manager.get_IP('10.1.0.101')
13+
ip_addr = manager.get_ip('10.1.0.101')
1414

15-
assert type(ip_addr).__name__ == 'IP_address'
15+
assert type(ip_addr).__name__ == 'IPAddress'
1616
assert ip_addr.address == '10.1.0.101'
17-
assert ip_addr.ptr == 'a.ptr.record'
17+
assert ip_addr.ptr_record == 'a.ptr.record'
1818

1919
@responses.activate
2020
def test_get_ips(self, manager):
2121
data = Mock.mock_get('ip_address')
22-
ip_addrs = manager.get_IPs()
22+
ip_addrs = manager.get_ips()
2323

2424
for ip_addr in ip_addrs:
25-
assert type(ip_addr).__name__ == 'IP_address'
25+
assert type(ip_addr).__name__ == 'IPAddress'
2626

2727
@responses.activate
2828
def test_modify_ip_oop(self, manager):
2929
# get ip
3030
data = Mock.mock_get('ip_address/10.1.0.101')
31-
ip_addr = manager.get_IP('10.1.0.101')
31+
ip_addr = manager.get_ip('10.1.0.101')
3232

3333
# put ip
3434
data = Mock.mock_put('ip_address/10.1.0.101')
35-
ip_addr.ptr = 'my.ptr.record'
35+
ip_addr.ptr_record = 'my.ptr.record'
3636
ip_addr.save()
3737

38-
assert ip_addr.ptr == 'my.ptr.record'
38+
assert ip_addr.ptr_record == 'my.ptr.record'
3939

4040
@responses.activate
4141
def test_modify_ip(self, manager):
4242
data = Mock.mock_put('ip_address/10.1.0.101')
43-
ip_addr = manager.modify_IP('10.1.0.101', ptr_record='my.ptr.record')
43+
ip_addr = manager.modify_ip('10.1.0.101', ptr_record='my.ptr.record')
4444

45-
assert ip_addr.ptr == 'my.ptr.record'
45+
assert ip_addr.ptr_record == 'my.ptr.record'
4646

4747
@responses.activate
4848
def test_modify_ip(self, manager):
4949
data = Mock.mock_put('ip_address/10.1.0.101')
50-
ip_addr = manager.modify_IP('10.1.0.101', ptr_record='my.ptr.record')
51-
assert ip_addr.ptr == 'my.ptr.record'
50+
ip_addr = manager.modify_ip('10.1.0.101', ptr_record='my.ptr.record')
51+
assert ip_addr.ptr_record == 'my.ptr.record'
5252

5353
@responses.activate
5454
def test_ip_delete(self, manager):
5555
Mock.mock_delete('ip_address/10.1.0.101')
56-
res = manager.release_IP('10.1.0.101')
56+
res = manager.release_ip('10.1.0.101')
5757
assert res == {}

test/test_server.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,17 @@ def test_restart_server(self, manager):
7171
assert server.state == 'maintenance'
7272

7373
@responses.activate
74-
def test_attach_and_detach_IP(self, manager):
74+
def test_attach_and_detach_ip(self, manager):
7575
data = Mock.mock_get('server/00798b85-efdc-41ca-8021-f6ef457b8531')
7676
server = manager.get_server('00798b85-efdc-41ca-8021-f6ef457b8531')
7777
assert len(server.ip_addresses) == 2
7878

7979
data = Mock.mock_post('ip_address')
80-
server.add_IP()
80+
server.add_ip()
8181
assert len(server.ip_addresses) == 3
8282

8383
Mock.mock_delete('ip_address/'+server.ip_addresses[2].address)
84-
server.remove_IP(server.ip_addresses[2])
84+
server.remove_ip(server.ip_addresses[2])
8585
assert len(server.ip_addresses) == 2
8686

8787
@responses.activate

test/test_server_creation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def test_create_server(self, manager):
159159

160160
# assert ips and storages have correct types
161161
assert type(server1.storage_devices[0]).__name__ == 'Storage'
162-
assert type(server1.ip_addresses[0]).__name__ == 'IP_address'
162+
assert type(server1.ip_addresses[0]).__name__ == 'IPAddress'
163163

164164
# assert new data was populated
165165
assert server1.video_model == 'cirrus'
@@ -196,7 +196,7 @@ def test_create_server_with_dict(self, manager):
196196

197197
# assert ips and storages have correct types
198198
assert type(server1.storage_devices[0]).__name__ == 'Storage'
199-
assert type(server1.ip_addresses[0]).__name__ == 'IP_address'
199+
assert type(server1.ip_addresses[0]).__name__ == 'IPAddress'
200200

201201
# assert new data was populated
202202
assert server1.video_model == 'cirrus'

upcloud_api/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
__license__ = 'MIT'
1414
__copyright__ = 'Copyright (c) 2015 Elias Nygren'
1515

16+
from upcloud_api.upcloud_resource import UpCloudResource
1617
from upcloud_api.errors import UpCloudAPIError
1718
from upcloud_api.storage import Storage
18-
from upcloud_api.ip_address import IP_address
19+
from upcloud_api.ip_address import IPAddress
1920
from upcloud_api.server import Server, login_user_block
2021
from upcloud_api.firewall import FirewallRule
2122
from upcloud_api.tools import OperatingSystems, ZONE
Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
from __future__ import unicode_literals
22
from __future__ import absolute_import
33

4-
from upcloud_api import FirewallRule
4+
from upcloud_api import FirewallRule, Server
55

6+
def uuid_and_instance(server):
7+
"""server => uuid, instance"""
8+
if isinstance(server, Server):
9+
return server.uuid, server
10+
else:
11+
return server, None
612

713
class FirewallManager(object):
814
"""
@@ -12,40 +18,42 @@ class FirewallManager(object):
1218
directly.
1319
"""
1420

15-
def get_firewall_rule(self, server_uuid, firewall_rule_position):
21+
def get_firewall_rule(self, server_uuid, firewall_rule_position, server_instance=None):
1622
"""
1723
Return a FirewallRule object based on server uuid and rule position.
1824
"""
1925
url = '/server/{0}/firewall_rule/{1}'.format(server_uuid, firewall_rule_position)
2026
res = self.get_request(url)
2127
return FirewallRule(**res['firewall_rule'])
2228

23-
def get_firewall_rules(self, server_uuid):
29+
def get_firewall_rules(self, server):
2430
"""
25-
Return all FirewallRule objects based on a server uuid.
31+
Return all FirewallRule objects based on a server instance or uuid.
2632
"""
27-
url = '/server/{0}/firewall_rule'.format(server_uuid)
33+
server_uuid, server_instance = uuid_and_instance(server)
2834

35+
url = '/server/{0}/firewall_rule'.format(server_uuid)
2936
res = self.get_request(url)
3037

31-
firewall_rules = []
32-
for firewall_rule in res['firewall_rules']['firewall_rule']:
33-
firewall_rules.append(FirewallRule(**firewall_rule))
38+
return [
39+
FirewallRule(server=server_instance, **firewall_rule)
40+
for firewall_rule in res['firewall_rules']['firewall_rule']
41+
]
3442

35-
return firewall_rules
36-
37-
def create_firewall_rule(self, server_uuid, firewall_rule_body):
43+
def create_firewall_rule(self, server, firewall_rule_body):
3844
"""
3945
Create a new firewall rule for a given server uuid.
4046
4147
The rule can begiven as a dict or with FirewallRule.prepare_post_body().
4248
Returns a FirewallRule object.
4349
"""
44-
url = '/server/{0}/firewall_rule'.format(server_uuid)
50+
server_uuid, server_instance = uuid_and_instance(server)
4551

52+
url = '/server/{0}/firewall_rule'.format(server_uuid)
4653
body = {'firewall_rule': firewall_rule_body}
4754
res = self.post_request(url, body)
48-
return FirewallRule(**res['firewall_rule'])
55+
56+
return FirewallRule(server=server_instance, **res['firewall_rule'])
4957

5058
def delete_firewall_rule(self, server_uuid, firewall_rule_position):
5159
"""
@@ -54,13 +62,13 @@ def delete_firewall_rule(self, server_uuid, firewall_rule_position):
5462
url = '/server/{0}/firewall_rule/{1}'.format(server_uuid, firewall_rule_position)
5563
return self.request('DELETE', url)
5664

57-
def configure_firewall(self, UUID, firewall_rule_bodies):
65+
def configure_firewall(self, server, firewall_rule_bodies):
5866
"""
5967
Helper for calling create_firewall_rule in series for a list of firewall_rule_bodies.
6068
"""
61-
FirewallRules = []
62-
for rule in firewall_rule_bodies:
63-
FirewallRule = self.create_firewall_rule(UUID, rule)
64-
FirewallRules.append(FirewallRule)
69+
server_uuid, server_instance = uuid_and_instance(server)
6570

66-
return FirewallRules
71+
return [
72+
self.create_firewall_rule(server_uuid, rule)
73+
for rule in firewall_rule_bodies
74+
]

0 commit comments

Comments
 (0)