Ansible的roles標準化

1、使用roles標準化Playbook

roles功能能夠用來規範playbook的編寫nginx

 

1 建立所須要的roles原型目錄結構

(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

image_1ct0c6k5miisbpm8d91ecraus1j.png-31.6kB

image_1ct0cbv0q116hhuc1hhh1q9r1lid20.png-21.1kB

image_1ct0ck8mp142e1elfvqj16o5osq2d.png-30.9kB

image_1ct0br7kh1v834jr1m3liu91gfa9.png-59.1kB
image_1ct0brphgrjs16vk7tb1231rmim.png-15.4kB

注; 
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

 

 

二、roles中vars自定義變量模組的使用

(1)在模塊任務的目錄nginx下建立一個vars目錄用於存放變量文件。 例:mkdir vars3d

(2)vars目錄下建立一個變量文件code

 
例:touch main.yaml
#文件裏面寫變量
---
my_name: mendermi
phone: 13800000

 

(3)在roles/nginx/tasks/main.yaml下添加新的環境變量的任務 
image_1ct0flbou1ejb1gmj1oj0a7d6a37.png-25.6kB

 
  1. [root@ansible myroles]# ansible-playbook nginx.yaml #執行入口配置文件

下圖爲輸出的結果 
image_1ct0f0mv310le1vmd1t3m1mpr164q2q.png-40.9kB

 

三、使用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任務 
image_1ct0kc6fc1f5a1ph61gl86ff1d1v9.png-46.3kB

執行結果

image_1ct0kfmmt368ne81vrj15d3qlum.png-23.3kB

image_1ct0km4ver44cd21fbm69103u1g.png-64.7kB

 

四、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任務

image_1ct0n97mg53qcg91urv7m31jnq13.png-34kB

image_1ct0n6dlk7un195hu9uefjue4m.png-23.1kB

image_1ct0n5nkl15dv3olohp1jl41fbs9.png-34.5kB

 

五、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任務

image_1ct0o0pls1mif1k0l1ac21oc813bv1g.png-40.1kB

image_1ct0odkou1k7pdt918491hkraph1t.png-19.2kB

image_1ct0oeiud1vredcs1tqd19i21mj2a.png-15.4kB

image_1ct0of9ct2n61ja211u811mm16ae2n.png-17.1kB

特別提示: 
notify下發通知只有當以前的任務形成了變化那麼纔會被執行,若是沒有發生任何改變,則notify不會被執行。

例:

image_1ct0p1iqg1qkv1ivu18gt5831f43h.png-35.9kB

image_1ct0ov6c912j31nut2rmria1qb134.png-16.3kB

image_1ct0p4ac4aul8iqqlr1ud11bj50.png-29.5kB

image_1ct0p76ji18nk1oqocoi7281p7t5d.png-28.8kB

相關文章
相關標籤/搜索