我来自使用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.yml
和backend.yml
?这个示例在主目录中有它们,而在这里它在“ plays”目录中。有什么不同?
group_vars/backend
使用不正确,如何访问它们?资料来源:
http://leucos.github.io/ansible-files-layout/
就我而言,我根据环境复杂性使用以下结构(请检查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的组。我使用这个文件来映射,例如,服务器tomcat
,java
,postgresql
等我用它,比如,与剧本可部署监控代理:如何检索指标,原木tomcat
,java
,postgresql
,等。trigram
:在我的项目中,我通常使用固定长度(3或4)的代码来标识我的业务组件(例如:“ STK”用于库存管理),然后创建一个组文件以将业务组件映射到服务器(服务器用于部署“ STK”)当您创建新的剧本时,请选择您的视角来解决不同的环境。
警告:我认为按字母顺序排列的可加载文件中,您不能定义一个引用尚未加载的组的组。
group_vars
在中group_vars
,您可以使用带有子文件的文件夹来代替使用文件:
└── production
└── group_vars
└── my_group
├── vars1.yml
└── vars2.yml
这对于拆分大文件很有用,或者如果您具有生成变量的工具(在这种情况下,您已经vars1.yml
在git下vars2.yml
生成)
当您将ansible用于大型系统时,会有很多提交,并且经常出现一个问题:如何拆分我的大型git repo?
以我为例,我为每个文件夹使用一个git repo,并./inventories
具有不同的访问规则。以及每个文件夹的git repo./playbooks
也具有不同的访问规则。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句