自動化運維工具-Ansible的Roles的使用

這是我參與8月更文挑戰的第9天php

@TOCmysql


前言

往期Ansible目錄 一、自動化運維工具-Ansible實戰指南 二、自動化運維工具-Ansible的Playbook的使用 三、自動化運維工具-Ansible的Roles的使用 四、B站學習連接nginx

1、Roles是什麼?

  1. 編寫playbook有個弊端就是沒法實現複用web

  2. 假設在同時部署Web、db、ha 時或不一樣服務器組合不一樣的應用就須要寫多個yml文件。很難實現靈活的調用。。sql

  3. roles 用於層次性、結構化地組織playbook。roles可以根據層次型結構自動裝載變量文件、tasks以及handlers等。shell

  4. 要使用roles只須要在playbook中使用include指令便可。服務器

  5. 簡單來說,roles就是經過分別將變量(vars)、文件(file)、任務(tasks)、模塊(modules)及處理器(handlers)放置於單獨的目錄中,並能夠便捷地include它們的一種機制。markdown

  6. 角色通常用於基於主機構建服務的場景中,但也能夠是用於構建守護進程等場景中。app

2、什麼場景下會用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
複製代碼

3、目錄層級說明

roles每一個角色中,以特定的層級目錄進行組織

Mysql/ 角色

  • Files/ #存放有copy或script模塊等調用的文件;’
  • Tepmlates/ #template模塊查找所須要模板文件目錄;
  • Tasks/
    #定義任務;至少應該包含一個名爲main.yml的文件;其餘的文件須要在此文件中經過include進行包含。
  • Handlers/
    #定義觸發器;至少應該包含一個名爲main.yml的文件;其餘的文件須要在此文件中經過include進行包含。
  • Vars/
    #定義變量;至少應該包含一個名爲main.yml的文件;其餘的文件須要在此文件中經過include進行包含。
  • Meta/ #定義變量;至少應該包含一個名爲main.yml的文件;定義當前角色的特殊設定及其依賴 關係;其餘的文件須要在此文件中經過include進行包含。
  • Default/ #設定默認變量時使用此目錄中的main.yml文件。

3、調用Roles實例

#建立固定目錄結構
[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   



複製代碼

往後再更~~~

相關文章
相關標籤/搜索