Назад | Перейти на главную страницу

ошибка шаблона с условной проверкой недоступности «failed_when»

У меня есть доступная задача, в которой мне нужно проверить, все ли у меня файлы 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