如何让Fabric忽略env.hosts列表中的离线主机?
这与我的上一个问题,但又是另一回事。
我有以下 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 列表中的其他服务器如何。
我已经使用了环境设置“warn_only=True”,但也许我使用不当。
如何修改此行为,使其仅打印错误并继续执行?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
从版本 1.4 开始,Fabric 有一个
--skip-bad-hosts
选项,可以从命令行设置,或者通过在 fab 文件中设置变量来设置。该选项的文档位于此处:
http://docs.fabfile.org/en/latest/usage /fab.html#cmdoption--skip-bad-hosts
不要忘记显式设置超时值。
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.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.
根据 有关 warn_only 的 Fabric 文档,
这对于服务器关闭的情况没有帮助,因为在执行
run
/sudo
/local
一种解决方案是创建一个函数来在执行任务之前检查每个服务器是否已启动。下面是我使用的代码
According to the Fabric documentation on warn_only,
This will not help in the case of a server being down, since the failure occurs during the SSH attempt before executing
run
/sudo
/local
.One solution would be to create a function to check if each server is up prior to executing your tasks. Below is the code that I used.
你没有使用不当。您甚至可以只在命令行上提供
--warn-only=true
。 这是开发团队建议的记录方法。You're not using it improperly. You can even just provide
--warn-only=true
on the command line. It's the documented method suggested by the development team.根据 Matthew 的回答,我想出了一个装饰器来实现这一点:
当您有多个主机和角色时,它特别有用。
Based on Matthew's answer, I came up with a decorator that accomplishes just that:
It is especially useful when you have multiple hosts and roles.