ansible-galaxy命令快速创建角色框架

发布时间 2023-04-07 09:14:11作者: 技术颜良

在Ansible中创建角色,可以考虑使用ansible-galaxy命令快速创建角色框架。

ansible vs ansible-galaxy
Ansible是科幻小说 银河系漫游指南 中的一种超光速通讯工具,而Ansible社区的Galaxy就是类似类似dockerhub一样的存在,很多可以复用的角色(role),都在一个被称为Ansible Galaxy的网站进行分享。

Ansible Galaxy网址:https://galaxy.ansible.com/

使用ansible-galaxy生成角色框架
版本确认
[root@host131 ansible]# ansible-galaxy --version
ansible-galaxy 2.4.2.0
config file = /root/easypack/k8s/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible-galaxy
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
[root@host131 ansible]#

生成角色框架
使用ansible-galaxy init 命令即可生成角色框架

命令格式:ansible-galaxy init 角色名称

比如如下为生成一个名为prometheus的角色框架的执行日志示例:

[root@host131 ansible]# ansible-galaxy init prometheus
- prometheus was created successfully
[root@host131 ansible]#
1
2
3
框架结果确认
[root@host131 ansible]# tree prometheus/
prometheus/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml

8 directories, 8 files
[root@host131 ansible]#

可以看到,此版本的ansilbe-galaxy init命令生成的框架中包含8个目录和8个文件,相关说明如下所示:

名称 类型 说明
defaults 目录 存放默认配置信息的目录
defaults/main.yml 文件 存放默认配置变量的文件
files 目录 存放文件的目录,在此目录下copy等模块可以直接使用
handlers 目录
handlers/main.yml 文件
meta 目录 存放元信息相关的配置文件的目录
meta/main.yml 文件 存放此模块的一些元信息,比如所支持的Ansible最小版本以及操作系统类型等
README.md 文件 用于模块说明和介绍的文件
tasks 目录 保存角色功能实现任务所在的目录
tasks/main.yml 文件 角色的入口文件,执行角色时会从此文件开始执行
templates 目录 存放jinjia2模版文件的目录
tests 目录 存放模块测试相关的内容的目录
tests/inventory 文件 测试所使用的inventory文件
tests/test.yml 文件 测试所使用的playbook
vars 目录 保存变量配置信息的目录
vars/main.yml 文件 用于保存变量配置信息
比如test目录下的playbook和inventory信息如下所示:

[root@host131 ansible]# cat prometheus/tests/inventory
localhost

[root@host131 ansible]# cat prometheus/tests/test.yml
---
- hosts: localhost
remote_user: root
roles:
- prometheus[root@host131 ansible]#
[root@host131 ansible]#

可以看到这主要是用于在本机上进行动作确认的单元测试级别的测试文件。

执行确认
只要本地localhost的ssh通,使用ansible-galaxy生成的框架是可以运行的。

[root@host131 ansible]# ssh localhost hostname
host131
[root@host131 ansible]#

运行结果如下所示

[root@host131 ansible]# ansible-playbook prometheus/tests/test.yml

PLAY [localhost] ***********************************************************************************************************************

PLAY RECAP *****************************************************************************************************************************

[root@host131 ansible]#