コメントで既に述べたように、シークレットを変数に設定し、プロビジョニング中にそれらをテンプレートにレンダリングすることもできますが、何らかの理由でテンプレート全体をシークレットにしたい場合は、それを行うための回避策もいくつかあります。
暗号化されたテンプレートの処理
回避策として、テンプレートをローカルで一時的に復号化し、ロールアウト後に復号化されたファイルをlocal_action
モジュールで削除することができます。template.enc
暗号化されたテンプレートがロールtemplates
ディレクトリにあると仮定しましょう。
---
- name: Decrypt template
local_action: "shell {{ view_encrypted_file_cmd }} {{ role_path }}/templates/template.enc > {{ role_path }}/templates/template"
changed_when: False
- name: Deploy template
template:
src=templates/template
dest=/home/user/file
- name: Remove decrypted template
local_action: "file path={{ role_path }}/templates/template state=absent"
changed_when: False
注意してくださいchanged_when: False
。これは、ansible ロールでべき等テストを実行するために重要です。そうしないと、プレイブックを実行するたびに変更が通知されます。ではgroup_vars/all.yml
、再利用のためにグローバルな復号化コマンドを設定できます (例: view_encrypted_file_cmd
.
group_vars/all.yml
---
view_encrypted_file_cmd: "ansible-vault --vault-password-file {{ lookup('env', 'ANSIBLE_VAULT_PASSWORD_FILE') }} view"
暗号化された静的ファイルの処理
一方向: テンプレートとして
秘密の静的ファイル (秘密鍵など) の内容を ansible の変数として設定し、それをテンプレートとしてプロビジョニングできます。
var.yml
---
my_private_key: |
YOUR KEY
asfdlsafkj
asdlkfjasf
テンプレート/private_key.j2
{{ private_key }}
タスク/main.yml
---
template:
src=templates/private_key.j2
dest=/home/user/.ssh/id_rsa
vars:
private_key: "{{ my_private_key }}"
別の方法: ルックアップ パイプ経由
もう 1 つの方法は、lookup
モジュールを使用してモジュール内のプロパティpipe
を設定することです。この方法では、追加の変数は必要ありません。content
copy
---
- copy:
dest=/your/dest
content=lookup('pipe', 'VAULT_PASSWORD_FILE=path/to/pass_file ansible-vault view path/to/file.enc')