ansible角色功能使用

ansible角色功能使用

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;