我正在尝试根据目录布局结构来组织我的剧本.该文档似乎没有针对特定于主机的文件/模板的建议.
我有2个播放单个网站
这些文件位于我的结构的根目录中.配置手册仅包括其他角色
---
- hosts: example.com
roles:
- common
- application
- database
become: true
become_method: su
become_user: root
Run Code Online (Sandbox Code Playgroud)
部署手册不包含角色,但有自己的部分vars
和tasks
部分.我有一对夫妇template
和copy
任务,并想知道什么"最佳实践"是从哪里把这个目录结构中的这些主机特定的模板/文件.
现在我把它们放在./roles/example.com/templates/
和./roles/example.com/files/
,但是需要从我的部署手册中引用文件的完整路径,比如
- name: deployment | copy httpd config
template:
src: ./roles/example.com/templates/{{ host }}.conf.j2
# ...
Run Code Online (Sandbox Code Playgroud)
代替
- name: deployment | copy httpd config
template:
src: {{ host }}.conf.j2
# ...
Run Code Online (Sandbox Code Playgroud)
Pro*_*e85 39
面对同样的问题,最清洁的方式对我来说似乎是以下结构:
在顶级目录(与playbooks相同的级别)我有一个files
文件夹(如果我还需要一个templates
文件夹).在该files
文件夹中,每个主机都有一个文件夹,其中包含自己的文件,其中文件夹的名称与库存中的主机名相同.(见下面的结构:myhost1
myhost2
)
.
??? files
? ??? common
? ??? myhost1
? ??? myhost2
|
??? inventory
? ??? group_vars
? ??? host_vars
??? roles
? ??? first_role
? ??? second_role
??? my_playbook.yml
Run Code Online (Sandbox Code Playgroud)
现在,在任何角色中,您都可以相对访问具有文件模块的文件:
# ./roles/first_role/main.yml
- name: Copy any host based file
copy:
src={{ inventory_hostname }}/file1
dest= /tmp
Run Code Online (Sandbox Code Playgroud)
说明:
魔术变量inventory_hostname
是获取主机,请参见此处
任何file
模块(例如copy
)查找files
相应角色目录中的目录以及files
与调用playbook相同级别的目录.当然同样适用于模板(但是如果你有相同角色的不同模板,你应该重新考虑你的设计)
从语义上讲,特定于主机的文件不属于角色,而是属于某个外部(如host_vars
).