1. Roles目錄結(jié)構(gòu)
2. Roles基本使用
3. 實(shí)例:使用Roles一鍵部署httpd,memcached(可根據(jù)自己需求增加task,以及roles的角色,比如再部署docker,可根據(jù)不同主機(jī)部署相關(guān)的任務(wù),指定tags和hosts。

這個(gè)roles主要是將已知的文件結(jié)構(gòu)預(yù)先是由roles定義好的,它會(huì)自動(dòng)的加載這里面的文件內(nèi)容,例如任務(wù)handlers,都會(huì)自動(dòng)去加載,也就是roles對(duì)已知的進(jìn)行分類分組,使我們很容易的去管理,roles提供一種層次化和結(jié)次化組織你的playbook,這也是我們?nèi)ナ褂盟哪康模幌駊laybook是一個(gè)具體的使用,而roles它是一個(gè)組織的方式,這種方式也是通過ansible的一個(gè)最佳實(shí)踐。
1. roles的目錄結(jié)構(gòu)
它在目錄下有個(gè)site,yaml,這個(gè)是一個(gè)統(tǒng)一的入口,因?yàn)樗鼤?huì)關(guān)聯(lián)很多的文件,所以我們只需要對(duì)著這個(gè)統(tǒng)一的入口進(jìn)行操作
另外就是角色或者功能模塊進(jìn)行部署,像下面的webservers.yaml和fooservers.ymlsite.yml 統(tǒng)一的入口,會(huì)關(guān)聯(lián)很多的文件
webservers.yml 角色或者功能模塊進(jìn)行部署
fooservers.yml hosts 角色或者功能模塊進(jìn)行部署
roles/ 角色目錄,下面又分為不同的模塊
common/ 像common 和webservers,相當(dāng)于兩個(gè)模塊,common用于存放一些公共資源的地方,例如可能會(huì)有很多的項(xiàng)目會(huì)用到共同的變量,或者有相同的依賴,那么都可以在common的這模塊下去定義,這個(gè)模塊也可以稱為角色,這個(gè)角色下面還有很多的目錄,像下面的文件都是屬于它的目錄,這些目錄就是區(qū)別不同的文件或者不同的任務(wù)
files/ 這個(gè)是角色部署時(shí)用到的文件,例如安裝一個(gè)包,安裝一個(gè)軟件可能會(huì)用到它的一個(gè)包,那么這個(gè)包可以放在這個(gè)位置,
templates/ 這個(gè)是它角色部署時(shí)用到的模版,例如jinja渲染一個(gè)配置文件,這里存放一些動(dòng)態(tài)生成文件的,而其他文件的一個(gè)目錄,
tasks/ 任務(wù),具體要做哪些事
handlers/ 處理程序
vars/ 角色的變量
defaults/ 角色的默認(rèn)變量
meta/ 角色定義的一些元數(shù)據(jù)
webservers/ 跟上面的common一樣屬于模塊,下面是所屬的文件
files/。 角色部署時(shí)用到的文件
templates/ 角色部署時(shí)用到的模版
tasks/ 任務(wù),具體要做哪些事
handlers/ 處理程序
vars/ 定義的變量
2. Roles的基本使用
定義角色來定義變量,
這里我們創(chuàng)建了hosts,這個(gè)我們的主機(jī)清單,roles需要放我們的模塊以及不同任務(wù)的目錄,要有一個(gè)site.yaml
[root@ansible roles-demo]# ls
hosts roles site.yaml
[root@ansible roles-demo]# mkdir roles/{common,nginx,php}/{file,templates,tasks,handlers}在每個(gè)tasks下面都寫一個(gè)main的yaml,因?yàn)樗鼤?huì)在你的task下找這個(gè)main,也就是這個(gè)tasks下的一個(gè)入口
查看目錄樹結(jié)構(gòu)
[root@ansible roles-demo]# tree .
.
|-- hosts
|-- roles
| |-- common
| | |-- file
| | |-- handlers
| | |-- tasks
| | | -- main.yaml
| | -- templates
| |-- nginx
| | |-- file
| | |-- handlers
| | |-- tasks
| | | -- main.yaml
| | -- templates
| -- php
| |-- file
| |-- handlers
| |-- main.yaml
| |-- tasks
| -- templates
- site.yaml檢查語法,執(zhí)行[root@ansible roles-demo]# ansible-playbook site.yaml -i hosts --syntax-check
[root@ansible roles-demo]# ansible-playbook site.yaml -i hosts
在site下去定義新的調(diào)用的變量這個(gè)會(huì)找目錄下對(duì)應(yīng)的任務(wù)比如tasks下的任務(wù)
---
- hosts: webservers
gather_facts: no
remote_user: root
roles:
- role: common
- role: nginx
vars:
dir: /opt/a
app_port: 80
- role: php
vars:
dir: /opt/b
app_port: 81在tasks下面去定義任務(wù)這個(gè)會(huì)找site.yaml下面的roles,然后執(zhí)行相關(guān)目錄下面的操作
[root@ansible nginx]# cat tasks/main.yaml
- name: nginx task test
debug: msg="nginx task test > {{dir}} {{app_port}}"也可以寫一個(gè)組,在組里面去定義變量,這個(gè)all會(huì)幫你交給所有組,也可以定義webservers,就是定義單一這個(gè)組
[root@ansible roles-demo]# ls
group_vars hosts roles site.yaml
[root@ansible roles-demo]# cd group_vars/
[root@ansible group_vars]# ls
all
[root@ansible group_vars]# cat all
nginx_ver: 1.15
php_ver: 5.6如果單一給這個(gè)site的單獨(dú)單個(gè)任務(wù)就可以定義標(biāo)簽在執(zhí)行的時(shí)候就可以執(zhí)行單個(gè)roles下的任務(wù)
[root@ansible roles-demo]# vim site.yaml
---
- hosts: webservers
gather_facts: no
remote_user: root
roles:
- role: common
- role: nginx
vars:
dir: /opt/a
app_port: 80
tags: nginx
- role: php
vars:
dir: /opt/b
app_port: 81
tags: php
[root@ansible roles-demo]# ansible-playbook site.yaml -i hosts --tags nginx
PLAY [webservers] *******************************************************************************************************************
TASK [nginx : nginx task test] ******************************************************************************************************
ok: [10.4.7.21] => {
"msg": "nginx task test > /opt/a 80 1.15 5.6"
}
ok: [10.4.7.22] => {
"msg": "nginx task test > /opt/a 80 1.15 5.6"
}
PLAY RECAP **************************************************************************************************************************
10.4.7.21 : ok=1 changed=0 unreachable=0 failed=0
10.4.7.22 : ok=1 changed=0 unreachable=0 failed=0用register變量獲取k8s-master主機(jī)組上的狀態(tài)
這里也可以換成var: test,可以獲取全部的狀態(tài),使用msg進(jìn)行調(diào)式查看某個(gè)字段,獲取那個(gè)字段就可以使用msg
上述中使用”register“關(guān)鍵字將當(dāng)前shell任務(wù)的返回值寫入了名為test的變量中,第二個(gè)debug模塊輸出第一個(gè)任務(wù)中的注冊(cè)變量的值
- name: test
shell: kubectl get node
register: test
- name: shell
debug:
msg: "{{test.stdout_lines}}"執(zhí)行命令
[root@hdss7-200 test]# ansible-playbook -i hosts test.yaml
PLAY [test] *************************************************************************************************************************************************
TASK [nginx : test] *****************************************************************************************************************************************
changed: [10.4.7.11]
TASK [nginx : shell] ****************************************************************************************************************************************
ok: [10.4.7.11] => {
"msg": [
"NAME STATUS ROLES AGE VERSION",
"k8s-master1 Ready <none> 4h47m v1.16.0",
"k8s-node1 Ready <none> 4h47m v1.16.0",
"k8s-node2 Ready <none> 4h47m v1.16.0"
]
}
PLAY RECAP **************************************************************************************************************************************************
10.4.7.11 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ig3.一鍵使用Roles角色部署memcached和httpd
查看我的目錄樹
[root@hdss7-200 test-roles]# tree .
.
├── hosts
├── roles
│?? ├── httpd
│?? │?? └── tasks
│?? │?? └── main.yml
│?? └── memcached
│?? └── tasks
│?? └── main.yml
└── site.yaml
5 directories, 4 files兩個(gè)文件一個(gè)目錄
[root@hdss7-200 test-roles]# ls
hosts roles site.yaml
[root@hdss7-200 test-roles]# ll
總用量 8
-rw-r--r-- 1 root root 18 12月 5 10:43 hosts
drwxr-xr-x 4 root root 36 12月 5 11:10 roles
-rw-r--r-- 1 root root 146 12月 5 11:18 site.yaml主機(jī)組,這里可以根據(jù)你想部署到哪臺(tái)服務(wù)器,寫好你的主機(jī)組,如果想部署某一個(gè)服務(wù),根據(jù)roles的角色的tags部署某個(gè)服務(wù)
[root@hdss7-200 test-roles]# cat hosts
[roles]
10.4.7.22統(tǒng)一的入口,包含部署的角色任務(wù),可以定義多個(gè)角色
[root@hdss7-200 test-roles]# cat site.yaml
---
- hosts: roles
gather_facts: no
remote_user: root
roles:
- role: httpd
tags: httpd
- role: memcached
tags: memcached這就是我們的roles下的tasks的任務(wù),之前的是寫在一個(gè)yml里面,對(duì)于復(fù)雜的任務(wù)我們就可以使用roles來實(shí)現(xiàn)
[root@hdss7-200 test-roles]# cd roles/
httpd/ memcached/
[root@hdss7-200 test-roles]# cat roles/httpd/tasks/main.yml
- name: install httpd
yum: name=httpd state=present
- name: start httpd
systemd: name=httpd state=started enabled=yes
- name: httpd status
shell: ps -ef |grep httpd
register: test
- name: shell
debug:
msg: "{{test.stdout_lines}}"
- name:
debug:
msg: "{{inventory_hostname}}"msg是一個(gè)調(diào)試工具,里面的stdout_lines是這個(gè)取全局變量的一個(gè)值,可以取var: test 就可以得到所有的輸入的內(nèi)容,因?yàn)閍nsible執(zhí)行完是不會(huì)將執(zhí)行成功的內(nèi)容幫我們?nèi)ポ敵龀鰜恚晕覀冃枰约喝フ{(diào)他的系統(tǒng)輸出的變量
[root@hdss7-200 test-roles]# cat roles/memcached/tasks/main.yml
- name: install memcached
yum: name=memcached state=present
- name: start memcached
systemd: name=memcached state=started enabled=yes daemon_reload=yes
- name: memcached status
shell: ps -ef |grep memcached
register: test
- name: memcached ps
debug:
msg: "{{test.stdout}}"查看輸出的整體內(nèi)容
[root@hdss7-200 test-roles]# ansible-playbook -i hosts site.yaml
PLAY [roles] ***************************************************************************************************
TASK [httpd : install httpd] ***********************************************************************************
changed: [10.4.7.22]
TASK [httpd : start httpd] *************************************************************************************
changed: [10.4.7.22]
TASK [httpd : httpd status] ************************************************************************************
changed: [10.4.7.22]
TASK [httpd : shell] *******************************************************************************************
ok: [10.4.7.22] => {
"msg": [
"root 10375 1 3 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10376 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10377 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10378 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10379 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10380 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"root 10417 10416 0 11:28 pts/1 00:00:00 /bin/sh -c ps -ef |grep httpd",
"root 10419 10417 0 11:28 pts/1 00:00:00 grep httpd"
]
}
TASK [memcached : install memcached] ***************************************************************************
ok: [10.4.7.22]
TASK [memcached : start memcached] *****************************************************************************
ok: [10.4.7.22]
TASK [memcached : memcached status] ****************************************************************************
changed: [10.4.7.22]
TASK [memcached : memcached ps] ********************************************************************************
ok: [10.4.7.22] => {
"msg": "memcach+ 10136 1 0 11:21 ? 00:00:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024\nroot 10575 10574 18 11:28 pts/1 00:00:00 /bin/sh -c ps -ef |grep memcached\nroot 10577 10575 0 11:28 pts/1 00:00:00 grep memcached"
}
PLAY RECAP *****************************************************************************************************
10.4.7.22 : ok=8 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0比如單獨(dú)執(zhí)行某個(gè)任務(wù),就部署一個(gè)httpd,這樣的話就很靈活,這里還有一個(gè)debug這個(gè)的話,就是打印主機(jī)名
[root@hdss7-200 test-roles]# ansible-playbook -i hosts site.yaml --tags httpd
PLAY [roles] ***************************************************************************************************
TASK [httpd : install httpd] ***********************************************************************************
ok: [10.4.7.22]
TASK [httpd : start httpd] *************************************************************************************
ok: [10.4.7.22]
TASK [httpd : httpd status] ************************************************************************************
changed: [10.4.7.22]
TASK [httpd : shell] *******************************************************************************************
ok: [10.4.7.22] => {
"msg": [
"root 10375 1 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10376 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10377 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10378 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10379 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"apache 10380 10375 0 11:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND",
"root 10744 10743 0 11:46 pts/1 00:00:00 /bin/sh -c ps -ef |grep httpd",
"root 10746 10744 0 11:46 pts/1 00:00:00 grep httpd"
]
}
TASK [httpd : debug] *******************************************************************************************
ok: [10.4.7.22] => {
"msg": "10.4.7.22"
}
PLAY RECAP *****************************************************************************************************
10.4.7.22 : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 還可以增加一些新的任務(wù)比如批量創(chuàng)建文件
這里使用的{{item}}循環(huán),就可以減少我們?nèi)懚鄠€(gè)name
- name: create file
file: path=/tmp/{{item}} state=touch
with_items:
- "1.txt"
- "2.txt"
- "3.txt"
- "4.txt"執(zhí)行效果
[root@hdss7-200 test-roles]# ansible-playbook -i hosts site.yaml --tags nginx
PLAY [roles] ***************************************************************************************************
TASK [nginx : create file] *************************************************************************************
changed: [10.4.7.22] => (item=1.txt)
changed: [10.4.7.22] => (item=2.txt)
changed: [10.4.7.22] => (item=3.txt)
changed: [10.4.7.22] => (item=4.txt)
PLAY RECAP *****************************************************************************************************
10.4.7.22 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站名稱:Ansible的roles角色詳解-創(chuàng)新互聯(lián)
URL鏈接:http://www.yijiale78.com/article26/cegcjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站排名、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容