当前位置:  开发笔记 > 编程语言 > 正文

如何使Fabric忽略env.hosts列表中的脱机主机?

如何解决《如何使Fabric忽略env.hosts列表中的脱机主机?》经验,为你挑选了2个好方法。

这与我之前的问题有关,但与之不同.

我有以下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")

输出是:

[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.

执行到达脱机服务器后,无论env.hosts列表中的其他服务器如何,它都会立即中止.

我使用了env设置"warn_only = True",但也许我使用它不正确.

如何修改此行为以便它只打印错误并继续执行?



1> jevonearth..:

从版本1.4开始,Fabric有一个--skip-bad-hosts可以从命令行设置的选项,或者通过在fab文件中设置变量.

env.skip_bad_hosts = True

该选项的文档位于:http: //docs.fabfile.org/en/latest/usage/fab.html#cmdoption--skip-bad-hosts

不要忘记也明确设置超时值.



2> Matthew Rank..:

根据warn_only上的Fabric文档,

env.warn_only"指定是否在run/ sudo/ local遇到错误条件时发出警告,而不是中止.

这对于服务器关闭的情况没有帮助,因为在执行run/ sudo/ 之前的SSH尝试期间发生了故障local.

一种解决方案是创建一个函数来检查每个服务器在执行任务之前是否已启动.下面是我使用的代码.

from __future__ import print_function
from fabric.api import run, sudo, local, env
import paramiko
import socket

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

env.hosts = [host1, offline_host2, host3]

def df_h():
    if _is_host_up(env.host, int(env.port)) is True:
        run("df -h | grep sda1")


def _is_host_up(host, port):
    # Set the timeout
    original_timeout = socket.getdefaulttimeout()
    new_timeout = 3
    socket.setdefaulttimeout(new_timeout)
    host_status = False
    try:
        transport = paramiko.Transport((host, port))
        host_status = True
    except:
        print('***Warning*** Host {host} on port {port} is down.'.format(
            host=host, port=port)
        )
    socket.setdefaulttimeout(original_timeout)
    return host_status

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有