Skip to content
Advertisement

Ansible write variables into YAML file

I have a specific ansible variable structure that I want to get from the vault into a yaml file on my hosts.

Lets assume a structure like this:

secrets:
   psp1:
     username: this
     password: that
   secret_key: 123
  ...

I need something like a “generic” template to output whatever “secrets” contains at the moment, since the content changes almost completely based on the current environment.

The easiest solution I can think of is to output the whole structure in an template like this:

# config/secrets.yml
{{ secrets | to_yaml }}

But the jinja2 to_yaml filter does only “yamlify” the first level, deeper nestings are outputted in json.

Can I work around that problem somehow? Is there an easier way to achieve what I want?

Thanks for any help!

Advertisement

Answer

  1. As jwodder said, it’s valid.
  2. If you’re using to_yaml (instead of to_nice_yaml) you have fairly old install of ansible, it’s time to upgrade.
  3. Use to_nice_yaml
  4. It’s possible to pass your own kwargs to filter functions, which usually pass them on to underlying python module call. Like this one for your case. So something like:
{{ secrets | to_nice_yaml( width=50, explicit_start=True, explicit_end=True) }}

only catch is you can’t override indent=4,* allow_unicode=True, default_flow_style=False

* Note that indent can now be overridden, at least as of Ansible 2.2.0 (I use it to indent 2 spaces to follow coding standards for one project).

Better documentation for to_nice_yaml can be found here.

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement