有没有人知道如何将Playbooks放入文件夹,但共享相同的角色,group_vars和其他通常位于根目录的东西?
这是我想要的:
root_dir: - group_vars - roles - inventory - playbooks - my_playbook.yml - site.yml - deploy.yml
我们的根目录现在变得越来越大了,我想把一些剧本分成他们自己的文件夹(显示为剧本/上面)。当一个目录(例如,playbooks /)与root目录相比时,一个相同的小剧本无法运行,因为它不会从group_vars中获取内容。
我可以部分解决这个问题,并在我的剧本中运行一本剧本/ 目录:
- hosts: host_group sudo: true gather_facts: false vars_files: - ../group_vars/all/main.yml
这将获取main.yml中定义的变量。但是,我不清楚这是否会添加group_vars /中定义的组变量,而不是明确指定的../ group_vars /。
谢谢!
答案 0 :(得分:3)
如果您没有太多文件,我建议将它们分开"子文件夹"文件前缀为下划线。这帮助我将一些积木游戏与我期望人们运行的真实剧本分开。
答案 1 :(得分:3)
组/主机变量与您定义广告资源的位置相关。我开始时遇到了类似的问题。以下是我采取的步骤
将您的广告资源(静态或动态)移动到单独的目录中。即$ PROJECT_HOME / inventory / base_inventory。 Ansible将自动解析该目录中的所有文件并添加到库存中。这总是在以后被覆盖。例如ansible -i inventory / other_hosts
更新ansible.cfg以指向新的库存目录。即。 hostfile = $ PROJECT_HOME / inventory
将groups_vars和host_vars移动到新的inventory目录中。即$ PROJECT_HOME / inventory / group_vars
现在您不必担心相对路径此外,如果您想从源树中的任何位置使用角色更新ansible.cfg并将roles_path设置为基本项目路径。即roles_path = roles:$ PROJECT_HOME / roles
答案 2 :(得分:0)
我遇到了同样的问题。
ln -s ../roles playbooks/roles
只需将符号链接的角色/ vars文件夹解决了。
# site.yml
---
- include: "playbooks/appserver.yml"
- include: "playbooks/gitlab-runner.yml"
或直接从剧本目录中包含它们
# playbooks/site.yml
---
- include: "appserver.yml"
- include: "gitlab-runner.yml"
答案 3 :(得分:0)
您可以在ansible.cfg中定义它,这将解决您的问题
示例:
```
#用于搜索角色的其他路径,以冒号分隔roles_path = / etc / ansible / roles ```