Playbook位于子目录中,而不是group_vars旁边

时间:2015-09-18 22:24:30

标签: ansible ansible-playbook

有没有人知道如何将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 /。

谢谢!

4 个答案:

答案 0 :(得分:3)

如果你不使用角色,Gregory Shulov的回答是有效的。但是,如果你使用角色,你的子文件夹剧本将无法正常引用它们。

如果您没有太多文件,我建议将它们分开"子文件夹"文件前缀为下划线。这帮助我将一些积木游戏与我期望人们运行的真实剧本分开。

答案 1 :(得分:3)

组/主机变量与您定义广告资源的位置相关。我开始时遇到了类似的问题。以下是我采取的步骤

  1. 将您的广告资源(静态或动态)移动到单独的目录中。即$ PROJECT_HOME / inventory / base_inventory。 Ansible将自动解析该目录中的所有文件并添加到库存中。这总是在以后被覆盖。例如ansible -i inventory / other_hosts

  2. 更新ansible.cfg以指向新的库存目录。即。 hostfile = $ PROJECT_HOME / inventory

  3. 将groups_vars和host_vars移动到新的inventory目录中。即$ PROJECT_HOME / inventory / group_vars

  4. 现在您不必担心相对路径此外,如果您想从源树中的任何位置使用角色更新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 ```