chriswayg.etckeeper
ansible-etckeeper
- Debian 10 と Ubuntu 18.04 で Vagrantを使ってテスト済み
Ansibleの役割で、etckeeperをgitとともにインストール、設定、使用します。
要件
- Ansible 2.4以上で開発・テスト済み
- Debian/Ubuntuシステム
役割の変数
install - boolean(デフォルトはfalse)
初回のプレイではtrueに設定する必要があります。
commit - boolean(デフォルトはtrue)
「etckeeperに変更を記録する」ハンドラーへの通知を有効にし、プレイに対するetckeeperコミットを生成します。 これをfalseに設定するのではなく、etckeeperロールを完全に省略してください (初回のプレイでない限り)。
以下の変数(defaults/main.yml
にデフォルトが定義されています)は、commitがtrueのときにetckeeperが使用するコミットメッセージを制御します。
etckeeper_message - string (デフォルトは「{{ ansible_user_id }}として実行されるAnsibleプレイからの変更」)
このメッセージは、プレイの終了時に行われるコミットに使用されます。
etckeeperが使用するバージョン管理システムを制御するための設定変数があります(defaults/main.yml
にデフォルトがあります)。
etckeeper_vcs - string(デフォルトは「git」、または「hg」、「bzr」、「darcs」)
これにより、etckeeperが使用するバージョン管理システムが決まります。 etckeeperパッケージのデフォルトはGitであるため、このAnsibleロールはGitでのみテストされています。 すでにetckeeperがインストールされている場合、この変数は影響を与えません。
gitによる特定の追加ファイルを無視するための設定変数があります(defaults/main.yml
に例があります)。
- etckeeper_gitignore - string
依存関係
なし。
例のプレイブック
このロール(および他の何も)をプレイブックの最初のプレイにする必要があります。
理想的には、サーバーで最初に実行するプレイとして実行するべきです。
初回の実行時に/etc/
ディレクトリのほぼ全ての内容を含む初期コミットを生成します。
他のプレイにetckeeperロールを追加すると、プレイの終了時にetckeeperコミットが生成されます(未保存の変更があれば、開始時にも生成される可能性があります)。 正確な未保存変更の検出をするために、etckeeperロールは最初であるべきです。 etckeeperロールを使用すると、etckeeperコミットはハンドラー内で実行されます。 (すべてのタスクの後に1回)ですが、他のハンドラーの前に実行される可能性があります。
タスク内でetckeeperコミットを実行すると、プレイ内で複数のコミットを許可しますが、すべてのロールがプレイ内のプレイブックタスクの前に実行されるため、 各ロールを1つずつ持つ多数の小さなプレイにプレイブックを分割することが、詳細なコミットを達成するためには必要です。
次に、etckeeperロールを使用してインストールとコミットを行い、シェルアクションを使用してコミットを行う例のプレイブックを示します。
---
# これはプレイブックの最初のプレイであるべきです
- hosts: all
vars:
- etckeeper_vcs: git
roles:
- { role: etckeeper, install: true }
# このプレイには他のロールを追加しないでください
# これは2番目のプレイです
- hosts: all
roles:
- { role: etckeeper, etckeeper_message: 'プレイブックの2番目のプレイ' }
# ここに追加のロールを配置
# これは3番目のプレイです
- hosts: all
tasks:
- name: 何かをインストールおよび/または構成する
command: cp /dev/null /etc/null
register: result
- name: 前のタスクの変更をetckeeperコミットに記録する
shell: if etckeeper unclean; then etckeeper commit '3番目のプレイ pt. 1'; fi
when: result|changed
- name: /etc内の何も変更しない操作を行う
action: true
- name: /etc内の何かを変更する可能性のある別の操作を行う
action: cp /dev/null /etc/zero
notify: このプレイの他の変更をetckeeperコミットに記録する
handlers:
- name: このプレイの他の変更をetckeeperコミットに記録する
shell: if etckeeper unclean; then etckeeper commit '3番目のプレイ pt. 2'; fi
私が現在使用しているプレイブックの最初の部分
## etckeeperをインストールするためのプレイブック
- name: etc gitリポジトリを初期化するためにetckeeperを単独でインストールする。
hosts: servers
user: root
vars_files:
- production/vars/site.yml
roles:
- { role: expansible.etckeeper, install: true }
## このプレイには他のロールを追加しないでください!
## メインプレイブック
- name: サーバーを構成する。
hosts: servers
user: root
vars_files:
- production/vars/.site.yml
roles:
- { role: ansible-etckeeper, etckeeper_message: 'mailcowプレイブックの開始時のAnsibleの変更' }
- willshersystems.sshd
- { role: ansible-etckeeper, etckeeper_message: 'willshersystems.sshdによるAnsibleの変更' }
- ansible-fail2ban
- { role: ansible-etckeeper, etckeeper_message: 'ansible-fail2banによるAnsibleの変更' }
ライセンス
MIT(Expat) - 詳細はLICENSEファイルを参照してください
著者情報
- 元の著者: alex.dupuy at mac.com。
- このフォークはChristian Wagnerによって修正されました。