gpt4 book ai didi

python - 如何让 Fabric 根据当前所在的网络使用不同的角色?

转载 作者:行者123 更新时间:2023-11-28 18:51:01 26 4
gpt4 key购买 nike

我想让一个任务使用不同的主机集(角色),这取决于我当前所在的网络。如果我在我的服务器的同一个网络中,我不需要通过网关.

这是我的 fabfile.py 中的一个片段:

env.use_ssh_config = True
env.roledefs = {
'rack_machines': ['rack4', 'rack5', 'rack6', 'rack7'],
'external_rack_machines': ['erack4', 'erack5', 'erack6', 'erack7']
}

@roles('rack_machines')
def host_type():
run('uname -s')

所以,对于我的任务 host_type() , 我希望它的角色是 rack_machines如果我与 rack4 在同一个网络中, rack5等。否则,我希望它的角色是 external_rack_machines ,因此通过网关访问这些相同的机器。

也许有一种方法可以单独使用 ssh 配置来做到这一点。这是我的 ssh_config 的片段文件以及:

Host erack4
HostName company-gw.foo.bar.com
Port 2261
User my_user

Host rack4
HostName 10.43.21.61
Port 22
User my_user

最佳答案

导入模块后会考虑角色定义。所以你可以在你的 fabfile 中放置一些代码,它在导入时执行,检测网络并设置适当的 roledefs

实现目标的第二种方法是使用“flag-task”。这是一个除了设置适当的角色定义外什么都不做的任务。即:

hosts = {
"rack": ["rack1", "rack2"],
"external_rack": ["external_rack1", "external_rack2"]
}

env.roledefs = {"rack_machines": hosts["rack"]}

@task
def set_hosts(hostset="rack"):
if hostset in hosts:
env.roledefs["rack_machines"] = hosts[hostset]
else:
print "Invalid hostset"

@roles("rack_machines")
def business():
pass

并以这种方式调用:fab set_hosts:external_rack business

关于python - 如何让 Fabric 根据当前所在的网络使用不同的角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com