web-dev-qa-db-ja.com

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がインストールされました。

私はこれについていくつかの古い投稿を見ます。 Python 3を使用したAnsibleサポートの最近のバージョンのようですが、hostsファイルまたはansibleコマンドラインでansible_python_interpreter=/usr/bin/python3を介して構成する必要があります。このオプションを指定する方法はありますかVagrantfileまたはplaybook.ymlファイルで?現在hostsファイルを使用しておらず、コマンドラインでansible-playbookを実行しておらず、VagrantでAnsibleを実行しています統合。

参考までに、この記事の執筆時点で最新バージョンであるAnsible2.4.1.0とVagrant2.0.1を使用しています。

12
clay

私の知る限り、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_varsansible_python_interpreterで設定されています。または、次のようにHost_varsを使用できます。

ansible.Host_vars = {
        "default" => {
            "ansible_python_interpreter" => "/usr/bin/python2.7"
        }
    }
23
julian salas