mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	1) Changed format for IpAssoc command. Instead of sending the ip addresses to assign one by one, we send a list of ip addresses to the agent.
2) Fixed createVM with multiple networks
This commit is contained in:
		
							parent
							
								
									5e8be4a431
								
							
						
					
					
						commit
						3cd989cbef
					
				@ -20,8 +20,8 @@ package com.cloud.agent.api;
 | 
				
			|||||||
import com.cloud.utils.exception.ExceptionUtil;
 | 
					import com.cloud.utils.exception.ExceptionUtil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Answer extends Command {
 | 
					public class Answer extends Command {
 | 
				
			||||||
    boolean result;
 | 
					    protected boolean result;
 | 
				
			||||||
    String details;
 | 
					    protected String details;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    protected Answer() {
 | 
					    protected Answer() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -17,67 +17,32 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
package com.cloud.agent.api.routing;
 | 
					package com.cloud.agent.api.routing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.cloud.agent.api.to.IpAddressTO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @author chiradeep
 | 
					 * @author alena
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class IPAssocCommand extends RoutingCommand {
 | 
					public class IPAssocCommand extends RoutingCommand {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private String routerName;
 | 
						private String routerName;
 | 
				
			||||||
	private String routerIp;
 | 
						private String routerIp;
 | 
				
			||||||
	private String publicIp;
 | 
						IpAddressTO[] ipAddresses;
 | 
				
			||||||
	private boolean sourceNat;
 | 
					 | 
				
			||||||
	private boolean add;
 | 
					 | 
				
			||||||
	private boolean oneToOneNat;
 | 
					 | 
				
			||||||
	private boolean firstIP;
 | 
					 | 
				
			||||||
	private String vlanId;
 | 
					 | 
				
			||||||
	private String vlanGateway;
 | 
					 | 
				
			||||||
	private String vlanNetmask;
 | 
					 | 
				
			||||||
	private String vifMacAddress;
 | 
					 | 
				
			||||||
	private String guestIp;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected IPAssocCommand() {
 | 
						protected IPAssocCommand() {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public IPAssocCommand(String routerName, String privateIpAddress, String ipAddress, boolean add, boolean firstIP, boolean sourceNat, String vlanId, String vlanGateway, String vlanNetmask, String vifMacAddress, String guestIp) {
 | 
						public IPAssocCommand(String routerName, String privateIpAddress, IpAddressTO[] ips) {
 | 
				
			||||||
		this.setRouterName(routerName);
 | 
							this.setRouterName(routerName);
 | 
				
			||||||
		this.routerIp = privateIpAddress;
 | 
							this.routerIp = privateIpAddress;
 | 
				
			||||||
		this.publicIp = ipAddress;
 | 
							this.ipAddresses = ips;
 | 
				
			||||||
		this.add = add;
 | 
					 | 
				
			||||||
		this.firstIP = firstIP;
 | 
					 | 
				
			||||||
		this.sourceNat = sourceNat;
 | 
					 | 
				
			||||||
		this.vlanId = vlanId;
 | 
					 | 
				
			||||||
		this.vlanGateway = vlanGateway;
 | 
					 | 
				
			||||||
		this.vlanNetmask = vlanNetmask;
 | 
					 | 
				
			||||||
		this.vifMacAddress = vifMacAddress;
 | 
					 | 
				
			||||||
		this.guestIp = guestIp;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getGuestIp(){
 | 
					 | 
				
			||||||
		return guestIp;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public String getRouterIp() {
 | 
						public String getRouterIp() {
 | 
				
			||||||
		return routerIp;
 | 
							return routerIp;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getPublicIp() {
 | 
					 | 
				
			||||||
		return publicIp;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public boolean isAdd() {
 | 
					 | 
				
			||||||
		return add;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public boolean isOneToOneNat(){
 | 
					 | 
				
			||||||
		return this.oneToOneNat;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public boolean isFirstIP() {
 | 
					 | 
				
			||||||
		return firstIP;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean executeInSequence() {
 | 
					    public boolean executeInSequence() {
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@ -91,27 +56,9 @@ public class IPAssocCommand extends RoutingCommand {
 | 
				
			|||||||
		return routerName;
 | 
							return routerName;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setSourceNat(boolean sourceNat) {
 | 
					    public IpAddressTO[] getIpAddresses() {
 | 
				
			||||||
		this.sourceNat = sourceNat;
 | 
					        return ipAddresses;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public boolean isSourceNat() {
 | 
					 | 
				
			||||||
		return sourceNat;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public String getVlanId() {
 | 
					 | 
				
			||||||
		return vlanId;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public String getVlanGateway() {
 | 
					 | 
				
			||||||
		return vlanGateway;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public String getVlanNetmask() {
 | 
					 | 
				
			||||||
		return vlanNetmask;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public String getVifMacAddress() {
 | 
					 | 
				
			||||||
		return vifMacAddress;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										54
									
								
								api/src/com/cloud/agent/api/routing/IpAssocAnswer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								api/src/com/cloud/agent/api/routing/IpAssocAnswer.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  Copyright (C) 2010 Cloud.com, Inc.  All rights reserved.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * This software is licensed under the GNU General Public License v3 or later.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * It is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation, either version 3 of the License, or any later version.
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package com.cloud.agent.api.routing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.cloud.agent.api.Answer;
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author alena
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class IpAssocAnswer extends Answer{
 | 
				
			||||||
 | 
					    String[] results;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public static final String errorResult = "Failed";
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    protected IpAssocAnswer() {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public IpAssocAnswer(IPAssocCommand cmd, String[] results) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        boolean finalResult = true;
 | 
				
			||||||
 | 
					        for (String result : results) {
 | 
				
			||||||
 | 
					            if (result.equals(errorResult)) {
 | 
				
			||||||
 | 
					                finalResult = false;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        this.result = finalResult;
 | 
				
			||||||
 | 
					        this.details = null;
 | 
				
			||||||
 | 
					        assert(cmd.getIpAddresses().length == results.length) : "Shouldn't the results match the commands?";
 | 
				
			||||||
 | 
					        this.results = results;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    String[] getResults() {
 | 
				
			||||||
 | 
					        return results;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -46,9 +46,11 @@ import com.cloud.agent.api.proxy.ConsoleProxyLoadAnswer;
 | 
				
			|||||||
import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
 | 
					import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.DhcpEntryCommand;
 | 
					import com.cloud.agent.api.routing.DhcpEntryCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.IPAssocCommand;
 | 
					import com.cloud.agent.api.routing.IPAssocCommand;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.routing.IpAssocAnswer;
 | 
				
			||||||
import com.cloud.agent.api.routing.LoadBalancerCfgCommand;
 | 
					import com.cloud.agent.api.routing.LoadBalancerCfgCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.SavePasswordCommand;
 | 
					import com.cloud.agent.api.routing.SavePasswordCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.VmDataCommand;
 | 
					import com.cloud.agent.api.routing.VmDataCommand;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.to.IpAddressTO;
 | 
				
			||||||
import com.cloud.utils.NumbersUtil;
 | 
					import com.cloud.utils.NumbersUtil;
 | 
				
			||||||
import com.cloud.utils.component.Manager;
 | 
					import com.cloud.utils.component.Manager;
 | 
				
			||||||
import com.cloud.utils.script.OutputInterpreter;
 | 
					import com.cloud.utils.script.OutputInterpreter;
 | 
				
			||||||
@ -203,11 +205,19 @@ public class VirtualRoutingResource implements Manager {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected Answer execute(final IPAssocCommand cmd) {
 | 
					    protected Answer execute(final IPAssocCommand cmd) {
 | 
				
			||||||
        final String result = assignPublicIpAddress(cmd.getRouterName(), cmd.getRouterIp(), cmd.getPublicIp(), cmd.isAdd(), cmd.isSourceNat(), cmd.getVlanId(), cmd.getVlanGateway(), cmd.getVlanNetmask());
 | 
					        IpAddressTO[] ips = cmd.getIpAddresses();
 | 
				
			||||||
        if (result != null) {
 | 
					        String[] results = new String[cmd.getIpAddresses().length];
 | 
				
			||||||
            return new Answer(cmd, false, result);
 | 
					        int i = 0;
 | 
				
			||||||
 | 
					        String result = null;
 | 
				
			||||||
 | 
					        for (IpAddressTO ip : ips) {
 | 
				
			||||||
 | 
					            result = assignPublicIpAddress(cmd.getRouterName(), cmd.getRouterIp(), ip.getPublicIp(), ip.isAdd(), ip.isSourceNat(), ip.getVlanId(), ip.getVlanGateway(), ip.getVlanNetmask());
 | 
				
			||||||
 | 
					            if (result != null) {
 | 
				
			||||||
 | 
					                results[i++] = IpAssocAnswer.errorResult;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                results[i++] = result;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return new Answer(cmd);
 | 
					        return new IpAssocAnswer(cmd, results);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private String setLoadBalancerConfig(final String cfgFile,
 | 
						private String setLoadBalancerConfig(final String cfgFile,
 | 
				
			||||||
 | 
				
			|||||||
@ -121,6 +121,7 @@ import com.cloud.agent.api.proxy.ConsoleProxyLoadAnswer;
 | 
				
			|||||||
import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
 | 
					import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.DhcpEntryCommand;
 | 
					import com.cloud.agent.api.routing.DhcpEntryCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.IPAssocCommand;
 | 
					import com.cloud.agent.api.routing.IPAssocCommand;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.routing.IpAssocAnswer;
 | 
				
			||||||
import com.cloud.agent.api.routing.LoadBalancerCfgCommand;
 | 
					import com.cloud.agent.api.routing.LoadBalancerCfgCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand;
 | 
					import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.SavePasswordCommand;
 | 
					import com.cloud.agent.api.routing.SavePasswordCommand;
 | 
				
			||||||
@ -138,6 +139,7 @@ import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
 | 
				
			|||||||
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
 | 
					import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
 | 
				
			||||||
import com.cloud.agent.api.storage.ShareAnswer;
 | 
					import com.cloud.agent.api.storage.ShareAnswer;
 | 
				
			||||||
import com.cloud.agent.api.storage.ShareCommand;
 | 
					import com.cloud.agent.api.storage.ShareCommand;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.to.IpAddressTO;
 | 
				
			||||||
import com.cloud.agent.api.to.NicTO;
 | 
					import com.cloud.agent.api.to.NicTO;
 | 
				
			||||||
import com.cloud.agent.api.to.PortForwardingRuleTO;
 | 
					import com.cloud.agent.api.to.PortForwardingRuleTO;
 | 
				
			||||||
import com.cloud.agent.api.to.StorageFilerTO;
 | 
					import com.cloud.agent.api.to.StorageFilerTO;
 | 
				
			||||||
@ -1255,14 +1257,22 @@ public abstract class CitrixResourceBase implements ServerResource {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    protected Answer execute(final IPAssocCommand cmd) {
 | 
					    protected Answer execute(final IPAssocCommand cmd) {
 | 
				
			||||||
        Connection conn = getConnection();
 | 
					        Connection conn = getConnection();
 | 
				
			||||||
 | 
					        String[] results = new String[cmd.getIpAddresses().length];
 | 
				
			||||||
 | 
					        int i = 0;
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            assignPublicIpAddress(conn, cmd.getRouterName(), cmd.getRouterIp(), cmd.getPublicIp(), cmd.isAdd(), cmd.isFirstIP(), cmd.isSourceNat(), cmd.getVlanId(),
 | 
					            IpAddressTO[] ips = cmd.getIpAddresses();   
 | 
				
			||||||
                    cmd.getVlanGateway(), cmd.getVlanNetmask(), cmd.getVifMacAddress(), cmd.getGuestIp());
 | 
					            for (IpAddressTO ip : ips) {
 | 
				
			||||||
 | 
					                assignPublicIpAddress(conn, cmd.getRouterName(), cmd.getRouterIp(), ip.getPublicIp(), ip.isAdd(), ip.isFirstIP(), ip.isSourceNat(), ip.getVlanId(),
 | 
				
			||||||
 | 
					                        ip.getVlanGateway(), ip.getVlanNetmask(), ip.getVifMacAddress(), ip.getGuestIp());
 | 
				
			||||||
 | 
					                results[i++] = ip.getPublicIp() + " - success";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        } catch (InternalErrorException e) {
 | 
					        } catch (InternalErrorException e) {
 | 
				
			||||||
            return new Answer(cmd, false, e.getMessage());
 | 
					            s_logger.error(
 | 
				
			||||||
 | 
					                    "Ip Assoc failure on applying one ip due to exception:  ", e);
 | 
				
			||||||
 | 
					            results[i++] = IpAssocAnswer.errorResult;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return new Answer(cmd);
 | 
					        return new IpAssocAnswer(cmd, results);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected GetVncPortAnswer execute(GetVncPortCommand cmd) {
 | 
					    protected GetVncPortAnswer execute(GetVncPortCommand cmd) {
 | 
				
			||||||
 | 
				
			|||||||
@ -529,7 +529,6 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
 | 
				
			|||||||
    @DB
 | 
					    @DB
 | 
				
			||||||
    public Pod editPod(UpdatePodCmd cmd)  
 | 
					    public Pod editPod(UpdatePodCmd cmd)  
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    	
 | 
					 | 
				
			||||||
    	//Input validation 
 | 
					    	//Input validation 
 | 
				
			||||||
    	String startIp = cmd.getStartIp();
 | 
					    	String startIp = cmd.getStartIp();
 | 
				
			||||||
    	String endIp = cmd.getEndIp();
 | 
					    	String endIp = cmd.getEndIp();
 | 
				
			||||||
@ -2171,7 +2170,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
 | 
				
			|||||||
        		stmt.executeUpdate();
 | 
					        		stmt.executeUpdate();
 | 
				
			||||||
        		stmt.close();
 | 
					        		stmt.close();
 | 
				
			||||||
        	} catch (Exception ex) {
 | 
					        	} catch (Exception ex) {
 | 
				
			||||||
        		s_logger.debug("Exception saving public IP range: " + ex);
 | 
					        		s_logger.warn("Exception saving public IP range: ", ex);
 | 
				
			||||||
        		return false;
 | 
					        		return false;
 | 
				
			||||||
        	}
 | 
					        	}
 | 
				
			||||||
        	startIPLong += 1;
 | 
					        	startIPLong += 1;
 | 
				
			||||||
 | 
				
			|||||||
@ -38,7 +38,6 @@ import org.apache.log4j.Logger;
 | 
				
			|||||||
import com.cloud.agent.AgentManager;
 | 
					import com.cloud.agent.AgentManager;
 | 
				
			||||||
import com.cloud.agent.AgentManager.OnError;
 | 
					import com.cloud.agent.AgentManager.OnError;
 | 
				
			||||||
import com.cloud.agent.api.Answer;
 | 
					import com.cloud.agent.api.Answer;
 | 
				
			||||||
import com.cloud.agent.api.routing.IPAssocCommand;
 | 
					 | 
				
			||||||
import com.cloud.agent.api.to.NicTO;
 | 
					import com.cloud.agent.api.to.NicTO;
 | 
				
			||||||
import com.cloud.agent.manager.Commands;
 | 
					import com.cloud.agent.manager.Commands;
 | 
				
			||||||
import com.cloud.alert.AlertManager;
 | 
					import com.cloud.alert.AlertManager;
 | 
				
			||||||
@ -101,8 +100,8 @@ import com.cloud.network.dao.VpnUserDao;
 | 
				
			|||||||
import com.cloud.network.element.NetworkElement;
 | 
					import com.cloud.network.element.NetworkElement;
 | 
				
			||||||
import com.cloud.network.guru.NetworkGuru;
 | 
					import com.cloud.network.guru.NetworkGuru;
 | 
				
			||||||
import com.cloud.network.lb.LoadBalancingRule;
 | 
					import com.cloud.network.lb.LoadBalancingRule;
 | 
				
			||||||
import com.cloud.network.lb.LoadBalancingRulesManager;
 | 
					 | 
				
			||||||
import com.cloud.network.lb.LoadBalancingRule.LbDestination;
 | 
					import com.cloud.network.lb.LoadBalancingRule.LbDestination;
 | 
				
			||||||
 | 
					import com.cloud.network.lb.LoadBalancingRulesManager;
 | 
				
			||||||
import com.cloud.network.router.DomainRouterManager;
 | 
					import com.cloud.network.router.DomainRouterManager;
 | 
				
			||||||
import com.cloud.network.rules.FirewallRule;
 | 
					import com.cloud.network.rules.FirewallRule;
 | 
				
			||||||
import com.cloud.network.rules.PortForwardingRuleVO;
 | 
					import com.cloud.network.rules.PortForwardingRuleVO;
 | 
				
			||||||
@ -395,7 +394,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
 | 
				
			|||||||
                    vmGuestAddress = _vmDao.findById(vmId).getGuestIpAddress();
 | 
					                    vmGuestAddress = _vmDao.findById(vmId).getGuestIpAddress();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                cmds.addCommand(new IPAssocCommand(router.getInstanceName(), router.getPrivateIpAddress(), ip.getAddress(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, vmGuestAddress));
 | 
					                //cmds.addCommand(new IPAssocCommand(router.getInstanceName(), router.getPrivateIpAddress(), ip.getAddress(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, vmGuestAddress));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                firstIP = false;
 | 
					                firstIP = false;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,7 @@ package com.cloud.network.router;
 | 
				
			|||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
import java.util.Comparator;
 | 
					import java.util.Comparator;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.HashSet;
 | 
					import java.util.HashSet;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
@ -54,6 +55,7 @@ import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand;
 | 
				
			|||||||
import com.cloud.agent.api.routing.SavePasswordCommand;
 | 
					import com.cloud.agent.api.routing.SavePasswordCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.VmDataCommand;
 | 
					import com.cloud.agent.api.routing.VmDataCommand;
 | 
				
			||||||
import com.cloud.agent.api.routing.VpnUsersCfgCommand;
 | 
					import com.cloud.agent.api.routing.VpnUsersCfgCommand;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.to.IpAddressTO;
 | 
				
			||||||
import com.cloud.agent.api.to.LoadBalancerTO;
 | 
					import com.cloud.agent.api.to.LoadBalancerTO;
 | 
				
			||||||
import com.cloud.agent.manager.Commands;
 | 
					import com.cloud.agent.manager.Commands;
 | 
				
			||||||
import com.cloud.alert.AlertManager;
 | 
					import com.cloud.alert.AlertManager;
 | 
				
			||||||
@ -129,7 +131,6 @@ import com.cloud.network.lb.LoadBalancingRule;
 | 
				
			|||||||
import com.cloud.network.lb.LoadBalancingRule.LbDestination;
 | 
					import com.cloud.network.lb.LoadBalancingRule.LbDestination;
 | 
				
			||||||
import com.cloud.network.router.VirtualRouter.Role;
 | 
					import com.cloud.network.router.VirtualRouter.Role;
 | 
				
			||||||
import com.cloud.network.rules.FirewallRule;
 | 
					import com.cloud.network.rules.FirewallRule;
 | 
				
			||||||
import com.cloud.network.rules.PortForwardingRuleVO;
 | 
					 | 
				
			||||||
import com.cloud.network.rules.RulesManager;
 | 
					import com.cloud.network.rules.RulesManager;
 | 
				
			||||||
import com.cloud.offering.NetworkOffering;
 | 
					import com.cloud.offering.NetworkOffering;
 | 
				
			||||||
import com.cloud.offerings.NetworkOfferingVO;
 | 
					import com.cloud.offerings.NetworkOfferingVO;
 | 
				
			||||||
@ -580,41 +581,41 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
 | 
				
			|||||||
        return startRouter(cmd.getId());
 | 
					        return startRouter(cmd.getId());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private boolean resendRouterState(final DomainRouterVO router) {
 | 
					//    private boolean resendRouterState(final DomainRouterVO router) {
 | 
				
			||||||
        if (router.getRole() == Role.DHCP_FIREWALL_LB_PASSWD_USERDATA) {
 | 
					//        if (router.getRole() == Role.DHCP_FIREWALL_LB_PASSWD_USERDATA) {
 | 
				
			||||||
			//source NAT address is stored in /proc/cmdline of the domR and gets
 | 
					//			//source NAT address is stored in /proc/cmdline of the domR and gets
 | 
				
			||||||
			//reassigned upon powerup. Source NAT rule gets configured in StartRouter command
 | 
					//			//reassigned upon powerup. Source NAT rule gets configured in StartRouter command
 | 
				
			||||||
        	final List<IPAddressVO> ipAddrs = _networkMgr.listPublicIpAddressesInVirtualNetwork(router.getAccountId(), router.getDataCenterId(), null);
 | 
					//        	final List<IPAddressVO> ipAddrs = _networkMgr.listPublicIpAddressesInVirtualNetwork(router.getAccountId(), router.getDataCenterId(), null);
 | 
				
			||||||
			final List<String> ipAddrList = new ArrayList<String>();
 | 
					//			final List<String> ipAddrList = new ArrayList<String>();
 | 
				
			||||||
			for (final IPAddressVO ipVO : ipAddrs) {
 | 
					//			for (final IPAddressVO ipVO : ipAddrs) {
 | 
				
			||||||
				ipAddrList.add(ipVO.getAddress());
 | 
					//				ipAddrList.add(ipVO.getAddress());
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			if (!ipAddrList.isEmpty()) {
 | 
					 | 
				
			||||||
			    try {
 | 
					 | 
				
			||||||
    				final boolean success = _networkMgr.associateIP(router, ipAddrList, true, 0);
 | 
					 | 
				
			||||||
                    if (!success) {
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                } catch (ConcurrentOperationException e) {
 | 
					 | 
				
			||||||
                    s_logger.warn("unable to associate ip due to ", e);
 | 
					 | 
				
			||||||
                    return false;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			final List<PortForwardingRuleVO> fwRules = new ArrayList<PortForwardingRuleVO>();
 | 
					 | 
				
			||||||
//FIXME:			for (final IPAddressVO ipVO : ipAddrs) {
 | 
					 | 
				
			||||||
//				//We need only firewall rules that are either forwarding or for load balancers
 | 
					 | 
				
			||||||
//				fwRules.addAll(_rulesDao.listIPForwarding(ipVO.getAddress(), true));
 | 
					 | 
				
			||||||
//				fwRules.addAll(_rulesDao.listIpForwardingRulesForLoadBalancers(ipVO.getAddress()));
 | 
					 | 
				
			||||||
//			}
 | 
					//			}
 | 
				
			||||||
//			final List<PortForwardingRuleVO> result = _networkMgr.updateFirewallRules(router
 | 
					//			if (!ipAddrList.isEmpty()) {
 | 
				
			||||||
//					.getPublicIpAddress(), fwRules, router);
 | 
					//			    try {
 | 
				
			||||||
//			if (result.size() != fwRules.size()) {
 | 
					//    				final boolean success = _networkMgr.associateIP(router, ipAddrList, true, 0);
 | 
				
			||||||
//				return false;
 | 
					//                    if (!success) {
 | 
				
			||||||
 | 
					//                        return false;
 | 
				
			||||||
 | 
					//                    }
 | 
				
			||||||
 | 
					//                } catch (ConcurrentOperationException e) {
 | 
				
			||||||
 | 
					//                    s_logger.warn("unable to associate ip due to ", e);
 | 
				
			||||||
 | 
					//                    return false;
 | 
				
			||||||
 | 
					//                }
 | 
				
			||||||
//			}
 | 
					//			}
 | 
				
			||||||
		}
 | 
					//			final List<PortForwardingRuleVO> fwRules = new ArrayList<PortForwardingRuleVO>();
 | 
				
			||||||
		return resendDhcpEntries(router) && resendVpnServerData(router);
 | 
					////FIXME:			for (final IPAddressVO ipVO : ipAddrs) {
 | 
				
			||||||
      
 | 
					////				//We need only firewall rules that are either forwarding or for load balancers
 | 
				
			||||||
    }
 | 
					////				fwRules.addAll(_rulesDao.listIPForwarding(ipVO.getAddress(), true));
 | 
				
			||||||
 | 
					////				fwRules.addAll(_rulesDao.listIpForwardingRulesForLoadBalancers(ipVO.getAddress()));
 | 
				
			||||||
 | 
					////			}
 | 
				
			||||||
 | 
					////			final List<PortForwardingRuleVO> result = _networkMgr.updateFirewallRules(router
 | 
				
			||||||
 | 
					////					.getPublicIpAddress(), fwRules, router);
 | 
				
			||||||
 | 
					////			if (result.size() != fwRules.size()) {
 | 
				
			||||||
 | 
					////				return false;
 | 
				
			||||||
 | 
					////			}
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//		return resendDhcpEntries(router) && resendVpnServerData(router);
 | 
				
			||||||
 | 
					//      
 | 
				
			||||||
 | 
					//    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    private boolean resendDhcpEntries(final DomainRouterVO router){
 | 
					    private boolean resendDhcpEntries(final DomainRouterVO router){
 | 
				
			||||||
    	final List<? extends UserVm> vms = _vmDao.listBy(router.getId(), State.Creating, State.Starting, State.Running, State.Stopping, State.Stopped, State.Migrating);
 | 
					    	final List<? extends UserVm> vms = _vmDao.listBy(router.getId(), State.Creating, State.Starting, State.Running, State.Stopping, State.Stopped, State.Migrating);
 | 
				
			||||||
@ -1987,35 +1988,53 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
 | 
				
			|||||||
//    }
 | 
					//    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private Commands getAssociateIPCommands(final DomainRouterVO router, final List<? extends PublicIpAddress> ipAddrList, Commands cmds, long vmId) {        
 | 
					    private Commands getAssociateIPCommands(final DomainRouterVO router, final List<? extends PublicIpAddress> ips, Commands cmds, long vmId) {  
 | 
				
			||||||
          
 | 
					        
 | 
				
			||||||
        //Ip addresses have to be sorted before sending
 | 
					        //Ensure that in multiple vlans case we first send all ip addresses of vlan1, then all ip addresses of vlan2, etc..
 | 
				
			||||||
        Collections.sort(ipAddrList, new Comparator<IpAddress>() {
 | 
					        Map<String, ArrayList<PublicIpAddress>> vlanIpMap = new HashMap<String, ArrayList<PublicIpAddress>>();
 | 
				
			||||||
          @Override
 | 
					        for (final PublicIpAddress ipAddress: ips) {
 | 
				
			||||||
          public int compare(IpAddress o1, IpAddress o2) {
 | 
					            String vlanTag = ipAddress.getVlanTag();
 | 
				
			||||||
              return o1.getAddress().compareTo(o2.getAddress());
 | 
					            ArrayList<PublicIpAddress> ipList = vlanIpMap.get(vlanTag);
 | 
				
			||||||
          } });
 | 
					            if (ipList == null) {
 | 
				
			||||||
    
 | 
					                ipList = new ArrayList<PublicIpAddress>();
 | 
				
			||||||
         boolean firstIP = true;
 | 
					            }
 | 
				
			||||||
         
 | 
					            ipList.add(ipAddress);
 | 
				
			||||||
         for (final PublicIpAddress ip: ipAddrList) {
 | 
					            vlanIpMap.put(vlanTag, ipList);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        for (Map.Entry<String, ArrayList<PublicIpAddress>> vlanAndIp: vlanIpMap.entrySet()) {
 | 
				
			||||||
 | 
					            List<PublicIpAddress> ipAddrList = vlanAndIp.getValue();
 | 
				
			||||||
 | 
					            //Source nat ip address should always be sent first
 | 
				
			||||||
 | 
					            Collections.sort(ipAddrList, new Comparator<PublicIpAddress>() {
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public int compare(PublicIpAddress o1, PublicIpAddress o2) {
 | 
				
			||||||
 | 
					                    boolean s1 = o1.isSourceNat();
 | 
				
			||||||
 | 
					                    boolean s2 = o2.isSourceNat();
 | 
				
			||||||
 | 
					                    return (s1 ^ s2) ? ((s1 ^ true) ? 1 : -1) : 0;
 | 
				
			||||||
 | 
					                } });
 | 
				
			||||||
             
 | 
					             
 | 
				
			||||||
             boolean add = (ip.getState() == IpAddress.State.Releasing ? false : true);
 | 
					             IpAddressTO[] ipsToSend = new IpAddressTO[ipAddrList.size()];
 | 
				
			||||||
             boolean sourceNat = ip.isSourceNat();
 | 
					             int i = 0;
 | 
				
			||||||
             String vlanId = ip.getVlanTag();
 | 
					             boolean firstIP = true;
 | 
				
			||||||
             String vlanGateway = ip.getGateway();
 | 
					             for (final PublicIpAddress ipAddr: ipAddrList) {
 | 
				
			||||||
             String vlanNetmask = ip.getNetmask();
 | 
					                 
 | 
				
			||||||
             String vifMacAddress = ip.getMacAddress();
 | 
					                 boolean add = (ipAddr.getState() == IpAddress.State.Releasing ? false : true);
 | 
				
			||||||
            
 | 
					                 boolean sourceNat = ipAddr.isSourceNat();
 | 
				
			||||||
             String vmGuestAddress = null;
 | 
					                 String vlanId = ipAddr.getVlanTag();
 | 
				
			||||||
             if(vmId!=0){
 | 
					                 String vlanGateway = ipAddr.getGateway();
 | 
				
			||||||
                 vmGuestAddress = _vmDao.findById(vmId).getGuestIpAddress();
 | 
					                 String vlanNetmask = ipAddr.getNetmask();
 | 
				
			||||||
 | 
					                 String vifMacAddress = ipAddr.getMacAddress();
 | 
				
			||||||
 | 
					                 
 | 
				
			||||||
 | 
					                 String vmGuestAddress = null;
 | 
				
			||||||
 | 
					                 if(vmId!=0){
 | 
				
			||||||
 | 
					                     vmGuestAddress = _vmDao.findById(vmId).getGuestIpAddress();
 | 
				
			||||||
 | 
					                 }
 | 
				
			||||||
 | 
					                 IpAddressTO ip = new IpAddressTO(ipAddr.getAddress(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, vmGuestAddress);
 | 
				
			||||||
 | 
					                 ipsToSend[i++] = ip;
 | 
				
			||||||
 | 
					                 firstIP = false;
 | 
				
			||||||
             }
 | 
					             }
 | 
				
			||||||
 | 
					             cmds.addCommand("IPAssocCommand", new IPAssocCommand(router.getInstanceName(), router.getPrivateIpAddress(), ipsToSend));
 | 
				
			||||||
             cmds.addCommand("IPAssocCommand", new IPAssocCommand(router.getInstanceName(), router.getPrivateIpAddress(), ip.getAddress(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, vmGuestAddress));
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
             firstIP = false;
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
         return cmds;
 | 
					         return cmds;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
				
			|||||||
@ -3194,15 +3194,16 @@ public class ManagementServerImpl implements ManagementServer {
 | 
				
			|||||||
                        + " and parentId " + parentId);
 | 
					                        + " and parentId " + parentId);
 | 
				
			||||||
                return dbDomain;
 | 
					                return dbDomain;
 | 
				
			||||||
            } catch (IllegalArgumentException ex) {
 | 
					            } catch (IllegalArgumentException ex) {
 | 
				
			||||||
 | 
					                s_logger.warn("Failed to create domain ", ex);
 | 
				
			||||||
            	EventUtils.saveEvent(new Long(1), ownerId, EventVO.LEVEL_ERROR, EventTypes.EVENT_DOMAIN_CREATE, "Domain, " + name + " was not created with owner id = " + ownerId
 | 
					            	EventUtils.saveEvent(new Long(1), ownerId, EventVO.LEVEL_ERROR, EventTypes.EVENT_DOMAIN_CREATE, "Domain, " + name + " was not created with owner id = " + ownerId
 | 
				
			||||||
                        + " and parentId " + parentId);
 | 
					                        + " and parentId " + parentId);
 | 
				
			||||||
                throw ex;
 | 
					                throw ex;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
        	EventUtils.saveEvent(new Long(1), ownerId, EventVO.LEVEL_ERROR, EventTypes.EVENT_DOMAIN_CREATE, "Domain, " + name + " was not created with owner id = " + ownerId
 | 
					            EventUtils.saveEvent(new Long(1), ownerId, EventVO.LEVEL_ERROR, EventTypes.EVENT_DOMAIN_CREATE, "Domain, " + name + " was not created with owner id = " + ownerId
 | 
				
			||||||
                    + " and parentId " + parentId);
 | 
					                    + " and parentId " + parentId);
 | 
				
			||||||
 | 
					            throw new InvalidParameterValueException("Domain with name " + name + " already exists for the parent id=" + parentId);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return null;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 | 
				
			|||||||
@ -134,6 +134,7 @@ import com.cloud.network.router.DomainRouterManager;
 | 
				
			|||||||
import com.cloud.network.rules.RulesManager;
 | 
					import com.cloud.network.rules.RulesManager;
 | 
				
			||||||
import com.cloud.network.security.SecurityGroupManager;
 | 
					import com.cloud.network.security.SecurityGroupManager;
 | 
				
			||||||
import com.cloud.offering.NetworkOffering;
 | 
					import com.cloud.offering.NetworkOffering;
 | 
				
			||||||
 | 
					import com.cloud.offering.NetworkOffering.GuestIpType;
 | 
				
			||||||
import com.cloud.offering.ServiceOffering;
 | 
					import com.cloud.offering.ServiceOffering;
 | 
				
			||||||
import com.cloud.offerings.dao.NetworkOfferingDao;
 | 
					import com.cloud.offerings.dao.NetworkOfferingDao;
 | 
				
			||||||
import com.cloud.service.ServiceOfferingVO;
 | 
					import com.cloud.service.ServiceOfferingVO;
 | 
				
			||||||
@ -2504,15 +2505,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
 | 
				
			|||||||
                throw new InvalidParameterValueException("Unable to find network by id " + networkId);
 | 
					                throw new InvalidParameterValueException("Unable to find network by id " + networkId);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                if (!network.isShared()) {
 | 
					                if (!network.isShared()) {
 | 
				
			||||||
                    //Iterate through account/network map
 | 
					                    //Check account permissions
 | 
				
			||||||
                    List<NetworkVO> networkMap = _networkDao.listBy(accountId, networkId);
 | 
					                    List<NetworkVO> networkMap = _networkDao.listBy(accountId, networkId);
 | 
				
			||||||
                    if (networkMap == null || networkMap.isEmpty()) {
 | 
					                    if (networkMap == null || networkMap.isEmpty()) {
 | 
				
			||||||
                        throw new PermissionDeniedException("Unable to create a vm using network with id " + networkId + ", permission denied");
 | 
					                        throw new PermissionDeniedException("Unable to create a vm using network with id " + networkId + ", permission denied");
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                } else if (network.getTrafficType() != TrafficType.Guest) {
 | 
					                } 
 | 
				
			||||||
                    throw new InvalidParameterValueException("Unable to create a vm using network which traffic type is " + network.getTrafficType() + ". " +
 | 
					 | 
				
			||||||
                    		"Only Guest traffic type is acceptes");
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                networks.add(new Pair<NetworkVO, NicProfile>(network, null));
 | 
					                networks.add(new Pair<NetworkVO, NicProfile>(network, null));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user