VPC : implement SetupGuestNetworkCommand
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/f5056d48 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/f5056d48 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/f5056d48 Branch: refs/heads/vpc Commit: f5056d489861d35760c00505a4da56861e96f6e7 Parents: 8c1700a Author: anthony <[email protected]> Authored: Tue Jun 5 18:49:00 2012 -0700 Committer: Alena Prokharchyk <[email protected]> Committed: Fri Jun 15 14:23:00 2012 -0700 ---------------------------------------------------------------------- .../cloud/agent/api/SetupGuestNetworkCommand.java | 4 ++ .../xen/resource/CitrixResourceBase.java | 43 ++++++++++++++- wscript | 2 +- 3 files changed, 46 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/f5056d48/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java b/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java index c2ca11b..e36ca28 100644 --- a/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java +++ b/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java @@ -28,6 +28,10 @@ public class SetupGuestNetworkCommand extends NetworkElementCommand{ boolean add = true; NicTO nic; + public NicTO getNic() { + return nic; + } + @Override public boolean executeInSequence() { return true; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/f5056d48/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java ---------------------------------------------------------------------- diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 89b197d..30641c0 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -7030,8 +7030,47 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe * @return */ private SetupGuestNetworkAnswer execute(SetupGuestNetworkCommand cmd) { - // TODO Auto-generated method stub - return null; + Connection conn = getConnection(); + NicTO nic = cmd.getNic(); + String domrIP = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); + String domrGIP = cmd.getAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP); + String domrName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME); + try { + Set<VM> vms = VM.getByNameLabel(conn, domrName); + if ( vms == null || vms.isEmpty() ) { + return new SetupGuestNetworkAnswer(cmd, false, "Can not find VM " + domrName); + } + VM vm = vms.iterator().next(); + String mac = nic.getMac(); + VIF domrVif = null; + for ( VIF vif : vm.getVIFs(conn)) { + String lmac = vif.getMAC(conn); + if ( lmac.equals(mac) ) { + domrVif = vif; + break; + } + } + if ( domrVif == null ) { + return new SetupGuestNetworkAnswer(cmd, false, "Can not find vif with mac " + mac + " for VM " + domrName); + } + + String args = "guestnw.sh " + domrIP + " -C"; + String dev = "eth" + domrVif.getDevice(conn); + args += " -d " + dev; + args += " -i " + domrGIP; + args += " -g " + nic.getGateway(); + args += " -m " + Long.toString(NetUtils.getCidrSize(nic.getNetmask())); + args += " -s " + nic.getDns1(); + String result = callHostPlugin(conn, "vmops", "routerProxy", "args", args); + if (result == null || result.isEmpty()) { + return new SetupGuestNetworkAnswer(cmd, false, "creating guest network failed due to " + ((result == null)? "null":result)); + } + return new SetupGuestNetworkAnswer(cmd, true, "success"); + } catch (Exception e) { + String msg = " UnPlug Nic failed due to " + e.toString(); + s_logger.warn(msg, e); + return new SetupGuestNetworkAnswer(cmd, false, msg); + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/f5056d48/wscript ---------------------------------------------------------------------- diff --git a/wscript b/wscript index 5708656..1d33861 100644 --- a/wscript +++ b/wscript @@ -4,7 +4,7 @@ # the following two variables are used by the target "waf dist" # if you change 'em here, you need to change it also in cloud.spec, add a %changelog entry there, and add an entry in debian/changelog -VERSION = '3.0.3.2012-06-06T00:22:14Z' +VERSION = '3.0.3.2012-06-06T01:46:43Z' APPNAME = 'cloud' import shutil,os
