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

use*_*003 4 ansible

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

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

我的所有剧本都位于单独的 git 存储库中。现在,他们每个人都分别重复“点文件”角色。

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

Zei*_*tor 6

先决条件

\n\n

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

\n\n

典型项目结构

\n\n

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

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 inventories\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dev\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 group_vars/\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 hosts.ini\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 prod\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 group_vars/\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 hosts.ini\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 group_vars/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 host_vars/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 files/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 templates/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 roles\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 localy_versionned_role1/\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 localy_versionned_role2/\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.yml\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ansible.cfg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 some_playbook.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 other_playbook.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n

角色/.gitignore

\n\n
# Ignore everything in dir...\n/*\n\n# ... but current file...\n!.gitignore\n\n# ... external role requirement file\n!requirements.yml\n\n# ... and configured custom/local roles\n!localy_versionned_role*/\n
Run Code Online (Sandbox Code Playgroud)\n\n

角色/需求.yml

\n\n
# Classic galaxy role\n- src: galaxy_user.role_name\n\n# Git available role\n- src: git@git.service.com:path/to/repo.git\n  scm: git\n  version: master\n  name: local_role_name\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

Ansible.cfg

\n\n

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

\n\n
roles_path = roles\n
Run Code Online (Sandbox Code Playgroud)\n\n

从项目部署的工作流程:

\n\n
    \n
  • 克隆您的项目存储库
  • \n
  • 下载外部角色:
  • \n
\n\n
ansible-galaxy install -r roles/requirements\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 启动你的剧本:
  • \n
\n\n
ansible-playbook -i inventories/dev some_playbook.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n

更进一步

\n\n

将角色下载为 git 工作区

\n\n

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

\n\n
ansible-galaxy install -g -r roles/requirements\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

首次安装后更新角色

\n\n

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

\n\n
ansible-galaxy -f -r roles/requirements.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
ansible-galaxy -f -g -r roles/requirements.yml\n
Run Code Online (Sandbox Code Playgroud)\n