diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index b11f98ba49b..90ab1bc2d20 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/com/cloud/api/ApiConstants.java @@ -33,6 +33,7 @@ public class ApiConstants { public static final String CERTIFICATE = "certificate"; public static final String PRIVATE_KEY = "privatekey"; public static final String DOMAIN_SUFFIX = "domainsuffix"; + public static final String DOMAIN_SUFFIX_LIST = "domainsuffixlist"; public static final String CIDR = "cidr"; public static final String CIDR_LIST = "cidrlist"; public static final String CLEANUP = "cleanup"; diff --git a/api/src/com/cloud/api/commands/UpdateZoneCmd.java b/api/src/com/cloud/api/commands/UpdateZoneCmd.java index e276cb3c5b8..5459a7feed6 100644 --- a/api/src/com/cloud/api/commands/UpdateZoneCmd.java +++ b/api/src/com/cloud/api/commands/UpdateZoneCmd.java @@ -18,6 +18,7 @@ package com.cloud.api.commands; +import java.util.List; import java.util.Map; import org.apache.log4j.Logger; @@ -80,6 +81,9 @@ public class UpdateZoneCmd extends BaseCmd { @Parameter(name=ApiConstants.DOMAIN, type=CommandType.STRING, description="Network domain name for the networks in the zone") private String domain; + @Parameter(name=ApiConstants.DOMAIN_SUFFIX_LIST, type=CommandType.LIST, collectionType = CommandType.STRING, description="the list of domain suffixes for dns") + private List domainSuffixList; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -135,7 +139,10 @@ public class UpdateZoneCmd extends BaseCmd { public String getDomain() { return domain; } - + + public List getDomainSuffixList() { + return domainSuffixList; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/patches/systemvm/debian/config/etc/dnsmasq.conf b/patches/systemvm/debian/config/etc/dnsmasq.conf index 8f999a75cb1..86e49e902fc 100644 --- a/patches/systemvm/debian/config/etc/dnsmasq.conf +++ b/patches/systemvm/debian/config/etc/dnsmasq.conf @@ -252,6 +252,9 @@ dhcp-hostsfile=/etc/dhcphosts.txt # Set the domain dhcp-option=15,"2.vmops-test.vmops.com" +# Send RFC-3397 DNS domain search DHCP option. +#dhcp-option=119,"vmops.com" + # Send the etherboot magic flag and then etherboot options (a string). #dhcp-option=128,e4:45:74:68:00:00 #dhcp-option=129,NIC=eepro100 diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config index fb607d34d72..50085dbbd12 100755 --- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config +++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config @@ -266,6 +266,11 @@ setup_dnsmasq() { sed -i -e "/^[#]*dhcp-option=6.*$/d" /etc/dnsmasq.conf echo "dhcp-option=6,$GUEST_GW" >> /etc/dnsmasq.conf fi + + if [ -n "$DOMAIN_SUFFIX" ] + then + sed -i s/[#]*dhcp-option=119.*$/dhcp-option=119,\"$DOMAIN_SUFFIX\"/ /etc/dnsmasq.conf + fi } setup_sshd(){ @@ -531,6 +536,9 @@ for i in $CMDLINE domain) DOMAIN=$VALUE ;; + domainsuffix) + DOMAIN_SUFFIX=$VALUE + ;; mgmtcidr) MGMTNET=$VALUE ;; diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index ecdcea4fa55..7bcbebb0114 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -121,6 +121,7 @@ import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.NumbersUtil; +import com.cloud.utils.StringUtils; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; @@ -1155,6 +1156,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String internalDns2 = cmd.getInternalDns2(); String vnetRange = cmd.getVlan(); String guestCidr = cmd.getGuestCidrAddress(); + List domainSuffixList = cmd.getDomainSuffixList(); Long userId = UserContext.current().getCallerUserId(); int startVnetRange = 0; int stopVnetRange = 0; @@ -1181,7 +1183,12 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura }*/ newDetails.put(key, value); } - } + } + + // add the domain prefix list to details if not null + if (domainSuffixList != null){ + newDetails.put("dns.suffixes", StringUtils.join(domainSuffixList, ",")); + } if (userId == null) { userId = Long.valueOf(User.UID_SYSTEM); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 6a78c3891c5..7dc8e577353 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -75,6 +75,7 @@ import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.DcDetailsDaoImpl; import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DataCenterDeployment; @@ -1122,6 +1123,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian String dhcpRange = null; DataCenter dc = dest.getDataCenter(); + DataCenterVO dcVO = _dcDao.findById(dc.getId()); + _dcDao.loadDetails(dcVO); if (dc.getNetworkType() == NetworkType.Advanced) { String cidr = network.getCidr(); @@ -1212,6 +1215,10 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian String domain = network.getNetworkDomain(); if (domain != null) { buf.append(" domain=" + domain); + } + String domain_suffix = dcVO.getDetail("dns.suffixes"); + if (domain_suffix != null) { + buf.append(" domainsuffix=").append(domain_suffix); } if (!network.isDefault() && network.getGuestType() == GuestIpType.Direct) {