Hi. We have defined php_fpm_slowlog
in trellis/roles/wordpress-setup/defaults/main.yml
It works as long as we hardcode the path /srv/www/example.com/logs/$pool.slow.log for example.
The problem arises when we want to have multiple staging environments, and the hardcoded paths don’t match up. I’ve tried defining php_fpm_slowlog: "{{ project_public_path }}/logs/$pool.slow.log"
but that results in AnsibleUndefinedVariable: {{ project_public_path }}/logs/$pool.slow.log: ‘project_public_path’ is undefined
I don’t understand how to call this variable (which I saw being used in trellis/roles/deploy/defaults/main.yml) to help create create the file that we need to enable the slowlog
I’d follow the example of other tasks in that role which need the path: trellis/main.yml at c87f5026686df8bb28f8d55e38b998f5b78a9d62 · roots/trellis · GitHub
Though it depends on how you’re enabling the slowlog since you didn’t show how that’s done.
Hi @swalkinshaw . Good point. To enable slowlog, I placed the following in /roles/wordpress-setup/templates/php-fpm.conf.j2:
slowlog = {{ php_fpm_slowlog }}
request_slowlog_timeout = {{ php_fpm_request_slowlog_timeout }}
And now I tried putting the following in /roles/wordpress-setup/defaults/main.yml
php_fpm_slowlog: "{{ www_root }}/{{ item.key }}/logs/$pool.slow.log"
It still complains, saying: AnsibleUndefinedVariable: {{ www_root }}/{{ item.key }}/logs/$pool.slow.log: 'item' is undefined
Hardcoding the path works, but I still have a hard time understanding the way Ansible defines these variables/dicts.
Yeah it’s a bit confusing. That template file is used in this task: https://github.com/roots/trellis/blob/eb202fa3058caabf94bd8cb31236ceaa08d60674/roles/wordpress-setup/tasks/main.yml#L28-L33
Since it’s not site specific (there’s only one global template) it can’t be made site specific. If that task was run in a loop (loop: "{{ wordpress_sites | dict2items }}"
) like many other site related tasks… then using item.key
would work.
So unfortunately Trellis won’t really allow this right now because it uses a single php-fpm pool for all sites; instead of one per site. I think you have two choices right now:
- just hardcode it; if you only have a single site then this is easy and probably fine. If you have multiple sites you could pick a non-site specific file location.
- refactor that template + task + Nginx conf to support one pool per site. Obviously that’s more complicated
Gotcha, I understand now. I appreciate it
Ok, so I’ll hardcode the path at the site root then, I think