使用Vagrant和Ansible配置ubuntu / xenial64

时间:2017-10-21 12:01:03

标签: vagrant ansible

我尝试使用Vagrant创建ubuntu/xenial64 vm并使用Ansible进行配置。安装的工具版本是:

Vagrant: 2.0.0
Ansible: 2.3.2.0
Python: 2.7.10
Virtualbox: 5.1.30

这些是我运行vagrant up的目录的内容:

├── Vagrantfile
└── playbooks
    ├── inventory
    ├── main.yml
    └── vars.yml

这些是Vagrantfile

的内容
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/xenial64"
  config.ssh.insert_key = true

  config.vm.provider "virtualbox" do |v|
    v.name = "ubuntu"
    v.memory = 1024
    v.cpus = 2
  end

  config.vm.hostname = "ubuntu"
  config.vm.network :private_network, ip: "192.168.33.7"

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbooks/main.yml"
    ansible.sudo = true
    ansible.verbose = true
    ansible.inventory_path = "playbooks/inventory"
    ansible.compatibility_mode = "2.0"
  end

end

playbooks/main.yml

---
- hosts: ubuntu
  become: yes

  vars_files:
    - vars.yml

  roles:
    - geerlingguy.docker

playbooks/inventory

[ubuntu]
192.168.33.7

[ubuntu:vars]
ansible_ssh_user=vagrant
ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key

剧本/ vars.yml:

docker_edition: 'ce'
docker_package: "docker-{{ docker_edition }}"
docker_package_state: present

当我运行vagrant up时,输出为:

==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 5.0.40
    default: VirtualBox Version: 5.1
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/danilo/tutorials/ansible ubuntu
==> default: Running provisioner: ansible...
    default: Running ansible-playbook...
PYTHONUNBUFFERED=1 ANSIBLE_FORCE_COLOR=true ANSIBLE_HOST_KEY_CHECKING=false ANSIBLE_SSH_ARGS='-o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -o IdentityFile=/Users/danilo/tutorials/ansible ubuntu/.vagrant/machines/default/virtualbox/private_key -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook --connection=ssh --timeout=30 --extra-vars=ansible_user\=\'ubuntu\' --limit="default" --inventory-file=playbooks/inventory --become -v playbooks/main.yml
No config file found; using defaults
ERROR! Specified --limit does not match any hosts
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

但是,vagrant ssh按预期工作。我可能缺少什么想法?

1 个答案:

答案 0 :(得分:1)

首先,如果您使用hosts: ubuntu,则必须定义命名机器:

config.vm.define "ubuntu" do |ubuntu|
  ubuntu.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbooks/main.yml"
    ansible.sudo = true
    ansible.verbose = true
    ansible.inventory_path = "playbooks/inventory"
    ansible.compatibility_mode = "2.0"
  end
end

否则在剧中改为hosts: default

但是......

  • 我不知道您为什么尝试通过192.168.33.7进行配置 - 这个用例似乎完全没必要 - 您可以从ansible.inventory_path
  • 删除Vagrantfile
  • 在同一个广告资源文件中指定了vagrant
  • 上未配置的用户ubuntu/xenial64 {li> ansible.sudo在[{1}} 中也不是必需的
  • Vagrantfile方式运行Ansible可能因缺少Python 2而失败