【问题标题】:ansible: Best Practice for host specific playbooksansible:主机特定剧本的最佳实践
【发布时间】: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


【解决方案1】:

我们所做的是创建具有剧本的角色,然后将这些角色分配给主机或主机组。基于此,我们的目录布局类似于:

.
├── group_vars
├── hosts
├── host_vars
│   └── host-01.yml
├── roles
│   └── webservers
│       ├── files
│       ├── tasks
│       │   └── main.yml
│       └── templates
└── webservers.yml

hosts 文件是清单文件,您将放置所有主机和组,webservers.yml 是具有以下内容的剧本:

--- 
- hosts: host-01
  become: true
  user: ubuntu
  roles:
    - webservers

如果您必须进行任何特定于发行版的安排,您应该在角色剧本中进行。如果可能,角色之外的剧本应该仅用于将组或主机连接到角色,或者非常琐碎的任务。

最好的问候!

【讨论】:

  • 嗯,所以您将特定于主机的任务放在一个剧本文件中,对吧?
  • 是的,但是有很多方法可以做到这一点,而且 Ansible 没有“最佳实践”,真的(AFAIK)。有些人使用条件来控制主机细节(when 块,就像你提到的 - 我不太喜欢这种方法,因为在漫长的道路上很难维护它),其他人用 hosts: all 编写剧本,然后使用 @987654327 @(在 CI/CD 实现中很常见),其他人仅为这些主机编写特定的剧本......
  • 根据我的经验,如果有一个经验法则,那就是最大限度地利用角色,让你的角色尽可能地可重用,尽可能减少单一剧本的使用可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2017-04-20
  • 2013-12-03
  • 2015-10-24
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
相关资源
最近更新 更多