mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-05-02 15:21:25 -07:00
Support using vault password files that are themselves vault encrypted (#27668)
Extract vault related bits of DataLoader._get_file_contents to DataLoader._decrypt_if_vault_data When loading vault password files, detect if they are vault encrypted, and if so, try to decrypt with any already known vault secrets. This implements the 'Allow vault password files to be vault encrypted' (#31002) feature card from the 2.5.0 project at https://github.com/ansible/ansible/projects/9 Fixes #31002
This commit is contained in:
parent
ca8982f96c
commit
fc180a378a
5 changed files with 112 additions and 13 deletions
|
@ -148,6 +148,11 @@ class TestPromptVaultSecret(unittest.TestCase):
|
|||
|
||||
|
||||
class TestFileVaultSecret(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.vault_password = "test-vault-password"
|
||||
text_secret = TextVaultSecret(self.vault_password)
|
||||
self.vault_secrets = [('foo', text_secret)]
|
||||
|
||||
def test(self):
|
||||
secret = vault.FileVaultSecret()
|
||||
self.assertIsNone(secret._bytes)
|
||||
|
@ -201,6 +206,36 @@ class TestFileVaultSecret(unittest.TestCase):
|
|||
|
||||
os.unlink(tmp_file.name)
|
||||
|
||||
def test_file_encrypted(self):
|
||||
vault_password = "test-vault-password"
|
||||
text_secret = TextVaultSecret(vault_password)
|
||||
vault_secrets = [('foo', text_secret)]
|
||||
|
||||
password = 'some password'
|
||||
# 'some password' encrypted with 'test-ansible-password'
|
||||
|
||||
password_file_content = '''$ANSIBLE_VAULT;1.1;AES256
|
||||
61393863643638653437313566313632306462383837303132346434616433313438353634613762
|
||||
3334363431623364386164616163326537366333353663650a663634306232363432626162353665
|
||||
39623061353266373631636331643761306665343731376633623439313138396330346237653930
|
||||
6432643864346136640a653364386634666461306231353765636662316335613235383565306437
|
||||
3737
|
||||
'''
|
||||
|
||||
tmp_file = tempfile.NamedTemporaryFile(delete=False)
|
||||
tmp_file.write(to_bytes(password_file_content))
|
||||
tmp_file.close()
|
||||
|
||||
fake_loader = DictDataLoader({tmp_file.name: 'sdfadf'})
|
||||
fake_loader._vault.secrets = vault_secrets
|
||||
|
||||
secret = vault.FileVaultSecret(loader=fake_loader, filename=tmp_file.name)
|
||||
secret.load()
|
||||
|
||||
os.unlink(tmp_file.name)
|
||||
|
||||
self.assertEqual(secret.bytes, to_bytes(password))
|
||||
|
||||
def test_file_not_a_directory(self):
|
||||
filename = '/dev/null/foobar'
|
||||
fake_loader = DictDataLoader({filename: 'sdfadf'})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue