Hi,

In our development team we have been using fabric-1 as task runner for many
years and we are really happy with it. Initially we chose it for the
following reasons:

   - Being Python, we can transfer our development logic to our task-runner
   as Python is our main development language
   - Defining tasks is really easy and flexible
   - It allowed us to create a library of shared tasks for the whole team
   making definition of new fabfiles a breeze for our projects
   - It "just worked"

We are now planning to review and refresh our whole development process and
environment. The task runner is part of this.
As some preparation work and to gain experience I've tried to move some
personal projects to fabric-2 and ran into several problems:

   - The first hurdle was the "migrating to fabric-2" document. It was not
   really helpful and very confusing. I ended up perusing the API docs to find
   what I needed, but this still involved some guesswork.
   - The split of "invoke" and "fabric" is confusing. Especially since the
   argument passed into the tasks depends on how they are called. If called
   without host information, the first argument will be an invoke context, if
   host information is available it becomes a fabric connection, and both are
   not API compatible. After several attempts, I now believe that the "fab"
   executable is useless for us and that we could do everything with "invoke"
   and just import fabric connections in our "tasks.py" file. This way we have
   consistency with the first argument, but it does not seem that this is the
   intended way to do it.
   - Dropping the concept of "roles" surprised me. It seems to me that this
   would be an integral part of a task-runner. This now forces me to implement
   "roles" logic in all of my task files.
   - Running local tasks does not behave as expected due to the way the
   console and environment variables are handled. Using "pty=True" does not
   help with everything and "replace_env=False" is also a bit cryptic.
   - "put" no longer supports folders and one is now reliant on "patchwork"
   to get the "rsync" task. I am worried that the docs state that patchwork is
   not a priority as we rely on the functionality to push folders onto remote
   machines. fabric-1 made this trivial.

I *do *like the configuration system and how task-arguments are handled in
the CLI tool. This is a big step-up from fabric-1

After discussing this with the team another member stated that he made the
same effort on some of his personal projects and ran into the exact same
issues and has given up on fabric-2 as it makes task-definitions too
complicated compared to fabric-1. Although in defense of fabric, I wonder
if this is not foremost an issue with the documentation. As I mentioned, I
fled to the API docs after reading the "prose" docs as they really
inundated me details I did not need to know and was unable to find what I
was looking for.

So in our team I am now faced with making a decision of picking a new
task-runner. The options I see are:

   - *Switch to fabric-2* - I'm worried that the complexities will make it
   difficult for the less experienced developers in our team to define tasks.
   It also seems that fabric-2 is not really gaining traction which led me to
   the subject of this mail.
   - *Stick with fabric-1 and hope that fabric-2 is at some point on par
   with fabric-1 in terms of simplicity* - This does not seem like a good
   long-term plan and would force us to install Python2 on our machines solely
   for fabric.
   - *Use Makefiles instead* - This would solve most of our problems but
   makes it difficult to share common tasks and is definitely not as
   convenient as writing Python
   - *Find another task-runner* - This is unknown/unexplored territory

All the points mentioned above are mainly inconveniences which can be
mitigated by writing a bit of scaffolding around it. But I am wary of the
fact that I *need* this kind of scaffolding for something that was much
easier with fabric-1. The main goals for me is to have a task-runner where
it is easy to define and execute tasks. Even for people that don't do
Python development as their daily business.

In order to make an informed decision about our future task-runner the
question in the topic is very important to me: *What are the future plans
for fabric-2?*



BR
Mich
_______________________________________________
Fab-user mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/fab-user

Reply via email to