我有一个可以通过互联网访问的前端服务器,以及一个只在前端和数据库服务器所在的本地网络中可用的数据库服务器。
我需要在数据库服务器上创建一个新的数据库,但由于数据库服务器在互联网上不可用,我需要"代理"通过前端服务器调用数据库服务器上的任务。
我该怎么做?
答案 0 :(得分:0)
我搜索了几个小时的答案,但当然我只是在stackoverflow上询问它后才发现它。
解决方案是将通过互联网提供的前端服务器设置为网关,或者使用命令行中的--gateway|-g
标志,或者设置env.gateway
。
我将它与env.roledefs
属性和fabric.api.roles
结合使用,以在数据库服务器上执行某些任务。
解决方案大致如下:
from fabric.api import task, env, roles
env.gateway = 'frontend.server'
env.hosts = ['frontend.server']
env.roledefs = {'db': ['database.server']}
@task
@roles('db')
def create_database():
""" Run on the database server. """
run(... mysql create database query stuff ...)
@task
def who_am_i():
""" Run on the frontend server. """
run('who am i')