VMware VPC fixes

This commit is contained in:
Kelven Yang 2012-07-24 17:47:15 -07:00
parent fc371f8782
commit 237065e039
1 changed files with 124 additions and 83 deletions

View File

@ -323,125 +323,126 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
mbean.addProp("Command", _gson.toJson(cmd));
mbean.addProp("Sequence", String.valueOf(cmdSequence));
mbean.addProp("Name", cmd.getClass().getSimpleName());
if (cmd instanceof CreateCommand) {
Class<? extends Command> clz = cmd.getClass();
if (clz == CreateCommand.class) {
answer = execute((CreateCommand) cmd);
} else if (cmd instanceof SetPortForwardingRulesCommand) {
} else if (clz == SetPortForwardingRulesCommand.class) {
answer = execute((SetPortForwardingRulesCommand) cmd);
} else if (cmd instanceof SetStaticNatRulesCommand) {
} else if (clz == SetStaticNatRulesCommand.class) {
answer = execute((SetStaticNatRulesCommand) cmd);
} else if (cmd instanceof LoadBalancerConfigCommand) {
} else if( clz == LoadBalancerConfigCommand.class) {
answer = execute((LoadBalancerConfigCommand) cmd);
} else if (cmd instanceof IpAssocCommand) {
} else if (clz == IpAssocCommand.class) {
answer = execute((IpAssocCommand) cmd);
} else if (cmd instanceof SavePasswordCommand) {
} else if (clz == SavePasswordCommand.class) {
answer = execute((SavePasswordCommand) cmd);
} else if (cmd instanceof DhcpEntryCommand) {
} else if (clz == DhcpEntryCommand.class) {
answer = execute((DhcpEntryCommand) cmd);
} else if (cmd instanceof VmDataCommand) {
} else if (clz == VmDataCommand.class) {
answer = execute((VmDataCommand) cmd);
} else if (cmd instanceof ReadyCommand) {
} else if (clz == ReadyCommand.class) {
answer = execute((ReadyCommand) cmd);
} else if (cmd instanceof GetHostStatsCommand) {
} else if (clz == GetHostStatsCommand.class) {
answer = execute((GetHostStatsCommand) cmd);
} else if (cmd instanceof GetVmStatsCommand) {
} else if (clz == GetVmStatsCommand.class) {
answer = execute((GetVmStatsCommand) cmd);
} else if (cmd instanceof CheckHealthCommand) {
} else if (clz == CheckHealthCommand.class) {
answer = execute((CheckHealthCommand) cmd);
} else if (cmd instanceof StopCommand) {
} else if (clz == StopCommand.class) {
answer = execute((StopCommand) cmd);
} else if (cmd instanceof RebootRouterCommand) {
} else if (clz == RebootRouterCommand.class) {
answer = execute((RebootRouterCommand) cmd);
} else if (cmd instanceof RebootCommand) {
} else if (clz == RebootCommand.class) {
answer = execute((RebootCommand) cmd);
} else if (cmd instanceof CheckVirtualMachineCommand) {
} else if (clz == CheckVirtualMachineCommand.class) {
answer = execute((CheckVirtualMachineCommand) cmd);
} else if (cmd instanceof PrepareForMigrationCommand) {
} else if (clz == PrepareForMigrationCommand.class) {
answer = execute((PrepareForMigrationCommand) cmd);
} else if (cmd instanceof MigrateCommand) {
} else if (clz == MigrateCommand.class) {
answer = execute((MigrateCommand) cmd);
} else if (cmd instanceof DestroyCommand) {
} else if (clz == DestroyCommand.class) {
answer = execute((DestroyCommand) cmd);
} else if (cmd instanceof CreateStoragePoolCommand) {
} else if (clz == CreateStoragePoolCommand.class) {
return execute((CreateStoragePoolCommand) cmd);
} else if (cmd instanceof ModifyStoragePoolCommand) {
} else if (clz == ModifyStoragePoolCommand.class) {
answer = execute((ModifyStoragePoolCommand) cmd);
} else if (cmd instanceof DeleteStoragePoolCommand) {
} else if (clz == DeleteStoragePoolCommand.class) {
answer = execute((DeleteStoragePoolCommand) cmd);
} else if (cmd instanceof CopyVolumeCommand) {
} else if (clz == CopyVolumeCommand.class) {
answer = execute((CopyVolumeCommand) cmd);
} else if (cmd instanceof AttachVolumeCommand) {
} else if (clz == AttachVolumeCommand.class) {
answer = execute((AttachVolumeCommand) cmd);
} else if (cmd instanceof AttachIsoCommand) {
} else if (clz == AttachIsoCommand.class) {
answer = execute((AttachIsoCommand) cmd);
} else if (cmd instanceof ValidateSnapshotCommand) {
} else if (clz == ValidateSnapshotCommand.class) {
answer = execute((ValidateSnapshotCommand) cmd);
} else if (cmd instanceof ManageSnapshotCommand) {
} else if (clz == ManageSnapshotCommand.class) {
answer = execute((ManageSnapshotCommand) cmd);
} else if (cmd instanceof BackupSnapshotCommand) {
} else if (clz == BackupSnapshotCommand.class) {
answer = execute((BackupSnapshotCommand) cmd);
} else if (cmd instanceof CreateVolumeFromSnapshotCommand) {
} else if (clz == CreateVolumeFromSnapshotCommand.class) {
answer = execute((CreateVolumeFromSnapshotCommand) cmd);
} else if (cmd instanceof CreatePrivateTemplateFromVolumeCommand) {
} else if (clz == CreatePrivateTemplateFromVolumeCommand.class) {
answer = execute((CreatePrivateTemplateFromVolumeCommand) cmd);
} else if (cmd instanceof CreatePrivateTemplateFromSnapshotCommand) {
} else if (clz == CreatePrivateTemplateFromSnapshotCommand.class) {
answer = execute((CreatePrivateTemplateFromSnapshotCommand) cmd);
} else if (cmd instanceof UpgradeSnapshotCommand) {
} else if (clz == UpgradeSnapshotCommand.class) {
answer = execute((UpgradeSnapshotCommand) cmd);
} else if (cmd instanceof GetStorageStatsCommand) {
} else if (clz == GetStorageStatsCommand.class) {
answer = execute((GetStorageStatsCommand) cmd);
} else if (cmd instanceof PrimaryStorageDownloadCommand) {
} else if (clz == PrimaryStorageDownloadCommand.class) {
answer = execute((PrimaryStorageDownloadCommand) cmd);
} else if (cmd instanceof GetVncPortCommand) {
} else if (clz == GetVncPortCommand.class) {
answer = execute((GetVncPortCommand) cmd);
} else if (cmd instanceof SetupCommand) {
} else if (clz == SetupCommand.class) {
answer = execute((SetupCommand) cmd);
} else if (cmd instanceof MaintainCommand) {
} else if (clz == MaintainCommand.class) {
answer = execute((MaintainCommand) cmd);
} else if (cmd instanceof PingTestCommand) {
} else if (clz == PingTestCommand.class) {
answer = execute((PingTestCommand) cmd);
} else if (cmd instanceof CheckOnHostCommand) {
} else if (clz == CheckOnHostCommand.class) {
answer = execute((CheckOnHostCommand) cmd);
} else if (cmd instanceof ModifySshKeysCommand) {
} else if (clz == ModifySshKeysCommand.class) {
answer = execute((ModifySshKeysCommand) cmd);
} else if (cmd instanceof PoolEjectCommand) {
} else if (clz == PoolEjectCommand.class) {
answer = execute((PoolEjectCommand) cmd);
} else if (cmd instanceof NetworkUsageCommand) {
} else if (clz == NetworkUsageCommand.class) {
answer = execute((NetworkUsageCommand) cmd);
} else if (cmd instanceof StartCommand) {
} else if (clz == StartCommand.class) {
answer = execute((StartCommand) cmd);
} else if (cmd instanceof RemoteAccessVpnCfgCommand) {
} else if (clz == RemoteAccessVpnCfgCommand.class) {
answer = execute((RemoteAccessVpnCfgCommand) cmd);
} else if (cmd instanceof VpnUsersCfgCommand) {
} else if (clz == VpnUsersCfgCommand.class) {
answer = execute((VpnUsersCfgCommand) cmd);
} else if (cmd instanceof CheckSshCommand) {
} else if (clz == CheckSshCommand.class) {
answer = execute((CheckSshCommand) cmd);
} else if (cmd instanceof CheckRouterCommand) {
} else if (clz == CheckRouterCommand.class) {
answer = execute((CheckRouterCommand) cmd);
} else if (cmd instanceof SetFirewallRulesCommand) {
} else if (clz == SetFirewallRulesCommand.class) {
answer = execute((SetFirewallRulesCommand)cmd);
} else if (cmd instanceof BumpUpPriorityCommand) {
} else if (clz == BumpUpPriorityCommand.class) {
answer = execute((BumpUpPriorityCommand)cmd);
} else if (cmd instanceof GetDomRVersionCmd) {
} else if (clz == GetDomRVersionCmd.class) {
answer = execute((GetDomRVersionCmd)cmd);
} else if (cmd instanceof CheckNetworkCommand) {
} else if (clz == CheckNetworkCommand.class) {
answer = execute((CheckNetworkCommand) cmd);
} else if (cmd instanceof SetupGuestNetworkCommand) {
return execute((SetupGuestNetworkCommand) cmd);
} else if (cmd instanceof PlugNicCommand) {
return execute((PlugNicCommand) cmd);
} else if (cmd instanceof UnPlugNicCommand) {
return execute((UnPlugNicCommand) cmd);
} else if (cmd instanceof IpAssocVpcCommand) {
return execute((IpAssocVpcCommand) cmd);
} else if (cmd instanceof SetSourceNatCommand) {
return execute((SetSourceNatCommand) cmd);
} else if (cmd instanceof SetNetworkACLCommand) {
return execute((SetNetworkACLCommand) cmd);
} else if (cmd instanceof SetPortForwardingRulesVpcCommand) {
return execute((SetPortForwardingRulesVpcCommand) cmd);
} else if (cmd instanceof Site2SiteVpnCfgCommand) {
return execute((Site2SiteVpnCfgCommand) cmd);
} else if (clz == SetupGuestNetworkCommand.class) {
answer = execute((SetupGuestNetworkCommand) cmd);
} else if (clz == IpAssocVpcCommand.class) {
answer = execute((IpAssocVpcCommand) cmd);
} else if (clz == PlugNicCommand.class) {
answer = execute((PlugNicCommand) cmd);
} else if (clz == UnPlugNicCommand.class) {
answer = execute((UnPlugNicCommand) cmd);
} else if (clz == SetSourceNatCommand.class) {
answer = execute((SetSourceNatCommand) cmd);
} else if (clz == SetNetworkACLCommand.class) {
answer = execute((SetNetworkACLCommand) cmd);
} else if (clz == SetPortForwardingRulesVpcCommand.class) {
answer = execute((SetPortForwardingRulesVpcCommand) cmd);
} else if (clz == Site2SiteVpnCfgCommand.class) {
answer = execute((Site2SiteVpnCfgCommand) cmd);
} else {
answer = Answer.createUnsupportedCommandAnswer(cmd);
}
@ -750,10 +751,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
"ls /proc/sys/net/ipv4/conf");
if(result.first()) {
String[] tokens = result.second().split(" ");
String[] tokens = result.second().split("\\s+");
HashMap<String, String> deviceNames = new HashMap<String, String>();
for(String token: tokens)
deviceNames.put(token, token);
for(String token: tokens) {
if(!("all".equalsIgnoreCase(token) || "default".equalsIgnoreCase(token) || "lo".equalsIgnoreCase(token))) {
deviceNames.put(token, token);
}
}
for(int i = 1; ; i++) {
if(!deviceNames.containsKey("eth" + i))
@ -767,31 +771,38 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
//
// find mac address of a specified ethx device
// ip address show ethx | grep link/ether | sed -e 's/^[ \t]*//' | cut -d' ' -f2
// returns
// eth0:xx.xx.xx.xx
//
// list IP with eth devices
// ifconfig ethx |grep -B1 "inet addr" | awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }'
// | awk -F: '{ print $1 ": " $3 }'
//
// returns
// eth0:xx.xx.xx.xx
//
//
private int findRouterEthDeviceIndex(String domrName, String routerIp, String mac) throws Exception {
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
s_logger.info("findRouterEthDeviceIndex. mac: " + mac);
// TODO : this is a temporary very inefficient solution, will refactor it later
Pair<Boolean, String> result = SshHelper.sshExecute(routerIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null,
"ls /proc/sys/net/ipv4/conf");
if(result.first()) {
String[] tokens = result.second().split(" ");
String[] tokens = result.second().split("\\s+");
for(String token : tokens) {
Pair<Boolean, String> result2 = SshHelper.sshExecute(routerIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null,
// TODO need to find the dev index inside router based on IP address
String.format("ip address show %s | grep link/ether | sed -e 's/^[ \t]*//' | cut -d' ' -f2", token));
if(result2.first() && result2.second().equalsIgnoreCase(mac))
return Integer.parseInt(token.substring(3));
if(!("all".equalsIgnoreCase(token) || "default".equalsIgnoreCase(token) || "lo".equalsIgnoreCase(token))) {
String cmd = String.format("ip address show %s | grep link/ether | sed -e 's/^[ \t]*//' | cut -d' ' -f2", token);
s_logger.info("Run domr script " + cmd);
Pair<Boolean, String> result2 = SshHelper.sshExecute(routerIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null,
// TODO need to find the dev index inside router based on IP address
cmd);
s_logger.info("result: " + result2.first() + ", output: " + result2.second());
if(result2.first() && result2.second().equalsIgnoreCase(mac))
return Integer.parseInt(token.substring(3));
}
}
}
@ -870,6 +881,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
protected IpAssocAnswer execute(IpAssocVpcCommand cmd) {
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing resource IpAssocVpcCommand " + _gson.toJson(cmd));
}
String[] results = new String[cmd.getIpAddresses().length];
int i = 0;
String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
@ -891,6 +906,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
protected SetSourceNatAnswer execute(SetSourceNatCommand cmd) {
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing resource SetSourceNatCommand " + _gson.toJson(cmd));
}
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
@ -925,6 +944,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
private SetNetworkACLAnswer execute(SetNetworkACLCommand cmd) {
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing resource SetNetworkACLCommand " + _gson.toJson(cmd));
}
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
@ -970,6 +992,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
protected SetPortForwardingRulesAnswer execute(SetPortForwardingRulesVpcCommand cmd) {
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing resource SetPortForwardingRulesVpcCommand " + _gson.toJson(cmd));
}
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
String routerIp = getRouterSshControlIp(cmd);
@ -1006,6 +1032,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
protected Answer execute(Site2SiteVpnCfgCommand cmd) {
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing resource Site2SiteVpnCfgCommand " + _gson.toJson(cmd));
}
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
String routerIp = getRouterSshControlIp(cmd);
@ -1062,7 +1092,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
private PlugNicAnswer execute(PlugNicCommand cmd) {
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing resource PlugNicCommand " + _gson.toJson(cmd));
}
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
VmwareContext context = getServiceContext();
try {
@ -1134,7 +1167,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
private UnPlugNicAnswer execute(UnPlugNicCommand cmd) {
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing resource UnPlugNicCommand " + _gson.toJson(cmd));
}
VmwareContext context = getServiceContext();
try {
VmwareHypervisorHost hyperHost = getHyperHost(context);
@ -1177,6 +1213,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
protected void assignVPCPublicIpAddress(String domrName, String routerIp, IpAddressTO ip) throws Exception {
if (s_logger.isInfoEnabled()) {
s_logger.info("Executing resource assignVPCPublicIpAddress. domrName: " + domrName + ", routerIp: " + routerIp
+ ", ip: " + _gson.toJson(ip));
}
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
int ethDeviceNum = this.findRouterEthDeviceIndex(domrName, routerIp, ip.getVifMacAddress());