fabric.api vs fabric.operations
Question: I am new to Python and Fabric, using Fabric==1.10.1 and Python 2.7.6. I don't
understand the difference between fabric.api and fabric.operations calls, both
seem to be doing the same thing. Which one should I use in fabfile? One thing
that I noticed is when I do `fabric.api.reboot()` then it does display
message,

    
    
    [127.0.0.1] out: Broadcast message from vagrant@localhost.localdomain
    [127.0.0.1] out:
    [127.0.0.1] out:    (/dev/pts/0) at 17:39 ...
    [127.0.0.1] out:
    [127.0.0.1] out:
    [127.0.0.1] out:
    [127.0.0.1] out:
    [127.0.0.1] out: The system is going down for reboot NOW!
    [127.0.0.1] out:
    

But when I use `fabric.operations.reboot()` it does not display any message.

Update: Actually seems `fabric.operations.reboot()` and `fabric.api.reboot()`
produce the message.


Answer: You can use either, but `fabric.api` is specifically the better option. This
is because it's where the other fabric modules are imported for simplicity's
sake. See here:

    
    
    $ cat fabric/api.py                                                                                                                                                                                                                                          (env: selenium)
    """
    Non-init module for doing convenient * imports from.
    
    Necessary because if we did this in __init__, one would be unable to import
    anything else inside the package -- like, say, the version number used in
    setup.py -- without triggering loads of most of the code. Which doesn't work so
    well when you're using setup.py to install e.g. ssh!
    """
    from fabric.context_managers import (cd, hide, settings, show, path, prefix,
        lcd, quiet, warn_only, remote_tunnel, shell_env)
    from fabric.decorators import (hosts, roles, runs_once, with_settings, task,
            serial, parallel)
    from fabric.operations import (require, prompt, put, get, run, sudo, local,
        reboot, open_shell)
    from fabric.state import env, output
    from fabric.utils import abort, warn, puts, fastprint
    from fabric.tasks import execute
    

`fabric.api` is importing `fabric.operations.reboot` for you already.

