Ansible文件夹结构

格兰诺拉伯男孩

我来自使用Vagrant的Puppet背景,在理解Ansible及其差异时遇到了一些麻烦。

我的人偶结构看起来像这样:

puppet
├── servers
│   └── Backend
│       └── Vagrantfile
└── src
    ├── manifests
    │   └── nodes
    │       └── development
    │           └── backend.pp
    └── modules
        └── mysql

设置很简单,将其安装到Vagrantfile,然后使用Vagrant启动虚拟机。

现在,这是我对Ansible文件夹结构的初稿:

ansible
├── servers
│   └── Backend
│       ├── Vagrantfile
│       └── ansible.cfg
└── sources
    ├── backend.yml
    ├── site.yml
    ├── inventories
    │   └── development
    │       ├── group_vars
    │       │   ├── all
    │       │   └── backend
    │       └── hosts
    ├── playbooks
    └── roles
        └── mysql

现在提出以下问题:

  • 这是Ansible的最佳做法还是太接近Puppet?

  • 将backend.yml视为Puppet节点清单是正确的吗?

  • 我应该在哪里放site.ymlbackend.yml这个示例在主目录中有它们,而在这里它在“ plays”目录中。有什么不同?

  • 我认为我的group_varsgroup_vars/backend使用不正确,如何访问它们?

资料来源:

http://leucos.github.io/ansible-files-layout/

https://github.com/ansible/ansible-examples

https://github.com/enginyoyen/ansible-best-practises

纳尔逊·G。

就我而言,我根据环境复杂性使用以下结构(请检查directory-layout):

简单的环境

当存在一种环境或在预配模式下使用剧本时,我使用此结构

ansible
├── inventory
│   ├── hosts
│   └── group_vars
│       └── my_group.yml
├── roles
│   └── mysql
├── ansible.cfg
├── README.md
├── playbook1.yml
└── playbook2.yml

,为了避免使用命令设置库存路径ansible.cfg,我使用了变量inventory = ./inventory[default]ansible-*

中/复杂环境

当有多个环境时,我会使用这种结构

ansible
├── inventories
│   ├── production
│   │   ├── hosts
│   │   └── group_vars
│   │       └── my_group.yml
│   └── development
│       ├── hosts
│       └── group_vars
│           └── my_group.yml
├── playbooks
│   ├── playbook1
│   │   ├── group_vars
│   │   │   └── my_group.yml
│   │   ├── roles
│   │   │   └── mysql
│   │   ├── README.md
│   │   └── site.yml
│   ...
├── README.md
└── ansible.cfg

在这种情况下,中的每个环境都有一个文件夹./inventories

我还希望为每个剧本使用一个特定的文件夹,以便能够轻松地group_vars变量优先级部分中定义的剧本级别使用一个文件夹随着环境变得越来越复杂,存在更多的变量。group_vars(和host_vars)在剧本允许定义了通用变量,这使得存在较少的库存变量的所有环境。

终极环境

我已经使用Ansible来处理具有5000台服务器的系统,这里有一些技巧可以解决更复杂的环境:

分割库存文件

使用多个文件而不是单个hosts文件来定义清单服务器在这种情况下,hosts文件仅包含服务器名称,其他文件包含具有不同视角的组:

└── production
    ├── hosts
    ├── middleware
    └── trigram
  • middleware:具有映射到使用的中间件或其他stuf的组。我使用这个文件来映射,例如,服务器tomcatjavapostgresql等我用它,比如,与剧本可部署监控代理:如何检索指标,原木tomcatjavapostgresql,等。
  • trigram:在我的项目中,我通常使用固定长度(3或4)的代码来标识我的业务组件(例如:“ STK”用于库存管理),然后创建一个组文件以将业务组件映射到服务器(服务器用于部署“ STK”)

当您创建新的剧本时,请选择您的视角来解决不同的环境。

警告:我认为按字母顺序排列的可加载文件中,您不能定义一个引用尚未加载的组的组。

使用文件夹 group_vars

在中group_vars,您可以使用带有子文件的文件夹来代替使用文件:

└── production
    └── group_vars
        └── my_group
            ├── vars1.yml
            └── vars2.yml

这对于拆分大文件很有用,或者如果您具有生成变量的工具(在这种情况下,您已经vars1.yml在git下vars2.yml生成)

分割git repo

当您将ansible用于大型系统时,会有很多提交,并且经常出现一个问题:如何拆分我的大型git repo?

以我为例,我为每个文件夹使用一个git repo,并./inventories具有不同的访问规则。以及每个文件夹的git repo./playbooks也具有不同的访问规则。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章