Templates、Tags、Roles
- 一、Templates模塊
- 二、tags模板
- 2.1 tags腳本
- 2.2 tags執行
- 2.2.1 直接執行
- 2.2.2 tags執行
- 2.2.3 always執行
- 三、Roles
- 3.1 roles內各目錄含義解釋
- 3.2 在一個playbook中使用roles的步驟
- 3.3 實驗:安裝搭建LAMP架構
- 3.3.1 創建檔案
- 3.3.2 撰寫httpd模塊
- 3.3.3 撰寫MySQL模塊
- 3.3.4 撰寫PHP模塊
- 3.3.5 撰寫roles總腳本
一、Templates模塊
ansible的template模塊,可以將帶有引數的組態檔傳遞到目標地址,可以對檔案進行屬組屬主的修改以及備份,優先類似于docker的consul,
templates功能:根據模板檔案動態生成對應的組態檔,命名必須以 .j2 結尾
#修改httpd組態檔
[root@localhost conf]# vim /etc/httpd/conf/httpd.conf
42 Listen {{http_port}} #給監聽埠定義變數
43 MaxClients {{client_num}} #最大并發量定義變數
95 ServerName {{server_name}} #給域名定義變數
#在主機清單中定義變數
[root@localhost ~]# vim /etc/ansible/hosts
[webservers]
192.168.238.20 http_port=192.168.238.20:80 server_name=www.xyw.com client_num=30
[mysql]
192.168.238.30
#修改名稱為.j2
[root@localhost conf]# cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
[root@localhost conf]# cd /opt/
[root@localhost opt]# ls
httpd.conf.j2 rh test.sh

#撰寫yml腳本
#注意格式對齊
[root@localhost opt]# vim apache.yaml
- hosts: webservers
remote_user: root
vars:
- names: httpd
tasks:
- name: install httpd
yum: name={{names}} state=latest
- name: config file
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf #傳送到被管理端,動態生成檔案內容
notify:
- restart httpd
- name: start httpd server
service: name={{names}} enabled=true state=started
handlers:
- name: restart httpd
service: name ={{names}} state=restarted

#檢查腳本是否有錯誤
ansible-playbook apache.yaml --syntax-check
#執行腳本
ansible-playbook apache.yaml


#去被管理端遠程主機上查看
grep -i listen /etc/httpd/conf/httpd.conf #-i 不區分大小寫
grep -i maxClient /etc/httpd/conf/httpd.conf
grep -i servername /etc/httpd/conf/httpd.conf

二、tags模板
在一個playbook中,我們一般會定義很多個task,如果我們只想執行其中的某一個task或多個task時就可以使用tags標簽功能了
2.1 tags腳本
vim b.yml
- hosts: webservers
remote_user: root
tasks:
- name: copy hosts
copy: src=/etc/hosts dest=/opt/hosts
tags:
- abc
- name: touch hosts
file: path=/opt/hosts01 state=touch


2.2 tags執行
2.2.1 直接執行
ansible-playbook b.yml


2.2.2 tags執行
ansible-playbook b.yml --tags="abc"


2.2.3 always執行
always當tags的標簽使用時,表示總會執行,即使tags未指定其執行,
vim b.yml
- hosts: webservers
remote_user: root
tasks:
- name: copy hosts
copy: src=/etc/hosts dest=/opt/hosts
tags:
- abc
- name: touch hosts
file: path=/opt/hosts01 state=touch
tags:
- always #tags使用always時,不管有沒有被指定,都會執行
ansible-playbook b.yml --tags="abc"



三、Roles
roles能夠根據層次型結構自動裝載變數檔案、task以及handlers等, 簡單來講,roles就是通過分別將變數、檔案、任務、模塊及處理器放置于單獨的目錄中、并可以便捷地include他們的一種機制,角色一般用于基于主機構建服務的場景中、但也可以是用于構建守護行程等場景中,
roles/
common/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
web/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
3.1 roles內各目錄含義解釋
files:用來存放由 copy 模塊或 script 模塊呼叫的檔案,
templates:用來存放jinjia2模板,template 模塊會 自動在此目錄中尋找 jinjia2 模板檔案,
tasks:此目錄應當包含一個 main.yml 檔案, 用于定義此角色的任務串列,此檔案可以使用 include 包含其它的位于此目錄的 task 檔案,
handlers:此目錄應當包含一個 main.yml 檔案, 用于定義此角色中觸發條件時執行的動作,
vars:此目錄應當包含一個 main.yml 檔案,用于定義此角色用到的變數,
defaults:此目錄應當包含一個 main.yml 檔案, 用于為當前角色設定默認變數,
meta:此目錄應當包含一個 main.yml 檔案, 用于定義此角色的特殊設定及其依賴關系,
3.2 在一個playbook中使用roles的步驟
1、創建以roles命令的目錄,
mkdir /etc/ansible/roles/ -p #yum裝完默認就有
2、創建全域變數目錄,
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all #檔案名自己定義,參考的時候注意
3、在roles目錄中分別創建以各角色名稱命令的目錄,如httpd,
mkdir /etc/ansible/roles/common -p
4、在每個角色命令的目錄中分別創建 files、handlers、tasks、templates、meta、defaults和vars 目錄, 用不到的目錄可以創建為空
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
5、在每個角色的handlers、tasks、meta、defaults、vars 目錄下創建 main.yml 檔案,千萬不能自定義,
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
6、在playbook檔案中,呼叫各角色,
vi /etc/ansible/site.yml
- hosts: webservers
remote_user: root
roles:
- httpd
- mysql
3.3 實驗:安裝搭建LAMP架構
3.3.1 創建檔案
#分別在httpd,mysql,php下創建files,templates,tasks,handlers,vars,defaults,meta檔案夾,以便在其下面創建main.yml檔案進行撰寫
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p
#也可三條并一條寫:
mkdir /etc/ansible/roles/{httpd,mysql,php}/{files,templates,tasks,handlers,vars,defaults,meta} -p
#分別在httpd,mysql,php的defaults,vars,tasks,meta,handlers下創建main.yml檔案,便于編譯內容,名稱千萬不能自定義,
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml
#也可三條并一條寫:
touch /etc/ansible/roles/{httpd,mysql,php}/{tasks,handlers,vars,defaults,meta}/main.yml
#樹狀圖遞回查看檔案內容
tree /etc/ansible/roles/{httpd,mysql,php}/
/etc/ansible/roles/httpd/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
/etc/ansible/roles/mysql/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
/etc/ansible/roles/php/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
3.3.2 撰寫httpd模塊
定義變數可以定義在全域變數中,也可以定義在ansible的roles角色變數中,一般定義在角色變數中
#撰寫一個簡單的tasks/main.yml檔案
#定義變數
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version
yum: pkg={{pkg}} state=latest #定義變數為pkg,這里是想用httpd的,但是變數賦值要在vars目錄下的main.yml檔案內撰寫
#賦值變數
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd #此變數定義在httpd中,下面MySQL模塊中使用同一字串進行不同定義也是可以的,不相干


3.3.3 撰寫MySQL模塊
#定義變數
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: ensure mysql is at the latest version
yum: pkg={{pkg}} state=latest
#變數賦值
vim /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*


3.3.4 撰寫PHP模塊
#定義變數
vim /etc/ansible/roles/php/tasks/main.yml
- name: ensure php is at the latest version
yum: pkg={{pkg}} state=latest
#變數賦值
vim /etc/ansible/roles/php/vars/main.yml
pkg: php


3.3.5 撰寫roles總腳本
#撰寫roles總腳本,使各個模塊可以聯合起來執行
vim /etc/ansible/web.yml
- hosts: webservers
remote_user: root
roles:
- httpd
- mysql
- php


#執行
ansible-playbook /etc/ansible/web.yml

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/274146.html
標籤:其他
