2017-02-12 80 views
1

Vagrantfile样子:使用Ansible主机引发`--limit`不匹配任何主机

Vagrant.configure("2") do |config| 
    config.vm.box = "vag-box" 
    config.vm.box_url = "boxes/base.box" 

    config.vm.network :private_network, ip: "192.168.100.100" 

    config.vm.provision :setup, type: :ansible_local do |ansible| 
    ansible.playbook = "playbook.yml" 
    ansible.provisioning_path = "/vagrant" 
    ansible.inventory_path = "/vagrant/hosts" 
    end 
end 

我的剧本文件看起来像:

--- 
- name: Setup system 
    hosts: localhost 
    become: true 
    become_user: root 
    roles: 
    - { role: role1 } 
    - { role: role2 } 

我的hosts文件看起来像:

[localhost] 
localhost # 192.168.100.100 

在执行过程中,出现以下错误:

ERROR! Specified --limit does not match any hosts

+1

我无法获得与您相同的错误,但基本上不需要您定义的表单中的主机文件。您可以在不定义组“localhost”的情况下针对“hosts:localhost”运行剧本。注释掉'ansible.inventory_path'并检查。 – techraf

回答

1

第一:“本地主机”是一个名称,按照约定分配给127.0.0.1地址。这指的是本地机器的回送地址。根据您的hosts文件中的评论,我不认为这是您尝试使用它的原因。

第二:Vagrant中的Ansible供应商通常会创建一个自定义库存文件,其中包含用于供应Vagrant框的所需内容。例如:

# Generated by Vagrant 

myvagrantbox ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 ansible_ssh_user='vagrant' ansible_ssh_private_key_file='/home/sage/ansible/vagrant/myvagrantbox/.vagrant/machines/myvagrantbox/virtualbox/private_key' 

当您重写库存文件时,您需要为您的流浪盒的主机名指定一个类似的行。

如果您从配置中忽略ansible.inventory_path = "/vagrant/hosts"行,它应该JustWork(tm)。您也可能希望在您的配置中指定config.vm.hostname = "myvagrantboxname",以便知道将使用哪个主机名。

有关更多详细信息,请参阅Using Vagrant and AnsibleVagrant -- Ansible Provisioner文档。

+0

我想你应该先阅读文档。与https://www.vagrantup.com/docs/provisioning/ansible_local.html相关的问题 – techraf