可以说,我有许多用于各种个人项目的有趣的剧本。它们都做着截然不同的事情,但是它们有一些共同的重复角色。
例如,其中一个角色克隆了我个人的点文件存储库,因此我可以在每个服务器上拥有我的个人.bash_profile
,.vimrc
等。
我所有的剧本都位于单独的git存储库中。现在,他们每个人都分别复制了“ dotfiles”角色。
是否可以将可重用角色转移到单独的存储库中,并根据需要将每个独立的剧本导入其中?
答案 0 :(得分:1)
每个角色都在自己的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
# Ignore everything in dir...
/*
# ... but current file...
!.gitignore
# ... external role requirement file
!requirements.yml
# ... and configured custom/local roles
!localy_versionned_role*/
# 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
中列出的依赖项)也将被下载。
我们确保在我们的本地文件夹中搜索并下载角色
roles_path = roles
ansible-galaxy install -r roles/requirements
ansible-playbook -i inventories/dev some_playbook.yml
默认情况下,ansible-galaxy从git下载并删除本地存储库结构(即.git
目录)。如果要下载角色并继续使用它们(更改,提交,推送...),可以使用以下方法保留git结构:
ansible-galaxy install -g -r roles/requirements
请注意,这将在您的角色中写入一个meta/.galaxy_install_info
文件,如果您尚未忽略的话,git会将其视为新文件。
如果角色已经安装,则不会使用新版本(尤其是来自银河系)进行更新。强制更新使用:
ansible-galaxy -f -r roles/requirements.yml
当然,您也可以这样做以切换到git工作区版本(或重置为需求文件中提供的版本)
ansible-galaxy -f -g -r roles/requirements.yml