1

実稼働環境/構成でさまざまなことを検証する、手作業で作成されたPythonスクリプトのコレクションがあります。

これらの多くは単純なXMLチェックです(つまり、ここでこのXMLタグの値がそのファイルの値と等しいことを検証します)。その他の場合は、ホストが稼働していること、このアプリケーションのcrontabの開始時刻がXから20分以内であること、またはサーバー上のログファイルに特定の行が含まれていることを確認することです。

チェックは、各本番プッシュの前に自動的に実行されます。

スクリプトは必須です。例えば:

  1. サーバーへのSSH
  2. ファイルを開く
  3. XMLを解析します
  4. XMLタグを検索する
  5. 値を変数に格納します
  6. 他の場所の別の値と比較してください。

これらの検証をもう少し宣言的な方法で行うためのフレームワークの作成を検討したいと思います。つまり、サーバーが何かをチェックする方法を定義する代わりに<tag>value</tag> should equal foobar、フレームワークにその方法を処理させる必要があります。

その後、チェックをスケジュールして、Celeryのようなキューにジョブを配置できると考えていました。

私が車輪の再発明をするのを止めるために-すでにこのようなことをしている既存のプロジェクトはありますか?

または、ここで誰かが同様のことをしたことがありますか、または何かアドバイスを提供することができますか?

(PuppetやChef、さらにはSalt Stackのようなものを知っていますが、これらはデプロイメントを管理したり、実際に構成をプッシュしたりするためのものです。これらの検証スクリプトは、手動で行われた構成の変更が正しいかどうかを確認するためのものです。特定の基本的なルールに違反します)。

乾杯、ビクター

4

1 に答える 1

0

過去に、データに宣言的にパッチを適用するために、以下で提案するものと同様のアプローチを使用しました。

各宣言型検証ファイルは、事前定義された関数、変数などを使用する python-snippet です。各チェックは python 関数です。execfile検証の実行は、チェック ファイルを実行するための呼び出しを含むドライバー スクリプトを使用して行われます。

たとえば、次のような検証ファイルを作成できます。

tag_equals('value', 'foobar')
attribute_exists('value', 'value_attr')

そして、ドライバースクリプトは基本的に次のとおりです。

def main():
    for filename in sys.argv[1:]:
        run_validation(filename)

def run_validation(filename):
    # import all "built-in" names for validations
    from mychecks import tag_equals, etc
    execfile(filename, locals())

if __name__ == '__main__':
    main()

利点:

  1. 解析/解釈は、execfile
  2. 機能を拡張しやすい (たとえば、新しいxpath_equals関数を作成する)
  3. 柔軟性 -- 特殊なロジックを含む検証を実行したい場合は、宣言型言語の定義を拡張することなく、検証ファイルに実装できます。例えばfor i in range(10): tag_equals('address%d' % i, 'N/A')

任意の python ファイルを誤って ing しないように保護するには、ファイルの最初の行が定義済みのヘッダーと等しい場合execfileにのみ実行するチェックを追加する必要があります。execfile

于 2013-03-18T06:34:33.477 に答える