Can anyone explain to me if this just doesn’t work or if I’m doing something wrong;
/production
[webapps:vars]
default_branch=master
/staging
[webapps:vars]
default_branch=staging
/my_playbook.yml
- hosts: webapps
vars_prompt:
- name: “release_branch”
prompt: “Deploy Branch:”
default: “{{default_branch}}”
Basically is just takes the text in ‘default’ verbatim (i.e. - no substitution). Given how Ansible puts itself into the deployment process, and how well that actually works, this is a really common use case that it feels like should be supported.
vars_prompt variables aren’t being expanded with inventory scoped variables, because the question is only going to be asked once. Therefore it’s storing the literal string value.
I really don’t recommend relying on vars_prompt because playbooks really should be non-interative, “-e” extra variables also work a bit more nicely. You can still define defaults if the variables are not there using the “| default” Jinja2 function.
So I’m actually using a when: condition to see it’s passed on the command line first, but —extra-args feels very clunky for specifying a branch when you want to release, and it is often the case that you have a specific branch you need to run in a particular environment, usually for testing.
You could also set it in a group variables file, for the staging or production group.
-e overrides inventory scope, so could be used to replace the default.
Alternatively, keep the vars prompt and do this in the task section after prompting for the variable I have named “prompted_variable”, while setting the default prompt in the vars_prompt to just ‘’.
- set_fact: actual_branch={{ prompted_variable | default(variable_from_inventory) }}
To clarify, the full block is:
/my_playbook.yml
- hosts: webapps
vars_prompt:
- name: “release_branch”
prompt: “Deploy Branch:”
default: master
when: not release_branch
Ansible will skip this block if release_branch is passed in --extra-args. Thinking it through, maybe it’s worth just having it passed in on the command line if it needs to be set and falling back to the inventory as a default. Thanks for the help.
Yep, sounds good.
IIRC, “when” cannot be applied to a vars_prompt.
That is pretty weird, because “when” I tested it this morning I swear it skipped the prompt when I passed in —extra-vars “release_branch=staging”.