Roles角色管理
角色(roles)是ansible自1.2版本開始引入的新特性,用于層次性,結構化地組織playbook。
? ? roles能夠根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單的說,roles就是通過分別將變量、文件、任務、模塊及處理器放置于單獨的目錄中、并可以便捷地include他們的一種機制。角色一般用于基于主機構建服務的場景中、但也可以是用于構建守護進程等場景中。
一般情況下將roles寫在?/etc/ansible/roles?中,也可以寫在其他任意位置(寫在其他位置要自己手動建立一個roles文件夾)
這里來編譯安裝nginx,部署一個web頁面,同時對roles角色的各個功能進行解析
創建nginx的角色目錄
[root@web01 roles]# mkdir -p /etc/ansible/roles/nginx/{files,tasks,handlers,vars,templates,meta,default}
目錄結構:
[root@web01 roles]# tree.└── nginx├── default├── files├── handlers├── meta├── tasks├── templates└── vars8 directories, 0 files
目錄解析:
- nginx:存放nginx服務的yml文件
- default:此目錄至少應該有一個名為main.yml的文件,用于設定默認變量;
- files:存儲由copy或者script等模塊調用的文件或者腳本;
- handlers:此目錄中至少應該有一個名為main.yml的文件,用于定義各個handler;其他文件需要由main.yml進行包含調用;
- meta:此目錄中至少應該有一個名為main.yml的文件,定義當前角色的特殊設定以及依賴關系,其他文件需要由main.yml進行包含調用;
- tasks:此目錄中至少應該有一個名為main.yml的文件,用于定義各個task;其他文件需要由main.yml進行包含調用;
- templates:存儲由templates模塊調用的模板文件;
- vars:此目錄至少應該有一個名為main,yml的文件,用于定義各個variable;其他的文件需要由main.yml進行包含調用;
整個角色的一個流程:
定義任務配置文件 --> 定義jinja2模板,生成配置文件用 --> 定義變量 --> 定義觸發(通知已定義在配置文件中) --> 定義nginx的yml文件 -->
檢查yml語法 --> 執行nginx.yml文件 --> 查看服務啟動狀態
提前準備工作:傳包
[root@web01 roles]# ls nginx/files/nginx-1.24.0.tar.gz? 李星云.jpg
定義任務配置文件:
[root@web01 roles]# cat nginx/tasks/main.yml- name: copy nginx packagecopy:src: files/nginx-1.24.0.tar.gzdest: /tmp/- name: tarunarchive:src: /tmp/nginx-1.24.0.tar.gzdest: /usr/local/remote_src: yes- name: install 依賴yum:name: "{{ item }}"state: presentloop: "{{ install_package }}"- name: Compile and installshell: |cd /usr/local/nginx-1.24.0./configure --prefix=/usr/local/nginxmake && make install- name: copy imagecopy:src: files/李星云.jpgdest: /usr/local/nginx/html/- name: changes web pagestemplate: src=templates/web.conf.j2 dest=/usr/local/nginx/html/index.htmlnotify: restart- name: start nginxshell: |cd /usr/local/nginx/sbin/./nginx
定義jinjia2模板:
這里這個模板是一個html文件,就是簡單的web頁面
想達到的效果就是,把nginx服務的html目錄下的頁面替換成這個模板
前面說過jinjia2模板可以是支持多種數據類型,這里直接編輯一個html頁面,去替換掉nginx的web頁面
[root@web01 roles]# cat nginx/templates/web.conf.j2<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>畫江湖之不良人 - 李星云</title><style>body {margin: 0;padding: 0;background-image: url('./李星云.jpg');background-size: cover;background-repeat: no-repeat;background-attachment: fixed;color: white;}font-size: 30px;
<body><a href="./luocailian"? target="_blank">學習目錄</a><br/><a href="https://blog.csdn.net/LCL_18?spm=1000.2115.3001.5343"? target="_blank">歡迎來到我的博客</a><div id="luo"><h1>畫江湖之不良人 - 李星云</h1><p>李星云,身世神秘,身負奇學。</p><p>身世:李星云是唐昭宗李曄的第十子,唐哀帝李祚的胞弟。朱溫篡位后,李曄將李星云托付給心腹大臣李煥,李煥帶著李星云隱姓埋名,拜在陽叔子門下學藝。</p><p>成長經歷:李星云在成長過程中結識了師妹陸林軒和好友張子凡,三人一起闖蕩江湖。在江湖中,李星云逐漸揭開了自己的身世之謎,并肩負起了光復唐室的使命。</p><p>性格特點:李星云性格開朗、幽默風趣,十分寵愛自己的師妹陸林軒。他口才出眾,常常用機智的語言逗得大家捧腹大笑。他為人正直,對朋友、對伴侶、對不良人、對天下蒼生都十分有責任心。</p><p>武功技能:李星云的武功技能包括天罡訣、華陽針法、青蓮劍歌、龍泉劍訣、易容術、氣經等。</p>position: relative;left: 50px;margin-top: 20px;color: lightblue;top:100px;}#two {font-size: 30px;position: relative;left: 50px;margin-top: 20px;color: lightblue;top:100px;}</style></head>
<p>武器裝備:李星云的武器裝備包括長劍、龍泉劍、華陽針、唐刀等。</p><p>李星云的背景故事充滿了傳奇色彩,他的成長經歷和性格特點也深受觀眾喜愛</p></div></body></html>h1 {text-align: center;margin-bottom: 200px;font-size: 48px;text-shadow: 2px 2px 4px black;float: none;}p {text-align: center;font-size: 16px;text-shadow: 2px 2px 4px black;}a {
定義變量配置文件:
[root@web01 roles]# cat nginx/vars/main.ymlinstall_package:- gcc- gcc-c++- pcre- pcre-devel- zlib- zlib-devel- make
定義觸發器文件:
root@web01 roles]# cat nginx/handlers/main.yml- name: restartshell:cd /usr/local/nginx/bin./nginx -s reload
定義nginx yml文件
[root@web01 roles]# cat nginx/nginx.yml---- hosts: web02remote_user: rootroles:- nginx
檢查語法,執行命令
[root@web01 roles]# ansible-playbook? --syntax-check nginx/nginx.ymlplaybook: nginx/nginx.yml
最后的目錄結構:
.└── nginx├── default├── files│ ├── nginx-1.24.0.tar.gz│└── 李星云.jpg├── handlers│ └── main.yml├── meta├── nginx.yml├── tasks│ └── main.yml├── templates│└── web.conf.j2└── vars└── main.yml8 directories, 7 files
[root@web01 roles]# tree
[root@web01 roles]# ls nginx/files/
nginx-1.24.0.tar.gz? 李星云.jpg
檢驗結果:
這里注意記得關閉服務所在主機的防火墻
通過瀏覽器檢驗:
可以正常訪問頁面,成功