データバッグを使用してChefでiptablesのipsetsを実装することに少し行き詰まっています。このソリューションはエレガントで理想的ではないと言うかもしれませんが、私には独自の理由があると信じています。私が達成しようとしていること; 一部のIPアドレスをホワイトリストに登録するためにiptablesを使用して、将来のためにIPセット「allowed_subnet」を作成する必要があります。「許可された」IP アドレスはデータ バッグにあります。残念ながら、Chef が ipset リソースをサポートしていることがわからないので、execute を使用する必要があります。私が間違っている場合は、私を修正してください。
そうです、IP リストを含むデータ バッグがあります。
{
"id": "ipset_for_iptables",
"ip_list": [
"1.1.1.1",
"1.1.1.2",
"1.1.1.3",
"1.1.1.4"
]
}
データバッグ名は「id」と同じです。
また、次のコードを追加したデフォルトのレシピ ファイル default.rb があります。
package 'ipset'
execute 'create timeout ipset' do
command 'ipset create allow_selected hash:ip timeout 120'
not_if 'ipset -L allow_selected'
end
execute 'create ipset' do
command 'ipset create allowed_subnet hash:ip hashsize 8192'
not_if 'ipset -L allowed_subnet'
end
servers = data_bag('ipset_for_iptables' , 'ipset_for_iptables')
template "/opt/data/data_hosts.txt" do
source 'ipset.erb'
owner 'ipset'
group 'ipset'
action :create
variables :properties => servers['ip_list']
end
そして今、私の質問は次のとおりです。「execute」および「ipset」Linuxコマンドを使用して、データバッグからIPセット「allowed_subnet」にIPアドレスを追加する方法。
テンプレート「ipset.erb」の内容は次のとおりです。
<% @properties.each do |host|%>
<%= host['ipaddress'] %>
<% end %>
ところで、このテンプレートが正しいかどうかはわかりません。これは以前の管理者の遺産です。私の動物園にはこのような継承されたものがたくさんあるので、誰かが私を助けてくれ、将来私を助けることができる適切なドキュメントを教えてくれれば本当にありがたいです. 私はChefの公式ドキュメントを読んでそれを行う方法を見つけようとしましたが、それはChef自体とRubyのものを超えたものだと思います.