Techioz Blog

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