自动化运维-Ansible05-角色(roles)
- roles是ansilbe 1.2版本引入的新特性,用于层次性、结构化地组织playbook。
- roles能够根据层次型结构自动加载变量文件、tasks以及handlers等。只要在playbook中使用include指令引入即可。
- 通常角色都存放在/etc/ansible/roles/,但也可以在其他目录。
1、ansible-galaxy命令
- ansible-galaxy:可以简单的理解为Github或PIP的功能,是Ansible官方一个分享role的功能平台。可以通过ansible-galaxy命令很简单的实现role的分享和安装。
- ansible-galaxy命令可以根据下载量和关注量等信息,查找和安装优秀的Roles。
- Roles下载地址:https://galaxy.ansible.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | //执行各种角色和收集相关的操作。 ]# ansible-galaxy -h usage: ansible-galaxy [-h] [--version] [-v] TYPE ... positional arguments: TYPE collection 管理Ansible Galaxy集合。 role 管理Ansible Galaxy角色。 ]# ansible-galaxy role -h usage: ansible-galaxy role [-h] ROLE_ACTION ... positional arguments: ROLE_ACTION info 查看指定role的详细信息。 list 列出本地已下载的Roles。 init 使用role的基本结构初始化新role。 search 通过标签、平台、作者或关键字搜索Galaxy数据库。 install 从file(s)、URL(s)或Ansible Galaxy安装role(s) remove 删除本地已下载的Roles。 delete 从Galaxy中移除角色。它不会删除或更改实际的GitHub存储库。 import 导入一个角色 setup 管理Galaxy和给定源代码之间的集成。 ]# ansible-galaxy collection -h usage: ansible-galaxy collection [-h] COLLECTION_ACTION ... positional arguments: COLLECTION_ACTION init 使用集合的基本结构初始化新的集合。 build 构建一个Ansible集合神器,可以发布到Ansible Galaxy。 publish 向Ansible Galaxy发布一个收藏品。 install 从file(s)、URL(s)或Ansible Galaxy安装集合 |
2、自定义角色
2.1、角色的目录结构
- 每个角色,以特定的层级目录结构进行组织:
- nginx/:目录名nginx就是角色名,至少要有一个tasks任务,其他目录都是可选的
- files/:存放由copy或script模块等调用的文件。
- templates/:存放模板文件。template模块查找所需要模板文件的目录,最好以.j2结尾
- tasks/:存放task任务列表。至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行引用。
- handlers/:存放handler触发器列表。至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行引用。
- vars/:存放自定义变量列表。至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含。
- meta/:定义当前角色的特殊设定及其依赖关系。至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行引用。
- default/:设定默认变量时使用此目录中的main.yml文件。
- nginx/:目录名nginx就是角色名,至少要有一个tasks任务,其他目录都是可选的
2.2、自定义nginx角色
- main函数:
- roles/x/tasks/main.yml:主函数,包括在其中的所有任务将被执行。
- roles/x/handlers/main.yml:所有包括其中的handlers将被执行。
- roles/x/vars/main.yml:所有包括在其中的变量将在roles中生效。
- roles/x/meta/main.yml:roles所有依赖将被正常登入。
- roles/x/{files,templates,tasks}/(dir depends on task):所有文件、模板都可存放在这里,放在这里最大的好处是不用指定绝对路径。
1、实现nginx角色的规划
- (1)创建一个系统组:nginx
- (2)创建一个系统用户:nginx
- (3)安装应用(yum):nginx
- (4)复制模板(tmplate):nginx.conf.j2
- (5)启动服务:service
- (6)重启服务:service
2、创建目录结构
1 | mkdir -pv nginx/{tasks,handlers,templates} |
3、创建任务
- 创建系统组
1 2 3 | ]# cat roles/nginx/tasks/nginx-group.yaml - name: create group group: name=nginx gid=80 system=yes |
- 创建系统用户
1 2 3 | ]# cat roles/nginx/tasks/nginx-user.yaml - name: create user user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin |
- 安装nginx
1 2 3 | ]# cat roles/nginx/tasks/nginx-install.yaml - name: install nginx yum: name=nginx |
- 复制模板
1 2 3 4 | ]# cat roles/nginx/tasks/nginx-template.yaml - name: copy nginx config template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: restart nginx |
- 启动nginx
1 2 3 | ]# cat roles/nginx/tasks/nginx-start.yaml - name: start nginx service: name=nginx state=started enabled=yes |
- 创建任务的man文件
1 2 3 4 5 6 | ]# cat roles/nginx/tasks/main.yaml - include : nginx-group.yaml - include : nginx-user.yaml - include : nginx-install.yaml - include : nginx-template.yaml - include : nginx-start.yaml |
4、创建触发器
- 重启nginx
1 2 3 | ]# cat roles/nginx/handlers/nginx-restart.yaml - name: restart nginx service: name=nginx state=restarted |
- 创建触发器的man文件
1 2 | ]# cat roles/nginx/handlers/main.yaml - include : nginx-restart.yaml |
5、创建模板
1 2 3 4 5 6 7 8 | ]# cat roles/nginx/templates/nginx.conf.j2 user nginx; http { server { listen {{ ansible_default_ipv4.address }}:{{ web_port }}; } } ... |
6、创建playbook
- 注意,playbook文件与roles目录同级。
1 2 3 4 5 6 | ]# cat nginx-playbook.yaml - hosts: all roles: - nginx # - role: nginx # - {role: nginx, tages: [ 'web' , 'nginx' ], when: ansible_distribution_major_version == "7" } |
- 目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ]# tree . ├── nginx-playbook.yaml └── roles └── nginx ├── handlers │ ├── main.yaml │ └── nginx-restart.yaml ├── tasks │ ├── main.yaml │ ├── nginx-group.yaml │ ├── nginx-install.yaml │ ├── nginx-start.yaml │ ├── nginx-template.yaml │ └── nginx-user.yaml └── templates └── nginx.conf.j2 |
7、应用该角色
1 | ansible-playbook nginx-playbook.yaml -b -e "web_port=8080" |
1
1 | # # |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步