我尝试使用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
按预期工作。我可能缺少什么想法?
答案 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而失败