diff --git a/etc/nova/nova.conf.sample b/etc/nova/nova.conf.sample index 2fdd612b46e9..c3c10239c6da 100644 --- a/etc/nova/nova.conf.sample +++ b/etc/nova/nova.conf.sample @@ -920,6 +920,15 @@ # l3_lib=nova.network.l3.LinuxNetL3 #### (StrOpt) Indicates underlying L3 management library +# update_dns_entries=false +#### (BoolOpt) If True, when a DNS entry must be updated, it sends a fanout +#### cast to all network hosts to update their DNS entries in multi +#### host mode + +# dns_update_periodic_interval=-1 +#### (IntOpt) Number of periodic scheduler ticks to wait between runs of +#### updates to DNS entries + ######## defined in nova.network.quantumv2.api ######## diff --git a/nova/network/manager.py b/nova/network/manager.py index 5189b40c7237..41b665ca4ae0 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -170,6 +170,10 @@ network_opts = [ help='If True, when a DNS entry must be updated, it sends a ' 'fanout cast to all network hosts to update their DNS ' 'entries in multi host mode'), + cfg.IntOpt("dns_update_periodic_interval", + default=-1, + help='Number of periodic scheduler ticks to wait between ' + 'runs of updates to DNS entries.'), cfg.StrOpt('dhcp_domain', default='novalocal', help='domain to use for building the hostnames'), @@ -1946,6 +1950,15 @@ class NetworkManager(manager.SchedulerDependentManager): return self.db.virtual_interface_get_by_address(context, mac_address) + @manager.periodic_task( + ticks_between_runs=CONF.dns_update_periodic_interval) + def _periodic_update_dns(self, context): + """Update local DNS entries of all networks on this host""" + networks = self.db.network_get_all_by_host(context, self.host) + for network in networks: + dev = self.driver.get_dev(network) + self.driver.update_dns(context, dev, network) + def update_dns(self, context, network_ids): """Called when fixed IP is allocated or deallocated""" if CONF.fake_network: