Vagrant 易变文件夹结构

Vagrant 易变文件夹结构,vagrant,ansible,puppet,Vagrant,Ansible,Puppet,我来自一个使用Vagrant的木偶背景,在理解Ansible及其差异方面有一些困难 我的木偶结构如下所示: puppet ├── servers │ └── Backend │ └── Vagrantfile └── src ├── manifests │ └── nodes │ └── development │ └── backend.pp └── modules └── mysql

我来自一个使用Vagrant的木偶背景,在理解Ansible及其差异方面有一些困难

我的木偶结构如下所示:

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
    backend.yml
    放在哪里?在“plays”目录中时,将它们放在主目录中。有什么区别

  • 我认为
    group\u vars/backend
    中我的group\u vars没有被正确使用,我如何访问它们
资料来源:


您找到了几个推荐布局的示例,但没有找到。希望这能回答你的许多问题,但我也会在这里尝试解决它们

这是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