介紹
roles則是在ansible中,playbooks的目錄組織結(jié)構(gòu)。而模塊化之后,成為roles的組織結(jié)構(gòu),易讀,代碼可重用,層次清晰。
實(shí)戰(zhàn)目標(biāo):通過(guò)role遠(yuǎn)程部署nginx并配置
兩臺(tái)機(jī)器配置本地解析
[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
添加主機(jī)組
[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
目錄順序:
role_name/ ---角色名稱(chēng)=目錄
files/:存儲(chǔ)一些可以用copy調(diào)用的靜態(tài)文件。
tasks/: 存儲(chǔ)任務(wù)的目錄,此目錄中至少應(yīng)該有一個(gè)名為main.yml的文件,用于定義各task;其它的文件需要由main.yml進(jìn)行“包含”調(diào)用;
handlers/:此目錄中至少應(yīng)該有一個(gè)名為main.yml的文件,用于定義各handler;其它的文件需要由(與notify:名字相同,方便notify通知執(zhí)行下一條命令)通過(guò)main.yml進(jìn)行“包含”調(diào)用;
vars/:此目錄中至少應(yīng)該有一個(gè)名為main.yml的文件,用于定義各variable;其它的文件需要由main.yml進(jìn)行“包含”調(diào)用;
templates/:存儲(chǔ)由template模塊調(diào)用的模板文本; (也可以調(diào)用變量)
site.yml:定義哪個(gè)主機(jī)應(yīng)用哪個(gè)角色
1.準(zhǔn)備目錄結(jié)構(gòu)
[root@ansible-server ~]# cd /etc/ansible/roles/ #role為自帶目錄,如果不存在可以創(chuàng)建
[root@ansible-server roles]# mkdir nginx/{files,handlers,tasks,templates,vars} -p
2.創(chuàng)建文件:
[root@ansible-server roles]# touch site.yml nginx/{handlers,tasks,vars}/main.yml
[root@ansible-server roles]# yum install -y tree

1.創(chuàng)建nginx的測(cè)試文件
[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
3.編寫(xiě)任務(wù)
[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: /etc/ansible/roles/nginx/files/index.html dest=/usr/share/nginx/html/index.html
notify: start nginx
4.準(zhǔn)備配置文件
[root@ansible-server roles]# vim nginx/templates/nginx.conf.j2
修改成如下內(nèi)容。自定義變量
5.編寫(xiě)變量
[root@ansible-server roles]# vim nginx/vars/main.yml #添加如下內(nèi)容
worker_connections: 2
6.編寫(xiě)handlers
[root@ansible-server roles]# vim nginx/handlers/main.yml #編寫(xiě)如下內(nèi)容
---
- name: start nginx #和notify的名字必須一樣
service: name=nginx state=started
7.編寫(xiě)劇本
[root@ansible-server roles]# vim site.yml
---
- hosts: webservers4
user: root
roles:
- nginx
檢測(cè)語(yǔ)法
[root@ansible-server roles]# ansible-playbook site.yml --syntax-check
playbook: site.yml
執(zhí)行劇本:
[root@ansible-server roles]# ansible-playbook site.yml
查看:
[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;