假设我有许多用于各种个人项目的 ansible 剧本。他们所做的事情截然不同,但有一些重复的共同角色。
例如,其中一个角色克隆我的个人点文件存储库,这样我就可以在每台服务器上拥有我的个人.bash_profile、、.vimrc等等。
我的所有剧本都位于单独的 git 存储库中。现在,他们每个人都分别重复“点文件”角色。
有没有一种好方法可以将可重用的角色移至单独的存储库,并让每个单独的剧本根据需要导入该角色?
每个角色都有自己的 git 存储库。
\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\nRun Code Online (Sandbox Code Playgroud)\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*/\nRun Code Online (Sandbox Code Playgroud)\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\nRun Code Online (Sandbox Code Playgroud)\n\n您只需要列出“顶级”角色,依赖项(在meta/main.yml角色中列出)也将被下载。
我们确保在本地文件夹中搜索并下载角色
\n\nroles_path = roles\nRun Code Online (Sandbox Code Playgroud)\n\nansible-galaxy install -r roles/requirements\nRun Code Online (Sandbox Code Playgroud)\n\nansible-playbook -i inventories/dev some_playbook.yml\nRun Code Online (Sandbox Code Playgroud)\n\n默认情况下,ansible-galaxy 从 git 下载并删除本地存储库结构(即目录.git)。如果您想下载角色并继续处理它们(更改、提交、推送...),您可以使用以下命令保留 git 结构:
ansible-galaxy install -g -r roles/requirements\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,这将meta/.galaxy_install_info在您的角色中写入一个文件,如果您还没有忽略该文件,那么 git 会将其视为新文件。
如果角色已安装,则不会使用新版本(尤其是来自 Galaxy 的版本)进行更新。要强制更新,请使用:
\n\nansible-galaxy -f -r roles/requirements.yml\nRun Code Online (Sandbox Code Playgroud)\n\n当然,您这样做也是为了切换到 git 工作区版本(或重置为需求文件中给出的版本)
\n\nansible-galaxy -f -g -r roles/requirements.yml\nRun Code Online (Sandbox Code Playgroud)\n