Group_varsやvaultファイルなど、以前にAnsible(スタンドアロン)で使用した既存のインベントリをAnsible Tower(3.2.0)にインポートしたい。
ただし、Vaultファイルが機能するようになると機能しなくなります。 Vaultパスワードファイルの認証情報をセットアップし、ソースタイプ「Sourced from a Project」を使用してインベントリを作成したら、[Source Details]でVault認証情報を選択できません。
手動で挿入してソースを保存すると、次のエラーで同期が失敗します。
1.735 INFO Updating inventory 10: TEST
1.753 DEBUG Using system install of ansible-inventory CLI: /usr/bin/ansible-inventory
1.753 INFO Reading Ansible inventory source: /var/lib/awx/projects/_6__ansible_master/inventories/test/hosts
1.754 DEBUG Using private credential data in '/tmp/awx_123_LXUj9p'.
1.755 DEBUG Using fresh temporary directory '/tmp/awx_proot_ZURWmR' for isolation.
1.755 DEBUG Running from `/var/lib/awx/projects/_6__ansible_master/inventories/test` working directory.
Traceback (most recent call last):
File "/usr/bin/awx-manage", line 9, in <module>
load_entry_point('awx==3.2.0', 'console_scripts', 'awx-manage')()
File "/lib/python2.7/site-packages/awx/__init__.py", line 107, in manage
File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/Django/core/management/__init__.py", line 354, in execute_from_command_line
utility.execute()
File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/Django/core/management/__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/Django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/Django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/Django/core/management/base.py", line 661, in handle
return self.handle_noargs(**options)
File "/lib/python2.7/site-packages/awx/main/management/commands/inventory_import.py", line 1000, in handle_noargs
File "/lib/python2.7/site-packages/awx/main/management/commands/inventory_import.py", line 243, in load_inventory_source
File "/lib/python2.7/site-packages/awx/main/management/commands/inventory_import.py", line 179, in load
File "/lib/python2.7/site-packages/awx/main/management/commands/inventory_import.py", line 163, in command_to_json
RuntimeError: ansible-inventory failed (rc=4) with stdout:
stderr:
ERROR! Attempting to decrypt but no vault secrets found
また、ansible_vaultファイルを作成して変数「vault_password_file」をポイントするように試みましたが、これも機能しません(ボールトパスワードファイルが見つからないというメッセージが表示されます)。
誰かが以前にこれに遭遇したことがありますか?
したがって、これは実装上の問題のようでした。 RedHatによると、vaultファイルをインベントリと一緒に保持することはお勧めしません。これは、インベントリ同期が実行されるたびにファイルを復号化することになるためです。
これを解決する方法は、プレイブックで「vars_files」を使用することです。次のようになります。
# Secrets
vars_files:
- '../../secrets/{{ tower_env }}/vault.yml'
Towerでは、tower_env変数を渡します。 「dev」または「qa」は、インベントリの同期時ではなく、プレイブックの実行時に対応するボールトファイルを復号化します。
(現時点では)サポートされていない2つのことを実行しようとしています:
ansible-vault
を使用してファイル全体を暗号化するここでの用語は少し貧弱ですが、これらのドキュメントの「単一の暗号化された変数」のセクションを参照してください。これらのインライン変数と呼ばれることがあります。
https://docs.ansible.com/ansible/latest/user_guide/playbooks_vault.html
Ansibleは、これらのインライン変数からインベントリ解析プロセスの移動をサポートするようになりました。この形式も安全であり、内部的には同じアルゴリズムです。暗号化された変数のnameは、ソース管理へのアクセス権を持つユーザーに公開されます(おそらく妥当です)が、値は暗号化されます。
その構文で値を.yml
またはgroup_vars/
フォルダーの下のHost_vars/
変数ファイルに保存します。 Tower内でのインベントリの同期が成功し(ボールトの資格情報を使用せずに)、グループまたはホストに移動すると、変数の暗号化された形式が表示されます。
プレイブック(Towerのジョブテンプレート)を実行するときは、その時点でボールトの資格情報をアタッチします。これにより、実際に必要なランタイムコンテキストまで暗号化が遅延します。
インベントリファイル構造の例:
https://github.com/AlanCoding/Ansible-inventory-file-examples/tree/master/vault/single_var_file
また、他のコメントが指摘しているように、ファイル全体の暗号化変数またはインライン暗号化変数のいずれかを、プレイブックがあるソース管理のフォルダー構造に置くことができます。これは、Ansibleによって取得され、添付したボールト資格情報によって復号化されますジョブテンプレートに。
わかりました-調査後、次の理由により、バージョン2.6.5では現在これを行う方法がないことを認めることができます。
-vault-password-file
パラメータ
-ask-vault-pass
は--vault-id=@Prompt
に置き換えられました
記載されたコードに従って ここでは220行目から
必要なのは、ボールトパスフレーズを提供する別の可能性です。グループ変数によって、現在不可能です。
そして、これはGithubの Bugreport が他の何かで解決/置換されないことを意味します。私見それはまだ他のすべてのスレッドによってカバーされていません。このgithubバグスレッドを続けます。