有没有办法让它与 env.hosts 一起工作?而不是每当我有多个主机运行它时必须手动循环?
我正在尝试使用fabric api,而不必使用非常不方便且笨拙的fabric 命令行调用。我在一个模块/类中设置了 env.hosts 变量,然后调用另一个类实例方法来运行结构命令。在被调用的类实例中,我可以打印出 env.hosts 列表。然而,当我尝试运行命令时,它告诉我找不到主机。
如果我遍历 env.hosts 数组并为 env.hosts 数组中的每个主机手动设置 env.host 变量,我可以让运行命令工作。奇怪的是,我还在调用类中设置了 env.user 变量并且它被拾取。
例如这有效:
def upTest(self):
print('env.hosts = ' + str(env.hosts))
for host in env.hosts:
env.host_string = host
print('env.host_string = ' + env.host_string)
run("uptime")
输出:
env.hosts = ['ec2-....amazonaws.com']
env.host_string = ec2-....amazonaws.com
[ec2-....amazonaws.com] run: uptime
[ec2-....amazonaws.com] out: 18:21:15 up 2 days, 2:13, 1 user, load average: 0.00, 0.01, 0.05
[ec2-....amazonaws.com] out:
这不起作用...但是如果您从“fab”文件运行它确实有效...对我来说毫无意义。
def upTest(self):
print('env.hosts = ' + str(env.hosts))
run("uptime")
这是输出:
No hosts found. Please specify (single) host string for connection:
我确实尝试在方法上放置一个@task 装饰器(并删除'self'引用,因为装饰器不喜欢那样)。但无济于事。
有没有办法让它与 env.hosts 一起工作?而不是每当我有多个主机运行它时必须手动循环?