"One thing that would really help here and is general enough I'm sure it
would find use elsewhere as well is to have the template module capable of
outputting to a variable rather than a file. That certainly would help me
in my case, and I've seen cases elsewhere while trying to improve my code
for this where it would also have been helpful. "
Yep, as indicated above, you can put templates directly in variable files,
so this might not be needed.
---
duck: "quack"
foo: |
{% if x %}
[3,4,5]
{% else %}
[6,7,8]
{% endif %}
And just use {{ foo }} where needed inside the userdata.
On Fri, Aug 8, 2014 at 5:46 PM, AJ Daws <[email protected]> wrote:
> For example, say I have file, .bashrc that I want to write to my target
> host during the cloud-init process. In some cases, like with CoreOS which
> sets files like this one read-only once cloud-init is complete, there are
> things you can do during cloud-init that you cannot do afterwards
> (otherwise I'd just use template module as usual). To make this happen
> with Ansible, I need to include the content of the file within the
> cloud-init YAML string which is passed in to the user_data field of the ec2
> ansible module. I would like to store a template like bashrc.j2 so I could
> modify it before it gets used within the user_data string as part of that
> cloud_init text, rather than awkwardly as part of a variable file in YAML
> format with a bunch of other files.
>
>
> On Friday, 8 August 2014 14:34:25 UTC-7, Michael Peters wrote:
>
>> I don't know if you know this, but variables can themselves be
>> templated. You can do this in a set_fact or even in a variable file
>> (group_vars, host_vars, var_files, etc).
>>
>> For instance:
>>
>> set_fact: foo={% if yada %}{{ (blah + baz) / 100 }}{% else %}{{ fiddly
>> * 100 }}{% endif %}
>>
>> Or in a var file:
>>
>> foo: {% if yada %}{{ (blah + baz) / 100 }}{% else %}{{ fiddly * 100
>> }}{% endif %}
>>
>> So what case would a template file accomplish that template
>> expressions wouldn't ?
>>
>> On Fri, Aug 8, 2014 at 5:30 PM, AJ Daws <[email protected]> wrote:
>> > Michael, no need to apologize, you've already helped a lot, thank you!
>> >
>> > One thing that would really help here and is general enough I'm sure it
>> > would find use elsewhere as well is to have the template module capable
>> of
>> > outputting to a variable rather than a file. That certainly would help
>> me
>> > in my case, and I've seen cases elsewhere while trying to improve my
>> code
>> > for this where it would also have been helpful.
>> >
>> > On Friday, 8 August 2014 07:45:43 UTC-7, Michael DeHaan wrote:
>> >>
>> >> I'm sorry, I found your use case too confusing for me to understand -
>> no
>> >> offense implied - with what you were doing with lookup plugins.
>> >>
>> >> I can't help you explore it further.
>> >>
>> >> This may just be the case of a mailing list making it hard to
>> communicate,
>> >> but things like "The problem is that the output from dumping one
>> multiline
>> >> variable into another file in YAML format doesn't indent each line to
>> comply
>> >> with the YAML multiline format. " don't make sense to me.
>> >>
>> >> Embedding YAML in YAML isn't really a thing, normally you would just
>> keep
>> >> a datastructure inside the YAML.
>> >>
>> >> In ansible, you can also use the template module to dump YAML on
>> demand
>> >> like so:
>> >>
>> >> "{{ foo | to_yaml }}"
>> >>
>> >> Which is really great if you have a datastructure.
>> >>
>> >> You can also
>> >>
>> >> "{{ foo | to_json }}"
>> >>
>> >> I hope this helps somewhat.
>> >>
>> >>
>> >>
>> >> On Thu, Aug 7, 2014 at 6:09 PM, AJ Daws <[email protected]> wrote:
>> >>>
>> >>> include_vars helps by making a chunk of work re-usable; thanks!
>> However
>> >>> in my use case, I would like to include text in one file into the
>> variable
>> >>> file to finally be included in a task. I've updated the git
>> repository to
>> >>> reflect this setup with use of include_vars. The problem is that the
>> output
>> >>> from dumping one multiline variable into another file in YAML format
>> doesn't
>> >>> indent each line to comply with the YAML multiline format.
>> >>>
>> >>> The actual use case here is the use of the ec2 module to create new
>> >>> instances, and I am setting the user_data field to some cloud-init
>> YAML for
>> >>> use in the initial provisioning of CoreOS (I would prefer to use
>> Ansible,
>> >>> but some of it can only be done as part of this cloudinit process).
>> I want
>> >>> to write files during this process that are included directly in the
>> >>> cloud-config YAML, and so I would prefer to have those files as
>> separate
>> >>> files in my Ansible setup, such as "bashrc.yml" for example, and
>> include
>> >>> these inside a "cloudinit.yml" file that constructs the final text to
>> use
>> >>> for the user_data variable.
>> >>>
>> >>> I found an awkward way to deal with this, though it does at least
>> work.
>> >>> One can use the Jinja2 indent filter as I have in the code:
>> >>>
>> >>> multilinevar_from_included_varfile: |
>> >>> var_tests:
>> >>> - name: include some script in yaml format
>> >>> script: |
>> >>> {{ script_content|indent(4) }}"
>> >>>
>> >>>
>> >>> If anyone knows of a cleaner way to do this I'd love to hear it.
>> >>>
>> >>> Output from updated test without using the Jinja2 'indent' filter:
>> >>> var_tests:
>> >>> - name: var_from_playbook
>> >>> v: var_from_playbook_VALUE
>> >>>
>> >>> - name: var_from_role
>> >>> v: var_from_role_VALUE
>> >>>
>> >>> - name: include some script in yaml format
>> >>> script: #!/bin/bash
>> >>> echo this is my script!
>> >>> echo notice that the lines in the final output are not indented
>> currently
>> >>> to be parsed correctly in the task file
>> >>>
>> >>>
>> >>> On Thursday, 7 August 2014 14:23:09 UTC-7, Michael DeHaan wrote:
>> >>>>
>> >>>> The lookup plugin with "file" can't be used to interpolate variables
>> and
>> >>>> read them back in.
>> >>>>
>> >>>> Read the docs on the "include_vars" module and you may be a bit
>> happier,
>> >>>> and it eliminates the overcomplex lookup attempt.
>> >>>>
>> >>>>
>> >>>> On Wed, Aug 6, 2014 at 7:24 PM, AJ Daws <[email protected]> wrote:
>> >>>>>
>> >>>>> I created a simple example to demonstrate at
>> >>>>> https://github.com/tdaws/ansible-templated-file-to-var-example.
>> To try it
>> >>>>> directly, you can git clone
>> >>>>> https://github.com/tdaws/ansible-templated-file-to-var-example &&
>> run-me.sh
>> >>>>> Or you can browse the files directly. The run-me.sh script just
>> shows
>> >>>>> what command I use to call the test.
>> >>>>>
>> >>>>> Output contains the {{ }} notation instead of the replacement
>> values
>> >>>>> desired:
>> >>>>>
>> >>>>> TASK: [testrole | Test multiline templated var]
>> >>>>> *******************************
>> >>>>> ok: [localhost] => {
>> >>>>> "msg": "#testfile.yml\nvar_tests:\n - name: var_from_playbook\n
>> >>>>> v: {{ var_from_playbook }}\n\n - name: var_from_role\n v: {{
>> var_from_role
>> >>>>> }}"
>> >>>>> }
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> On Wednesday, 6 August 2014 08:06:22 UTC-7, Michael DeHaan wrote:
>> >>>>>>
>> >>>>>> "Tried the lookup('file', 'my-user-data.yml') but it does not
>> appear
>> >>>>>> to be parsed by jinja2"
>> >>>>>>
>> >>>>>> Not sure why this would be the case but would need to see the
>> >>>>>> playbook.
>> >>>>>>
>> >>>>>> Needs to be surrounded by "{{ }}" to evaluate of course, which may
>> be
>> >>>>>> part of the problem.
>> >>>>>>
>> >>>>>>
>> >>>>>> On Tue, Aug 5, 2014 at 8:17 PM, Amr Ali <[email protected]>
>> wrote:
>> >>>>>>>
>> >>>>>>> Why not just use a variables file, along with include_vars.. you
>> can
>> >>>>>>> even use a group or hosts var file..
>> >>>>>>>
>> >>>>>>> What kind of "templating" options are you looking into using?
>> >>>>>>>
>> >>>>>>> --
>> >>>>>>> You received this message because you are subscribed to the
>> Google
>> >>>>>>> Groups "Ansible Project" group.
>> >>>>>>> To unsubscribe from this group and stop receiving emails from it,
>> >>>>>>> send an email to [email protected].
>> >>>>>>> To post to this group, send email to [email protected].
>>
>> >>>>>>> To view this discussion on the web visit
>> >>>>>>> https://groups.google.com/d/msgid/ansible-project/
>> f7f83a30-61e6-4619-afe2-d3487ae36b02%40googlegroups.com.
>> >>>>>>> For more options, visit https://groups.google.com/d/optout.
>> >>>>>>
>> >>>>>>
>> >>>>> --
>> >>>>> You received this message because you are subscribed to the Google
>> >>>>> Groups "Ansible Project" group.
>> >>>>> To unsubscribe from this group and stop receiving emails from it,
>> send
>> >>>>> an email to [email protected].
>> >>>>> To post to this group, send email to [email protected].
>> >>>>> To view this discussion on the web visit
>> >>>>> https://groups.google.com/d/msgid/ansible-project/
>> ff6d36d1-103d-4528-8459-07ff43ac71b0%40googlegroups.com.
>> >>>>>
>> >>>>> For more options, visit https://groups.google.com/d/optout.
>> >>>>
>> >>>>
>> >>> --
>> >>> You received this message because you are subscribed to the Google
>> Groups
>> >>> "Ansible Project" group.
>> >>> To unsubscribe from this group and stop receiving emails from it,
>> send an
>> >>> email to [email protected].
>> >>> To post to this group, send email to [email protected].
>> >>> To view this discussion on the web visit
>> >>> https://groups.google.com/d/msgid/ansible-project/
>> f4ddc9f1-50e5-41ad-8ec5-50d3560ac09d%40googlegroups.com.
>> >>>
>> >>> For more options, visit https://groups.google.com/d/optout.
>> >>
>> >>
>> > --
>> > You received this message because you are subscribed to the Google
>> Groups
>> > "Ansible Project" group.
>> > To unsubscribe from this group and stop receiving emails from it, send
>> an
>> > email to [email protected].
>> > To post to this group, send email to [email protected].
>> > To view this discussion on the web visit
>> > https://groups.google.com/d/msgid/ansible-project/
>> b7fd3793-08ea-4704-86d6-8d2a8c538894%40googlegroups.com.
>> > For more options, visit https://groups.google.com/d/optout.
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/563dead0-3657-4950-94d3-ff460e5912c6%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/563dead0-3657-4950-94d3-ff460e5912c6%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgxs-Pqf%2B7SXUTX2SmbW1iNHybsHCDhvJT8CE6PPdMq00g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.