Variable substitution and with_items

Hello,

my company (me) recently started using Ansible (1.7.1) for multi-stage server provisioning (both on local vagrant and ec2). Even though i haven’t utilized the variable much, i have defined:

environment: production

on the environment specific group_vars file; its value can be “development”, “production”, “staging”, etc. In the same group_vars file, for provisioning Postgresql databases i am utilizing the “ANXS.postgresql” Galaxy module and defining databases in variables as well:

postgresql_databases:

  • name: app_production
    hstore: yes
    uuid_ossp: no

I had initially planned to suffix the environment variable in the database name (not only on databases but other sections of the playbooks) :

postgresql_databases:

  • name: app_{{ environment }}
    hstore: yes
    uuid_ossp: no

but the resulting database name after substitution becomes “app_{}” and i believe it is related, but not only, to the database task using with_items:

  • name: PostgreSQL | Make sure the PostgreSQL databases are present
    postgresql_db:
    name: “{{item.name}}”
    encoding: “{{postgresql_encoding}}”
    lc_collate: “{{postgresql_locale}}”
    lc_ctype: “{{postgresql_locale}}”
    template: “template0”
    state: present
    with_items: postgresql_databases
    when: postgresql_databases|length > 0

Is it possible to use this substitution pattern (utilizing variables with other variables in its value as a list value), or am i just using the wrong pattern and just use explicit names (name_X instead of name_{{ var1 }}) ?

Thank you

The variable name “environment” is a reserved variable name and used as described at http://docs.ansible.com/playbooks_environment.html

You should use something such as “env” or “environ” instead.

Awesome, thank you!

Terça-feira, 16 de Setembro de 2014 13:47:03 UTC+1, Matt Martz escreveu:

We have proposed changing this to something much less likely to be clobbered.

If someone would like to file a ticket, or send a pull request to make this automagic use a variable like “ansible_environment_settings” or something, we’ll definitely consider changing it.

This has come up a handful of times, and while documented, it would be nice to not have the potential confusion.