Skip to content

Commit 62d67cc

Browse files
authored
Merge pull request python-oca#20 from sysradium/leases
Add Leases and Hold/Release functions
2 parents a97ab03 + 51e5aa5 commit 62d67cc

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

oca/vn.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
11
# -*- coding: UTF-8 -*-
22
from pool import XMLElement, Pool, PoolElement, Template
33

4+
class Lease(XMLElement):
5+
XML_TYPES = {
6+
'ip' : str,
7+
'mac' : str,
8+
}
9+
10+
def __init__(self, xml):
11+
super(Lease, self).__init__(xml)
12+
self._convert_types()
13+
14+
class LeasesList(list):
15+
def __init__(self, xml):
16+
if xml is None:
17+
return
18+
self.xml = xml
19+
for element in self.xml:
20+
self.append(self._factory(element))
21+
22+
def _factory(self, xml):
23+
v = Lease(xml)
24+
v._convert_types()
25+
return v
426

527
class AddressRange(XMLElement):
628
XML_TYPES = {
729
'id' : ["AR_ID", lambda xml: int(xml.text)],
830
'size' : int,
31+
'leases': ['LEASES', LeasesList],
932
#'template' : ['TEMPLATE', Template],
1033
}
1134

@@ -32,6 +55,8 @@ class VirtualNetwork(PoolElement):
3255
'delete' : 'vn.delete',
3356
'publish' : 'vn.publish',
3457
'chown' : 'vn.chown',
58+
'hold' : 'vn.hold',
59+
'release' : 'vn.release',
3560
}
3661

3762
XML_TYPES = {
@@ -93,6 +118,28 @@ def chown(self, uid, gid):
93118
'''
94119
self.client.call(self.METHODS['chown'], self.id, uid, gid)
95120

121+
def release(self, ip):
122+
'''
123+
Releases given IP
124+
125+
Arguments
126+
127+
``ip``
128+
IP to realse
129+
'''
130+
self.client.call(self.METHODS['release'], self.id, 'LEASES=[IP={}]'.format(ip))
131+
132+
def hold(self, ip):
133+
'''
134+
Holds given IP
135+
136+
Arguments
137+
138+
``ip``
139+
IP to hold
140+
'''
141+
self.client.call(self.METHODS['hold'], self.id, 'LEASES=[IP={}]'.format(ip))
142+
96143
def __repr__(self):
97144
return '<oca.VirtualNetwork("%s")>' % self.name
98145

@@ -101,10 +148,13 @@ class VirtualNetworkPool(Pool):
101148
'info' : 'vnpool.info',
102149
}
103150

104-
def __init__(self, client):
151+
def __init__(self, client, preload_info=False):
152+
self.preload_info = preload_info
105153
super(VirtualNetworkPool, self).__init__('VNET_POOL', 'VNET', client)
106154

107155
def _factory(self, xml):
108156
v = VirtualNetwork(xml, self.client)
109157
v._convert_types()
158+
if self.preload_info:
159+
v.info()
110160
return v

0 commit comments

Comments
 (0)