Thanks, will check those out!

On Wednesday, May 17, 2017 at 4:37:51 PM UTC+2, J Hawkesworth wrote:
>
> Sorry, trying to help too early in the morning!.  I had missed the single 
> \ in the path.
>
> Not tried but have noticed jinja2 has a 'tojson' filter that might help 
> (new in 2.9 so maybe 'pip install Jinja2 --upgrade' might be needed, 
> although I think installing ansible 2.3 from pip will drag this in, if I 
> recall.  Also there's a 'safe' filter which might stop automatic escaping 
> from happening.
>
> http://jinja.pocoo.org/docs/2.9/templates/
>
> Hope this helps,
>
> Jon
>
>
>
> On Tuesday, May 16, 2017 at 11:28:50 PM UTC+1, Trond Hindenes wrote:
>>
>> To me it looks like you're getting the same as me (I had to zoom in my 
>> screen to be sure :-) ) - contents of templated json contains a single 
>> backslash after the drive letter (which is not valid)
>>
>> These Json files might be read by applications that are not able to parse 
>> "forward-slashed" paths, so although Powershell would be fine with that 
>> format, it's not always an option to use them in json files (so essentially 
>> this is not as much a problem with the Powershell-based Ansible modules as 
>> the fact that its hard to inject valid json into json files).
>>
>> I'll look into the win_* filter - I haven't spent much time with those (I 
>> kinda wish they were a bit better documented)
>>
>> I'll keep this thread updated with my findings.
>>
>>
>> On Monday, May 15, 2017 at 9:38:10 AM UTC+2, J Hawkesworth wrote:
>>>
>>> I'm not seeing the behaviour you describe - maybe my playbook isn't 
>>> doing the same things as yours though?
>>>
>>> # playbook:
>>>
>>> $ cat trondpath.yml
>>> ---
>>> - name: test trond observed strange path behaviour
>>>   hosts: TENSY
>>>   vars:
>>>     logfiles_path: "F:\\Logs"
>>>   connection: winrm
>>>   gather_facts: false
>>>   tasks:
>>>     - name: create json file from template
>>>       win_template:
>>>         src: template.json
>>>         dest: templated.json
>>>
>>> # template file:
>>>
>>> $ cat template.json
>>> {
>>>    "FilePath":"{{ logfiles_path }}\\*",
>>>    "Stuff": otherstuff
>>> }
>>>
>>> contents of templated.json: 
>>>
>>> {
>>>    "FilePath":"F:\Logs\\*",
>>>    "Stuff": otherstuff
>>> }
>>>
>>> I'm using ansible 2.3 (Win 10 WSL / Ubuntu )
>>>
>>> Dag is right though we should document this - I've put it on my list.  
>>> Better still would be to document and make some kind of automated test like 
>>> the integration tests for modules.  There are probably quite a few possible 
>>> combinations to work through - absolute and relative paths, paths to files, 
>>> paths to dirs and then all the places you can define them - hostvars, group 
>>> vars, included vars, in-playbook vars, hardcoded in playbooks, hardcoded in 
>>> templates, and inside {{ }} 
>>>
>>> For info there are filters for windows style paths.
>>> See http://docs.ansible.com/ansible/playbooks_filters.html 
>>> win_basename, win_splitdrive and win_dirname are the windows-specific 
>>> ones.
>>>
>>> Another trick you can use is to use unix style path separators - 
>>> powershell is *usually* ok with this but obviously it depends on what is 
>>> happening in your powershell code - if you pass a path to a native windows 
>>> binary in your powershell (or ansible module code) obviously this isn't 
>>> going to work.
>>>
>>> Hope this helps,
>>>
>>> Jon
>>>
>>>
>>> On Tuesday, May 9, 2017 at 1:30:11 PM UTC+1, Dag Wieers wrote:
>>>>
>>>> On Tue, 9 May 2017, Trond Hindenes wrote: 
>>>>
>>>> > Hope someone can help me shed some light on this one: 
>>>> > 
>>>> > Since Ansible is python-based, us Windows dudes generally have to 
>>>> stick an 
>>>> > extra backslash anywhere we're manipulating Windows paths. However, 
>>>> in some 
>>>> > cases this causes unexpected behavior. In my current case, I need to 
>>>> inject 
>>>> > a file path into a json file on a Windows box. This path is defined 
>>>> as such 
>>>> > in an Ansible var: 
>>>> > logfiles_path: "F:\\Logs" 
>>>> > 
>>>> > In my template json file I add to this path, using the following: 
>>>> > 
>>>> > "FilePath":"{{ logfiles_path }}\\*", 
>>>> > 
>>>> > The goal is to populate the target json with 
>>>> > "F:\\Logs\\*" 
>>>> > 
>>>> > However, since Ansible kicks in the resulting file contains: 
>>>> > "F:\Logfiles\\*" 
>>>> > 
>>>> > In other words, Ansible "normalises" the part of the path that comes 
>>>> from a 
>>>> > variable, but not the part "outside" of the variable. 
>>>> > 
>>>> > I'm not sure what the best way to solve this is - it would be great 
>>>> to have 
>>>> > some builtin filters that would do "json normalization" of a string 
>>>> or 
>>>> > something. How are people solving this? 
>>>>
>>>> I stick to using single backslashes (and not quotes) in YAML, or single 
>>>> quotes if you have to. And single quotes everywhere else. I never had 
>>>> the 
>>>> need to use double-backslashes. 
>>>>
>>>> I remember one issues (with YAML?), which is when using a trailing 
>>>> backslash. So I taught myself not to do this for Windows paths :-) 
>>>>
>>>> It would be nice to document these best-practices as part of the 
>>>> Ansible 
>>>> Windows documentation once we have determined what's best. 
>>>>
>>>> -- 
>>>> Dag 
>>>>
>>>

-- 
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/0908427a-0b88-4c58-87ac-41e05e47f1c3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to