Discussion:
[Fab-user] Survey: Do you wish you run chef, ansible, puppet or saltstack type commands in fabric?
Tony Narlock
2015-04-21 11:50:34 UTC
Permalink
Hi Fabric users,

I wanted to get an idea of how much of a desire there is for this.

I use both Fabric and a Configuration management system called Salt on my
projects. Salt is permissively licensed and and has a superb, pythonic
architecture. I love salt for it's relatively simple declarative configs,
but most importantly, it's automated detection of remote systems, module
library and state library.

The issue is - there is a huge void in many projects where they're not big
enough to warrant the upkeep of maintaining configuration manager recipes,
but fabfile's tasks are starting to duplicate functionality a config
manager would normally handle. Also if working on a team, there's the issue
of colleagues being willing to accept a learning curve.

Fabric is an easier pill to swallow. As a task runner, it's front-end
implementation is more nimble that a configuration manager for
small-to-medium complexity scenarios.

Fabric has two projects so far that imitate configuration manager require /
states / cookbooks:

- Cuisine: https://github.com/sebastien/cuisine
- Fabtools https://github.com/ronnix/fabtools

Fabtools has worked like a charm for me - with the exception that requires
are nowhere near as resilient as salt states.

As an example, task a look at ``salt.states.git.latest`` handling of edge
cases, compared to ``fabtools.requires.git.working_copy``:

- Salt:
https://github.com/saltstack/salt/blob/000de9597475afa59b0cd6c7c1f6c3dc1c66a0bc/salt/states/git.py#L39
Fabtools:
https://github.com/ronnix/fabtools/blob/85f5828c84351a91c29bd2be1544d1922a36f436/fabtools/require/git.py#L51

Saltstack's states are also backed by tests:
https://github.com/saltstack/salt/blob/000de9597475afa59b0cd6c7c1f6c3dc1c66a0bc/tests/unit/states/git_test.py
.

This is just one example of how salt maintains a superb depth / breadth of
remote system execution commands / recipes. Another way to put it into
perspective:

http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.git.html
is to http://fabtools.readthedocs.org/en/latest/api/git.html

like http://docs.saltstack.com/en/latest/ref/states/all/salt.states.git.html
is to http://fabtools.readthedocs.org/en/latest/api/require/git.html

I have a *very rough* proof of concept demo:
https://gist.github.com/tony/6d8d975c817d2e4d43dd

Without delving into the complexities of things technically - I want to get
an idea from your POV and experiences with your fabric projects:

- does you here have any sort of gap to fill with fabric where you would
benefit from stuff like:

# make sure vim pkg is installed and latest, if not, install/update
debpkg.latest('vim')

# make sure nginx an nginx site has config file as a template
# in /etc/nginx/sites.avail, linked, and service is, running
nginx.running(**settings)
- would anything inside of / salt.modules.* [1] salt.states.* [2] be
helpful to you if you could access it pythonically via fabric?
- Do you already use a tool like cuisine / fabric and wish you had access
to more commands/requires/cookbooks?

Thank you!

Tony Narlock

[1]
http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.git.html
[2] http://docs.saltstack.com/en/latest/ref/states/all/salt.states.git.html
Jeff Forcier
2015-04-21 21:10:47 UTC
Permalink
Also of note is that there are lightweight plans to add a 'blessed'
set of fabtool/cuisine/etc-like functions to the Fabric github org, as
per #461 (which also has a larger list of this type of 3rd party
lib!):

https://github.com/fabric/fabric/issues/461

(This is also mentioned on the roadmap, http://www.fabfile.org/roadmap.html)

However, Patchwork is lower priority, partly because the core needs
love, partly because as mentioned, "true" CM systems like
chef/puppet/salt/ansible fill that particular need for a majority of
users (especially users graduating from simple use cases to
intermediate or advanced ones.)
Post by Tony Narlock
Hi Fabric users,
I wanted to get an idea of how much of a desire there is for this.
I use both Fabric and a Configuration management system called Salt on my
projects. Salt is permissively licensed and and has a superb, pythonic
architecture. I love salt for it's relatively simple declarative configs,
but most importantly, it's automated detection of remote systems, module
library and state library.
The issue is - there is a huge void in many projects where they're not big
enough to warrant the upkeep of maintaining configuration manager recipes,
but fabfile's tasks are starting to duplicate functionality a config manager
would normally handle. Also if working on a team, there's the issue of
colleagues being willing to accept a learning curve.
Fabric is an easier pill to swallow. As a task runner, it's front-end
implementation is more nimble that a configuration manager for
small-to-medium complexity scenarios.
Fabric has two projects so far that imitate configuration manager require /
- Cuisine: https://github.com/sebastien/cuisine
- Fabtools https://github.com/ronnix/fabtools
Fabtools has worked like a charm for me - with the exception that requires
are nowhere near as resilient as salt states.
As an example, task a look at ``salt.states.git.latest`` handling of edge
https://github.com/saltstack/salt/blob/000de9597475afa59b0cd6c7c1f6c3dc1c66a0bc/salt/states/git.py#L39
https://github.com/ronnix/fabtools/blob/85f5828c84351a91c29bd2be1544d1922a36f436/fabtools/require/git.py#L51
https://github.com/saltstack/salt/blob/000de9597475afa59b0cd6c7c1f6c3dc1c66a0bc/tests/unit/states/git_test.py.
This is just one example of how salt maintains a superb depth / breadth of
remote system execution commands / recipes. Another way to put it into
http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.git.html is
to http://fabtools.readthedocs.org/en/latest/api/git.html
like http://docs.saltstack.com/en/latest/ref/states/all/salt.states.git.html
is to http://fabtools.readthedocs.org/en/latest/api/require/git.html
https://gist.github.com/tony/6d8d975c817d2e4d43dd
Without delving into the complexities of things technically - I want to get
- does you here have any sort of gap to fill with fabric where you would
# make sure vim pkg is installed and latest, if not, install/update
debpkg.latest('vim')
# make sure nginx an nginx site has config file as a template
# in /etc/nginx/sites.avail, linked, and service is, running
nginx.running(**settings)
- would anything inside of / salt.modules.* [1] salt.states.* [2] be
helpful to you if you could access it pythonically via fabric?
- Do you already use a tool like cuisine / fabric and wish you had access to
more commands/requires/cookbooks?
Thank you!
Tony Narlock
[1]
http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.git.html
[2] http://docs.saltstack.com/en/latest/ref/states/all/salt.states.git.html
_______________________________________________
Fab-user mailing list
https://lists.nongnu.org/mailman/listinfo/fab-user
--
Jeff Forcier
Unix sysadmin; Python/Ruby engineer
http://bitprophet.org
Loading...