ansible角色功能使用
-
- [Ansible Roles目录和文件的规范](#Ansible Roles目录和文件的规范)
- 主要文件的作用
- 公共Roles仓库(https://galaxy.ansible.com)管理。
- [使用 nginx](#使用 nginx)
Ansible Roles目录和文件的规范
- 自定义Ansible Role
- 编写playbook调用role
- 使用ansible-galaxy管理Roles
在实际生产环境中,为了实现不同的功能,我们会编写大量的playbook文件。而且,每个playbook还可能会调用其他文件(如变量文件),对于海量的、无规律的文件,管理起来非常痛苦!
Ansible从1.2版本开始支持Role(角色),Role(角色)是管理ansible文件的一种规范(目录结构),Role(角色)会按照标准的规范,自动到特定的目录和文件中读取数据。
如果我们创建了一个名称为user.example的Role(角色),则其标准的目录结构如下图-1所示。
主要文件的作用
- defualts/main.yml:定义变量的缺省值,优先级较低
- files目录:存储静态文件的目录,如tar包、音乐、视频、文件等
- **handlers/main.yml:定义handlers (**写任务,可执行,可不执行)
- meta/main.yml:写作者、版本等描述信息
- **README.md:整个角色(role)的描述信息 #**备注
- tasks/main.yml:定义任务的地方 (剧本)
- templates目录:存放动态数据文件的地方(文件中包含了变量的模板文件)
- **vars/main.yml:定义变量 ,**优先级高
公共Roles仓库(https://galaxy.ansible.com)管理。
visual
[root@control ansible]# ansible-galaxy search 'httpd'
#联网搜索roles
[root@control ansible]# ansible-galaxy info acandid.httpd
#查看roles基本信息
[root@control ansible]# ansible-galaxy install acandid.httpd -p ~/ansible/roles/
#下载roles到特定的目录,-p可以指定下载到哪个目录
使用ansible-galaxy install可以直接下载Role,也可以编写requirements.yml文件下载Role。
[root@control ansible]# vim ~/ansible/roles/requirements.yml
#格式一:可以直接从Ansible Galaxy官网下载(可以同时下载多个,不写网址默认红帽)
- src: acandid.httpd
- src: acandid.nginx
- src: acandid.tomcat
#格式二:可以从某个git服务器下载
- src: http://gitlab.com/xxx/xxx.git
scm: git
version: 56e00a54
name: nginx-acme
#格式三:可以指定位置下载tar包,支持http、https、file
- src: http://example.com/myrole.tar
name: myrole
执行下载任务
[root@control ansible]# ansible-galaxy install \
-r ~/ansible/roles/requirements.yml \
-p roles
# -r后面跟文件名,该文件中包含了需要下载哪些role以及他们的链接位置
# -p 指定将下载的role保存到哪个目录
使用 nginx
bash
#任务梳理
1. 创建用户组 nginx
2. 创建用户 nginx
3. 装包
4. 拷贝配置文件模板
5. 启动服务
创建roles
bash
[root@master ansible]# mkdir roles
[root@master ansible]# pwd
/root/ansible
[root@master ansible]# ansible-galaxy init roles/nginx
- Role roles/nginx was created successfully
[root@master ansible]# cd roles/nginx/
[root@master nginx]# pwd
/root/ansible/roles/nginx
[root@master nginx]# ls
defaults files handlers meta README.md tasks templates tests vars
编写任务模板
bash
[root@master ~]# cat ansible/roles/nginx/tasks/group.yml
- name: 创建nginx组
group: name=nginx gid=80
[root@master ~]# cat ansible/roles/nginx/tasks/user.yml
- name: 创建nginx用户
user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
[root@master ~]# cat ansible/roles/nginx/tasks/yum.yml
- name: 安装nginx
yum: name=nginx
[root@master ~]# cat ansible/roles/nginx/tasks/template.yml
- name: 拷贝模板
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
#修改模板文件第6行 worker_processes auto; 替换成 worker_processes {{ansible_processor_vcpus+2}};
#用意为不自动分配cpu,把使用的cpu个数比服务器实际个数+2
[root@master ~]# cat ansible/roles/nginx/tasks/start.yml
- name: 启动ningx
service: name=nginx state=started enabled=yes
[root@master ~]# cat ansible/roles/nginx/handlers/restart.yml #重启放在触发中,方便以后用
- name: 重启ningx
service: name=nginx state=restarted enable=yes
#编写主模板
[root@master ~]# cat ansible/roles/nginx/tasks/main.yml #使用include引用上面的模板文件
- include: group.yml
- include: user.yml
- include: yum.yml
- include: template.yml
- include: start.yml
#编写playbook
[root@master ~]# ls ansible/
nginx_role.yml roles #注意playbook位置与role目录同级
[root@master ~]# cat ansible/nginx_role.yml
---
- hosts: node1 #定义执行主机
remote_user: root #使用用户
roles:
- nginx #直接引用nginx的roles
[root@master ~]# ansible-playbook ansible/nginx_role.yml -C #-C代表测试
检查执行结果
bash
[root@node1 ~]# systemctl status nginx.service
[root@node1 ~]# systemctl is-enabled nginx.service
enabled
[root@node1 ~]# grep nginx /etc/passwd
nginx:x:80:80::/home/nginx:/sbin/nologin
[root@node1 ~]# cat -n /etc/nginx/nginx.conf | head -10
1 # For more information on configuration, see:
2 # * Official English Documentation: http://nginx.org/en/docs/
3 # * Official Russian Documentation: http://nginx.org/ru/docs/
4
5 user nginx;
6 worker_processes 6; #虚拟机实际cpu个数为4,现在变成6了
7 #worker_processes auto;
8 error_log /var/log/nginx/error.log;
9 pid /run/nginx.pid;