gpt4 book ai didi

python - 如何在 Vagrant 上运行 Fabric 命令

转载 作者:行者123 更新时间:2023-11-28 18:38:23 25 4
gpt4 key购买 nike

你如何使用FabricVagrant-managed 上编写命令脚本虚拟机?

我认为这就像 this example 一样简单,但我无法让它工作。

Vagrant 本身运行良好。我可以运行:

vagrant init
vagrant up --provider=libvirt
vagrant ssh

然后通过 ssh 连接就好了。但是,使用 Fabric 示例,如果我尝试运行:

fab vagrant uname

连接失败错误:

[127.0.0.1:2222] Executing task 'test_dev_env'
[127.0.0.1:2222] run: uname -a

Fatal error: Low level socket error connecting to host 127.0.0.1 on port 2222: Connection refused (tried 1 time)

Underlying exception:
Connection refused

Aborting.

是什么导致了这个错误?据我所知,vagrant ssh 应该运行与 Fabric 相同的 ssh 命令。不过果然,即使我手动运行ssh命令:

ssh -i /myproject/.vagrant/machines/default/libvirt/private_key -p 2222 vagrant@127.0.0.1

我也得到了错误:

ssh: connect to host 127.0.0.1 port 2222: Connection refused

我做错了什么?

最佳答案

显然,vagrant 实际上并没有设置端口转发器,因此连接到 VM 的唯一方法是从 vagrant ssh-config 获取它的 IP,然后使用它进行连接。所以正确的 vagrant Fabric 任务看起来像:

@task
def vagrant():
result = local('vagrant ssh-config', capture=True)

hostname = re.findall(r'HostName\s+([^\n]+)', result)[0]
port = re.findall(r'Port\s+([^\n]+)', result)[0]
env.hosts = ['%s:%s' % (hostname, port)]

env.user = re.findall(r'User\s+([^\n]+)', result)[0]
env.key_filename = re.findall(r'IdentityFile\s+([^\n]+)', result)[0]

关于python - 如何在 Vagrant 上运行 Fabric 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30085000/

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