五、Ansible自动化运维实战-Role-角色扮演


1.简介

  roles则是再ansible中,playbooks的目录组织结构。将代码或文件进行模块化,称为roles的文件目录组织结构。

  易读,代码可重用,层次清晰。

2.目标

  通过role远程部署nginx并配置

3.准备目录结构

  mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p

  touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml

  echo 1234 > roles/nginx/files/index.html  # 这是主页文件,单独创建

  yum install -y nginx && cp /etc/nginx/nginx.conf      roles/nginx/templates/nginx.conf.j2  # 把下载下来的nginx.conf配置文件复制一份到文件里

2.编写任务

  vim roles/nginx/tasks/main.yaml  tasks是任务

————————————————

---
- name: install epel-release packge  # 安装epel
  yum: name=epel-release state=latest

- name: install nginx packge  # 安装nginx
  yum: name=nginx state=latest

- name: copy index.html  # 拷贝一个主页文件
  copy: src=index.html dest=/usr/share/nginx/html/index.html  # index.html是

- name: copy nginx.conf template  #
  template: src=nginx.conf dest=/etc/nginx/nginx.conf  # template,金甲模板,模板文件,是对带变量的文件copy

  notify: restart nginx

- name: make sure nginx service running  # 启动nginx
  service: name=nginx state=started enabled=yes

————————————————

3.准备配置文件

  vim /roles/nginx/templates/nginx.conf.j2

——————————

worker_processes {{ ansible_processor_cores }} ;  # 调用内部已知变量CPU内核数,可以用ansible host1 -m setup -a 'filter=ansible_processor_cores'查看,金甲模板会先替换文件中的变量,再执行

weorker_connections {{ worker_connections }} ;  # 自定义变量

——————————

4.编写变量

   上方的自定义变量并没有定,我们需要在vars里定义

  vim /roles/nginx/vars/main.yaml

————————

worker_connections: 10240

————————

5.编写处理程序

  vim roles/nginx/handlers/main.yaml

————————

---

- name: restart nginx

  service: name=nginx state=restarted

————————

6.编写剧本

  vim roles/site.yaml

————————

- hosts: webserver  # 剧本的主机对象

  roles:   # 剧本的目录

  - nginx  # 剧本的目录

————————

7.实施

  cd roles

  ansible-playbook site.yaml --ayntax-check  不能check其他文件,其他文件之间无法联系,只有上级的site.yaml具有调用能力

  ansible-playbook site.yaml

  去目标主机检查是否配置完成