使用Vagrant provision更改Ansible角色路径

7
我有一堆ansible galaxy角色和一堆自定义角色。
问题是我无法使用Vagrantfile :ansible provisionner同时加载自定义角色和galaxy角色。
没有vagrant的情况下,这个命令可以正常工作,因为我添加了ANSIBLE_ROLES_PATH环境变量:
 ANSIBLE_ROLES_PATH=./custom_roles ansible-playbook project.yml --inventory dev.ini -vvvv --ask-sudo-pass

我的 Vagrant 配置如下:

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

我可以看到Ansible自动加载./roles中的角色,但由于版本控制 (./roles在我的.gitignore文件中),我无法向该目录添加自定义角色。
下面是目录结构,以便更好地了解情况:
 - roles/
     - postgresql/...
     - php/...
 - custom_roles/
     - my-role-1/...
     - my-role-1/...
 - .gitignore         <- ignore ./roles
 - project.yml
 - roles.yml
 - dev.ini
 - Vagrantfile

你尝试过将所有角色放置在单个 ANSIBLE_ROLES_PATH 目录中吗? - Wtower
1
是的,那个方法可以用,但不太实际。我需要在.gitignore文件中忽略ansible galaxy角色,并提交我的自定义角色。我不应该在忽略文件中单独列出每个角色。 - Clément Prévost
我理解,不幸的是这就是我正在处理它的方式,我很想看到其他选项。 - Wtower
1个回答

10

所以我遇到了同样的问题,并通过设置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

如果您使用修改后(或原始)的角色,则只需要 ansible.galaxy_roles_path!干杯 - binarytrails

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接