11# -*- coding: UTF-8 -*-
22from 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
527class 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