From 4f3dec5f1c68f82c59309ffe123aaae0ed2fd4e1 Mon Sep 17 00:00:00 2001 From: Abhinandan Prateek Date: Tue, 2 Aug 2011 11:34:38 +0530 Subject: [PATCH] bug 10812: adding domain suffixes to zone's router conf --- api/src/com/cloud/api/ApiConstants.java | 1 + api/src/com/cloud/api/commands/UpdateZoneCmd.java | 9 ++++++++- patches/systemvm/debian/config/etc/dnsmasq.conf | 3 +++ .../debian/config/etc/init.d/cloud-early-config | 15 +++++++++++++++ .../configuration/ConfigurationManagerImpl.java | 9 ++++++++- .../VirtualNetworkApplianceManagerImpl.java | 7 +++++++ 6 files changed, 42 insertions(+), 2 deletions(-) diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index a5df96c92da..a30f71dbd2f 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 80704f848cc..86aafb24cd9 100755 --- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config +++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config @@ -256,6 +256,18 @@ setup_dnsmasq() { sed -i -e "s/^dhcp-range=.*$/dhcp-range=$DHCP_RANGE,static/" /etc/dnsmasq.conf sed -i -e "s/^[#]*listen-address=.*$/listen-address=$ETH0_IP/" /etc/dnsmasq.conf + if [ "$RROUTER" == "1" ] + then + sed -i -e "/^[#]*dhcp-option=option:router.*$/d" /etc/dnsmasq.conf + echo "dhcp-option=option:router,$GUEST_GW" >> /etc/dnsmasq.conf + 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(){ @@ -490,6 +502,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 1de84bb8309..b1ed877539f 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 227b88ac6f7..2b02fef4229 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -70,6 +70,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; @@ -924,6 +925,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(); @@ -1002,6 +1005,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) {