自动化运维-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
//执行各种角色和收集相关的操作。
]# 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文件。

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、创建目录结构

mkdir -pv nginx/{tasks,handlers,templates}

3、创建任务

  • 创建系统组
]# cat roles/nginx/tasks/nginx-group.yaml
- name: create group
  group: name=nginx gid=80 system=yes
  • 创建系统用户
]# cat roles/nginx/tasks/nginx-user.yaml
- name: create user
  user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
  • 安装nginx
]# cat roles/nginx/tasks/nginx-install.yaml
- name: install nginx
  yum: name=nginx
  • 复制模板
]# 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
]# cat roles/nginx/tasks/nginx-start.yaml
- name: start nginx
  service: name=nginx state=started enabled=yes
  • 创建任务的man文件
]# 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
]# cat roles/nginx/handlers/nginx-restart.yaml
- name: restart nginx
  service: name=nginx state=restarted
  • 创建触发器的man文件
]# cat roles/nginx/handlers/main.yaml
- include: nginx-restart.yaml

5、创建模板

]# cat roles/nginx/templates/nginx.conf.j2
user nginx;
http {
    server {
        listen       {{ ansible_default_ipv4.address }}:{{ web_port }};
    }
}
...

6、创建playbook

  • 注意,playbook文件与roles目录同级
]# cat nginx-playbook.yaml 
- hosts: all
  roles:
  - nginx
#  - role: nginx
#  - {role: nginx, tages: ['web', 'nginx'], when: ansible_distribution_major_version == "7"}
  • 目录结构
]# 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、应用该角色

ansible-playbook nginx-playbook.yaml -b -e "web_port=8080"

1

#                                                                                                                         #
posted @ 2022-11-07 14:18  麦恒  阅读(302)  评论(0编辑  收藏  举报