Ansible split string on backslash
Declare a variable with the separator to avoid the quotation&escaping alchemy. Use Single-Quoted Style; backslash '\'
can be used freely. For example, the task below
- debug:
msg: "{{ dirs[1].split(separator)[-1] }}"
vars:
separator: '\'
dirs: ['Web\this','Web\that','Web']
gives
msg: that
Related videos on Youtube
Wolske
Updated on September 18, 2022Comments
-
Wolske over 1 year
I'm passing a list of dir/subdirs into a playbook as follows:
dirs=['Web\this','Web\that','Web']
This works fine when I actually do tasks on those directories (win_shell, invoking a build process), but later I need to copy the files and the '\' does not work when used as part of a filename. I'm interested in using the following, so I'll get the module name for most builds and 'Web' for the one that is in the root folder:
dirs[1].split('\\')[-1]
I hoped this would return 'this', 'that', and 'Web', respectively.
But I can't find any combination of slashes or regex magic to split my strings. I've found about 5 questions/answers in StackExchange that are close, but none of them seem to do it.
I've also tried this with variations of
"{{ dirs[1] | regex_replace('\\','-') }}"
-
Wolske over 4 yearsNote: I'm passing the list in like it is, with the backslash, because it maps seamlessly to the folder structure the developers have used for a long time, and because calling the build process with Ansible using these variables works quite well. I know I could rework this to eliminate the backslashes and just use the component names, but then that means extra exception handling for the top-level ('Web') folder which otherwise is unnecessary. I feel like I'm just overlooking something obvious on the split() function.
-
Zoredache over 4 yearsCan you show more of your playbook? Using the
` character can be tricky in some contexts, since the
` is a yaml escape character in addition to being a escape character for the regular expressions.
-
-
Wolske over 4 yearsBrilliant! works like a charm. "Alchemy" for sure...