如何在主机上通过代理主机直接通过互联网执行结构任务?

时间:2015-05-06 08:17:13

标签: python fabric

我有一个可以通过互联网访问的前端服务器,以及一个只在前端和数据库服务器所在的本地网络中可用的数据库服务器。

我需要在数据库服务器上创建一个新的数据库,但由于数据库服务器在互联网上不可用,我需要"代理"通过前端服务器调用数据库服务器上的任务。

我该怎么做?

1 个答案:

答案 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')