18

私の役割の 1 つには、2 つの異なる変数型があります。1 つはパブリックです (パッケージのバージョンやその他の無害な情報など)。これらは、心配することなく SCM にコミットできます。また、いくつかのプライベート情報 (API キーやその他の秘密情報など) も必要です。ansible-vault秘密情報を暗号化するために使用しています。私の解決策はvars/main.yaml、pulic とvars/vault.yml暗号化された個人情報を保持することでした。

問題に遭遇しましたが、ここでのベスト プラクティスまたは実際の解決策がわかりません。ansible はvars/main.ymlファイルをロードするだけのようです。当然、公開情報を暗号化したくないので、解決策を探しました。これまでのところ、私が思いついた (IRC で提案された) 唯一の解決策は、group_vars/all/vault.ymlすべての変数を作成し、その前にロール名を付けることです。これは、ansible が の下のすべてを再帰的にロードするように見えるため、機能しますgroup_varsこれは機能しますが、変数は特定の役割のためのものであり、「グローバルに普遍的に真」ではないため、組織的に正しくないようです。私も入れようとしましたが、うまくいきませんでしたinclude: vars/vault.ymlvars/main.yml

これを行う適切な方法はありますか?

4

3 に答える 3

12
于 2016-03-21T15:18:23.227 に答える
5

Vault を使用することをお勧めします。ただし、役割でこれを行うべきではありません。

その理由は、ロールが変数とそのデフォルトを宣言するだけだからです。プレイブックはこれを使用するか、その 1 つの値を設定します。変数がプライベートの場合、変数を必須として宣言する必要がありますが、デフォルトはありません。そのため、誰かがあなたのロールを使用している場合、実行するには変数を宣言する必要があります。

必要な変数を要求する 1 つの解決策は、単純な条件です。

- fail: msg="Variable foo is required"
  when: foo is not defined

そのため、Vault で暗号化された変数の処理は Playbook レベルで行われます。これは、役割を果たすべきではない実装の詳細です。

于 2016-03-21T19:35:31.100 に答える