gpt4 book ai didi

ansible - 如何重用我编写的 ansible 角色?

转载 作者:行者123 更新时间:2023-12-04 13:17:58 31 4
gpt4 key购买 nike

假设我有许多用于各种个人项目的 ansible 剧本。他们都做着截然不同的事情,但他们有一些重复的共同角色。

例如,其中一个角色克隆了我的个人点文件存储库,这样我就可以在每台服务器上拥有我的个人 .bash_profile.vimrc 等...。

我所有的剧本都在单独的 git 存储库中。现在他们每个人都分别复制“dotfiles”角色。

有没有一种好方法可以将可重复使用的角色移动到单独的存储库,并让每个单独的剧本根据需要导入它?

最佳答案

先决条件

每个角色都在自己的 git 存储库中。

典型的项目结构

这是可以挑战的。这是我喜欢在我的不同项目中使用的那个:

├── inventories
│   ├── dev
│   │   ├── group_vars/
│   │   └── hosts.ini
│   └── prod
│   ├── group_vars/
│   └── hosts.ini
├── group_vars/
├── host_vars/
├── files/
├── templates/
├── roles
│   ├── localy_versionned_role1/
│ ├── localy_versionned_role2/
│   ├── requirements.yml
│ ├── .gitignore
├── ansible.cfg
├── README.md
├── some_playbook.yml
├── other_playbook.yml

角色/.gitignore

# Ignore everything in dir...
/*

# ... but current file...
!.gitignore

# ... external role requirement file
!requirements.yml

# ... and configured custom/local roles
!localy_versionned_role*/

角色/需求.yml

# Classic galaxy role
- src: galaxy_user.role_name

# Git available role
- src: git@git.service.com:path/to/repo.git
scm: git
version: master
name: local_role_name

您只需要列出“顶级”角色,依赖项(在角色的 meta/main.yml 中列出)也将被下载。

Ansible.cfg

我们确保在我们的本地文件夹中搜索和下载角色

roles_path = roles

从您的项目部署的工作流:

  • 克隆您的项目存储库
  • 下载外部角色:
ansible-galaxy install -r roles/requirements
  • 启动您的剧本:
ansible-playbook -i inventories/dev some_playbook.yml

更进一步

将角色下载为 git 工作空间

默认情况下,ansible-galaxy 从 git 下载并删除本地存储库结构(即 .git 目录)。如果您想下载角色并继续处理它们(更改、提交、推送...),您可以保留 git 结构:

ansible-galaxy install -g -r roles/requirements

请注意,这将在您的角色中写入一个 meta/.galaxy_install_info 文件,如果您尚未忽略,git 会将其视为新文件。

首次安装后更新角色

如果角色已经安装,则不会更新新版本(尤其是来自 galaxy 的角色)。强制更新使用:

ansible-galaxy -f -r roles/requirements.yml

当然你这样做也是为了切换到 git 工作区版本(或重置为需求文件中给定的版本)

ansible-galaxy -f -g -r roles/requirements.yml

关于ansible - 如何重用我编写的 ansible 角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58108846/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com