Inventory vars in a playbook

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.

  • Jeremy

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”.

  • Jeremy