У меня есть доступная задача, в которой мне нужно проверить, все ли у меня файлы 1987 года, и все ли эти файлы были созданы в течение 1 минуты.
- name: check all 1987 files
find: paths=/proc/files
file_type=file
age=-{{ window }}m
age_stamp=mtime
register: files
failed_when: files.matched = total | int
Но всякий раз, когда я запускаю указанную выше задачу, всегда возникает это сообщение об ошибке. Я уже проверил, что все файлы 1987 года созданы правильно.
fatal: [machineA]: FAILED! => {"msg": "The conditional check 'files.matched = total | int' failed. The error was: template error while templating string: expected token 'end of statement block', got '='. String: {% if files.matched = total | int %} True {% else %} False {% endif %}"}
Вот как я передаю эти аргументы:
-e 'total=1987' -e 'window=1'
Вот ошибка, которую я получаю: он показывал все файлы 1987 года в массиве json, поэтому я сократил его.
{ "changed": false, "examined": 1987, "failed_when_result": true, "files": [{ "atime": 1524849737.1382372, "ctime": 1524849737.4822407, "dev": 64785, "gid": 5000, "inode": 55052752, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1524849737.4822407, "nlink": 1, "path": "/proc/files/abc_1680_log.data", "rgrp": true, "roth": true, "rusr": true, "size": 2687406, "uid": 5000, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false }], "matched": 1987, "msg": "" }
Сравнение проводится с использованием двух знаков равенства:
- name: check all 1987 files
find: paths=/proc/files
file_type=file
age=-{{ window }}m
age_stamp=mtime
register: files
failed_when: files.matched == total | int
Ansible использует Jinja-шаблоны, вы можете увидеть сравнения здесь: http://jinja.pocoo.org/docs/dev/templates/#comparisons
Эта логика кажется обратной:
failed_when: files.matched = total | int
Так должно быть
failed_when: files.matched != total | int