【发布时间】:2021-04-10 22:41:27
【问题描述】:
我正在尝试清理我的 ansible 基础架构,并希望尽可能地坚持使用 best practices。
我的问题是我有一些特定于主机的任务,我自然希望尽可能合理地映射到逻辑中。
如果我想同时拥有“最佳实践”和特定于主机的任务,我最终会得到以下简化的文件结构:
├── dbservers.yml
├── generic.yml
├── group_templates/
│ └── webservers/
├── group_vars/
│ └── webservers.yml
├── host_files/
│ └── d-ws323/
├── host_tasks/
│ └── d-ws323.yml
├── host_vars/
│ └── d-ws323/
├── production.ini
├── roles/
├── secrets.txt
├── site.yml
└── webservers.yml
我的方法如下所示:
site.yml 是大师级剧本:
---
# file: site.yml
- import_playbook: webservers.yml
- import_playbook: dbservers.yml
- import_playbook: generic.yml
还有generic.yml:
---
- hosts: all
become: yes
roles:
- generic
tasks:
- local_action: stat path=host_tasks/{{ inventory_hostname }}.yml
register: host_file
become: no
- include: host_playbooks/{{ inventory_hostname }}.yml
when: host_file.stat.exists
有意义吗?
【问题讨论】:
-
你没有使用角色吗?
-
是的,这些都放在
roles下。当然,我可以将特定于主机的任务放在那里:when: inventory_hostname == "www1",但这“感觉”更复杂。还是我错过了什么? -
我想我没听懂。通常我们所做的是通过剧本为主机或组分配一个(或多个角色)。像这样的东西:``` --- - 主机:我的主机成为:真正的用户:stefano 角色:- webservers - dbservers ```
-
嗯,我用我当前的解决方案更新了我的问题......
-
知道了!我将基于它发布一个可行的解决方案。
标签: ansible