X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/211282d19dc8f5f3938f9c55d23081341203c87a..60cbbefc5e1af0b9895c3b5e682fb7f227483521:/app/models/node.rb?ds=sidebyside diff --git a/app/models/node.rb b/app/models/node.rb index 29233748dd..026865e957 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -2,6 +2,7 @@ class Node < ActiveRecord::Base include AssignUuid serialize :info, Hash before_validation :ensure_ping_secret + after_update :dnsmasq_update MAX_SLOTS = 64 @@ -42,12 +43,15 @@ class Node < ActiveRecord::Base try_slot = 0 begin self.slot_number = try_slot - try_slot += 1 - break if self.save rescue nil + begin + self.save! + break + rescue ActiveRecord::RecordNotUnique + try_slot += 1 + end raise "No available node slots" if try_slot == MAX_SLOTS end while true self.hostname = self.class.hostname_for_slot(self.slot_number) - self.class.dnsmasq_update(self.hostname, self.ip_address) end save @@ -77,6 +81,14 @@ class Node < ActiveRecord::Base self.info[:ping_secret] ||= rand(2**256).to_s(36) end + def dnsmasq_update + if self.hostname_changed? or self.ip_address_changed? + if self.hostname and self.ip_address + self.class.dnsmasq_update(self.hostname, self.ip_address) + end + end + end + def self.dnsmasq_update(hostname, ip_address) return unless @@confdir ptr_domain = ip_address.