diff --git a/prudentia/local.py b/prudentia/local.py index 10ed342..23c9b4c 100644 --- a/prudentia/local.py +++ b/prudentia/local.py @@ -70,5 +70,6 @@ def provision(self, box, *tags): remote_pass=remote_pwd, transport=transport, extra_vars=self.extra_vars, - only_tags=only_tags + only_tags=only_tags, + vault_password=self.vault_password ) diff --git a/prudentia/simple.py b/prudentia/simple.py index 38136ef..574ea0d 100644 --- a/prudentia/simple.py +++ b/prudentia/simple.py @@ -137,6 +137,13 @@ def do_list(self, line): print b + def help_decrypt(self): + print "Provide the password that will be used to decrypt Ansible vault files. " \ + "For more information visit http://docs.ansible.com/playbooks_vault.html." + + def do_decrypt(self, line): + self.provider.set_vault_password(line) + def do_EOF(self, line): print "\n" return True @@ -154,6 +161,7 @@ def __init__(self, name, general_type=None, box_extra_type=None): self.env = Environment(name, general_type, box_extra_type) self.extra_vars = {'prudentia_dir': prudentia_python_dir()} self.tags = {} + self.vault_password = False self.load_tags() self.provisioned = False @@ -181,6 +189,9 @@ def unset_var(self, var): self.extra_vars.pop(var, None) print "\nUnset \'{0}\'\n".format(var) + def set_vault_password(self, pwd): + self.vault_password = pwd + def add_box(self, box): self.env.add(box) self.load_tags(box) @@ -259,5 +270,6 @@ def provision(self, box, *tags): remote_pass=remote_pwd, transport=transport, extra_vars=self.extra_vars, - only_tags=only_tags + only_tags=only_tags, + vault_password=self.vault_password ) diff --git a/prudentia/utils/provisioning.py b/prudentia/utils/provisioning.py index 8bb28a2..cd0ee5e 100644 --- a/prudentia/utils/provisioning.py +++ b/prudentia/utils/provisioning.py @@ -12,7 +12,7 @@ from prudentia.domain import Box -def run_playbook(playbook_file, inventory, remote_user=C.DEFAULT_REMOTE_USER, +def run_playbook(playbook_file, inventory, vault_password, remote_user=C.DEFAULT_REMOTE_USER, remote_pass=C.DEFAULT_REMOTE_PASS, transport=C.DEFAULT_TRANSPORT, extra_vars=None, only_tags=None): stats = callbacks.AggregateStats() playbook_cb = callbacks.PlaybookCallbacks(verbose=True) @@ -27,7 +27,8 @@ def run_playbook(playbook_file, inventory, remote_user=C.DEFAULT_REMOTE_USER, only_tags=only_tags, callbacks=playbook_cb, runner_callbacks=runner_cb, - stats=stats + stats=stats, + vault_password=vault_password ) provision_success = False diff --git a/tests/local_cli_test.py b/tests/local_cli_test.py new file mode 100644 index 0000000..dd959d9 --- /dev/null +++ b/tests/local_cli_test.py @@ -0,0 +1,19 @@ +import unittest + +from prudentia.local import LocalCli + + +class TestLocalCli(unittest.TestCase): + def setUp(self): + self.cli = LocalCli() + + def test_set_var(self): + var_name = 'var_name' + var_value = 'var_value' + self.cli.do_set(var_name + ' ' + var_value) + self.assertEqual(self.cli.provider.extra_vars[var_name], var_value) + + def test_decrypt(self): + pwd = "this is a pwd" + self.cli.do_decrypt(pwd) + self.assertEqual(self.cli.provider.vault_password, pwd) diff --git a/tests/local_test.py b/tests/local_provider_test.py similarity index 76% rename from tests/local_test.py rename to tests/local_provider_test.py index 46a2703..f66bb5e 100644 --- a/tests/local_test.py +++ b/tests/local_provider_test.py @@ -32,12 +32,3 @@ def test_should_not_list_tags_if_box_not_exists(self): ne_box = Box('simple-box-2', 'xxx.yml', 'ssh-hostname', '0.0.0.0') self.provider.load_tags(ne_box) self.assertEqual(self.provider.tags.has_key(ne_box.name), False) - - def test_set_var(self): - var_name = 'var_name' - var_value = 'var_value' - self.provider.set_var(var_name, var_value) - self.assertEqual(self.provider.extra_vars[var_name], var_value) - var_overwritten = "var_overwritten" - self.provider.set_var(var_name, var_overwritten) - self.assertEqual(self.provider.extra_vars[var_name], var_overwritten)