Vagrant 易变文件夹结构
我来自一个使用Vagrant的木偶背景,在理解Ansible及其差异方面有一些困难 我的木偶结构如下所示:Vagrant 易变文件夹结构,vagrant,ansible,puppet,Vagrant,Ansible,Puppet,我来自一个使用Vagrant的木偶背景,在理解Ansible及其差异方面有一些困难 我的木偶结构如下所示: puppet ├── servers │ └── Backend │ └── Vagrantfile └── src ├── manifests │ └── nodes │ └── development │ └── backend.pp └── modules └── mysql
puppet
├── servers
│ └── Backend
│ └── Vagrantfile
└── src
├── manifests
│ └── nodes
│ └── development
│ └── backend.pp
└── modules
└── mysql
安装很简单,将cd刻录到Vagrant文件,然后用Vagrant启动VM
现在,这是我的Ansible文件夹结构初稿:
ansible
├── servers
│ └── Backend
│ ├── Vagrantfile
│ └── ansible.cfg
└── sources
├── backend.yml
├── site.yml
├── inventories
│ └── development
│ ├── group_vars
│ │ ├── all
│ │ └── backend
│ └── hosts
├── playbooks
└── roles
└── mysql
现提出下列问题:
- 这是Ansible的最佳实践还是过于接近傀儡
- 将backend.yml视为傀儡节点清单是否正确
- 我应该把
和site.yml
放在哪里?在“plays”目录中时,将它们放在主目录中。有什么区别backend.yml
- 我认为
中我的group\u vars没有被正确使用,我如何访问它们group\u vars/backend
您找到了几个推荐布局的示例,但没有找到。希望这能回答你的许多问题,但我也会在这里尝试解决它们 这是Ansible的最佳实践还是过于接近傀儡 这绝对不是Ansible的推荐布局。在最佳实践布局中,没有
服务器
或源
——这些服务器中的东西都位于顶层(无论如何,“服务器”是什么意思?)
将backend.yml视为傀儡节点清单是否正确
我不熟悉木偶,所以不能回答这个问题
我应该把site.yml和backend.yml放在哪里?这个示例将它们放在主目录中,而在这里它放在“plays”目录中。有什么区别
官方推荐的所有剧本都散布在根目录中。然而,这有点混乱,所以有些人将它们放在子目录中(在您的示例中,播放
)。这相当不错,但您需要相应地调整剧本中的路径
我认为我的组变量/后端中的组变量没有被正确使用,我如何访问它们
您不应该将它们放在inventory文件夹的子目录中,因为它们不是inventory的一部分。有许多地方可以定义变量,您应该阅读以了解它们是什么以及何时应该使用它们,但是
组变量与其他所有变量都应该位于目录的根。您找到了一些推荐布局的示例,但没有找到。希望这能回答你的许多问题,但我也会在这里尝试解决它们
这是Ansible的最佳实践还是过于接近傀儡
这绝对不是Ansible的推荐布局。在最佳实践布局中,没有服务器
或源
——这些服务器中的东西都位于顶层(无论如何,“服务器”是什么意思?)
将backend.yml视为傀儡节点清单是否正确
我不熟悉木偶,所以不能回答这个问题
我应该把site.yml和backend.yml放在哪里?这个示例将它们放在主目录中,而在这里它放在“plays”目录中。有什么区别
官方推荐的所有剧本都散布在根目录中。然而,这有点混乱,所以有些人将它们放在子目录中(在您的示例中,播放
)。这相当不错,但您需要相应地调整剧本中的路径
我认为我的组变量/后端中的组变量没有被正确使用,我如何访问它们
您不应该将它们放在inventory文件夹的子目录中,因为它们不是inventory的一部分。有许多地方可以定义变量,您应该阅读以了解它们是什么以及何时应该使用它们,但是组变量与其他所有变量都应该位于目录的根。在我的例子中,我根据环境的复杂性使用以下结构(检查):
简单环境
当存在一个环境或在供应模式下使用剧本时,我使用此结构
在ansible.cfg
中,我在[默认值]
中使用变量inventory=./inventory
,以避免使用命令ansible-*
设置库存路径
中等/复杂环境
当存在多个环境时,我使用此结构
在这种情况下,在/inventory
中,每个环境都有一个文件夹
我还喜欢为每个剧本使用一个特定的文件夹,以便能够在剧本级别轻松使用文件夹group\u vars
,如中所定义。随着环境变得越来越复杂,变量也越来越多。剧本中的组变量
(和主机变量
)允许为所有环境定义公共变量,从而减少库存变量
极限水平环境
我已经使用了具有5000多台服务器的Ansible to Adrese系统,下面是处理更复杂环境的一些技巧:
拆分库存文件
使用多个文件来定义库存服务器,而不是单个主机文件。在本例中,hosts
文件仅包含服务器名称,其他文件包含具有不同透视图的组:
└── production
├── hosts
├── middleware
└── trigram
中间件
:映射到已用中间件或其他stuf的组。例如,我使用此文件将服务器映射到tomcat
、java
、postgresql
,等等。例如,我将其用于部署监控代理的剧本:如何从tomcat
、java
、postgresql
,等等
trigram
:在我的项目中,我通常使用固定长度(3或4)的代码来标识我的业务组件(例如:用于库存管理的“STK”),然后我创建一个组文件,将业务组件映射到我的服务器(哪些服务器用于部署“STK”)
当你
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
└── production
├── hosts
├── middleware
└── trigram
└── production
└── group_vars
└── my_group
├── vars1.yml
└── vars2.yml