5

我有以下流浪文件

Vagrant.configure(2) do |config|

  config.ssh.insert_key = true
  config.vm.define "dev" do |app|
    app.vm.provider "docker" do |d|
      d.image = "allansimon/allan-docker-dev-python"
      d.has_ssh = true
    end

    app.ssh.username = "vagrant"

    app.vm.provision "file", source: "~/.ssh/id_rsa", destination: ".ssh/id_rsa"


    app.vm.provision "permits-root-to-clone", type: "shell" do |s|
      s.inline = "cp /home/vagrant/.ssh/id_rsa /root/.ssh/id_rsa"
    end
    # if i put here a new shell provisionner , to the exact same repo than in my galaxy roles , it works

    app.vm.provision "ansible_local" do |ansible|
      ansible.galaxy_role_file = "build_scripts/ansible/requirements.yml"
      ansible.playbook = "build_scripts/ansible/bootstrap.yml"
    end
  end
end

参考一些私有的requirements.ymlansible 角色,它们是 git 克隆的

像这样

- src: git@gitlab.mydomain.com:ansible-roles/myrole.git
  scm: git
  version: 'master'
  name: myrole

我正在将我的桌面私钥注入 vagrant

  • 它在销售供应商中工作
  • 如果在我vagrant ssh进入机器后它可以工作

但它不适用于带有错误的 ansible_local 供应商

==> dev: Running provisioner: ansible_local...
    dev: Running ansible-galaxy...
 [WARNING]: - supervisord was NOT installed successfully: - command git clone
git@gitlab.mydomain.com:ansible-roles/myrole.git myrole failed in
directory /tmp/tmpQNgCTo (rc=128)
ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

有没有办法强制 vagrant 中的 ansible 使用特定的私钥?

4

1 回答 1

0

我认为这是因为 ssh 客户端要么无法找到您的私钥,要么无法在 vagrant 框中使用它(权限问题?)以用于对 git 存储库进行身份验证。您或许应该添加一个默认配置文件 ( ~/.ssh/config)。

这似乎得到了确认,因为当您使用 ssh 连接到 vagrant box 时,本地 ssh 客户端能够使用ssh-agent与桌面计算机的连接一起转发的密钥来获取密钥。

如果要手动调试

  • ssh 在 vagrant box
  • 杀死 ssh-agent ( ssh-agent -k)
  • 手动检索 git 存储库(git clone git@gitlab.mydomain.com:ansible-roles/myrole.git)或尝试直接 ssh(ssh git@gitlab.mydomain.com),这可能会有所帮助
  • 发现错误
于 2018-07-18T18:12:14.187 回答