diff --git a/examples/playbooks/prompts.yml b/examples/playbooks/prompts.yml index 6b020072491..564061ae123 100644 --- a/examples/playbooks/prompts.yml +++ b/examples/playbooks/prompts.yml @@ -29,8 +29,10 @@ - name: "some_password" prompt: "Enter password" private: yes + - name: "release_version" prompt: "Product release version" + default: "my_default_version" private: no - name: "my_password2" @@ -48,7 +50,7 @@ tasks: - name: imagine this did something interesting with $release_version - action: shell echo foo >> /tmp/$release_version-$alpha + action: shell echo foo >> /tmp/$release_version-alpha - name: look we crypted a password action: shell echo my password is $my_password2 diff --git a/lib/ansible/callback_plugins/noop.py b/lib/ansible/callback_plugins/noop.py index 4b9bcd23816..b0f48ef47fb 100644 --- a/lib/ansible/callback_plugins/noop.py +++ b/lib/ansible/callback_plugins/noop.py @@ -72,7 +72,7 @@ class CallbackModule(object): def playbook_on_task_start(self, name, is_conditional): pass - def playbook_on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None): + def playbook_on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None, default=None): pass def playbook_on_setup(self): diff --git a/lib/ansible/callbacks.py b/lib/ansible/callbacks.py index 1fd47b35c58..619613fb333 100644 --- a/lib/ansible/callbacks.py +++ b/lib/ansible/callbacks.py @@ -435,7 +435,7 @@ class PlaybookCallbacks(object): print banner(msg) call_callback_module('playbook_on_task_start', name, is_conditional) - def on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None): + def on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None, default=None): if prompt: msg = "%s: " % prompt @@ -458,10 +458,17 @@ class PlaybookCallbacks(object): else: result = prompt(msg, private) + # if result is false and default is not None + if not result and default: + result = default + + if encrypt: result = utils.do_encrypt(result,encrypt,salt_size,salt) - call_callback_module('playbook_on_vars_prompt', varname, private=private, prompt=prompt, encrypt=encrypt, confirm=confirm, salt_size=salt_size, salt=None) + call_callback_module( 'playbook_on_vars_prompt', varname, private=private, prompt=prompt, + encrypt=encrypt, confirm=confirm, salt_size=salt_size, salt=None, default=default + ) return result diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index 06cf184c1e8..f678a15bb78 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -189,6 +189,7 @@ class Play(object): vname = var['name'] prompt = var.get("prompt", vname) + default = var.get("default", None) private = var.get("private", True) confirm = var.get("confirm", False) @@ -197,13 +198,17 @@ class Play(object): salt = var.get("salt", None) if vname not in self.playbook.extra_vars: - vars[vname] = self.playbook.callbacks.on_vars_prompt(vname, private, prompt,encrypt, confirm, salt_size, salt) + vars[vname] = self.playbook.callbacks.on_vars_prompt ( + vname, private, prompt, encrypt, confirm, salt_size, salt, default + ) elif type(self.vars_prompt) == dict: for (vname, prompt) in self.vars_prompt.iteritems(): prompt_msg = "%s: " % prompt if vname not in self.playbook.extra_vars: - vars[vname] = self.playbook.callbacks.on_vars_prompt(varname=vname, private=False, prompt=prompt_msg) + vars[vname] = self.playbook.callbacks.on_vars_prompt( + varname=vname, private=False, prompt=prompt_msg, default=None + ) else: raise errors.AnsibleError("'vars_prompt' section is malformed, see docs") diff --git a/plugins/callbacks/log_plays.py b/plugins/callbacks/log_plays.py index d9af3049de5..3931b3411b2 100644 --- a/plugins/callbacks/log_plays.py +++ b/plugins/callbacks/log_plays.py @@ -86,7 +86,7 @@ class CallbackModule(object): def playbook_on_task_start(self, name, is_conditional): pass - def playbook_on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None): + def playbook_on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None, default=None): pass def playbook_on_setup(self): diff --git a/plugins/callbacks/osx_say.py b/plugins/callbacks/osx_say.py index 9dba871a4f5..89c82ca5304 100644 --- a/plugins/callbacks/osx_say.py +++ b/plugins/callbacks/osx_say.py @@ -73,7 +73,7 @@ class CallbackModule(object): else: say("Notifying task: %s" % name, REGULAR_VOICE) - def playbook_on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None): + def playbook_on_vars_prompt(self, varname, private=True, prompt=None, encrypt=None, confirm=False, salt_size=None, salt=None, default=None): pass def playbook_on_setup(self):