场景是我们的生产服务器位于私有子网中,其前面有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
,我可以获得我的网络服务器的uname
答案 0 :(得分:1)
因此,如果您有更新版本的Fabric(1.5+),您可以尝试使用网关选项。我自己从未使用它,但看起来就像你想要的那样。
此处的文档:
此外,如果您遇到任何问题,我们所有人都倾向于在irc中闲置。