Vagrant->Ansible:找不到主机文件,前提是主机列表为空,没有匹配的主机
Vagrant->Ansible: Host file not found, provided hosts list is empty, no hosts matched
背景: 我经常在不同的笔记本电脑上工作 运行 不同的操作系统。这意味着我浪费了很多时间来重新安装相同的程序和应用程序。我决定尝试使用 Vagrant 和 Ansible 将其自动化。
问题: 因为我希望这个构建可以部署在一系列操作系统上,所以我希望 Vagrant 启动一个简单的 ubuntu/trusty64
框,而 Ansible 是在 Ubuntu 框上安装并执行,但是我在使用 Ansible 主机时遇到了问题。我已经阅读了 Ansible 文档并阅读了有关库存的信息,但是还没有发现它们是如何工作的或者应该在我的设置中定义的位置。作为参考,我是 Vagrant 和 Ansible 的新手,但有 VirtualBox 的经验。任何帮助将不胜感激
此处的堆栈跟踪:
流浪文件:
# -*- 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
首先,您的供应商名称存在语法错误 - 应该是 ansible_local
而不是 ansibleLocal
。
其次,您似乎只想 运行 针对单机的剧本,这是默认情况。定义如下:
machine.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
end # ansible
将 运行 playbook.yml
(存储在主机上的 Vagrant 项目目录中)使用 Vagrant box 上的 Ansible 可执行文件。您不需要为此指定任何其他选项,Vagrant 将自动提供指向本地计算机的清单文件作为目标。
旁注:
不要使用来自 APT 的 Ansible。它已经有几代人的历史了(v 1.7.2)。
改为配置 pip
并使用 PyPI 的当前官方版本。
背景: 我经常在不同的笔记本电脑上工作 运行 不同的操作系统。这意味着我浪费了很多时间来重新安装相同的程序和应用程序。我决定尝试使用 Vagrant 和 Ansible 将其自动化。
问题: 因为我希望这个构建可以部署在一系列操作系统上,所以我希望 Vagrant 启动一个简单的 ubuntu/trusty64
框,而 Ansible 是在 Ubuntu 框上安装并执行,但是我在使用 Ansible 主机时遇到了问题。我已经阅读了 Ansible 文档并阅读了有关库存的信息,但是还没有发现它们是如何工作的或者应该在我的设置中定义的位置。作为参考,我是 Vagrant 和 Ansible 的新手,但有 VirtualBox 的经验。任何帮助将不胜感激
此处的堆栈跟踪:
流浪文件:
# -*- 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
首先,您的供应商名称存在语法错误 - 应该是 ansible_local
而不是 ansibleLocal
。
其次,您似乎只想 运行 针对单机的剧本,这是默认情况。定义如下:
machine.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
end # ansible
将 运行 playbook.yml
(存储在主机上的 Vagrant 项目目录中)使用 Vagrant box 上的 Ansible 可执行文件。您不需要为此指定任何其他选项,Vagrant 将自动提供指向本地计算机的清单文件作为目标。
旁注:
不要使用来自 APT 的 Ansible。它已经有几代人的历史了(v 1.7.2)。
改为配置 pip
并使用 PyPI 的当前官方版本。