So here's my proposal, since we do a search later on anyway:
```
unless Chef::Config[:solo]
  env_filter = " AND environment:#{node[:ntp][:config][:environment]}"
  servers = search(:node, "roles:ntp\\-server#{env_filter}")
else
  servers = [node]
end

# fudgevalue determines assumed stratum quality of local clock
# should be varying between nodes in the 6..14 range
# because nodes with same values might not sync with each other
# thus we hash the IP addr in a way that does not collide with default values
node_index = servers.map{|n| n.name}.sort.index(node.name)
fudgevalue = 14 - (node_index % 9)

ntp_servers = []
servers.each do |n|
  ntp_servers.push n[:crowbar][:network][:admin][:address] if n.name != node.name
end
if node["roles"].include?("ntp-server")
  ntp_servers += node[:ntp][:external_servers]
  is_server = true
end
```