Fabric has become my deployment tool of choice both for deploying Django projects and for initially configuring Ubuntu slices. However, my current workflow with Fabric isn't very DRY, as I find myself:
fabfile.py
from one Django project to another andfabfile.py
as needed for each project (e.g., changing the webserver_restart
task from Apache to Nginx, configuring the host and SSH port, etc.).One advantage of this workflow is that the fabfile.py
becomes part of my Git repository, so between the fabfile.py
and the pip requirements.txt
, I have a recreateable virtualenv and deployment process. I want to keep this advantage, while becoming more DRY. It seems that I could improve my workflow by:
pip install
the common tasks defined in the fabfile.py
andfab_config
file containing the host configuration information for each project and overriding any tasks as neededAny recommendations on how to increase the DRYness of my Fabric workflow?
I've done some work in this direction with class-based "server definitions" that include connection info and can override methods to do specific tasks in a different way. Then my stock fabfile.py (which never changes) just calls the right method on the server definition object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With