How I Fixed: File is absent cannot continue

Lately I’ve been tidying up my Ansible playbook scripts ahead of a forthcoming project deployment. Lots of change, including upgrading to PHP7 across the board.

Pretty cool, and exciting, but quite a lot of work all the same.

I decided to take the opportunity to restructure my log files. I mean, that’s a good way to spend a Friday night, right? Of course it is.

The relevant part of the nginx playbook is:

    - name: "create access log file"
      file: dest="/var/log/nginx/{{ item.directory }}-access.log"
            mode=644
            state=file
            owner="{{ nginx_user }}"
            group="{{ nginx_group }}"
      with_items: "{{ website_directories }}"

It’s admittedly been a while since I’ve been regularly hands-on with my Ansible setup, so I was a little rusty. See if you can spot the error in the above.

The with_items section lives in my host_vars/my-symfony-3.dev file, and looks like:

website_directories:
  - { name: "Root", directory: "{{ website_domain_name }}" }
  - { name: "API", directory: "api.{{ website_domain_name }}" }

So, anyway the error that was being spat out was as follows:

TASK [create access log file] **************************************************
failed: [my-symfony-3.dev] (item={u'stat': {u'exists': False}, '_ansible_item_result': True, '_ansible_no_log': False, u'changed': False, 'item': {u'directory': u'my-symfony-3.dev', u'name': u'Root'}, 'invocation': {'module_name': u'stat', u'module_args': {u'checksum_algorithm': u'sha1', u'mime': False, u'get_checksum': True, u'path': u'/var/www/my-symfony-3.dev', u'follow': False, u'get_md5': True}}}) => {"failed": true, "item": {"changed": false, "invocation": {"module_args": {"checksum_algorithm": "sha1", "follow": false, "get_checksum": true, "get_md5": true, "mime": false, "path": "/var/www/my-symfony-3.dev"}, "module_name": "stat"}, "item": {"directory": "my-symfony-3.dev", "name": "Root"}, "stat": {"exists": false}}, "msg": "file (/var/log/nginx/my-symfony-3.dev-access.log) is absent, cannot continue", "path": "/var/log/nginx/my-symfony-3.dev-access.log", "state": "absent"}
failed: [my-symfony-3.dev] (item={u'stat': {u'exists': False}, '_ansible_item_result': True, '_ansible_no_log': False, u'changed': False, 'item': {u'directory': u'api.my-symfony-3.dev', u'name': u'API'}, 'invocation': {'module_name': u'stat', u'module_args': {u'checksum_algorithm': u'sha1', u'mime': False, u'get_checksum': True, u'path': u'/var/www/api.my-symfony-3.dev', u'follow': False, u'get_md5': True}}}) => {"failed": true, "item": {"changed": false, "invocation": {"module_args": {"checksum_algorithm": "sha1", "follow": false, "get_checksum": true, "get_md5": true, "mime": false, "path": "/var/www/api.my-symfony-3.dev"}, "module_name": "stat"}, "item": {"directory": "api.my-symfony-3.dev", "name": "API"}, "stat": {"exists": false}}, "msg": "file (/var/log/nginx/api.my-symfony-3.dev-access.log) is absent, cannot continue", "path": "/var/log/nginx/api.my-symfony-3.dev-access.log", "state": "absent"}

Hopefully it make it easier to Google for this for someone in the future.

Anyway, the solution will make you kick yourself. I can’t imagine that many people will make this typo, but you never know:

    - name: "create access log file"
      file: dest="/var/log/nginx/{{ item.directory }}-access.log"
            mode=644
            state=touch
            owner="{{ nginx_user }}"
            group="{{ nginx_group }}"
      with_items: "{{ website_directories }}"

    - name: "create error log file"
      file: dest="/var/log/nginx/{{ item.directory }}-error.log"
            mode=644
            state=touch
            owner="{{ nginx_user }}"
            group="{{ nginx_group }}"
      with_items: "{{ website_directories }}"

Yeah… d’oh. RTFM.

Though to be fair, I had RTFM, it was just a long time ago, and I guess I rely too heavily on IDE code completion. When it comes to Sublime + YAML, I am going to make mistakes 🙂

If this looks interesting to you, and you want to know more about Ansible, be sure to check out the tutorial series I did here at Code Review Videos.

It’s shameless self promotion, I know, but hey, it is free. And hopefully you find it useful.

Shares

Published by

Code Review

Code Review

CodeReviewVideos is a video training site helping software developers learn Symfony faster and easier.

3 thoughts on “How I Fixed: File is absent cannot continue”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.