Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 44 additions & 26 deletions oca/tests/fixtures/vnet.xml
Original file line number Diff line number Diff line change
@@ -1,28 +1,46 @@
<VNET>
<ID>3</ID>
<UID>0</UID>
<GID>0</GID>
<UNAME>oneadmin</UNAME>
<GNAME>oneadmin</GNAME>
<NAME>Red LAN</NAME>
<TYPE>0</TYPE>
<BRIDGE>vbr0</BRIDGE>
<PUBLIC>0</PUBLIC>
<TOTAL_LEASES>2</TOTAL_LEASES>
<TEMPLATE>
<BRIDGE>vbr0</BRIDGE>
<DNS>192.169.1.4</DNS>
<NAME>Red LAN</NAME>
<NETWORK_ADDRESS>192.168.0.0</NETWORK_ADDRESS>
<NETWORK_SIZE>C</NETWORK_SIZE>
<TYPE>RANGED</TYPE>
</TEMPLATE>
<LEASES>
<LEASE>
<IP>192.168.0.1</IP>
<MAC>00:03:c0:a8:00:01</MAC>
<USED>1</USED>
<VID>18</VID>
</LEASE>
</LEASES>
<ID>3</ID>
<UID>0</UID>
<GID>0</GID>
<UNAME>oneadmin</UNAME>
<GNAME>oneadmin</GNAME>
<NAME>Red LAN</NAME>
<PERMISSIONS>
<OWNER_U>1</OWNER_U>
<OWNER_M>1</OWNER_M>
<OWNER_A>0</OWNER_A>
<GROUP_U>0</GROUP_U>
<GROUP_M>0</GROUP_M>
<GROUP_A>0</GROUP_A>
<OTHER_U>1</OTHER_U>
<OTHER_M>0</OTHER_M>
<OTHER_A>0</OTHER_A>
</PERMISSIONS>
<CLUSTER_ID>-1</CLUSTER_ID>
<CLUSTER/>
<BRIDGE>vbr0</BRIDGE>
<VLAN>1</VLAN>
<PARENT_NETWORK_ID/>
<PHYDEV><![CDATA[bond1]]></PHYDEV>
<VLAN_ID><![CDATA[1337]]></VLAN_ID>
<USED_LEASES>3</USED_LEASES>
<TEMPLATE/>
<AR_POOL>
<AR>
<ALLOCATED><![CDATA[ 0 68719479930 1 68719545020]]></ALLOCATED>
<AR_ID><![CDATA[0]]></AR_ID>
<IP><![CDATA[10.1.0.10]]></IP>
<MAC><![CDATA[00:22:44:66:88:aa]]></MAC>
<SIZE><![CDATA[507]]></SIZE>
<TYPE><![CDATA[IP4]]></TYPE>
</AR>
<AR>
<ALLOCATED><![CDATA[ 0 68719546783]]></ALLOCATED>
<AR_ID><![CDATA[1]]></AR_ID>
<IP><![CDATA[10.1.2.5]]></IP>
<MAC><![CDATA[00:22:44:66:aa:cc]]></MAC>
<SIZE><![CDATA[507]]></SIZE>
<TYPE><![CDATA[IP4]]></TYPE>
</AR>
</AR_POOL>
</VNET>
56 changes: 42 additions & 14 deletions oca/tests/fixtures/vnetpool.xml
Original file line number Diff line number Diff line change
@@ -1,32 +1,60 @@
<VNET_POOL>
<VNET>
<ID>4</ID>
<UID>0</UID>
<GID>0</GID>
<UNAME>oneadmin</UNAME>
<GNAME>oneadmin</GNAME>
<UID>0</UID>
<USERNAME>oneadmin</USERNAME>
<NAME>Red LAN</NAME>
<TYPE>0</TYPE>
<PERMISSIONS>
<OWNER_U>1</OWNER_U>
<OWNER_M>1</OWNER_M>
<OWNER_A>0</OWNER_A>
<GROUP_U>0</GROUP_U>
<GROUP_M>0</GROUP_M>
<GROUP_A>0</GROUP_A>
<OTHER_U>1</OTHER_U>
<OTHER_M>0</OTHER_M>
<OTHER_A>0</OTHER_A>
</PERMISSIONS>
<CLUSTER_ID>-1</CLUSTER_ID>
<CLUSTER/>
<BRIDGE>vbr0</BRIDGE>
<TOTAL_LEASES>0</TOTAL_LEASES>
<PUBLIC>0</PUBLIC>
<TEMPLATE></TEMPLATE>
<LEASES></LEASES>
<VLAN>1</VLAN>
<PARENT_NETWORK_ID/>
<PHYDEV><![CDATA[bond1]]></PHYDEV>
<VLAN_ID><![CDATA[1337]]></VLAN_ID>
<USED_LEASES>3</USED_LEASES>
<TEMPLATE/>
<AR_POOL/>
</VNET>
<VNET>
<ID>5</ID>
<ID>9</ID>
<UID>0</UID>
<GID>0</GID>
<UNAME>oneadmin</UNAME>
<GNAME>oneadmin</GNAME>
<USERNAME>oneadmin</USERNAME>
<NAME>Public</NAME>
<TYPE>0</TYPE>
<PERMISSIONS>
<OWNER_U>1</OWNER_U>
<OWNER_M>1</OWNER_M>
<OWNER_A>0</OWNER_A>
<GROUP_U>0</GROUP_U>
<GROUP_M>0</GROUP_M>
<GROUP_A>0</GROUP_A>
<OTHER_U>1</OTHER_U>
<OTHER_M>0</OTHER_M>
<OTHER_A>0</OTHER_A>
</PERMISSIONS>
<CLUSTER_ID>-1</CLUSTER_ID>
<CLUSTER/>
<BRIDGE>vbr0</BRIDGE>
<TOTAL_LEASES>1</TOTAL_LEASES>
<PUBLIC>1</PUBLIC>
<TEMPLATE></TEMPLATE>
<LEASES></LEASES>
<VLAN>1</VLAN>
<PARENT_NETWORK_ID/>
<PHYDEV><![CDATA[bond1]]></PHYDEV>
<VLAN_ID><![CDATA[42]]></VLAN_ID>
<USED_LEASES>0</USED_LEASES>
<TEMPLATE/>
<AR_POOL/>
</VNET>
</VNET_POOL>
22 changes: 19 additions & 3 deletions oca/tests/test_virtual_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,37 @@ def test_allocate(self):
def test_publish(self):
self.client.call = Mock(return_value='')
h = oca.VirtualNetwork(self.xml, self.client)
h._convert_types()
h.publish()
self.client.call.assert_called_once_with('vn.publish', '3', True)
self.client.call.assert_called_once_with('vn.publish', 3, True)

def test_unpublish(self):
self.client.call = Mock(return_value='')
h = oca.VirtualNetwork(self.xml, self.client)
h._convert_types()
h.unpublish()
self.client.call.assert_called_once_with('vn.publish', '3', False)
self.client.call.assert_called_once_with('vn.publish', 3, False)

def test_repr(self):
h = oca.VirtualNetwork(self.xml, self.client)
h._convert_types()
assert h.__repr__() == '<oca.VirtualNetwork("Red LAN")>'

def test_chown(self):
self.client.call = Mock(return_value='')
h = oca.VirtualNetwork(self.xml, self.client)
h._convert_types()
h.chown(2, 2)
self.client.call.assert_called_once_with('vn.chown', '3', 2, 2)
self.client.call.assert_called_once_with('vn.chown', 3, 2, 2)

def test_address_ranges(self):
h = oca.VirtualNetwork(self.xml, self.client)
h._convert_types()
assert(2==len(h.address_ranges))
assert(1==h.address_ranges[1].id)
assert(0==h.address_ranges[0].id)
assert(" 0 68719479930 1 68719545020"==h.address_ranges[0].allocated)
assert("10.1.0.10"==h.address_ranges[0].ip)
assert("00:22:44:66:88:aa"==h.address_ranges[0].mac)
assert(507==h.address_ranges[0].size)
assert("IP4"==h.address_ranges[0].type)
36 changes: 28 additions & 8 deletions oca/vn.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,37 @@
# -*- coding: UTF-8 -*-
from pool import Pool, PoolElement, Template
from pool import XMLElement, Pool, PoolElement, Template


class AddressRange(XMLElement):
XML_TYPES = {
'id' : ["AR_ID", lambda xml: int(xml.text)],
'size' : int,
#'template' : ['TEMPLATE', Template],
}

def __init__(self, xml):
super(AddressRange, self).__init__(xml)
self._convert_types()
self.id = self['AR_ID'] if self['AR_ID'] else None

class AddressRangeList(list):
def __init__(self, xml):
self.xml = xml
for element in self.xml:
self.append(self._factory(element))

def _factory(self, xml):
v = AddressRange(xml)
v._convert_types()
return v

class VirtualNetwork(PoolElement):
METHODS = {
'info' : 'vn.info',
'allocate' : 'vn.allocate',
'delete' : 'vn.delete',
'publish' : 'vn.publish',
'chown' : 'vn.chown',
'addleases': 'vn.addleases',
'rmleases' : 'vn.rmleases'
}

XML_TYPES = {
Expand All @@ -20,11 +41,12 @@ class VirtualNetwork(PoolElement):
'uname' : str,
'gname' : str,
'name' : str,
'type' : int,
#'type' : int,
'bridge' : str,
'public' : bool,
'total_leases' : int,
#'public' : bool,
'used_leases' : int,
'template' : ['TEMPLATE', Template],
'address_ranges': ['AR_POOL', AddressRangeList],
}

ELEMENT_NAME = 'VNET'
Expand Down Expand Up @@ -74,7 +96,6 @@ def chown(self, uid, gid):
def __repr__(self):
return '<oca.VirtualNetwork("%s")>' % self.name


class VirtualNetworkPool(Pool):
METHODS = {
'info' : 'vnpool.info',
Expand All @@ -87,4 +108,3 @@ def _factory(self, xml):
v = VirtualNetwork(xml, self.client)
v._convert_types()
return v

9 changes: 4 additions & 5 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: UTF-8 -*-
__version__ = '3.0.0-a1'
__version__ = '4.10.0-a1'

import os

Expand All @@ -16,7 +16,7 @@

setup(name = 'oca',
version=__version__,
description='Bindings for XMLRPC OpenNebula Cloud API',
description='Python Bindings for XMLRPC OpenNebula Cloud API',
long_description=README + '\n\n' + CHANGES,
test_suite = 'nose.collector',
classifiers=[
Expand All @@ -26,9 +26,8 @@
'Operating System :: OS Independent',
],
keywords='opennebula cloud xmlrpc',
author=u'Łukasz Oleś',
author_email='[email protected]',
url='https://github.com/lukaszo/python-oca',
author=u'Łukasz Oleś, Matthias Schmitz, Michael Schmidt',
url='https://github.com/python-oca/python-oca',
license='Apache License 2.0',
packages=['oca'],
)
Expand Down