Ansible的roles標準化
一、使用roles標準化Playbook
roles功能可以用來規範playbook的編寫
1 建立所需要的roles原型目錄結構
(1)、建立一個用於存放標準化檔案的目錄,名字自定義,例:mkdir myroles
(2)、在標準化目錄myroles下建立一個標準化playbook介面檔案,用於自動找標準化目錄下的內容.
例:touch nginx.yaml #裡面寫劇本 --- - hosts: webB gather_facts: True roles: - nginx
(3)、在標準化目錄myroles下建立一個playbook的原型配置目錄,用於存放相關模組配置目錄,例:mkdir roles
(4)、在playbook的原型配置目錄roles裡建立一個相關模組配置目錄,用於存放模組任務的目錄,例:mkdir nginx
(5)、在模組任務的目錄nginx下建立一個ansible模組任務的劇本,用來執行。
例:touch main.yaml #裡面寫具體任務 --- - name: check alived ping: - name: shell: ls / register: ls_result - debug: var=ls_result
以上詳見下圖
注;
ansible-playbook執行入口配置檔案nginx.yaml後,它會自動在roles目錄下查詢nginx目錄並進入後查詢tasks任務目錄並執行main.yaml的任務配置檔案。
1、相關模組配置目錄,可以根據不同需求來建立,可以是多個。
2、模組配置目錄下的目錄也可根據執行不同任務來建立,可以是多個
例:原型的目錄結構如下
[[email protected] myroles]# tree /myroles/ /myroles/ ├── nginx.yaml #入口觸發配置檔案 └── roles #playbook的原型配置目錄 └── nginx #nginx相關模組配置目錄 ├── files #copy模組和script模組的引數src預設會從這個資料夾查詢 ├── handlers #用來存放notify的 ├── tasks #用來存放ansible模組任務的 ├── templates #用來存放j2的 └── vars #用來存放變數的 7 directories, 1file
2、roles中vars自定義變數模組的使用
(1)在模組任務的目錄nginx下建立一個vars目錄用於存放變數檔案。 例:mkdir vars
(2)vars目錄下建立一個變數檔案
例:touch main.yaml #檔案裡面寫變數 --- my_name: mendermi phone: 13800000
(3)在roles/nginx/tasks/main.yaml下新增新的環境變數的任務
[[email protected] myroles]# ansible-playbook nginx.yaml #執行入口配置檔案
下圖為輸出的結果
3、使用copy,script模組的標準化
roles模型裡使用copy,script模組,預設從roles/nginx/files裡面找
(1)先在在模組任務的目錄nginx下建立一個files目錄 mkdir files
(2)在files目錄裡建立指令碼和要copy的檔案。
例: echo "my name is mendermi" > test #建立copy的檔案 vim test.sh #建立指令碼檔案 #!/bin/bash echo "aaa" > /tmp/test #指令碼內容 chmod +x test.sh #給指令碼加上可執行許可權
(3)在roles/nginx/tasks/main.yaml下新增新增copy,script任務
執行結果
4、roles中template模組的使用
roles模型裡使用template模組,預設從roles/nginx/templates裡面找
(1)在模組任務的目錄nginx下建立一個templates目錄用於存放可變的環境變數檔案。例:mkdir template
(2)template目錄下建立可變的環境變數檔案,檔案要以j2結尾。
例:touch test.j2 vim test.j2 myname is {{ my_name }},my phone is {{ phone }} #引用自定義變數 my ipaddress is {{ ansible_all_ipv4_addresses[0] }} #引用內建變數
(3)在roles/nginx/tasks/main.yaml下新增新增template任務
5、roles中notify模組的使用
roles使用notify模組,預設從roles/nginx/handles裡面找
(1)在模組任務的目錄nginx下建立一個handlers目錄用來存放notify動作
例:mkdir handlers
(2)handlers目錄下建立劇本,用於控制
vim main.yaly --- - name: start_nginx shell: /usr/local/nginx/sbin/nginx - name: stop_nginx shell: /usr/local/nginx/sbin/nginx -s stop - name: reload_nginx shell: /usr/local/nginx/sbin/nginx -s reload
(3) 在roles/nginx/tasks/main.yaml下新增新增notify任務
特別提示:
notify下發通知只有當之前的任務造成了變化那麼才會被執行,如果沒有發生任何改變,則notify不會被執行。
例: