我最近一直在为vagrant + virtualbox + ansible工作。我现在有一些问题我想重用配方代码,不仅可以配置本地,还可以配置登台和生产环境。我的剧本是:
- hosts: all
sudo: true
pre_tasks:
roles:
- common
- webserver
- database
- php
post_tasks:
和我的Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/precise64"
config.vm.network "private_network", ip: "10.10.10.101"
config.vm.synced_folder ".", "/vagrant", type: "nfs"
config.vm.provider "virtualbox" do |vb|
vb.gui = true
vb.customize ["modifyvm", :id, "--memory", "512"]
vb.name = "testing"
end
config.vm.provision :ansible do |ansible|
ansible.playbook = "playbook.yml"
ansible.limit = "local"
ansible.inventory_path = "./inventory"
end
end
那会发生什么?如果我跑
$ vagrant up
一切正常但如果我跑
$ ansible-playbook -i inventory playbook.yml --limit production
(生产是库存中具有远程ip on ovh的组)
它失败了,因为剧本需要
user:root
参数,但如果我将此参数放在playbook上,那么当我运行
时它会失败$ vagrant provision
我知道为本地和远程制作一些yml会完成这个问题,但我更喜欢更优雅的解决方案。
有什么想法吗?
感谢
答案 0 :(得分:2)
您可以使用group vars自定义清单中每个主机的ssh用户:
in group_vars / local:
ansible_ssh_user: vagrant
in group_vars / production:
ansible_ssh_user: root
还考虑使用单独的库存文件进行流浪和生产。它不允许你同时在两个环境中运行东西,但这不是一个常见的用例,而且它更安全。
答案 1 :(得分:0)
查看offical document: Using Vagrant and Ansible
尝试使用-u root
$ ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=~/.vagrant.d/insecure_private_key -u vagrant playbook.yml