diff --git a/src/oca/java/src/org/opennebula/client/vnet/VirtualNetwork.java b/src/oca/java/src/org/opennebula/client/vnet/VirtualNetwork.java index ac58d7a316..9bd60df8d3 100644 --- a/src/oca/java/src/org/opennebula/client/vnet/VirtualNetwork.java +++ b/src/oca/java/src/org/opennebula/client/vnet/VirtualNetwork.java @@ -36,7 +36,8 @@ public class VirtualNetwork extends PoolElement{ private static final String RMLEASES = METHOD_PREFIX + "rmleases"; private static final String CHOWN = METHOD_PREFIX + "chown"; private static final String UPDATE = METHOD_PREFIX + "update"; - + private static final String HOLD = METHOD_PREFIX + "hold"; + private static final String RELEASE = METHOD_PREFIX + "release"; /** * Creates a new virtual network representation. @@ -140,6 +141,32 @@ public class VirtualNetwork extends PoolElement{ return client.call(RMLEASES, id, template); } + /** + * Holds a VirtualNetwork lease, marking it as used + * + * @param client XML-RPC Client. + * @param id The virtual network id (nid) of the target network. + * @param template IP to hold, e.g. "LEASES = [ IP = 192.168.0.5 ]" + * @return A encapsulated response. + */ + public static OneResponse hold(Client client, int id, String template) + { + return client.call(HOLD, id, template); + } + + /** + * Releases a VirtualNetwork lease on hold + * + * @param client XML-RPC Client. + * @param id The virtual network id (nid) of the target network. + * @param template IP to release, e.g. "LEASES = [ IP = 192.168.0.5 ]" + * @return A encapsulated response. + */ + public static OneResponse release(Client client, int id, String template) + { + return client.call(RELEASE, id, template); + } + /** * Changes the owner/group * @@ -271,6 +298,30 @@ public class VirtualNetwork extends PoolElement{ return rmLeases(client, id, lease_template); } + /** + * Holds a VirtualNetwork lease, marking it as used + * + * @param ip IP to hold, e.g. "192.168.0.5" + * @return A encapsulated response. + */ + public OneResponse hold(String ip) + { + String lease_template = "LEASES = [ IP = " + ip + " ]"; + return hold(client, id, lease_template); + } + + /** + * Releases a VirtualNetwork lease on hold + * + * @param ip IP to release, e.g. "192.168.0.5" + * @return A encapsulated response. + */ + public OneResponse release(String ip) + { + String lease_template = "LEASES = [ IP = " + ip + " ]"; + return release(client, id, lease_template); + } + /** * Changes the owner/group * diff --git a/src/oca/java/test/VirtualNetworkTest.java b/src/oca/java/test/VirtualNetworkTest.java index dcea0775e6..6a0c86537b 100644 --- a/src/oca/java/test/VirtualNetworkTest.java +++ b/src/oca/java/test/VirtualNetworkTest.java @@ -209,6 +209,54 @@ public class VirtualNetworkTest fixed_vnet.delete(); } + @Test + public void holdFixed() + { + res = VirtualNetwork.allocate(client, fixed_template); + assertTrue( !res.isError() ); + + VirtualNetwork fixed_vnet = + new VirtualNetwork(Integer.parseInt(res.getMessage()), client); + + res = fixed_vnet.hold("130.10.0.1"); + assertTrue( !res.isError() ); + + res = fixed_vnet.hold("130.10.0.5"); + assertTrue( res.isError() ); + + res = fixed_vnet.release("130.10.0.1"); + assertTrue( !res.isError() ); + + res = fixed_vnet.release("130.10.0.1"); + assertTrue( res.isError() ); + + res = fixed_vnet.release("130.10.0.5"); + assertTrue( res.isError() ); + + fixed_vnet.delete(); + } + + @Test + public void holdRanged() + { + res = vnet.hold("192.168.0.10"); + assertTrue( !res.isError() ); + + res = vnet.hold("192.168.100.1"); + assertTrue( res.isError() ); + + res = vnet.release("192.168.0.10"); + assertTrue( !res.isError() ); + + res = vnet.release("192.168.0.10"); + assertTrue( res.isError() ); + + res = vnet.release("192.168.100.1"); + assertTrue( res.isError() ); + + vnet.delete(); + } + @Test public void update() {