Chef : 「grep」の結果に基づいてサービスを有効にする
概要
最初の質問がありましたが、どうやら私のやり方が間違っていたようですので、この新しいアプローチを試してみることにしました。サービスの複数のインスタンスを実行するために systemd サービス ファイルを作成しています。
if ( (node[:platform] == "redhat" && node[:platform_version] >= "7"))
cookbook_file "/usr/lib/systemd/system/[email protected]" do
source "usr/lib/systemd/system/[email protected]"
owner "root"; group "root"; mode "0644"
end
end
インスタンス (および名前) の数は、次のような 1 つまたは複数のエントリを使用してファイルに構成されます。
OPTIONS_0="--conf=/etc/sec/oracle.sec --input=/var/log/oracle.log "
OPTIONS_1="--conf=/etc/sec/jboss.sec --input=/var/log/jboss.log "
ここで、このファイルに存在する OPTIONS_X と同じ数のサービスを有効にする必要があります。 「bash マン」として、私は grep を実行しますが、これを行う正しい方法が Ruby に存在するはずで、最終的には実行されます。
service "sec@0" do action [:enable, :start] end
service "sec@1" do action [:enable, :start] end
[...]
service "sec@X" do action [:enable, :start] end
ありがとう。
解決策
サービスのリストの基礎はファイルからのものであるため、必要な詳細、つまり OPTIONS の数を取得するには、bash/shell ユーティリティの方が効率的です。これは、このロジックが機能するには、このファイルを正しく維持/更新する必要があることも意味します。
何かのようなもの:
grep OPTIONS_ path/to/file | wc -l
このカウントは変数に保存でき、これに基づいてサービスを有効化/開始できます。
count = `grep OPTIONS_ path/to/file | wc -l`
count.to_i.times do |num|
service "sec@#{num}" do
action [:enable, :start]
end
end