Vagrant-> Ansible:未找到主机文件,前提是主机列表为空,没有主机匹配

时间:2016-09-20 12:46:00

标签: vagrant ansible virtualbox ansible-playbook vagrant-windows

背景:我经常最终处理在不同操作系统上运行的不同笔记本电脑。这意味着我浪费了大量时间重新安装相同的程序和应用程序。我决定使用Vagrant和Ansible尝试自动化。

问题:由于我希望这个版本可以在一系列操作系统上部署,我希望Vagrant启动一个简单的ubuntu/trusty64框,并安装和执行Ansible Ubuntu盒子,但是我遇到了Ansible主机的问题。我已经阅读了Ansible文档并阅读了有关库存的信息,但是我们还没有发现它们是如何工作的,或者在我的设置中应该如何定义。作为参考,我是Vagrant和Ansible的新手,但有VirtualBox的经验。任何帮助将不胜感激

此处的堆栈跟踪:stacktrace

Vagrantfile:

# -*- mode: ruby -*-"
# vi: set ft=ruby :

# vagrant plugin install vagrant-ansible-local

VAGRANTFILE_API_VERSION = "2"

$ansible_install_script = <<SCRIPT
if ! which ansible >/dev/null; then
  apt-get update -y
  apt-get install -y software-properties-common
  apt-add-repository -y ppa:ansible/ansible
  apt-get update -y
  apt-get install -y ansible
fi
SCRIPT

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "dev-machine", primary: true do |machine|
    machine.vm.box = "ubuntu/trusty64"
    machine.vm.hostname = 'local.dev-machine.box'
    machine.vm.network :private_network, :ip => '10.20.1.2'

    machine.vm.provider "virtualbox" do |vb|
      vb.gui = true
      vb.memory = "8192"
    end # vb

    machine.vm.provision "shell", inline: $ansible_install_script

    machine.vm.provision "ansibleLocal" do |ansible|
      ansible.guest_folder = "/vagrant-ansible"
      ansible.raw_arguments = "--inventory=/vagrant-ansbile/ansible_hosts"
      ansible.playbook = "playbook.yml"
      ansible.limit = "local.dev-machine.box"
    end # ansible
  end # machine
end # config

playbook.yml:

---
- hosts: all
  become: yes
  become_method: sudo
  tasks:
    - name: Check Ubuntu 14.04 running
      assert:
        that:
          - ansible_distribution == 'Ubuntu'
          - ansible_distribution_release == 'trusty'

    - name: update apt cache
      apt: update_cache=yes

    - name: install git
      apt: name=git-core state=latest

    - name: Install Python 3.4
      apt: name={{items}} state=latest
      with_items:
        - python
        - python-dev
        - python-virtualenv
        - python-setuptools
        - python-pip

1 个答案:

答案 0 :(得分:0)

首先,您在配置程序的名称中出现语法错误 - 它应该是ansible_local而不是ansibleLocal

其次,您似乎只想针对单个计算机运行该剧本,这是默认情况。以下定义:

machine.vm.provision "ansible_local" do |ansible|
  ansible.playbook = "playbook.yml"
end # ansible

将使用Vagrant框中的Ansible可执行文件运行playbook.yml(存储在主机上的Vagrant项目目录中)。您无需为此指定任何其他选项,Vagrant将自动提供指向本地计算机的库存文件作为目标。

作为旁注:

请勿使用APT的Ansible。这是几代人(v 1.7.2)。

改为配置pip并使用PyPI中的当前正式版。