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.
