I have a file, as an example, with the following content:
disk = [file:/OVS/Repositories/0004fb0000030000df2ee11376f1cd94/VirtualDisks/b7558d7745c14b02806d08f8003906e1.img,xvda,w,phy:/OVS/Repositories/0004fb0000030000df2ee11376f1cd94/VirtualDisks/0004fb0000120000049ec392e534e039,xvdb,w,file:/OVS/Repositories/0004fb0000030000df2ee11376f1cd94/VirtualDisks/0004fb0000120000843bb7e2fe395f24.img,xvdc,w]
I wish to find all instances of image files, and build a list with them. Here is my regexp:
I know that I can do this with shell, or similar modules, but I wish to do this in a more ansible-native way (if there is one). Is there a module that will allow me to search a file with a regular expression and then register the results to a variable? I just want to build a list of *img files (can be more than 1 and probably wont exceed 10) so that I can manipulate them later.
`
ERROR! Syntax Error while loading YAML.
found unknown escape character
The error appears to have been in ‘/etc/ansible/playbooks/one-offs/sanitize_vm.yml’: line 21, column 75, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
set_fact:
virt_disks: “{{ lookup(‘file’,‘/var/ftp/vm.cfg’) | regex_findall(‘\w+.img’) }}”
^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:
with_items:
{{ foo }}
Should be written as:
with_items:
“{{ foo }}”
`
If I escape the backslash:
`
TASK [Find virtual Disks] ****************************************************************************************************************************************************************************************************************
[WARNING]: Unable to find ‘/var/ftp/vm.cfg’ in expected paths (use -vvvvv to see paths)
fatal: [ovmftp]: FAILED! => {“msg”: “An unhandled exception occurred while running the lookup plugin ‘file’. Error was a <class ‘ansible.errors.AnsibleError’>, original message: could not locate file in lookup: /var/ftp/vm.cfg”}
`
I find the error strange on the last one, because I stat the file previous to it and can see it fine.
Perhaps I am doing this wrong, but it doesn't like my syntax. If I escape
the backslash ('\\w+.img') it tries to run but with a different error:
- name: Find virtual Disks
set_fact:
virt_disks: "{{ lookup('file','/var/ftp/vm.cfg') |
regex_findall('\w+.img') }}"
Result:
ERROR! Syntax Error while loading YAML.
found unknown escape character
The error appears to have been in
'/etc/ansible/playbooks/one-offs/sanitize_vm.yml': line 21, column 75, but
may
be elsewhere in the file depending on the exact syntax problem.
A lot more code.
First use the slurp module to fetch the content and store it to a variable.
The result is base64 encode, so you need to use b64decode filer and then you can use the regex filter.