我不知道我做错了什么。这似乎是一件应该有效的简单事情。我可以自己运行任务“test_task”并且它可以工作。如果我将它作为“deploy_test”函数的一部分运行,那么它会提示我: 找不到主机。请指定(单个)主机字符串以进行连接:
env.roledefs = {
'test_servers': ['testserver1.domain.com', 'testserver2.domain.com']
}
@roles("test_servers")
def test_task():
env.user = "test_user"
sudo("sh /usr/bin/something", user="other_user")
def deploy_test():
test_task()
答案 0 :(得分:3)
只有从fab
命令执行任务时,装饰器才有效:
fab test_task
如果您想使用任务deploy_test
,您有很多选择:
1.-执行test_task
作为任务,而不是作为功能。如果您要在其他主机列表上的deploy_test()
上执行其他任务,则可以使用此方法:
def deploy_test():
execute(test_task)
2.-将角色装饰器放在deploy_test()
:
@roles("test_servers")
def deploy_test():
test_task()
请记住,python函数与fabric任务不同。一个结构任务做一些事情,比如设置主机列表,用户,如果你调用python函数,这个状态就会保留。