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

Reply via email to