4

场景是我们的生产服务器位于私有子网中,它们前面有一个 NAT 实例,以允许通过 SSH 进行维护。目前我们通过 SSH 连接到 NAT 实例,然后通过 SSH 从那里连接到相应的服务器。

我想做的是使用 NAT 作为代理从我的机器上运行部署任务,而无需将代码库上传到 NAT 实例。Fabric 可以做到这一点,还是我最终会陷入痛苦的世界?

编辑 只是为了跟进这一点,正如@Morgan 建议的那样,网关选项确实可以解决这个问题。

为了完整起见,在我的 fabfile.py 中:

def setup_connections():
    """
    This should be called as the first task in all calls in order to setup the correct connections
    e.g. fab setup_connections task1 task2...
    """
    env.roledefs = {}

    env.gateway = 'ec2-user@X.X.X.X' # where all the magic happens

    tag_mgr = EC2TagManager(...)

    for role in ['web', 'worker']:
        env.roledefs[role] = ['ubuntu@%s' % ins for ins in
                              tag_mgr.get_instances(instance_attr='private_ip_address', role=role)]


    env.key_filename = '/path/to/server.pem'

@roles('web')
def test_uname_web():
    run('uname -a')

我现在可以运行fab setup_connections test_uname_web,我可以获取我的 Web 服务器的名称

4

1 回答 1

1

因此,如果您有较新版本的 Fabric(1.5+),您可以尝试使用网关选项。我自己从未使用过它,但似乎是您想要的。

此处的文档:

此外,如果您遇到任何问题,我们所有人都倾向于在 irc 中闲置。

于 2014-01-14T04:04:25.740 回答