我有一大堆ansible galaxy角色和一堆自定义角色。
问题是我无法使用Vagrantfile :ansible
配置程序同时加载自定义角色和galaxy角色。
没有vagrant,这个命令很有效,因为我添加了ANSIBLE_ROLES_PATH
环境变量:
ANSIBLE_ROLES_PATH=./custom_roles ansible-playbook project.yml --inventory dev.ini -vvvv --ask-sudo-pass
我的流浪汉配置如下:
config.vm.provision :ansible do |ansible|
ansible.raw_arguments = ['--timeout=300']
ansible.playbook = "project.yml"
ansible.verbose = "vvv"
ansible.groups = {
"env-dev:children" => ["app-web", "app-db"],
"app-web" => ["my-app"],
"app-db" => ["my-app"],
}
end
我可以在./roles
内看到ansible自动加载角色,但由于版本控制,我无法将自定义角色添加到此目录(./roles
位于.gitignore
)
这是一个目录结构,可以更好地了解正在进行的操作:
- roles/
- postgresql/...
- php/...
- custom_roles/
- my-role-1/...
- my-role-1/...
- .gitignore <- ignore ./roles
- project.yml
- roles.yml
- dev.ini
- Vagrantfile
答案 0 :(得分:9)
所以我遇到了同样的问题,并通过设置ANSIBLE_ROLES_PATH
环境变量找到了解决方法。
在Vagrantfile
:
Vagrant.configure('2') do |config|
vagrant_root = File.dirname(__FILE__)
ENV['ANSIBLE_ROLES_PATH'] = "#{vagrant_root}/infrastructure/provisioning/ansible/roles:#{vagrant_root}/infrastructure/provisioning/ansible/galaxy-roles"
# ansible provisioning
config.vm.provision :ansible do |ansible|
ansible.playbook = 'infrastructure/provisioning/ansible/playbook.yml'
ansible.galaxy_role_file = 'infrastructure/provisioning/ansible/dependencies.yml'
ansible.galaxy_roles_path = 'infrastructure/provisioning/ansible/galaxy-roles'
end
end