Ansible之roles介紹


本節內容:

  • 什么場景下會用roles?
  • roles示例

 

一、什么場景下會用roles?

假如我們現在有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示例

假設有3台主機,172.16.7.151主機上安裝MySQL,172.16.7.152上安裝httpd,172.16.7.153上安裝MySQL和httpd。我們建立兩個角色websrvs和dbsrvs,然后應用到這幾個主機上。

 

1. 創建roles的必需目錄 

[root@node1 opt]# mkdir -pv ansible_playbooks/roles/{websrvs,dbsrvs}/{tasks,files,templates,meta,handlers,vars}

每個role下面有個目錄叫meta,在里面可以新建文件main.yml,在文件中可以設置該role和其它role之前的關聯關系。

 

2. 配置角色

(1)配置角色websrvs

[root@node1 opt]# cd ansible_playbooks/roles/
[root@node1 roles]# cd websrvs/
[root@node1 websrvs]# ls
files  handlers  meta  tasks  templates  vars

a. 將httpd配置文件上傳到files目錄下,我這里假設httpd.conf每台主機都是一樣的,實際上應該用模板,先用一樣的配置文件舉例

[root@node1 websrvs]# cp /etc/httpd/conf/httpd.conf files/

直接復制的靜態文件都放在files目錄下。打算用模板文件的都放在templates目錄下。

 

b.編寫任務列表tasks

[root@node1 websrvs]# vim tasks/main.yml
- name: install httpd package
  yum: name=httpd
- name: install configuration file
  copy: src=httpd.conf dest=/etc/httpd/conf
  tags:
  - conf
  notify:
  - restart httpd
- name: start httpd
  service: name=httpd state=started

 

c.由於上面的tasks中定義了notify,所以要定義handlers

[root@node1 websrvs]# vim handlers/main.yml
- name: restart httpd
  service: name=httpd state=restarted

如果需要定義變量,則在vars目錄下創建main.yml文件,在文件中寫入變量,以key:value的形式定義,比如:

http_port: 8080

 

(2)配置角色dbsrvs

[root@node1 roles]# cd dbsrvs/
[root@node1 dbsrvs]# ls
files  handlers  meta  tasks  templates  vars

a.將MySQL配置文件上傳到files目錄下。


b.編寫任務列表tasks

[root@node1 dbsrvs]# vim tasks/main.yml
- name: install mysql-server package
  yum: name=mysql-server state=latest
- name: install configuration file
  copy: src=my.cnf dest/etc/my.cnf
  tags:
  - conf
  notify:
  - restart mysqld
- name:
  service: name=mysqld enabled=true state=started

 

c.定義handlers

[root@node1 dbsrvs]# vim handlers/main.yml
- name: restart mysqld
  service: name=mysqld state=restarted

 

(3)定義playbook

【注意】:要在roles目錄同級創建playbook。

[root@node1 ansible_playbooks]# vim web.yml
- hosts: 172.16.7.152
  roles:
  - websrvs 

[root@node1 ansible_playbooks]# vim db.yml
- hosts: 172.16.7.151
  roles:
  - dbsrvs 

[root@node1 ansible_playbooks]# vim site.yml
- hosts: 172.16.7.153
  roles:
  - websrvs
  - dbsrvs 

運行:

[root@node1 ansible_playbooks]# ansible-playbook web.yml
[root@node1 ansible_playbooks]# ansible-playbook db.yml
[root@node1 ansible_playbooks]# ansible-playbook site.yml

當然也可以把這些內容寫入同一個playbook中。playbook的名字可以自定義。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM