我该如何重用我撰写的角色?

时间:2019-09-26 02:38:25

标签: ansible

可以说,我有许多用于各种个人项目的有趣的剧本。它们都做着截然不同的事情,但是它们有一些共同的重复角色。

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

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

是否可以将可重用角色转移到单独的存储库中,并根据需要将每个独立的剧本导入其中?

1 个答案:

答案 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

roles / .gitignore

# Ignore everything in dir...
/*

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

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

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

roles / requirements.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会将其视为新文件。

首次安装后更新角色

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

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

当然,您也可以这样做以切换到git工作区版本(或重置为需求文件中提供的版本)

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