diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java b/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java index 32c28cc0b9e..628865c2470 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java @@ -19,515 +19,21 @@ package com.cloud.agent.resource.virtualnetwork; -import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; -import com.cloud.agent.api.BumpUpPriorityCommand; -import com.cloud.agent.api.SetupGuestNetworkCommand; -import com.cloud.agent.api.routing.CreateIpAliasCommand; -import com.cloud.agent.api.routing.DeleteIpAliasCommand; -import com.cloud.agent.api.routing.DhcpEntryCommand; -import com.cloud.agent.api.routing.DnsMasqConfigCommand; -import com.cloud.agent.api.routing.IpAliasTO; -import com.cloud.agent.api.routing.IpAssocCommand; -import com.cloud.agent.api.routing.LoadBalancerConfigCommand; import com.cloud.agent.api.routing.NetworkElementCommand; -import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; -import com.cloud.agent.api.routing.SavePasswordCommand; -import com.cloud.agent.api.routing.SetFirewallRulesCommand; -import com.cloud.agent.api.routing.SetMonitorServiceCommand; -import com.cloud.agent.api.routing.SetNetworkACLCommand; -import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; -import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand; -import com.cloud.agent.api.routing.SetSourceNatCommand; -import com.cloud.agent.api.routing.SetStaticNatRulesCommand; -import com.cloud.agent.api.routing.SetStaticRouteCommand; -import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand; -import com.cloud.agent.api.routing.VmDataCommand; -import com.cloud.agent.api.routing.VpnUsersCfgCommand; -import com.cloud.agent.api.to.DhcpTO; -import com.cloud.agent.api.to.FirewallRuleTO; -import com.cloud.agent.api.to.IpAddressTO; -import com.cloud.agent.api.to.NicTO; -import com.cloud.agent.api.to.PortForwardingRuleTO; -import com.cloud.agent.api.to.StaticNatRuleTO; -import com.cloud.agent.resource.virtualnetwork.model.AclRule; -import com.cloud.agent.resource.virtualnetwork.model.AllAclRule; -import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; -import com.cloud.agent.resource.virtualnetwork.model.DhcpConfig; -import com.cloud.agent.resource.virtualnetwork.model.DhcpConfigEntry; -import com.cloud.agent.resource.virtualnetwork.model.FirewallRule; -import com.cloud.agent.resource.virtualnetwork.model.FirewallRules; -import com.cloud.agent.resource.virtualnetwork.model.ForwardingRule; -import com.cloud.agent.resource.virtualnetwork.model.ForwardingRules; -import com.cloud.agent.resource.virtualnetwork.model.GuestNetwork; -import com.cloud.agent.resource.virtualnetwork.model.IcmpAclRule; -import com.cloud.agent.resource.virtualnetwork.model.IpAddress; -import com.cloud.agent.resource.virtualnetwork.model.IpAddressAlias; -import com.cloud.agent.resource.virtualnetwork.model.IpAliases; -import com.cloud.agent.resource.virtualnetwork.model.IpAssociation; -import com.cloud.agent.resource.virtualnetwork.model.MonitorService; -import com.cloud.agent.resource.virtualnetwork.model.NetworkACL; -import com.cloud.agent.resource.virtualnetwork.model.ProtocolAclRule; -import com.cloud.agent.resource.virtualnetwork.model.RemoteAccessVpn; -import com.cloud.agent.resource.virtualnetwork.model.Site2SiteVpn; -import com.cloud.agent.resource.virtualnetwork.model.StaticNatRule; -import com.cloud.agent.resource.virtualnetwork.model.StaticNatRules; -import com.cloud.agent.resource.virtualnetwork.model.StaticRoute; -import com.cloud.agent.resource.virtualnetwork.model.StaticRoutes; -import com.cloud.agent.resource.virtualnetwork.model.TcpAclRule; -import com.cloud.agent.resource.virtualnetwork.model.UdpAclRule; -import com.cloud.agent.resource.virtualnetwork.model.VmData; -import com.cloud.agent.resource.virtualnetwork.model.VmDhcpConfig; -import com.cloud.agent.resource.virtualnetwork.model.VmPassword; -import com.cloud.agent.resource.virtualnetwork.model.VpnUser; -import com.cloud.agent.resource.virtualnetwork.model.VpnUserList; -import com.cloud.network.HAProxyConfigurator; -import com.cloud.network.LoadBalancerConfigurator; -import com.cloud.network.vpc.StaticRouteProfile; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.net.NetUtils; -import com.google.gson.FieldNamingPolicy; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - +import com.cloud.agent.resource.virtualnetwork.facade.AbstractConfigItemFacade; public class ConfigHelper { - private final static Gson gson; - - static { - gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); - } public static List generateCommandCfg(final NetworkElementCommand cmd) { - List cfg; - if (cmd instanceof SetPortForwardingRulesVpcCommand) { - cfg = generateConfig((SetPortForwardingRulesVpcCommand)cmd); // Migrated - } else if (cmd instanceof SetPortForwardingRulesCommand) { - cfg = generateConfig((SetPortForwardingRulesCommand)cmd); // Migrated - } else if (cmd instanceof SetStaticRouteCommand) { - cfg = generateConfig((SetStaticRouteCommand)cmd); // Migrated - } else if (cmd instanceof SetStaticNatRulesCommand) { - cfg = generateConfig((SetStaticNatRulesCommand)cmd); // Migrated - } else if (cmd instanceof LoadBalancerConfigCommand) { - cfg = generateConfig((LoadBalancerConfigCommand)cmd); - } else if (cmd instanceof SavePasswordCommand) { - cfg = generateConfig((SavePasswordCommand)cmd); // Migrated - } else if (cmd instanceof DhcpEntryCommand) { - cfg = generateConfig((DhcpEntryCommand)cmd); // Migrated - } else if (cmd instanceof CreateIpAliasCommand) { - cfg = generateConfig((CreateIpAliasCommand)cmd); // Migrated - } else if (cmd instanceof DnsMasqConfigCommand) { - cfg = generateConfig((DnsMasqConfigCommand)cmd); // Migrated - } else if (cmd instanceof DeleteIpAliasCommand) { - cfg = generateConfig((DeleteIpAliasCommand)cmd); // Migrated - } else if (cmd instanceof VmDataCommand) { - cfg = generateConfig((VmDataCommand)cmd); // Migrated - } else if (cmd instanceof SetFirewallRulesCommand) { - cfg = generateConfig((SetFirewallRulesCommand)cmd); - } else if (cmd instanceof BumpUpPriorityCommand) { - cfg = generateConfig((BumpUpPriorityCommand)cmd); // Migrated (SB, TBT) - } else if (cmd instanceof RemoteAccessVpnCfgCommand) { - cfg = generateConfig((RemoteAccessVpnCfgCommand)cmd); // Migrated (SB, TBT) - } else if (cmd instanceof VpnUsersCfgCommand) { - cfg = generateConfig((VpnUsersCfgCommand)cmd); // Migrated (SB, TBT) - } else if (cmd instanceof Site2SiteVpnCfgCommand) { - cfg = generateConfig((Site2SiteVpnCfgCommand)cmd); // Migrated (SB) - } else if (cmd instanceof SetMonitorServiceCommand) { - cfg = generateConfig((SetMonitorServiceCommand)cmd); // Migrated (SB, TBT) - } else if (cmd instanceof SetupGuestNetworkCommand) { - cfg = generateConfig((SetupGuestNetworkCommand)cmd); // Migrated - } else if (cmd instanceof SetNetworkACLCommand) { - cfg = generateConfig((SetNetworkACLCommand)cmd); // Migrated - } else if (cmd instanceof SetSourceNatCommand) { - cfg = generateConfig((SetSourceNatCommand)cmd); // Migrated - ignored - } else if (cmd instanceof IpAssocCommand) { - cfg = generateConfig((IpAssocCommand)cmd); // Migrated - } else { - return null; - } - return cfg; - } - - - private static List generateConfig(final VpnUsersCfgCommand cmd) { - - final List vpnUsers = new LinkedList(); - for (final VpnUsersCfgCommand.UsernamePassword userpwd : cmd.getUserpwds()) { - vpnUsers.add(new VpnUser(userpwd.getUsername(), userpwd.getPassword(), userpwd.isAdd())); - } - - final VpnUserList vpnUserList = new VpnUserList(vpnUsers); - return generateConfigItems(vpnUserList); - } - - private static List generateConfig(final RemoteAccessVpnCfgCommand cmd) { - final RemoteAccessVpn remoteAccessVpn = new RemoteAccessVpn(cmd.isCreate(), cmd.getIpRange(), cmd.getPresharedKey(), cmd.getVpnServerIp(), cmd.getLocalIp(), cmd.getLocalCidr(), - cmd.getPublicInterface()); - return generateConfigItems(remoteAccessVpn); - } - - - private static List generateConfig(final SetFirewallRulesCommand cmd) { - final List rules = new ArrayList(); - for (final FirewallRuleTO rule : cmd.getRules()) { - final FirewallRule fwRule = new FirewallRule(rule.getId(), rule.getSrcVlanTag(), rule.getSrcIp(), rule.getProtocol(), rule.getSrcPortRange(), rule.revoked(), - rule.isAlreadyAdded(), rule.getSourceCidrList(), rule.getPurpose().toString(), rule.getIcmpType(), rule.getIcmpCode(), rule.getTrafficType().toString(), - rule.getGuestCidr(), rule.isDefaultEgressPolicy()); - rules.add(fwRule); - } - - final FirewallRules ruleSet = new FirewallRules(rules.toArray(new FirewallRule[rules.size()])); - return generateConfigItems(ruleSet); - - } - - private static List generateConfig(final SetPortForwardingRulesCommand cmd) { - final List rules = new ArrayList(); - - for (final PortForwardingRuleTO rule : cmd.getRules()) { - final ForwardingRule fwdRule = new ForwardingRule(rule.revoked(), rule.getProtocol().toLowerCase(), rule.getSrcIp(), rule.getStringSrcPortRange(), rule.getDstIp(), - rule.getStringDstPortRange()); - rules.add(fwdRule); - } - - final ForwardingRules ruleSet = new ForwardingRules(rules.toArray(new ForwardingRule[rules.size()])); - - return generateConfigItems(ruleSet); - } - - private static List generateConfig(final SetStaticNatRulesCommand cmd) { - - final LinkedList rules = new LinkedList<>(); - for (final StaticNatRuleTO rule : cmd.getRules()) { - final StaticNatRule staticNatRule = new StaticNatRule(rule.revoked(), rule.getProtocol(), rule.getSrcIp(), rule.getStringSrcPortRange(), rule.getDstIp()); - rules.add(staticNatRule); - } - final StaticNatRules staticNatRules = new StaticNatRules(rules); - - return generateConfigItems(staticNatRules); - } - - private static List generateConfig(final LoadBalancerConfigCommand cmd) { - final LinkedList cfg = new LinkedList<>(); - - final String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); - final LoadBalancerConfigurator cfgtr = new HAProxyConfigurator(); - - final String[] config = cfgtr.generateConfiguration(cmd); - final StringBuffer buff = new StringBuffer(); - for (int i = 0; i < config.length; i++) { - buff.append(config[i]); - buff.append("\n"); - } - final String tmpCfgFilePath = "/etc/haproxy/"; - final String tmpCfgFileName = "haproxy.cfg.new." + String.valueOf(System.currentTimeMillis()); - cfg.add(new FileConfigItem(tmpCfgFilePath, tmpCfgFileName, buff.toString())); - - final String[][] rules = cfgtr.generateFwRules(cmd); - - final String[] addRules = rules[LoadBalancerConfigurator.ADD]; - final String[] removeRules = rules[LoadBalancerConfigurator.REMOVE]; - final String[] statRules = rules[LoadBalancerConfigurator.STATS]; - - String args = " -f " + tmpCfgFilePath + tmpCfgFileName; - StringBuilder sb = new StringBuilder(); - if (addRules.length > 0) { - for (int i = 0; i < addRules.length; i++) { - sb.append(addRules[i]).append(','); - } - args += " -a " + sb.toString(); - } - - sb = new StringBuilder(); - if (removeRules.length > 0) { - for (int i = 0; i < removeRules.length; i++) { - sb.append(removeRules[i]).append(','); - } - - args += " -d " + sb.toString(); - } - - sb = new StringBuilder(); - if (statRules.length > 0) { - for (int i = 0; i < statRules.length; i++) { - sb.append(statRules[i]).append(','); - } - - args += " -s " + sb.toString(); - } - - if (cmd.getVpcId() == null) { - args = " -i " + routerIp + args; - cfg.add(new ScriptConfigItem(VRScripts.LB, args)); - } else { - args = " -i " + cmd.getNic().getIp() + args; - cfg.add(new ScriptConfigItem(VRScripts.VPC_LB, args)); - } - - return cfg; - } - - private static List generateConfig(final SavePasswordCommand cmd) { - final VmPassword vmPassword = new VmPassword(cmd.getVmIpAddress(), cmd.getPassword()); - - return generateConfigItems(vmPassword); - } - - private static List generateConfig(final DhcpEntryCommand cmd) { - final VmDhcpConfig vmDhcpConfig = new VmDhcpConfig(cmd.getVmName(), cmd.getVmMac(), cmd.getVmIpAddress(), cmd.getVmIp6Address(), cmd.getDuid(), cmd.getDefaultDns(), - cmd.getDefaultRouter(), cmd.getStaticRoutes(), cmd.isDefault()); - - return generateConfigItems(vmDhcpConfig); - } - - private static List generateConfig(final CreateIpAliasCommand cmd) { - final List ipAliases = new LinkedList(); - final List ipAliasTOs = cmd.getIpAliasList(); - for (final IpAliasTO ipaliasto : ipAliasTOs) { - final IpAddressAlias alias = new IpAddressAlias(false, ipaliasto.getRouterip(), ipaliasto.getNetmask(), Long.parseLong(ipaliasto.getAlias_count())); - ipAliases.add(alias); - } - - final IpAliases ipAliasList = new IpAliases(ipAliases); - return generateConfigItems(ipAliasList); - } - - private static List generateConfig(final DeleteIpAliasCommand cmd) { - final List ipAliases = new LinkedList(); - - final List revokedIpAliasTOs = cmd.getDeleteIpAliasTos(); - for (final IpAliasTO ipAliasTO : revokedIpAliasTOs) { - final IpAddressAlias alias = new IpAddressAlias(true, ipAliasTO.getRouterip(), ipAliasTO.getNetmask(), Long.parseLong(ipAliasTO.getAlias_count())); - ipAliases.add(alias); - } - - final List activeIpAliasTOs = cmd.getCreateIpAliasTos(); - for (final IpAliasTO ipAliasTO : activeIpAliasTOs) { - final IpAddressAlias alias = new IpAddressAlias(false, ipAliasTO.getRouterip(), ipAliasTO.getNetmask(), Long.parseLong(ipAliasTO.getAlias_count())); - ipAliases.add(alias); - } - - final IpAliases ipAliasList = new IpAliases(ipAliases); - return generateConfigItems(ipAliasList); - } - - private static List generateConfig(final DnsMasqConfigCommand cmd) { - final LinkedList entries = new LinkedList(); - - for (final DhcpTO dhcpTo : cmd.getIps()) { - final DhcpConfigEntry entry = new DhcpConfigEntry(dhcpTo.getRouterIp(), dhcpTo.getGateway(), dhcpTo.getNetmask(), dhcpTo.getStartIpOfSubnet()); - entries.add(entry); - } - - return generateConfigItems(new DhcpConfig(entries)); - } - - private static List generateConfig(final BumpUpPriorityCommand cmd) { - final LinkedList cfg = new LinkedList<>(); - cfg.add(new ScriptConfigItem(VRScripts.RVR_BUMPUP_PRI, null)); - return cfg; - } - - - private static List generateConfig(final VmDataCommand cmd) { - final VmData vmData = new VmData(cmd.getVmIpAddress(), cmd.getVmData()); - - return generateConfigItems(vmData); - } - - private static List generateConfig(final Site2SiteVpnCfgCommand cmd) { - final Site2SiteVpn site2siteVpn = new Site2SiteVpn(cmd.getLocalPublicIp(), cmd.getLocalGuestCidr(), cmd.getLocalPublicGateway(), cmd.getPeerGatewayIp(), - cmd.getPeerGuestCidrList(), cmd.getEspPolicy(), cmd.getIkePolicy(), cmd.getIpsecPsk(), cmd.getIkeLifetime(), cmd.getEspLifetime(), cmd.isCreate(), cmd.getDpd(), - cmd.isPassive()); - return generateConfigItems(site2siteVpn); - } - - - private static List generateConfig(final SetMonitorServiceCommand cmd) { - final MonitorService monitorService = new MonitorService(cmd.getConfiguration(), cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_ENABLE)); - return generateConfigItems(monitorService); - } - - private static List generateConfig(final SetupGuestNetworkCommand cmd) { - final NicTO nic = cmd.getNic(); - final String routerGIP = cmd.getAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP); - final String gateway = cmd.getAccessDetail(NetworkElementCommand.GUEST_NETWORK_GATEWAY); - final String cidr = Long.toString(NetUtils.getCidrSize(nic.getNetmask())); - final String netmask = nic.getNetmask(); - final String domainName = cmd.getNetworkDomain(); - String dns = cmd.getDefaultDns1(); - - if (dns == null || dns.isEmpty()) { - dns = cmd.getDefaultDns2(); - } else { - final String dns2 = cmd.getDefaultDns2(); - if (dns2 != null && !dns2.isEmpty()) { - dns += "," + dns2; - } - } - - final GuestNetwork guestNetwork = new GuestNetwork(cmd.isAdd(), nic.getMac(), "eth" + nic.getDeviceId(), routerGIP, netmask, gateway, - cidr, dns, domainName); - - return generateConfigItems(guestNetwork); - } - - private static List generateConfig(final SetNetworkACLCommand cmd) { - final String privateGw = cmd.getAccessDetail(NetworkElementCommand.VPC_PRIVATE_GATEWAY); - - final String[][] rules = cmd.generateFwRules(); - final String[] aclRules = rules[0]; - final NicTO nic = cmd.getNic(); - final String dev = "eth" + nic.getDeviceId(); - final String netmask = Long.toString(NetUtils.getCidrSize(nic.getNetmask())); - - final List ingressRules = new ArrayList(); - final List egressRules = new ArrayList(); - - for (int i = 0; i < aclRules.length; i++) { - AclRule aclRule; - final String[] ruleParts = aclRules[i].split(":"); - switch (ruleParts[1].toLowerCase()) { - case "icmp": - aclRule = new IcmpAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5]), Integer.parseInt(ruleParts[2]), Integer.parseInt(ruleParts[3])); - break; - case "tcp": - aclRule = new TcpAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5]), Integer.parseInt(ruleParts[2]), Integer.parseInt(ruleParts[3])); - break; - case "udp": - aclRule = new UdpAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5]), Integer.parseInt(ruleParts[2]), Integer.parseInt(ruleParts[3])); - break; - case "all": - aclRule = new AllAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5])); - break; - default: - aclRule = new ProtocolAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5]), Integer.parseInt(ruleParts[1])); - } - if ("Ingress".equals(ruleParts[0])) { - ingressRules.add(aclRule); - } else { - egressRules.add(aclRule); - } - } - - final NetworkACL networkACL = new NetworkACL(dev, nic.getMac(), privateGw != null, nic.getIp(), netmask, ingressRules.toArray(new AclRule[ingressRules.size()]), - egressRules.toArray(new AclRule[egressRules.size()])); - - return generateConfigItems(networkACL); - } - - private static List generateConfig(final SetSourceNatCommand cmd) { - final LinkedList cfg = new LinkedList<>(); - - /* FIXME This seems useless as we already pass this info with the ipassoc - * IpAddressTO pubIP = cmd.getIpAddress(); - * String dev = "eth" + pubIP.getNicDevId(); - * String args = "-A"; - * args += " -l "; - * args += pubIP.getPublicIp(); - * args += " -c "; - * args += dev; - * cfg.add(new ScriptConfigItem(VRScripts.VPC_SOURCE_NAT, args)); + /* + * [TODO] Still have to migrate LoadBalancerConfigCommand and BumpUpPriorityCommand + * [FIXME] Have a look at SetSourceNatConfigItem */ - return cfg; + final AbstractConfigItemFacade configItemFacade = AbstractConfigItemFacade.getInstance(cmd.getClass()); + + return configItemFacade.generateConfig(cmd); } - - private static List generateConfig(final SetStaticRouteCommand cmd) { - final LinkedList routes = new LinkedList<>(); - - for (final StaticRouteProfile profile : cmd.getStaticRoutes()) { - final String cidr = profile.getCidr(); - final String subnet = NetUtils.getCidrSubNet(cidr); - final String cidrSize = cidr.split("\\/")[1]; - final boolean keep = profile.getState() == com.cloud.network.vpc.StaticRoute.State.Active || profile.getState() == com.cloud.network.vpc.StaticRoute.State.Add; - - routes.add(new StaticRoute(!keep, profile.getIp4Address(), profile.getGateway(), subnet + "/" + cidrSize)); - } - - return generateConfigItems(new StaticRoutes(routes)); - } - - private static List generateConfig(final IpAssocCommand cmd) { - new LinkedList<>(); - final List ips = new LinkedList(); - - for (final IpAddressTO ip : cmd.getIpAddresses()) { - final IpAddress ipAddress = new IpAddress(ip.getPublicIp(), ip.isSourceNat(), ip.isAdd(), ip.isOneToOneNat(), ip.isFirstIP(), ip.getVlanGateway(), ip.getVlanNetmask(), - ip.getVifMacAddress(), ip.getNicDevId(), ip.isNewNic()); - ips.add(ipAddress); - } - - final IpAssociation ipAssociation = new IpAssociation(ips.toArray(new IpAddress[ips.size()])); - - return generateConfigItems(ipAssociation); - } - - private static List generateConfigItems(final ConfigBase configuration) { - final List cfg = new LinkedList<>(); - String destinationFile; - - switch (configuration.getType()) { - case ConfigBase.FORWARDING_RULES: - destinationFile = VRScripts.FORWARDING_RULES_CONFIG; - break; - case ConfigBase.FIREWALL_RULES: - destinationFile = VRScripts.FIREWALL_RULES_CONFIG; - break; - case ConfigBase.GUEST_NETWORK: - destinationFile = VRScripts.GUEST_NETWORK_CONFIG; - break; - case ConfigBase.IP_ASSOCIATION: - destinationFile = VRScripts.IP_ASSOCIATION_CONFIG; - break; - case ConfigBase.NETWORK_ACL: - destinationFile = VRScripts.NETWORK_ACL_CONFIG; - break; - case ConfigBase.STATICNAT_RULES: - destinationFile = VRScripts.STATICNAT_RULES_CONFIG; - break; - case ConfigBase.VM_DHCP: - destinationFile = VRScripts.VM_DHCP_CONFIG; - break; - case ConfigBase.VM_METADATA: - destinationFile = VRScripts.VM_METADATA_CONFIG; - break; - case ConfigBase.VM_PASSWORD: - destinationFile = VRScripts.VM_PASSWORD_CONFIG; - break; - case ConfigBase.VPN_USER_LIST: - destinationFile = VRScripts.VPN_USER_LIST_CONFIG; - break; - case ConfigBase.SITE2SITEVPN: - destinationFile = VRScripts.SITE_2_SITE_VPN_CONFIG; - break; - case ConfigBase.REMOTEACCESSVPN: - destinationFile = VRScripts.REMOTE_ACCESS_VPN_CONFIG; - break; - case ConfigBase.MONITORSERVICE: - destinationFile = VRScripts.MONITOR_SERVICE_CONFIG; - case ConfigBase.STATIC_ROUTES: - destinationFile = VRScripts.STATIC_ROUTES_CONFIG; - break; - case ConfigBase.DHCP_CONFIG: - destinationFile = VRScripts.DHCP_CONFIG; - break; - case ConfigBase.IP_ALIAS_CONFIG: - destinationFile = VRScripts.IP_ALIAS_CONFIG; - break; - default: - throw new CloudRuntimeException("Unable to process the configuration for " + configuration.getType()); - } - - final ConfigItem configFile = new FileConfigItem(VRScripts.CONFIG_PERSIST_LOCATION, destinationFile, gson.toJson(configuration)); - cfg.add(configFile); - - final ConfigItem updateCommand = new ScriptConfigItem(VRScripts.UPDATE_CONFIG, destinationFile); - cfg.add(updateCommand); - - return cfg; - - } -} +} \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java index 02df41662e4..48de31ba5c7 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java @@ -19,20 +19,44 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.Hashtable; import java.util.LinkedList; import java.util.List; +import com.cloud.agent.api.BumpUpPriorityCommand; +import com.cloud.agent.api.SetupGuestNetworkCommand; +import com.cloud.agent.api.routing.CreateIpAliasCommand; +import com.cloud.agent.api.routing.DeleteIpAliasCommand; +import com.cloud.agent.api.routing.DhcpEntryCommand; +import com.cloud.agent.api.routing.DnsMasqConfigCommand; +import com.cloud.agent.api.routing.IpAssocCommand; +import com.cloud.agent.api.routing.LoadBalancerConfigCommand; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; +import com.cloud.agent.api.routing.SavePasswordCommand; +import com.cloud.agent.api.routing.SetFirewallRulesCommand; +import com.cloud.agent.api.routing.SetMonitorServiceCommand; +import com.cloud.agent.api.routing.SetNetworkACLCommand; +import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; +import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand; +import com.cloud.agent.api.routing.SetSourceNatCommand; +import com.cloud.agent.api.routing.SetStaticNatRulesCommand; +import com.cloud.agent.api.routing.SetStaticRouteCommand; +import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand; +import com.cloud.agent.api.routing.VmDataCommand; +import com.cloud.agent.api.routing.VpnUsersCfgCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; import com.cloud.agent.resource.virtualnetwork.FileConfigItem; import com.cloud.agent.resource.virtualnetwork.ScriptConfigItem; import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.utils.exception.CloudRuntimeException; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public abstract class AbstractConfigItemFacade { + protected final static Gson gson; static { @@ -41,6 +65,42 @@ public abstract class AbstractConfigItemFacade { protected String destinationFile; + private static Hashtable, AbstractConfigItemFacade> flyweight = new Hashtable, AbstractConfigItemFacade>(); + + public AbstractConfigItemFacade() { + flyweight.put(SetPortForwardingRulesVpcCommand.class, new SetPortForwardingRulesVpcConfigItem()); + flyweight.put(SetPortForwardingRulesCommand.class, new SetPortForwardingRulesConfigItem()); + flyweight.put(SetStaticRouteCommand.class, new SetStaticRouteConfigItem()); + flyweight.put(SetStaticNatRulesCommand.class, new SetStaticNatRulesConfigItem()); + flyweight.put(LoadBalancerConfigCommand.class, new LoadBalancerConfigItem()); + flyweight.put(SavePasswordCommand.class, new SavePasswordConfigItem()); + flyweight.put(DhcpEntryCommand.class, new DhcpEntryConfigItem()); + flyweight.put(CreateIpAliasCommand.class, new CreateIpAliasConfigItem()); + flyweight.put(DnsMasqConfigCommand.class, new DnsMasqConfigItem()); + flyweight.put(DeleteIpAliasCommand.class, new DeleteIpAliasConfigItem()); + flyweight.put(VmDataCommand.class, new VmDataConfigItem()); + flyweight.put(SetFirewallRulesCommand.class, new SetFirewallRulesConfigItem()); + flyweight.put(BumpUpPriorityCommand.class, new BumpUpPriorityConfigItem()); + flyweight.put(RemoteAccessVpnCfgCommand.class, new RemoteAccessVpnConfigItem()); + flyweight.put(VpnUsersCfgCommand.class, new VpnUsersConfigItem()); + flyweight.put(Site2SiteVpnCfgCommand.class, new Site2SiteVpnConfigItem()); + flyweight.put(SetMonitorServiceCommand.class, new SetMonitorServiceConfigItem()); + flyweight.put(SetupGuestNetworkCommand.class, new SetGuestNetworkConfigItem()); + flyweight.put(SetNetworkACLCommand.class, new SetNetworkAclConfigItem()); + flyweight.put(SetSourceNatCommand.class, new SetSourceNatConfigItem()); + flyweight.put(IpAssocCommand.class, new IpAssociationConfigItem()); + } + + public static AbstractConfigItemFacade getInstance(final Class key) { + if (!flyweight.containsKey(key)) { + throw new CloudRuntimeException("Unable to process the configuration for " + key.getClass().getName()); + } + + final AbstractConfigItemFacade instance = flyweight.get(key); + + return instance; + } + protected List generateConfigItems(final ConfigBase configuration) { final List cfg = new LinkedList<>(); diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/BumUpPriorityConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/BumpUpPriorityConfigItem.java similarity index 77% rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/BumUpPriorityConfigItem.java rename to core/src/com/cloud/agent/resource/virtualnetwork/facade/BumpUpPriorityConfigItem.java index f4669751239..15e40b14a12 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/BumUpPriorityConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/BumpUpPriorityConfigItem.java @@ -19,16 +19,23 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.LinkedList; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.ScriptConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; -public class BumUpPriorityConfigItem extends AbstractConfigItemFacade { +public class BumpUpPriorityConfigItem extends AbstractConfigItemFacade { + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final LinkedList cfg = new LinkedList<>(); + cfg.add(new ScriptConfigItem(VRScripts.RVR_BUMPUP_PRI, null)); + + return cfg; } @Override diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/CreateIpAliasConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/CreateIpAliasConfigItem.java index 0fac9a02a02..4eca3ba8322 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/CreateIpAliasConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/CreateIpAliasConfigItem.java @@ -19,20 +19,39 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.LinkedList; import java.util.List; +import com.cloud.agent.api.routing.CreateIpAliasCommand; +import com.cloud.agent.api.routing.IpAliasTO; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.IpAddressAlias; +import com.cloud.agent.resource.virtualnetwork.model.IpAliases; public class CreateIpAliasConfigItem extends AbstractConfigItemFacade { + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final CreateIpAliasCommand command = (CreateIpAliasCommand) cmd; + + final List ipAliases = new LinkedList(); + final List ipAliasTOs = command.getIpAliasList(); + for (final IpAliasTO ipaliasto : ipAliasTOs) { + final IpAddressAlias alias = new IpAddressAlias(false, ipaliasto.getRouterip(), ipaliasto.getNetmask(), Long.parseLong(ipaliasto.getAlias_count())); + ipAliases.add(alias); + } + + final IpAliases ipAliasList = new IpAliases(ipAliases); + return generateConfigItems(ipAliasList); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.IP_ALIAS_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DeleteIpAliasConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/DeleteIpAliasConfigItem.java index 683008cc0a3..82fc870fcea 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DeleteIpAliasConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/DeleteIpAliasConfigItem.java @@ -19,20 +19,46 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.LinkedList; import java.util.List; +import com.cloud.agent.api.routing.DeleteIpAliasCommand; +import com.cloud.agent.api.routing.IpAliasTO; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.IpAddressAlias; +import com.cloud.agent.resource.virtualnetwork.model.IpAliases; public class DeleteIpAliasConfigItem extends AbstractConfigItemFacade { + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final DeleteIpAliasCommand command = (DeleteIpAliasCommand) cmd; + + final List ipAliases = new LinkedList(); + + final List revokedIpAliasTOs = command.getDeleteIpAliasTos(); + for (final IpAliasTO ipAliasTO : revokedIpAliasTOs) { + final IpAddressAlias alias = new IpAddressAlias(true, ipAliasTO.getRouterip(), ipAliasTO.getNetmask(), Long.parseLong(ipAliasTO.getAlias_count())); + ipAliases.add(alias); + } + + final List activeIpAliasTOs = command.getCreateIpAliasTos(); + for (final IpAliasTO ipAliasTO : activeIpAliasTOs) { + final IpAddressAlias alias = new IpAddressAlias(false, ipAliasTO.getRouterip(), ipAliasTO.getNetmask(), Long.parseLong(ipAliasTO.getAlias_count())); + ipAliases.add(alias); + } + + final IpAliases ipAliasList = new IpAliases(ipAliases); + return generateConfigItems(ipAliasList); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.IP_ALIAS_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DhcpEntryConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/DhcpEntryConfigItem.java index a73ba191202..77d436d2f93 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DhcpEntryConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/DhcpEntryConfigItem.java @@ -28,7 +28,7 @@ import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; import com.cloud.agent.resource.virtualnetwork.model.VmDhcpConfig; -public class DhcpEntryConfigItem extends AbstractConfigItemFacade{ +public class DhcpEntryConfigItem extends AbstractConfigItemFacade { @Override public List generateConfig(final NetworkElementCommand cmd) { diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DnsMasqConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/DnsMasqConfigItem.java index 742bc33941f..59dd9c695b7 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DnsMasqConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/DnsMasqConfigItem.java @@ -19,20 +19,38 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.LinkedList; import java.util.List; +import com.cloud.agent.api.routing.DnsMasqConfigCommand; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.to.DhcpTO; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.DhcpConfig; +import com.cloud.agent.resource.virtualnetwork.model.DhcpConfigEntry; public class DnsMasqConfigItem extends AbstractConfigItemFacade { + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final DnsMasqConfigCommand command = (DnsMasqConfigCommand) cmd; + + final LinkedList entries = new LinkedList(); + + for (final DhcpTO dhcpTo : command.getIps()) { + final DhcpConfigEntry entry = new DhcpConfigEntry(dhcpTo.getRouterIp(), dhcpTo.getGateway(), dhcpTo.getNetmask(), dhcpTo.getStartIpOfSubnet()); + entries.add(entry); + } + + return generateConfigItems(new DhcpConfig(entries)); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.DHCP_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/IpAssociationConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/IpAssociationConfigItem.java index 4106fa725a3..bd499053ff3 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/IpAssociationConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/IpAssociationConfigItem.java @@ -19,20 +19,41 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.LinkedList; import java.util.List; +import com.cloud.agent.api.routing.IpAssocCommand; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.IpAddress; +import com.cloud.agent.resource.virtualnetwork.model.IpAssociation; public class IpAssociationConfigItem extends AbstractConfigItemFacade { + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final IpAssocCommand command = (IpAssocCommand) cmd; + + final List ips = new LinkedList(); + + for (final IpAddressTO ip : command.getIpAddresses()) { + final IpAddress ipAddress = new IpAddress(ip.getPublicIp(), ip.isSourceNat(), ip.isAdd(), ip.isOneToOneNat(), ip.isFirstIP(), ip.getVlanGateway(), ip.getVlanNetmask(), + ip.getVifMacAddress(), ip.getNicDevId(), ip.isNewNic()); + ips.add(ipAddress); + } + + final IpAssociation ipAssociation = new IpAssociation(ips.toArray(new IpAddress[ips.size()])); + + return generateConfigItems(ipAssociation); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.IP_ASSOCIATION_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/LoadBalancerConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/LoadBalancerConfigItem.java index 0d3ecc5ea2b..bc6202d816a 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/LoadBalancerConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/LoadBalancerConfigItem.java @@ -32,7 +32,7 @@ import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; import com.cloud.network.HAProxyConfigurator; import com.cloud.network.LoadBalancerConfigurator; -public class LoadBalancerConfigItem extends AbstractConfigItemFacade{ +public class LoadBalancerConfigItem extends AbstractConfigItemFacade { @Override public List generateConfig(final NetworkElementCommand cmd) { diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/RemoteAccessVpnConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/RemoteAccessVpnConfigItem.java index 06c78a23c84..be51c30745b 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/RemoteAccessVpnConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/RemoteAccessVpnConfigItem.java @@ -22,17 +22,27 @@ package com.cloud.agent.resource.virtualnetwork.facade; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.RemoteAccessVpn; + +public class RemoteAccessVpnConfigItem extends AbstractConfigItemFacade { -public class RemoteAccessVpnConfigItem extends AbstractConfigItemFacade{ @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final RemoteAccessVpnCfgCommand command = (RemoteAccessVpnCfgCommand) cmd; + + final RemoteAccessVpn remoteAccessVpn = new RemoteAccessVpn(command.isCreate(), command.getIpRange(), command.getPresharedKey(), command.getVpnServerIp(), command.getLocalIp(), command.getLocalCidr(), + command.getPublicInterface()); + return generateConfigItems(remoteAccessVpn); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.REMOTE_ACCESS_VPN_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetFirewallRulesConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetFirewallRulesConfigItem.java index 30824581cb5..3327afa9eb7 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetFirewallRulesConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetFirewallRulesConfigItem.java @@ -19,20 +19,40 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.ArrayList; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.SetFirewallRulesCommand; +import com.cloud.agent.api.to.FirewallRuleTO; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.FirewallRule; +import com.cloud.agent.resource.virtualnetwork.model.FirewallRules; public class SetFirewallRulesConfigItem extends AbstractConfigItemFacade{ + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final SetFirewallRulesCommand command = (SetFirewallRulesCommand) cmd; + + final List rules = new ArrayList(); + for (final FirewallRuleTO rule : command.getRules()) { + final FirewallRule fwRule = new FirewallRule(rule.getId(), rule.getSrcVlanTag(), rule.getSrcIp(), rule.getProtocol(), rule.getSrcPortRange(), rule.revoked(), + rule.isAlreadyAdded(), rule.getSourceCidrList(), rule.getPurpose().toString(), rule.getIcmpType(), rule.getIcmpCode(), rule.getTrafficType().toString(), + rule.getGuestCidr(), rule.isDefaultEgressPolicy()); + rules.add(fwRule); + } + + final FirewallRules ruleSet = new FirewallRules(rules.toArray(new FirewallRule[rules.size()])); + return generateConfigItems(ruleSet); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.FIREWALL_RULES_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetGuestNetworkConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetGuestNetworkConfigItem.java index c8769c591cf..f96e6d47d2e 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetGuestNetworkConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetGuestNetworkConfigItem.java @@ -21,18 +21,48 @@ package com.cloud.agent.resource.virtualnetwork.facade; import java.util.List; +import com.cloud.agent.api.SetupGuestNetworkCommand; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.to.NicTO; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.GuestNetwork; +import com.cloud.utils.net.NetUtils; + +public class SetGuestNetworkConfigItem extends AbstractConfigItemFacade { -public class SetGuestNetworkConfigItem extends AbstractConfigItemFacade{ @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final SetupGuestNetworkCommand command = (SetupGuestNetworkCommand) cmd; + + final NicTO nic = command.getNic(); + final String routerGIP = command.getAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP); + final String gateway = command.getAccessDetail(NetworkElementCommand.GUEST_NETWORK_GATEWAY); + final String cidr = Long.toString(NetUtils.getCidrSize(nic.getNetmask())); + final String netmask = nic.getNetmask(); + final String domainName = command.getNetworkDomain(); + String dns = command.getDefaultDns1(); + + if (dns == null || dns.isEmpty()) { + dns = command.getDefaultDns2(); + } else { + final String dns2 = command.getDefaultDns2(); + if (dns2 != null && !dns2.isEmpty()) { + dns += "," + dns2; + } + } + + final GuestNetwork guestNetwork = new GuestNetwork(command.isAdd(), nic.getMac(), "eth" + nic.getDeviceId(), routerGIP, netmask, gateway, + cidr, dns, domainName); + + return generateConfigItems(guestNetwork); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.GUEST_NETWORK_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java index 9e4f18019b5..2cf03e445fc 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java @@ -22,17 +22,26 @@ package com.cloud.agent.resource.virtualnetwork.facade; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.SetMonitorServiceCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.MonitorService; + +public class SetMonitorServiceConfigItem extends AbstractConfigItemFacade { -public class SetMonitorServiceConfigItem extends AbstractConfigItemFacade{ @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final SetMonitorServiceCommand command = (SetMonitorServiceCommand) cmd; + + final MonitorService monitorService = new MonitorService(command.getConfiguration(), cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_ENABLE)); + return generateConfigItems(monitorService); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.MONITOR_SERVICE_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetNetworkAclConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetNetworkAclConfigItem.java index 0a8e58a1370..d1afb7cda96 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetNetworkAclConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetNetworkAclConfigItem.java @@ -19,20 +19,77 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.ArrayList; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.SetNetworkACLCommand; +import com.cloud.agent.api.to.NicTO; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; +import com.cloud.agent.resource.virtualnetwork.model.AclRule; +import com.cloud.agent.resource.virtualnetwork.model.AllAclRule; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.IcmpAclRule; +import com.cloud.agent.resource.virtualnetwork.model.NetworkACL; +import com.cloud.agent.resource.virtualnetwork.model.ProtocolAclRule; +import com.cloud.agent.resource.virtualnetwork.model.TcpAclRule; +import com.cloud.agent.resource.virtualnetwork.model.UdpAclRule; +import com.cloud.utils.net.NetUtils; public class SetNetworkAclConfigItem extends AbstractConfigItemFacade { + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final SetNetworkACLCommand command = (SetNetworkACLCommand) cmd; + + final String privateGw = cmd.getAccessDetail(NetworkElementCommand.VPC_PRIVATE_GATEWAY); + + final String[][] rules = command.generateFwRules(); + final String[] aclRules = rules[0]; + final NicTO nic = command.getNic(); + final String dev = "eth" + nic.getDeviceId(); + final String netmask = Long.toString(NetUtils.getCidrSize(nic.getNetmask())); + + final List ingressRules = new ArrayList(); + final List egressRules = new ArrayList(); + + for (int i = 0; i < aclRules.length; i++) { + AclRule aclRule; + final String[] ruleParts = aclRules[i].split(":"); + switch (ruleParts[1].toLowerCase()) { + case "icmp": + aclRule = new IcmpAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5]), Integer.parseInt(ruleParts[2]), Integer.parseInt(ruleParts[3])); + break; + case "tcp": + aclRule = new TcpAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5]), Integer.parseInt(ruleParts[2]), Integer.parseInt(ruleParts[3])); + break; + case "udp": + aclRule = new UdpAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5]), Integer.parseInt(ruleParts[2]), Integer.parseInt(ruleParts[3])); + break; + case "all": + aclRule = new AllAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5])); + break; + default: + aclRule = new ProtocolAclRule(ruleParts[4], "ACCEPT".equals(ruleParts[5]), Integer.parseInt(ruleParts[1])); + } + if ("Ingress".equals(ruleParts[0])) { + ingressRules.add(aclRule); + } else { + egressRules.add(aclRule); + } + } + + final NetworkACL networkACL = new NetworkACL(dev, nic.getMac(), privateGw != null, nic.getIp(), netmask, ingressRules.toArray(new AclRule[ingressRules.size()]), + egressRules.toArray(new AclRule[egressRules.size()])); + + return generateConfigItems(networkACL); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.NETWORK_ACL_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulusConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesConfigItem.java similarity index 95% rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulusConfigItem.java rename to core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesConfigItem.java index f4112f0a7f5..0c7af00dda8 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulusConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesConfigItem.java @@ -25,7 +25,7 @@ import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; -public class SetPortForwardingRulusConfigItem extends AbstractConfigItemFacade { +public class SetPortForwardingRulesConfigItem extends AbstractConfigItemFacade { @Override public List generateConfig(final NetworkElementCommand cmd) { return null; diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulusVpcConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesVpcConfigItem.java similarity index 97% rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulusVpcConfigItem.java rename to core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesVpcConfigItem.java index 94e4458dd90..f69239d6dac 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulusVpcConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesVpcConfigItem.java @@ -31,7 +31,7 @@ import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; import com.cloud.agent.resource.virtualnetwork.model.ForwardingRule; import com.cloud.agent.resource.virtualnetwork.model.ForwardingRules; -public class SetPortForwardingRulusVpcConfigItem extends AbstractConfigItemFacade { +public class SetPortForwardingRulesVpcConfigItem extends AbstractConfigItemFacade { @Override public List generateConfig(final NetworkElementCommand cmd) { diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetSourceNatConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetSourceNatConfigItem.java index 9b47fa17005..cb6989ea2a9 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetSourceNatConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetSourceNatConfigItem.java @@ -19,16 +19,32 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.LinkedList; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; -public class SetSourceNatConfigItem extends AbstractConfigItemFacade{ +public class SetSourceNatConfigItem extends AbstractConfigItemFacade { + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final LinkedList cfg = new LinkedList<>(); + + /* FIXME This seems useless as we already pass this info with the ipassoc + * SetSourceNatCommand command = (SetSourceNatCommand) cmd; + * IpAddressTO pubIP = command.getIpAddress(); + * String dev = "eth" + pubIP.getNicDevId(); + * String args = "-A"; + * args += " -l "; + * args += pubIP.getPublicIp(); + * args += " -c "; + * args += dev; + * cfg.add(new ScriptConfigItem(VRScripts.VPC_SOURCE_NAT, args)); + */ + + return cfg; } @Override diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticNatRulesConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticNatRulesConfigItem.java index 69afa9bf70c..027979e3029 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticNatRulesConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticNatRulesConfigItem.java @@ -31,7 +31,7 @@ import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; import com.cloud.agent.resource.virtualnetwork.model.StaticNatRule; import com.cloud.agent.resource.virtualnetwork.model.StaticNatRules; -public class SetStaticNatRulesConfigItem extends AbstractConfigItemFacade{ +public class SetStaticNatRulesConfigItem extends AbstractConfigItemFacade { @Override public List generateConfig(final NetworkElementCommand cmd) { diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticRouteConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticRouteConfigItem.java index 8f33bcd598a..cd812688bcf 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticRouteConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticRouteConfigItem.java @@ -32,7 +32,7 @@ import com.cloud.agent.resource.virtualnetwork.model.StaticRoutes; import com.cloud.network.vpc.StaticRouteProfile; import com.cloud.utils.net.NetUtils; -public class SetStaticRouteConfigItem extends AbstractConfigItemFacade{ +public class SetStaticRouteConfigItem extends AbstractConfigItemFacade { @Override public List generateConfig(final NetworkElementCommand cmd) { diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/Site2SiteVpnConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/Site2SiteVpnConfigItem.java index 402a852debe..6509b78019d 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/Site2SiteVpnConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/Site2SiteVpnConfigItem.java @@ -22,17 +22,28 @@ package com.cloud.agent.resource.virtualnetwork.facade; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.Site2SiteVpn; + +public class Site2SiteVpnConfigItem extends AbstractConfigItemFacade { -public class Site2SiteVpnConfigItem extends AbstractConfigItemFacade{ @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final Site2SiteVpnCfgCommand command = (Site2SiteVpnCfgCommand) cmd; + + final Site2SiteVpn site2siteVpn = new Site2SiteVpn(command.getLocalPublicIp(), command.getLocalGuestCidr(), command.getLocalPublicGateway(), command.getPeerGatewayIp(), + command.getPeerGuestCidrList(), command.getEspPolicy(), command.getIkePolicy(), command.getIpsecPsk(), command.getIkeLifetime(), command.getEspLifetime(), command.isCreate(), command.getDpd(), + command.isPassive()); + return generateConfigItems(site2siteVpn); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.SITE_2_SITE_VPN_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/VmDataConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/VmDataConfigItem.java index 49afb1a976f..9a3fb36241c 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/VmDataConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/VmDataConfigItem.java @@ -22,17 +22,27 @@ package com.cloud.agent.resource.virtualnetwork.facade; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.VmDataCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.VmData; public class VmDataConfigItem extends AbstractConfigItemFacade { + @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final VmDataCommand command = (VmDataCommand) cmd; + + final VmData vmData = new VmData(command.getVmIpAddress(), command.getVmData()); + + return generateConfigItems(vmData); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.VM_METADATA_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/VpnUsersConfigItem.java b/core/src/com/cloud/agent/resource/virtualnetwork/facade/VpnUsersConfigItem.java index 895162a5b86..c98a93e2d3d 100644 --- a/core/src/com/cloud/agent/resource/virtualnetwork/facade/VpnUsersConfigItem.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/facade/VpnUsersConfigItem.java @@ -19,20 +19,36 @@ package com.cloud.agent.resource.virtualnetwork.facade; +import java.util.LinkedList; import java.util.List; import com.cloud.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.VpnUsersCfgCommand; import com.cloud.agent.resource.virtualnetwork.ConfigItem; +import com.cloud.agent.resource.virtualnetwork.VRScripts; import com.cloud.agent.resource.virtualnetwork.model.ConfigBase; +import com.cloud.agent.resource.virtualnetwork.model.VpnUser; +import com.cloud.agent.resource.virtualnetwork.model.VpnUserList; + +public class VpnUsersConfigItem extends AbstractConfigItemFacade { -public class VpnUsersConfigItem extends AbstractConfigItemFacade{ @Override public List generateConfig(final NetworkElementCommand cmd) { - return null; + final VpnUsersCfgCommand command = (VpnUsersCfgCommand) cmd; + + final List vpnUsers = new LinkedList(); + for (final VpnUsersCfgCommand.UsernamePassword userpwd : command.getUserpwds()) { + vpnUsers.add(new VpnUser(userpwd.getUsername(), userpwd.getPassword(), userpwd.isAdd())); + } + + final VpnUserList vpnUserList = new VpnUserList(vpnUsers); + return generateConfigItems(vpnUserList); } @Override protected List generateConfigItems(final ConfigBase configuration) { - return null; + destinationFile = VRScripts.VPN_USER_LIST_CONFIG; + + return super.generateConfigItems(configuration); } } \ No newline at end of file