【講清楚,說明白!】Ansible使用role實戰

(1)
(1.1)ansible自1.2版本引入的新特性,用於層次性、結構化地組織playbook。roles可以根據層次型結構自動裝載變量文件、task以及handlers等。要使用roles只須要在playbook中使用include指令便可。簡單來講,roles就是經過分別將變量、文件、任務、模板及處理器放置於單獨的目錄中,並能夠便捷地include它們的一種機制。角色通常用於基於主機構建服務的場景中,但也能夠是用於構建守護進程等場景中。
複雜場景:建議使用roles,代碼複用度高。變動指定主機或主機組;如命名不規範維護和傳承成本大;某些功能需多個playbook,經過include便可實現
官方建議是在/etc/ansible/roles/下建立角色,可是咱們是能夠在任意的路徑下建立的,所以咱們選擇在/root/ansible/roles目錄下建立角色,咱們能夠建立httpd,mysql,memcache這些目錄。
需求:咱們建立一個nginx服務,咱們須要建立一個nginx的組,還須要建立一個nginx用戶,同時還要安裝nginx的包,還能夠把相關的配置文件拷貝到各服務器中,最後還要把nginx的服務啓動起來
# mkdir roles/{httpd,mysql,memcache} -pv
在/root/ansible/roles目錄下建立httpd,mysql,memcache這些目錄
【講清楚,說明白!】Ansible使用role實戰
(1.2)roles目錄結構及各目錄做用--nginx服務
每一個角色,以特定的層級目錄結構進行組織,roles目錄結構在roles/project/目錄下:
1.files/ 目錄:存放由copy或scrip模塊等調用的文件
2.templates/ 目錄:templates模塊查找所須要模板文件的目錄
3.tasks/ 目錄:定義task,role的基本元素,至少應該包含一個名爲main.yaml的文件;其餘的文件須要在此文件中經過include進行包含
4.handlers/ 目錄:至少應該包含一個名爲main.yaml的文件;其餘的文件須要在此文件中經過include進行包含
5.vars/ 目錄(不經常使用):定義變量,至少應該包含一個名爲main.yaml的文件;其餘的文件須要在此文件中經過include進行包含
6.meta/ 目錄(不經常使用):定義當前角色的特殊設定及其依賴關係,至少應該包含一個名爲main.yaml的文件,其它文件須要在此文件中經過include進行包含
7.default/ 目錄(不經常使用):設定默認變量時使用此目錄中的main.yaml文件
需求:咱們建立一個nginx的角色,而後使用角色能夠直接安裝軟件
【講清楚,說明白!】Ansible使用role實戰
# vim group.yaml
在/root/ansible/roles/nginx/tasks目錄下建立一個group.yaml用來建立組的文件
【講清楚,說明白!】Ansible使用role實戰
# vim user.yaml
在/root/ansible/roles/nginx/tasks目錄下建立一個user.yaml用來建立user的文件
【講清楚,說明白!】Ansible使用role實戰
# vim yum.yaml
在/root/ansible/roles/nginx/tasks目錄下建立一個yum.yaml用來安裝文件
【講清楚,說明白!】Ansible使用role實戰
# vim start.yaml
在/root/ansible/roles/nginx/tasks目錄下建立一個start.yaml文件,用來啓動系統的服務
【講清楚,說明白!】Ansible使用role實戰
# vim restart.yaml
在/root/ansible/roles/nginx/tasks目錄下建立一個restart.yaml文件,用來重啓系統的服務
【講清楚,說明白!】Ansible使用role實戰
# cp /etc/nginx/nginx.conf nginx.conf.j2
將/etc/nginx/nginx.conf文件拷貝到/root/ansible/roles/nginx/templates目錄下並命名爲nginx.conf.j2
# vim nginx.conf.j2
編輯nginx.conf.j2配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim templ.yaml
在/root/ansible/roles/nginx/tasks目錄下建立一個templ.yaml文件用來指定模板文件複製到的具體地址下面
【講清楚,說明白!】Ansible使用role實戰
# vim main.yaml
在/root/ansible/roles/nginx/tasks目錄下建立一個main.yaml文件,用來定義task文件誰先執行誰後執行的順序
【講清楚,說明白!】Ansible使用role實戰
# vim nginx_role.yaml
在/root/ansible目錄下建立一個nginx_role.yaml文件,這個文件和/root/ansible/roles文件是平級的關係
【講清楚,說明白!】Ansible使用role實戰
# ansible-playbook nginx_role.yaml
咱們使用playbook執行nginx_role.yaml定義的配置文件,而後便可以給各主機安裝nginx服務
# ansible all -m shell -a 'ss -tnl'
查看其它主機的80端口是否有開啓
# ansible all -m shell -a 'ps aux | grep nginx'
查看各主機的nginx服務是否有啓動
(1.3)roles目錄結構及各目錄做用--httpd服務
需求:咱們須要在各主機上建立apache用戶同時將本機的httpd服務下的httpd.conf文件傳送到對應主機的配置目錄下。
# cp /etc/httpd/conf/httpd.conf /root/ansible/roles/httpd/files/
把本機的httpd服務下的httpd.conf文件拷貝到/root/ansible/roles/httpd/files/目錄下
# vim user.yaml
在/root/ansible/roles/httpd/tasks目錄下建立user.yaml文件,用來建立用戶
【講清楚,說明白!】Ansible使用role實戰
# vim copyfile.yaml
在/root/ansible/roles/httpd/tasks目錄下建立一個copyfile.yaml文件,用來傳輸文件
【講清楚,說明白!】Ansible使用role實戰
# vim main.yaml
在/root/ansible/roles/httpd/tasks目錄下建立一個main.yaml的主的配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim httpd_role.yaml
咱們在/root/ansible目錄下建立一個httpd_role.yaml配置文件,並指定使用建立的角色httpd
【講清楚,說明白!】Ansible使用role實戰
# ansible-playbook httpd_role.yaml
在/root/ansible目錄下使用playbook執行建立的httpd_role.yaml配置文件
# ansible all -m shell -a 'ls -l /data'
查詢/data目錄下是否有生成httpd.conf配置文件
# ansible all -m shell -a 'getent passwd apache'
查詢是否有生成apache用戶
【講清楚,說明白!】Ansible使用role實戰
(1.4)roles目錄結構及各目錄做用--同時安裝httpd和nginx服務
# vim some_role.yaml
若是咱們想在各主機上安裝兩個服務,那麼咱們能夠在yaml文件中定義安裝兩個角色便可
【講清楚,說明白!】Ansible使用role實戰
(1.5)roles目錄結構及各目錄做用--若是咱們想在nginx中調用httpd角色中task下的文件
# vim /root/ansible/roles/nginx/tasks/main.yaml
編輯nginx下的main.yaml文件
【講清楚,說明白!】Ansible使用role實戰
# vim /root/ansible/roles/httpd/tasks/copyfile.yaml
編輯httpd角色下的copyfile.yaml文件,將須要拷貝的文件修改寫上絕對路徑
【講清楚,說明白!】Ansible使用role實戰
# ansible-playbook nginx_role.yaml
在/root/ansible目錄下使用playbook執行建立的nginx_role.yaml配置文件
(2)
(2.1)針對不一樣的role角色添加標籤
# vim some_role.yaml
在/root/ansible目錄下對some_role.yaml文件進行配置
【講清楚,說明白!】Ansible使用role實戰
# ansible-playbook -t web some_role.yaml
咱們使用playbook執行/root/ansible目錄下的web some_role.yaml 文件,其中使用的tag標籤指明爲web
(2.2)針對不一樣的role角色添加when選擇關鍵字
在/root/ansible目錄下對some_role.yaml文件進行配置
【講清楚,說明白!】Ansible使用role實戰
# ansible-playbook some_role.yaml
使用playbook執行some_role.yaml文件,當系統的版本是7的時候會執行安裝nginx服務的操做
(2.3)使用role搭建一個規模化的批量部署程序
【講清楚,說明白!】Ansible使用role實戰
# vim group.yaml
在/root/ansible/roles/app/tasks目錄下編輯group.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim user.yaml
在/root/ansible/roles/app/tasks目錄下編輯user.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim yum.yaml
在/root/ansible/roles/app/tasks目錄下編輯yum.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# cp /etc/httpd/conf/httpd.conf /root/ansible/roles/app/templates/httpd.conf.j2
將httpd服務下的httpd.conf文件拷貝到/root/ansible/roles/app/templates目錄下
# vim httpd.conf.j2
編輯httpd.conf.j2配置文件
【講清楚,說明白!】Ansible使用role實戰
【講清楚,說明白!】Ansible使用role實戰
# vim main.yaml
在/root/ansible/roles/app/vars目錄下建立main.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim templ.yaml
在/root/ansible/roles/app/vars目錄下建立templ.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim main.yaml
在/root/ansible/roles/app/handlers目錄下建立main.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim start.yaml
在/root/ansible/roles/app/tasks目錄下建立start.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim copyfile.yaml
在/root/ansible/roles/app/tasks/copyfile.yaml配置文件中編輯
【講清楚,說明白!】Ansible使用role實戰
# vim main.yaml
在/root/ansible/roles/app/tasks/main.yaml配置文件中編輯
【講清楚,說明白!】Ansible使用role實戰
# vim app_role.yaml
在/root/ansible目錄下的app_role.yaml配置文件中編輯
【講清楚,說明白!】Ansible使用role實戰
# ansible-playbook app_role.yaml
使用playbook執行/root/ansible目錄下的app_role.yaml文件
# ansible all -m shell -a 'ss -tnlp'
查詢各主機上啓動的進程號是不是咱們本身定義的
【講清楚,說明白!】Ansible使用role實戰
# ansible all -m shell -a 'ps aux | grep httpd'
查詢各主機上啓動的進程是不是app用戶
【講清楚,說明白!】Ansible使用role實戰
# ansible all -m shell -a 'ls /etc/httpd/conf.d'
查詢各主機上/etc/httpd/conf.d目錄下是否有生成vhosts.conf文件
(2.4)roles目錄結構及各目錄做用--memcached緩存批量設置
【講清楚,說明白!】Ansible使用role實戰
# yum install memcached -y
在130服務器的本機安裝memcached服務
# rpm -ql memcached
在本機查找到/etc/sysconfig/memcached配置文件
# cat /etc/sysconfig/memcached
查看內存當緩存使用,查看緩存佔用的空間大小爲64M
【講清楚,說明白!】Ansible使用role實戰
# ansible all -m setup -a 'filter="ansible_memtotal_mb"'
查詢各主機的系統緩存信息
# cp /etc/sysconfig/memcached templates/memcached.j2
把/etc/sysconfig/memcached配置文件拷貝到/root/ansible/roles/memcached/templates目錄下並命名爲memcached.j2
# vim /root/ansible/roles/memcached/templatesmemcached.j2
編輯建立的模板文件
【講清楚,說明白!】Ansible使用role實戰
# vim yum.yaml
在/root/ansible/roles/memcached/tasks目錄下編輯yum.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim start.yaml
在/root/ansible/roles/memcached/tasks目錄編輯start.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim main.yaml
在/root/ansible/roles/memcached/tasks目錄編輯main.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim templ.yaml
在/root/ansible/roles/memcached/tasks目錄編輯templ.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# vim memcached_role.yaml
在/root/ansible目錄下建立一個memcached_role.yaml配置文件
【講清楚,說明白!】Ansible使用role實戰
# ansible-playbook memcached_role.yaml
使用playbook執行/root/ansible/memcached_role.yaml文件
# ansible all -m shell -a 'ss -tnlp | grep 11211'
查看各主機上的11211的memcached的端口是否有打開
# ansible all -m shell -a 'cat /etc/sysconfig/memcached'
查看各主機上的/etc/sysconfig/memcached文件中的緩存配置是不是內存的四分之一
【講清楚,說明白!】Ansible使用role實戰
若是還須要其餘更豐富的role,咱們也能夠參考官方站定:https://galaxy.ansible.com/homehttp://www.ansible.com.cn/index.html 學習更多的知識。html

—————— 本文至此結束,感謝閱讀 ——————mysql

相關文章
相關標籤/搜索