8

マシンのプロビジョニングにPuppetを使用しています。Tomcat 6アプリサーバーで実行されているサービスと、そのサービスに依存している別のマニフェストがあります(インストールの一部としていくつかのRESTリクエストを送信します)。問題は、Tomcatが以下を使用して開始された直後にサービスが利用できないことです。

service {"tomcat6":
  ensure  => running, enable => true, hasstatus => true, hasrestart => true;
}

したがって、サービスが実際に実行されていることを確認する別のマニフェストのrequire条件が必要です(たとえば、いくつかのURLが使用可能かどうかを確認します)。また、まだ準備ができていない場合は、しばらく待ってから、再試行回数に制限を設けて再試行してください。

これを達成する慣用的なPuppetソリューションまたは別のソリューションはありますか?

注-睡眠は解決策ではありません。

4

3 に答える 3

19

lzap と Puppet IRC チャンネルの人々のおかげで、ここに解決策があります:

exec {"wait for tomcat":
  require => Service["tomcat6"],
  command => "/usr/bin/wget --spider --tries 10 --retry-connrefused --no-check-certificate https://localhost:8443/service/",
}

依存マニフェストで require => Exec["wait for tomcat"] を使用すると、サービスの準備が整うまで実行されません。

于 2011-11-23T18:30:12.927 に答える
1

パペットじゃなくてシェル…

max=30; while ! wget --spider http://localhost:8080/APP > /dev/null 2>&1; do
  max=$(( max - 1 )); [ $max -lt 0 ] && break; sleep 1
done; [ $max -gt 0 ]

これは改良版です。

アプリケーションが見つかった場合は true を返し、最大数に達した場合は false を返します。

于 2011-11-23T16:04:57.790 に答える
0

これが操り人形ではないことはわかっていますが、

max=30; e=1; while [ $e -ne 0 -a $max -gt 0 ]; do
  wget --spider http://localhost:8080/APP > /dev/null 2>&1
  e=$?; max=$(( max - 1 )); sleep 1
done; [ $max -ne 0 ]

セミコンマで連結するだけで、1行に入れることができます(「do」ステートメントを除く)。

于 2011-11-23T15:35:33.870 に答える