roles則是在ansible中,playbooks的目錄組織結構。而模塊化之後,成爲roles的組織結構,易讀,代碼可重用,層次清晰。
實戰目標:通過role遠程部署nginx並配置
目錄順序:
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/ #roles爲自帶目錄,如果不存在可以創建
[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
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
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=/etc/ansible/roles/nginx/files/index.html dest=/usr/share/nginx/html/index.html
notify: start nginx
4.準備配置文件
[root@ansible-server roles]# vim nginx/templates/nginx.conf.j2
修改成如下內容。自定義變量
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
檢測語法
[root@ansible-server roles]# ansible-playbook site.yml --syntax-check
playbook: site.yml
不能單獨檢測一個劇本
執行劇本:
[root@ansible-server roles]# ansible-playbook site.yml