如何在 git 中管理具有可交换库存的可靠项目结构
How to manage an ansible project structure with exchangable inventories in git
我正在编写一些通过 git 进行版本控制的 ansible 剧本。我想在两个不同的服务器(控制节点,为简洁起见:node-a 和 node-b)上维护相同的角色和剧本,但在这些控制节点上有两个独立的清单。这些库存需要分开(即节点 a 的库存应该只存在于节点 a 上,不能从节点 b 访问,反之亦然)。目前我的项目结构是 alternate best practices layout 的变体,如下所示:
ansible-project/ (git repo)
ansible.cfg
inventories/
inventory-a
inventory-b
roles/
playbooks/
在这里,两个清单仍然在一个大 git 存储库中的同一个文件夹中。我试图将库存移动到他们自己的仓库中以单独维护它们。
我最初的计划是让 inventories
文件夹成为一个子模块,并在我的两个控制节点上添加一个不同的子模块。这不起作用,因为子模块也通过 git 同步,因此节点 a 的库存将交叉到节点 b,反之亦然。
我的第二个想法是按如下方式重组项目:
On both nodes:
ansible-project/ (git repo)
ansible.cfg
roles/
playbooks/
On node-a:
inventory_node-a/ (git repo)
inventory-a/
On node-b:
inventory_node-b/ (git repo)
inventory-b
...
这将需要对代码进行重大重构,并且偏离(甚至更多)最佳实践项目结构。但是,这似乎是唯一可用的方法。
有没有更简单的方法来为一个项目维护两个“可替换”ansible 库存 git?是否有我缺少的 git 功能可以帮助解决这个问题?或者我可以为项目采用不同的结构吗?
总结 phd 和 Vladimir Botka 的有用评论,我写这个答案来标记这个问题已关闭。谢谢你们的反馈。
是否可以按要求管理库存?
是的。按照 Vladimir Botka 的建议,您可以创建一个文件夹结构,其中库存是控制节点上某处的独立 git 存储库。例如在 node-a 上,这将如下所示:
inventory_node-a/ (git repo)
inventory-a/
ansible-project/ (git repo)
.gitignore
ansible.cfg
inventories/
inventory-a (symlink to ../../inventory_node-a/)
roles/
playbooks/
您需要将 .gitignore
文件添加到 ansible-project
存储库以忽略子文件夹 inventories/inventory-a
,这样它就不会显示已更改的文件。
我应该这样做吗?
最终,我们采纳了 phd 的建议,并从存储库中删除了所有库存。这为我们省去了很多麻烦和复杂的结构。
出于最小测试目的,我们在清单中保留了一个条目,将清单文件夹添加到 .gitignore
,并独立管理每台主机上的清单。
我正在编写一些通过 git 进行版本控制的 ansible 剧本。我想在两个不同的服务器(控制节点,为简洁起见:node-a 和 node-b)上维护相同的角色和剧本,但在这些控制节点上有两个独立的清单。这些库存需要分开(即节点 a 的库存应该只存在于节点 a 上,不能从节点 b 访问,反之亦然)。目前我的项目结构是 alternate best practices layout 的变体,如下所示:
ansible-project/ (git repo)
ansible.cfg
inventories/
inventory-a
inventory-b
roles/
playbooks/
在这里,两个清单仍然在一个大 git 存储库中的同一个文件夹中。我试图将库存移动到他们自己的仓库中以单独维护它们。
我最初的计划是让 inventories
文件夹成为一个子模块,并在我的两个控制节点上添加一个不同的子模块。这不起作用,因为子模块也通过 git 同步,因此节点 a 的库存将交叉到节点 b,反之亦然。
我的第二个想法是按如下方式重组项目:
On both nodes:
ansible-project/ (git repo)
ansible.cfg
roles/
playbooks/
On node-a:
inventory_node-a/ (git repo)
inventory-a/
On node-b:
inventory_node-b/ (git repo)
inventory-b
...
这将需要对代码进行重大重构,并且偏离(甚至更多)最佳实践项目结构。但是,这似乎是唯一可用的方法。
有没有更简单的方法来为一个项目维护两个“可替换”ansible 库存 git?是否有我缺少的 git 功能可以帮助解决这个问题?或者我可以为项目采用不同的结构吗?
总结 phd 和 Vladimir Botka 的有用评论,我写这个答案来标记这个问题已关闭。谢谢你们的反馈。
是否可以按要求管理库存?
是的。按照 Vladimir Botka 的建议,您可以创建一个文件夹结构,其中库存是控制节点上某处的独立 git 存储库。例如在 node-a 上,这将如下所示:
inventory_node-a/ (git repo)
inventory-a/
ansible-project/ (git repo)
.gitignore
ansible.cfg
inventories/
inventory-a (symlink to ../../inventory_node-a/)
roles/
playbooks/
您需要将 .gitignore
文件添加到 ansible-project
存储库以忽略子文件夹 inventories/inventory-a
,这样它就不会显示已更改的文件。
我应该这样做吗?
最终,我们采纳了 phd 的建议,并从存储库中删除了所有库存。这为我们省去了很多麻烦和复杂的结构。
出于最小测试目的,我们在清单中保留了一个条目,将清单文件夹添加到 .gitignore
,并独立管理每台主机上的清单。