Развертывание приложения Fabric на прокси-сервер

Я хотел бы развернуть приложение с использованием Fabric на прокси-сервер. Обычно мы используем ssh на прокси-сервере, а затем ssh на производственном сервере, однако, кажется, что матрица не допускает этого напрямую.

Примером установки может быть локальный -> сервер A (прокси) -> сервер B (сервер приложений)

Пункт назначения - сервер B.

Я попытался использовать потрясающий файл ниже, чтобы проверить.

import os.path
from fabric.api import env, run, sudo, cd, local, put, settings
from fabric.contrib.files import sed, exists
from datetime import datetime

def proxy():
    env.user = "root"
    env.hosts = ['proxy']
    env.key_filename = "/home/root/monitorserver.pem"

def production():
    """Defines production environment ."""
    env.is_debuggable = False
    env.user = "root"
    env.hosts = ['appserver']
    env.key_filename = "/home/root/appserver.pem"

def createfile():
    """Start Excecute test commands"""
    sudo("touch /tmp/test_%s" % datetime.now().strftime('%H:%M:%S'))

но работает команды

fab proxy createfile production createfile

только кажется, что работает как

fab proxy createfile
fab production createfile

Есть ли способ, которым я могу запустить фабрику локально и развернуть на сервере B с прокси на месте?

1 ответ

Решение

Я думаю, что это можно сделать, создав 2 fab-файла: 1 на локальном и 1 на прокси-сервере.

from fabric.api import env, run, sudo, cd
from datetime import datetime

def proxy():
    env.user = "root"
    env.hosts = ['proxy']
    env.key_filename = "/home/root/monitorserver.pem"
    with cd('/home/root/'):
        createfile()
        run("fab production")

def production():
    """Defines production environment ."""
    env.is_debuggable = False
    env.user = "root"
    env.hosts = ['appserver']
    env.key_filename = "/home/root/appserver.pem"
    createfile()

def createfile():
    """Start Excecute test commands"""
    sudo("touch /tmp/test_%s" % datetime.now().strftime('%H:%M:%S'))

Бежать fab proxy,

(Не проверял код, но что-то вроде этого должно работать.)

Другие вопросы по тегам