summaryrefslogtreecommitdiff
path: root/bin/ansible-vault
diff options
context:
space:
mode:
Diffstat (limited to 'bin/ansible-vault')
-rwxr-xr-xbin/ansible-vault22
1 files changed, 16 insertions, 6 deletions
diff --git a/bin/ansible-vault b/bin/ansible-vault
index 3e60329d..cf2c9dd9 100755
--- a/bin/ansible-vault
+++ b/bin/ansible-vault
@@ -17,7 +17,7 @@ from ansible import constants as C
from ansible import context
from ansible.cli.arguments import option_helpers as opt_help
from ansible.errors import AnsibleOptionsError
-from ansible.module_utils._text import to_text, to_bytes
+from ansible.module_utils.common.text.converters import to_text, to_bytes
from ansible.parsing.dataloader import DataLoader
from ansible.parsing.vault import VaultEditor, VaultLib, match_encrypt_secret
from ansible.utils.display import Display
@@ -61,20 +61,20 @@ class VaultCLI(CLI):
epilog="\nSee '%s <command> --help' for more information on a specific command.\n\n" % os.path.basename(sys.argv[0])
)
- common = opt_help.argparse.ArgumentParser(add_help=False)
+ common = opt_help.ArgumentParser(add_help=False)
opt_help.add_vault_options(common)
opt_help.add_verbosity_options(common)
subparsers = self.parser.add_subparsers(dest='action')
subparsers.required = True
- output = opt_help.argparse.ArgumentParser(add_help=False)
+ output = opt_help.ArgumentParser(add_help=False)
output.add_argument('--output', default=None, dest='output_file',
help='output file name for encrypt or decrypt; use - for stdout',
type=opt_help.unfrack_path())
# For encrypting actions, we can also specify which of multiple vault ids should be used for encrypting
- vault_id = opt_help.argparse.ArgumentParser(add_help=False)
+ vault_id = opt_help.ArgumentParser(add_help=False)
vault_id.add_argument('--encrypt-vault-id', default=[], dest='encrypt_vault_id',
action='store', type=str,
help='the vault id used to encrypt (required if more than one vault-id is provided)')
@@ -82,6 +82,8 @@ class VaultCLI(CLI):
create_parser = subparsers.add_parser('create', help='Create new vault encrypted file', parents=[vault_id, common])
create_parser.set_defaults(func=self.execute_create)
create_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*')
+ create_parser.add_argument('--skip-tty-check', default=False, help='allows editor to be opened when no tty attached',
+ dest='skip_tty_check', action='store_true')
decrypt_parser = subparsers.add_parser('decrypt', help='Decrypt vault encrypted file', parents=[output, common])
decrypt_parser.set_defaults(func=self.execute_decrypt)
@@ -384,6 +386,11 @@ class VaultCLI(CLI):
sys.stderr.write(err)
b_outs.append(to_bytes(out))
+ # The output must end with a newline to play nice with terminal representation.
+ # Refs:
+ # * https://stackoverflow.com/a/729795/595220
+ # * https://github.com/ansible/ansible/issues/78932
+ b_outs.append(b'')
self.editor.write_data(b'\n'.join(b_outs), context.CLIARGS['output_file'] or '-')
if sys.stdout.isatty():
@@ -442,8 +449,11 @@ class VaultCLI(CLI):
if len(context.CLIARGS['args']) != 1:
raise AnsibleOptionsError("ansible-vault create can take only one filename argument")
- self.editor.create_file(context.CLIARGS['args'][0], self.encrypt_secret,
- vault_id=self.encrypt_vault_id)
+ if sys.stdout.isatty() or context.CLIARGS['skip_tty_check']:
+ self.editor.create_file(context.CLIARGS['args'][0], self.encrypt_secret,
+ vault_id=self.encrypt_vault_id)
+ else:
+ raise AnsibleOptionsError("not a tty, editor cannot be opened")
def execute_edit(self):
''' open and decrypt an existing vaulted file in an editor, that will be encrypted again when closed'''