web-dev-qa-db-ja.com

Ansible Vaultの変更を比較するにはどうすればよいですか?

Ansible Vaultファイルで実際のgit commitの変更を見たいのですが。

これを達成する簡単な方法はありますか?

33
Ikar Pohorský

これは非常にきれいに行うことができるので、git loggit diffなどの通常のgitツールは、カスタムgit diffドライバーと.gitattributesを使用して、保管されたファイル内を見ることができます。

  • ボールトのパスワードが.vault_passwordにあり、そのファイルがnotコミットされていることを確認してください-.gitignoreにも追加する必要があります。
  • リポジトリ内のansible-vaultで暗号化されたすべてのファイルと一致する.gitattributesファイルを追加し、属性diff=ansible-vaultを付与します。たとえば、私は:

    env_vars/production.yml diff=ansible-vault merge=binary
    env_vars/staging.yml diff=ansible-vault merge=binary
    

    ワイルドカードパターンを使用することもできます。各行の最初の要素であるパターンは、.gitignoreファイルと同じルールに従います。 merge=binaryオプションは、これらのファイルの3者間マージを行わないようにgitに指示します。

  • 次に、属性diff=ansible-vaultansible-vault viewに設定したファイルの差分ドライバーを設定する必要があります。

    git config --global diff.ansible-vault.textconv "ansible-vault view"
    

そして、それはそれであるはずです-gitがあなたのパターンが一致するファイルのdiffを計算するとき、それは最初にそれらを解読します。

50
Mark Longair

それで、少し掘り下げた後、私は重要な解決策を構築しました。

まず、ボールトのパスワードを(.gitignored).vault_passwordファイル。

次の例では、HEADおよびHEAD~2ファイルのバージョンinventory/group_vars/xyz/vault.ymlはvimdiffされています:

vimdiff \
  <(ansible-vault view --vault-password-file=.vault_password \
    <(git show HEAD:inventory/group_vars/xyz/vault.yml)) \
  <(ansible-vault view --vault-password-file=.vault_password \
    <(git show HEAD~2:inventory/group_vars/xyz/vault.yml))
9
Ikar Pohorský

https://github.com/dellis23/ansible-toolkit からatk-git-diffユーティリティを使用できます

This

Becomes

8
kmmbvnr

完全を期すために、Ansible Vaultのファイルの差分をグローバルに設定する方法について言及することは価値があります。たとえば、私はここで本当に多くのansibleリポジトリを使用しており、それらのほとんどすべてにいくつかの保管された秘密があります。だから私が欲しいのは、私のマシンから別のマシンにグローバルでポータブルな設定です。

~/.gitconfigに次のセクションを追加します:

[core]
    # The following line defines a global .gitattributes file
    attributesfile = ~/.gitattributes

[diff "ansible-vault"]
    textconv = "ansible-vault view"

これを機能させるには、Ansible-Vaultされたファイルの名前付けパターンが必要です。これは、とにかくやるべきことです。私の場合は、拡張子.vault.ymlを付けます。したがって、私の~/.gitattributesファイルは次のようになります。

*.vault.yml diff=ansible-vault merge=binary

最後に、常にパスワードを入力しないようにするために、各リポジトリの便利な場所にファイルがあることを確認してください(通常は.vaultのようなもので、ルートに配置されます)。このファイルには、プレーンテキストのパスワード(当然.gitignored)か、そのようなパスワードを生成する実行可能スクリプトが含まれている必要があります。

それを準備したら、グローバルまたはローカルの.vaultに次の行を追加して、ansible.cfgファイルを使用するようansibleに指示します。

vault_password_file = .vault

できました。ここでgit diffを実行すると、vaultされていないファイルから期待される読み取り可能なdiffが生成されます:)

1