gpt4 book ai didi

ansible - 我应该在哪里组织特定于主机的文件/模板?

转载 作者:行者123 更新时间:2023-12-02 08:39:30 25 4
gpt4 key购买 nike

我正在尝试根据 Directory Layout 组织我的剧本结构。该文档似乎没有针对特定于主机的文件/模板的建议。

我在一个网站上玩了 2 次

  • example.com-provision.yml
  • example.com-deploy.yml

这些文件位于我的结构的根目录中。配置剧本仅包含其他角色

---
- hosts: example.com

roles:
- common
- application
- database

become: true
become_method: su
become_user: root

部署手册不包含角色,但有自己的 varstasks部分。我有一对templatecopy任务,并且想知道将这些特定于主机的模板/文件放置在此目录结构中的位置的“最佳实践”是什么。

现在我的地址是 ./roles/example.com/templates/./roles/example.com/files/ ,但需要引用我的部署手册中的文件及其完整路径,例如

- name: deployment | copy httpd config
template:
src: ./roles/example.com/templates/{{ host }}.conf.j2
# ...

而不是

- name: deployment | copy httpd config
template:
src: {{ host }}.conf.j2
# ...

最佳答案

面对同样的问题,最干净的方法对我来说似乎是以下结构:

在顶级目录(与剧本同一级别)中,我有一个 files 文件夹(如果我还需要一个 templates 文件夹)。在 files 文件夹中,每个主机都有一个文件夹,其中包含自己的文件,其中文件夹的名称与 list 中的主机名称相同。(参见下面的结构:myhost1 myhost2)

.
├── files
│   ├── common
│   ├── myhost1
│ ├── myhost2
|
├── inventory
│   ├── group_vars
│   └── host_vars
├── roles
│   ├── first_role
│   └── second_role
└── my_playbook.yml

现在,在任何角色中,您都可以相对地使用文件模块访问文件:

# ./roles/first_role/main.yml

- name: Copy any host based file
copy:
src: "{{ inventory_hostname }}/file1"
dest: /tmp

说明:

神奇变量inventory_hostname是获取主机,参见here任何file模块(例如copy)在相应的角色目录中查找files目录与调用 playbook 位于同一级别的 files 目录。当然,这同样适用于模板(但如果您对同一角色有不同的模板,您应该重新考虑您的设计)

从语义上讲,主机特定文件不属于角色,而是属于角色之外的某个位置(例如 host_vars)。

关于ansible - 我应该在哪里组织特定于主机的文件/模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32830428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com