使用ansible-galaxy来重用角色
“Ansible Galaxy”是一个可以共享角色的服务。您可以上传角色或者搜索并安装喜欢的角色。ansible-galaxy是用于使用Ansible Galaxy的命令行工具。
在1.8版本的ansible-galaxy中,除了可以使用Ansible Galaxy托管的角色之外,还可以指定SCM来处理外部存储库。
SCM的使用方法
使用GitHub进行配置。通过-p参数指定目录。使用ansible-galaxy在./roles目录中安装来自https://github.com/bennojoy/nginx的模块。
您可以在ansible-galaxy中指定分支和标签进行安装。
命令为:ansible-galaxy install -p ./roles https://github.com/ANXS/mysql.git,v1.0.3
应用
通过在1.8或更高版本中使用-r参数来将文件的扩展名指定为’yml’,可以使得在从文件读取时可以使用外部的存储库。
准备文件
# from galaxy
- src: yatesr.timezone
# from github
- src: https://github.com/bennojoy/nginx
# from github with tag
- src: https://github.com/ANXS/mysql.git
version: v1.0.3
执行以下操作:
ansible-galaxy 安装 -p ./roles -r requirements.yml
我试着在个人生活中使用一下
我打算使用 Ansible-Galaxy 安装在我个人私人 GitLab 上创建的自定义角色。
你可以使用 “ansible-galaxy init [role名]” 命令来创建一个角色的模板。如果要在离线环境中使用,请同时指定 –offline 选项。
myrole
├── README.md
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
提交并推送后,尝试使用ansible-galaxy进行安装。
$ ansible-galaxy install -p ./roles git+git@gitlab.example.com:orita/myrole.git
- executing: git clone git@gitlab.example.com:orita/myrole.git myrole
- executing: git archive --prefix=myrole/ --output=/var/folders/xx/xxxxxxxxxxxxxxxxxxxxxx/x/xxxxxxx.tar master
- extracting myrole to ./roles/myrole
- myrole was installed successfully
看起来进展顺利。在使用ssh+git的情况下,如果在仓库路径前面加上”git+”,似乎就可以顺利进行了。
请留意以下事项
ansible-galaxy会自动获取所依赖的角色(在meta/main.yml中指定),但目前仅限于Ansible Galaxy中存在的角色。如果要放在外部存储库中,请小心。
要下载一个带有依赖项并自动安装这些依赖项的角色,必须将该角色上传到Ansible Galaxy网站。Ansible Galaxy – Ansible文档。
“后记”
之前当我自己使用的时候,角色和内容都被放在同一个代码库中,这使得重复使用变得困难(听说过反范式……),尝试使用了git的子模块,但使用起来感觉很不方便。现在可以处理外部代码库,角色的重复使用变得更加顺畅。就像使用Berkshelf一样方便啊。