Ansible 我应该在哪里组织主机特定的文件/模板?
我正试图根据结构来组织我的剧本。该文档似乎没有针对特定于主机的文件/模板的建议 我有两个单一的网站播放Ansible 我应该在哪里组织主机特定的文件/模板?,ansible,Ansible,我正试图根据结构来组织我的剧本。该文档似乎没有针对特定于主机的文件/模板的建议 我有两个单一的网站播放 example.com-provision.yml example.com-deploy.yml 这些文件位于我的结构的根目录中。供应剧本只包括其他角色 --- - hosts: example.com roles: - common - application - database become: true become_method: su
- example.com-provision.yml
- example.com-deploy.yml
---
- hosts: example.com
roles:
- common
- application
- database
become: true
become_method: su
become_user: root
部署手册不包括角色,但有自己的vars
和tasks
部分。我有两个模板
和复制
任务,我想知道在这个目录结构中放置这些主机特定模板/文件的“最佳实践”是什么
现在我在/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
# ...
面对同样的问题,我认为最干净的方式是以下结构: 在顶层目录(与playbooks相同的级别)中,我有一个
文件
文件夹(如果我还需要模板
文件夹)。在files
文件夹中,每个主机都有一个文件夹,其中包含自己的文件,文件夹名称与资源清册中的主机名称相同。
(请参见下面的结构:myhost1
myhost2
)
现在,在任何角色中,您都可以使用文件模块访问文件:
# ./roles/first_role/main.yml
- name: Copy any host based file
copy:
src={{ inventory_hostname }}/file1
dest= /tmp
说明:
神奇变量inventory\u hostname
用于获取主机,请参阅
任何文件
模块(例如复制
)查找相应角色目录中的文件
目录,以及与调用剧本处于同一级别的文件
目录。当然,同样的情况也适用于模板(但是如果同一角色有不同的模板,则应重新考虑您的设计)
从语义上讲,特定于主机的文件不属于角色,而是位于角色之外的某个位置(如
host\u vars
) 这也取决于您如何处理动态库存。我认为您应该考虑的最小范围是角色或组与主机。如果您的模板对于主机类型不同,那么它们可能是不同的角色。这也取决于模板的内容。基于这个答案,我决定走一条稍微不同的路线。现在,我在配置项目结构的根目录下为每个主机创建了一个目录。我在每个主机目录中都有一个文件/
、组变量/
和模板/
目录,并使用相对的。/templates/…
样式路径引用它们-对于{inventory\u hostname}
方法同样简单。感谢您在正确的方向上所做的调整。遵循一个simlar路径,允许使用默认值过滤src,并且在playbook级别定义时(它也可以使用组/主机名),并遵循全局ansible/templates文件夹下的该路径
# ./roles/first_role/main.yml
- name: Copy any host based file
copy:
src={{ inventory_hostname }}/file1
dest= /tmp