使用vagrant配置更改ansible role_path

时间:2016-04-28 15:02:02

标签: vagrant ansible

我有一大堆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

1 个答案:

答案 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