Vagrant + Ansible + Python3

Vagrant + Ansible + Python3

我有一个 Vagrantfile 被简化为:

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.boot_timeout = 900

  config.vm.define 'srv' do |srv|
    srv.vm.provision 'ansible' do |ansible|
      ansible.compatibility_mode = '2.0'
      ansible.playbook = 'playbook.yml'
    end
  end
end

当我运行vagrant provision时,在Gathering Facts阶段,我得到/usr/bin/python: not found因为Ubuntu16.04默认只有python3未安装 Python 2.x python

我看到几篇关于此的旧帖子。似乎最近版本的 Ansible 支持使用 Python 3,但它必须通过主机文件中的 ansible_python_interpreter=/usr/bin/python3 或在 ansible 命令行上进行配置。有没有什么方法可以在我的 Vagrantfileplaybook.yml 文件中指定此选项?我目前没有使用主机文件,我没有通过命令行 运行ning ansible-playbook,我通过 Vagrant 集成 运行ning Ansible。

仅供参考,我使用的是 Ansible 2.4.1.0 和 Vagrant 2.0.1,它们是撰写本文时的最新版本。

据我所知,你可以在 Vagrant 文件中使用 extra_vars 确保把它放在 ansible 范围内。

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.boot_timeout = 900

  config.vm.define 'srv' do |srv|
    srv.vm.provision 'ansible' do |ansible|
      ansible.compatibility_mode = '2.0'
      ansible.playbook = 'playbook.yml'
      ansible.extra_vars = { ansible_python_interpreter:"/usr/bin/python2" }
    end
  end
end

在上面的块 extra_vars 中设置了 ansible_python_interpreter 或者您可以像这样使用 host_vars

ansible.host_vars = {
        "default" => {
            "ansible_python_interpreter" => "/usr/bin/python2.7"
        }
    }