roles功能能夠用來規範playbook的編寫nginx
(1)、建立一個用於存放標準化文件的目錄,名字自定義,例:mkdir myrolesweb
(2)、在標準化目錄myroles下建立一個標準化playbook接口文件,用於自動找標準化目錄下的內容.shell
例:touch nginx.yaml #裏面寫劇本 --- - hosts: webB gather_facts: True roles: - nginx
(3)、在標準化目錄myroles下建立一個playbook的原型配置目錄,用於存放相關模組配置目錄,例:mkdir rolesvim
(4)、在playbook的原型配置目錄roles裏建立一個相關模組配置目錄,用於存放模塊任務的目錄,例:mkdir nginxbash
(5)、在模塊任務的目錄nginx下建立一個ansible模塊任務的劇本,用來執行。ide
例:touch main.yaml #裏面寫具體任務 --- - name: check alived ping: - name: shell: ls / register: ls_result - debug: var=ls_result
以上詳見下圖spa
注;
ansible-playbook執行入口配置文件nginx.yaml後,它會自動在roles目錄下查找nginx目錄並進入後查找tasks任務目錄並執行main.yaml的任務配置文件。
一、相關模組配置目錄,能夠根據不一樣需求來建立,能夠是多個。
二、模組配置目錄下的目錄也可根據執行不一樣任務來建立,能夠是多個
例:原型的目錄結構以下debug
[root@ansible myroles]# tree /myroles/ /myroles/ ├── nginx.yaml #入口觸發配置文件 └── roles #playbook的原型配置目錄 └── nginx #nginx相關模組配置目錄 ├── files #copy模塊和script模塊的參數src默認會從這個文件夾查找 ├── handlers #用來存放notify的 ├── tasks #用來存放ansible模塊任務的 ├── templates #用來存放j2的 └── vars #用來存放變量的 7 directories, 1 file
(1)在模塊任務的目錄nginx下建立一個vars目錄用於存放變量文件。 例:mkdir vars3d
(2)vars目錄下建立一個變量文件code
例:touch main.yaml #文件裏面寫變量 --- my_name: mendermi phone: 13800000
(3)在roles/nginx/tasks/main.yaml下添加新的環境變量的任務
[root@ansible myroles]# ansible-playbook nginx.yaml #執行入口配置文件
下圖爲輸出的結果
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任務
執行結果
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任務
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不會被執行。
例: