Linux基礎教程之ansible進階(roles應用)
ansible 進階
一、roles簡介
一個項目從開始到結束,不是簡單幾十個playbook就可以完事了,當文件數很多,有上百個的話,僅通過簡單的includes不停的引用,那最終的結果錯綜復雜。這個時候ansible roles就可以很好的發揮它的作用了。
roles,字面意思是角色的含義,可以理解為有相互關聯功能的集合。我們把安裝ntp、mem、nginx、db等等的功能角色放在一個大倉庫里,然后用到哪個,從那里面去拿,拿一個,拿兩個都可以。
roles:是個目錄,角色集合
里面放的有:
????mysql/
????httpd/
????nginx/
????memcached/
每個角色是一個目錄
每個角色的格式,一特定的層級目錄結構進行組織,如下:
mysql/
????files/
????templates/
????tasks/
????handlers/
????vars/
????meta/
用到哪個目錄,給出哪個目錄
二、在playbook中調用角色的方式
-?hosts:?webservers
??remote_user:?root
??roles:
??-?mysql
??-?memcached
??-?nginx
三、以mysql/為例,分別介紹各個目錄的意思
(1)files/:存放copy或script模塊等調用的文件
(2)templates/:templates查找所需要模塊文件的目錄;
(3)tasks/:(必須要有)至少應該包含一個名為main.yml的文件,其他的文件需要在此文件中通過include進行包含;
(4)handlers/:至少應該包含一個名為main.yml的文件,其他的文件需要在此文件中通過include進行包含;
(5)vars/:定義的是變量,至少應該包含一個名為main.yml的文件,其他的文件需要在此文件中通過include進行包含;
(6)meta/:定義此當前角色的特殊設定及其他依賴關系,至少應該包含一個名為main.yml的文件,其他的文件需要在此文件中通過include進行包含;
(7)default/:為當前角色設定默認變量時使用目錄中的main.yml文件
四、例子
(1)mkdir /etc/ansible/roles/nginx{files,tasks,templates,handlers,vars,default,meta} -pv
(2)tree /etc/ansible/roles/nginx
(3)cd /etc/ansible/roles/nginx/
(4)vim tasks/main.yml
(5)cp /root/working/files/nginx.conf.j2 templates/
(6)調用,去working目錄下,建立一個ansible文件夾,cd到里面去,然后vim nginx.yml
(7)運行結果
五、其他配置添加
1、定義觸發器
(1)cd /etc/ansible/roles/nginx 放在handlers目錄下:vim handlers/main.yml
(2)vim tasks/main.yml
(3)ansible-playbook –check nginx.yml
定義tags,直接在tasks/main.yml上加上tags: instconf就可以了
2、自定義變量的使用
(1)cd working/ ,vim myuser.yml
(2)ansible-playbook myuser.yml
(3)再那兩臺機子上看一下:
3、調用roles的第二種方法:傳遞變量給角色
mkdir?-pv?/etc/ansible/roles/memcached/tasks
cd?/memcached
vim?tasks/main.yml
-?name:?install?package
??yum:?name=memcached?state=present
-?name:?start?memcached
??service:?name=memcached?state=started?enabled=true
調用:vim?lnm.yml
-?hosts:?all
??remote_user:
??roles:
??-?{?role:nginx,?when:ansible_distribution_major_version?==?'7'?}
??-?{?role:memcached,?when:ansible_hostname?==?'memcached'?}
ansible-playbook?--check?lnm.yml
大致先寫到這,ansible是門龐大的課程,未完待續。