如何在Django中调用远程Fabric方法
我需要通过Django在远程机器上调用一个fabric方法。我的意思是,当用户发送一个特定的请求时,获取远程机器的主机名。就像这样:
def get_hostname(request):
hostname = os.system('fab remote_server hostname')
return hostname
3 个回答
0
在1.3版本之后,看看 fabric.tasks.execute()
这个功能。
1
如果你的服务器上有使用fabric所需的组件,你应该可以直接导入你的fabfile,然后直接调用里面的函数。
(这只是我随便想出来的一些代码,具体情况可能会有所不同)
import fabfile as f #Your fabfile must be somewhere it can be imported
def get_hostname(request):
hostname = f.remote_server(hostname)
return hostname
你也可以直接从django中导入并使用fabric。
9
为了获得更好的控制和灵活性,你应该把fabric当作一个库来使用。可以查看这个链接了解更多信息:http://docs.fabfile.org/en/1.3.3/usage/library.html
import fabric.api as fab
from fabric.network import disconnect_all
from contextlib import contextmanager
@context_manager
def ssh(settings):
with settings:
try:
yield
finally:
disconnect_all()
def hostname(request, host='somehost', user='someuser', pw='secret'):
with ssh(fab.settings(host_string=host, user=user, password=pw)):
return fab.run('hostname')