這是我參與8月更文挑戰的第9天php
@TOCmysql
往期Ansible目錄 一、自動化運維工具-Ansible實戰指南 二、自動化運維工具-Ansible的Playbook的使用 三、自動化運維工具-Ansible的Roles的使用 四、B站學習連接nginx
編寫playbook有個弊端就是沒法實現複用web
假設在同時部署Web、db、ha 時或不一樣服務器組合不一樣的應用就須要寫多個yml文件。很難實現靈活的調用。。sql
roles 用於層次性、結構化地組織playbook。roles可以根據層次型結構自動裝載變量文件、tasks以及handlers等。shell
要使用roles只須要在playbook中使用include指令便可。服務器
簡單來說,roles就是經過分別將變量(vars)、文件(file)、任務(tasks)、模塊(modules)及處理器(handlers)放置於單獨的目錄中,並能夠便捷地include它們的一種機制。markdown
角色通常用於基於主機構建服務的場景中,但也能夠是用於構建守護進程等場景中。app
假如咱們如今有3個被管理主機,第一個要配置成httpd,第二個要配置成php服務器,第三個要配置成MySQL服務器。咱們如何來定義playbook?運維
第一個play用到第一個主機上,用來構建httpd,第二個play用到第二個主機上,用來構建php,第三個play用到第三個主機上,用來構建MySQL。這些個play定義在playbook中比較麻煩,未來也不利於模塊化調用,不利於屢次調。好比說後來又加進來一個主機,這個第4個主機既是httpd服務器,又是php服務器,咱們只能寫第4個play,上面寫上安裝httpd和php。這樣playbook中的代碼就重複了。
爲了不代碼重複,roles可以實現代碼重複被調用。定義一個角色叫websrvs,第二個角色叫phpappsrvs,第三個角色叫dbsrvs。
hosts: host1
role:
- websrvs
hosts: host2
role:
- phpappsrvs
hosts: host3
role:
- dbsrvs
hosts: host4
role:
- websrvs
- phpappsrvs
複製代碼
roles每一個角色中,以特定的層級目錄進行組織
Mysql/ 角色
#建立固定目錄結構
[root@ansible roles]# tree
.
├── httpd
│ ├── files
│ │ └── httpd.conf
│ └── tasks
│ ├── copyfile.yml
│ ├── main.yml
│ └── user.yml
├── memcache
├── mysql
└── nginx
├── main.yml
├── tasks
│ ├── group.yml
│ ├── restart.yml
│ ├── start.yml
│ ├── user.yml
│ └── yum.yml
└── templates
8 directories, 10 files
[root@ansible roles]# cd nginx/
#定義執行的順序
[root@ansible nginx]# cat main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: start.yml
#每一個任務分別寫出來
[root@ansible nginx]# cd tasks/
[root@ansible tasks]# cat group.yml
- name: create group
group: name=nginx gid=80
[root@ansible tasks]# cat restart.yml
- name: start service
service: name=nginx state=restarted
[root@ansible tasks]# cat start.yml
- name: start service
service: name=nginx state=started enabled=yes
[root@ansible tasks]# cat user.yml
- name: create user
user: name=nginx group=nginx uid=80 system=yes shell=/sbin/nologin
[root@ansible tasks]# cat yum.yml
- name: yum install package
yum: name=nginx
編寫yml調用nginx角色
[root@ansible ansible]# cat role_nginx.yml
- hosts: wsr
remote_user: root
roles:
- role: nginx
經過ansible-playbook來執行
[root@ansible ansible]# ansible-playbook role_nginx.yml
PLAY [wsr] *****************************************************************************
TASK [Gathering Facts] *****************************************************************
ok: [192.168.100.10]
ok: [192.168.100.20]
PLAY RECAP *****************************************************************************
192.168.100.10 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.100.20 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
複製代碼
往後再更~~~