使用 Vagrant 和 Ansible 配置 ubuntu/xenial64



我正在尝试使用 Vagrant 创建一个 ubuntu/xenial64 vm,并使用 Ansible 对其进行配置。已安装的工具版本包括:

流浪者:2.0.0
可用:2.3.2.0
蟒蛇:2.7.10
虚拟盒子: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

playbooks/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按预期工作。任何想法我可能错过了什么?

首先,如果使用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 进行配置 - 对于此用例来说似乎完全没有必要 - 您可以从Vagrantfile中删除ansible.inventory_path
  • 在同一库存文件中,您指定了未在ubuntu/xenial64框中配置的用户vagrant
  • ansible.sudoVagrantfile中也没有必要
  • 这种方式运行 Ansible 可能会因为缺少 Python 2 而失败ubuntu/xenial64

最新更新