世の中には脱Chefをしたブログもあれば、根強く使い続ける僕もいます。確かにk8s前提のところは僕らもChef使ってないから、そうなるよな・・・と思って読んでいました。
さて、話は変わって、Alertmanagerのクラスタリングするにあたって、attributesでnode searchやりたかったのでこういうのやった。
class AttributeSearch
extend Chef::DSL::DataQuery
end
monitor_nodes = AttributeSearch.search(:node, "chef_environment:#{node.chef_environment} AND name:monitor*")
if !monitor_nodes.empty? && node.chef_environment != 'test'
default['prometheus']['alertmanager']['peer'] = monitor_nodes.map { |m|
m[:ipaddress]
}.find { |m|
m != node[:ipaddress]
}
end
これよくChefでクラスタ組むときにやるテクニックで、自分と同じロールの自分以外のIPを動的に取るっていう感じ。上手に使うと色々Rubyっぽくかけて便利。