将Fabric的env.host字符串作为变量传递

0 投票
1 回答
1247 浏览
提问于 2025-04-17 04:16

我想要通过编程的方式创建一个新的云服务器,然后把这个新服务器的地址 root@1.2.3.4 传给 Fabric 的其他命令,以便运行其他设置脚本。

我可以创建服务器,获取相关的变量,并且用 local('ssh root@1.2.3.4') 命令把新 IP 加入我的已知主机文件。不过,不管我怎么尝试把字符串 'root@1.2.3.4' 传给 Fabric,它总是给我提示:

没有找到主机。请指定一个(单个)主机字符串以进行连接:

我尝试了各种字符串处理的方法,比如:

env.host = '%s' % host

env.hosts = [host]

env.host = str(host)

但是,Fabric总是给我“没有找到主机”的提示。如果我直接复制粘贴 'print host' 的结果,那就没问题。虽然这不是个大问题,但真的影响了我想要实现的自动部署流程。

有没有人成功地用变量把 env.host/hosts 的声明传给 Fabric?

1 个回答

0

“没有找到主机”的错误有点让人误解。这个错误会在你放入 env.hosts 的内容格式不正确时出现。env.hosts 应该像下面这些例子一样:

env.hosts = ['1.2.3.4']
env.hosts = ['1.2.3.4', 'hostname', '4.5.6.7']

不应该包含用户信息(比如 root@1.2.3.4),这些信息应该放在 env.user 中。

你可以试试这样的写法:

h = '1.2.3.4'
env.hosts = [h]

撰写回答