本文へ移動
TURNKEYGNU / LINUX
アプリドキュメントブログスクリーンショットGitHubTurnKey Hub
文日本語
EnglishEspañol中文日本語PortuguêsDeutsch
ふりがな/TKLBAMのホック

ドキュメント

TKLBAMのホック

このページは、以下のページから作成されています。 この記事の投稿.

TKLBAMには、バックアップと復元に便利なアクションをトリガーするために使用できる、ニフティ、汎用ホウキ機構があります。

ホックの例:

  • 一時的なファイルクリーンアップ
  • サービスの停止/開始、データの一貫性を高める
  • 非サポートされたデータベースからデータをエンコーディング/デコードする
  • LVM を使用して、高速な変化量をスナップショットを作成/復元

ホーク機構はもともと開発され、TKLBAMのユーザビリティに間接的に関連した問題がいくつか修正できました。 特に、最初のベータユーザーがtklbam-restoreがバックアップボリュームが見つからなかったと報告しました。 時計の不備を調べた時。 明らかな解決策は、復元を開始する前に時計を同期させることだったが、それについて考えるほど、ntpdate のものが私に間違った方法をこっそりと固まるという考えが増えました。 いくつかの理由のため:

  • TKLBAMのロジックでコアの問題ではなく、補助的な問題です
  • 開発中にはあまりオフラインでいるので、このオフをオンにする方法が必要でしたが、必要なくテスト固有のコードを追加したくない。
  • 特定のサーバー(例、pool.ntp.org)がデフォルトである場合、OKですが、ユーザが設定する方法がいくつかあります。例えば、内部NTPサーバを使わせたいです。

きれいな方法でこれらの単純な目標を達成するためのきれいな方法(例えば、cliオプション、環境変数、設定ファイル)を考えようとしましたが、私が思いついたすべてが ちょうどそう、ダーン醜い.

そこで、ホックの仕組みがこの問題を解決するというのを、シンプルで汎用的な方法で実現しました。

導入事例

/etc/tklbam/hooks.d は、tklbam が実行可能 (例、スクリプト) を 2 操作前後に実行する (現在の):

  1. バックアップ
  2. 復元

二つの引数は、ホックに渡されます。

  1. 操作: 回復/バックアップ
  2. state: プレ/ポスト

ゼロの終了コードがHookErrorを上げます。

利点

1ストロークで、時計の問題を解決し、また、高度なユーザーは、TKLBAMが(例えば、IO集中プロセスを停止するなど)物事の世話をするために独自のホックを定義することを可能にします バックアップ、エンコーディング/デコード未サポートデータベースなど

事例 修正クロック ホック

import os
import sys
import executil
from string import Template

NTPSERVER = os.environ.get("NTPSERVER", "pool.ntp.org")

ERROR_TPL = """\
##########################
## FIXCLOCK HOOK FAILED ##
##########################

Amazon S3 and Duplicity need a UTC synchronized clock so we invoked the
following command::

    $COMMAND

Unfortunately, something went wrong...

$ERROR
"""

def fixclock():
    command = "ntpdate -u " + NTPSERVER

    try:
        executil.getoutput(command)
    except executil.ExecError, e:
        msg = Template(ERROR_TPL).substitute(COMMAND=command,
                                             ERROR=e.output)

        print >> sys.stderr, msg,
        sys.exit(1)

def main():
    op, state = sys.argv[1:]

    if op in ('restore', 'backup') and state == 'pre':
        fixclock()

if __name__ == "__main__":
    main()

詳細は、ディスカッション、コメントなど、 オリジナルブログ投稿 によって リラズ.

TURNKEYGNU / LINUX

ゼロから始めずに、自分のインフラを管理できます。

TurnKey を見る
概要ドキュメントよくある質問ブログGitHub
フリーでオープンソース初期設定から安全すぐに展開可能