How to make Fabric ignore offline hosts in the env.hosts list?

Wang Dingwei picture Wang Dingwei · Dec 24, 2009 · Viewed 9k times · Source

This is related to my previous question, but a different one.

I have the following fabfile:

from fabric.api import *

host1 = '192.168.200.181'
offline_host2 = '192.168.200.199'
host3 = '192.168.200.183'

env.hosts = [host1, offline_host2, host3]
env.warn_only = True

def df_h():
    with settings(warn_only=True):
        run("df -h | grep sda3")

And the output is:

[192.168.200.199] run: df -h | grep sda3

Fatal error: Low level socket error connecting to host 192.168.200.199: No route to host

Aborting.

After the execution hits the offline server, it aborts immediately, regardless of the other servers in the env.hosts list.

I have used the env setting "warn_only=True", but maybe I'm using it improperly.

How can I modify this behavior so that it will only prints the error and continue executing?

Answer

Jev Björsell picture Jev Björsell · Apr 17, 2014

As of version 1.4 Fabric has a --skip-bad-hosts option that can be set from the command line, or by setting the variable in your fab file.

env.skip_bad_hosts = True

Documentation for the option is here: http://docs.fabfile.org/en/latest/usage/fab.html#cmdoption--skip-bad-hosts

Don't forget to explicitly set the timeout value also.