Ansible之Role角色

2021-08-18 14:28:10 浏览数 (2)

Role角色

roles则是在ansible中,playbooks的目录组织结构。而模块化之后,成为roles的组织结构,易读,代码可重用,层次清晰。

实战目标:通过role远程部署nginx并配置

代码语言:javascript复制
 两台机器配置本地解析
 [root@ansible-server ~]# vim /etc/hosts
 192.168.1.9    ansible-server
 192.168.1.13   ansible-web4
 [root@ansible-web4 ~]# vim /etc/hosts
 192.168.1.9    ansible-server
 192.168.1.13   ansible-web4
 添加主机组
 [root@ansible-server ansible]# pwd
 /etc/ansible
 [root@ansible-server ansible]# vim hosts
 [webservers4]
 ansible-web4
 配置免密登录:
 [root@ansible-server ~]# ssh-copy-id -i 192.168.1.13

1.目录结构:

代码语言:javascript复制
目录顺序:
 role_name/     ---角色名称=目录
     files/:存储一些可以用copy调用的静态文件。
     tasks/: 存储任务的目录,此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用; 
     handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由(与notify:名字相同,方便notify通知执行下一条命令)通过main.yml进行“包含”调用; 
     vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用; 
     templates/:存储由template模块调用的模板文本; (也可以调用变量)
     site.yml:定义哪个主机应用哪个角色
 =========================================================================================
 1.准备目录结构
 [root@ansible-server ~]# cd /etc/ansible/roles/  #role为自带目录,如果不存在可以创建
 [root@ansible-server roles]# mkdir nginx/{files,handlers,tasks,templates,vars} -p
 2.创建文件:
 [root@ansible-server roles]# touch site.yml nginx/{handlers,tasks,vars}/main.yml
 [root@ansible-server roles]# yum install -y tree

代码语言:javascript复制
 1.创建nginx的测试文件
 [root@ansible-server roles]# echo 1234 > nginx/files/index.html
 2.安装nginx并配置模板
 [root@ansible-server roles]# yum install -y nginx && cp /etc/nginx/nginx.conf nginx/templates/nginx.conf.j2

templates模板: 用的是jinja2的语法

代码语言:javascript复制
 3.编写任务
 [root@ansible-server roles]# vim nginx/tasks/main.yml
 ---
 - name: install epel
   yum: name=epel-release state=latest
 - name: install nginx
   yum: name=nginx state=latest
 - name: copy nginx.conf templte
   template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
 - name: copy index.html
   copy: src=index.html dest=/usr/share/nginx/html/index.html
   notify: start nginx
代码语言:javascript复制
 4.准备配置文件
 [root@ansible-server roles]# vim nginx/templates/nginx.conf.j2
 修改成如下内容。自定义变量
代码语言:javascript复制
 5.编写变量
 [root@ansible-server roles]# vim nginx/vars/main.yml  #添加如下内容
 worker_connections: 2
 6.编写handlers
 [root@ansible-server roles]# vim nginx/handlers/main.yml #编写如下内容
 ---
 - name: start nginx  #和notify的名字必须一样
   service: name=nginx state=started
 7.编写剧本
 [root@ansible-server roles]# vim site.yml
 ---
 - hosts: webservers4
   user: root
   roles:
    - nginx
代码语言:javascript复制
 检测语法
 [root@ansible-server roles]# ansible-playbook site.yml --syntax-check
 playbook: site.yml
 执行剧本:
 [root@ansible-server roles]# ansible-playbook site.yml

查看:

代码语言:javascript复制
 [root@ansible-web4 ~]# netstat -lntp 
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3102/nginx: master  
 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      926/sshd            
 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1007/master         
 tcp6       0      0 :::80                   :::*                    LISTEN      3102/nginx: master  
 tcp6       0      0 :::22                   :::*                    LISTEN      926/sshd            
 tcp6       0      0 ::1:25                  :::*                    LISTEN      1007/master         
 [root@ansible-web4 ~]# cat /etc/nginx/nginx.conf | grep pro
 #worker_processes auto;
 worker_processes 2;

0 人点赞