天天看點

ansible基礎-ansible角色的使用

一:Roles的概述

Roles能夠根據層次型結構自動裝載變量檔案、task以及handlers等。

簡單來講,Roles就是通過分别将變量、檔案、任務、子產品及處理器放置于單獨的目錄中,并可以便捷地include它們。

Roles一般用于基于主機建構服務的場景中,但也可以用于建構守護程序等場景中。

1.1:Roles的目錄

目錄名稱 具體含義
files 用來存放由copy子產品或script子產品調用的檔案
templates 用來存放j正則模闆,template子產品會自動在此目錄中尋找正則模闆檔案
tasks 此目錄應當包含一個main.yml檔案,用于定義此角色的任務清單,此檔案可以使用include包含其它的位于此目錄的task檔案
handlers 此目錄應當包含一個main.yml檔案,用于定義此角色中觸發條件時執行的動作
vars 此目錄應當包含一個main.yml檔案,用于定義此角色用到的變量
defaults 此目錄應當包含一個main.yml檔案,用于為目前角色設定預設變量
meta 此目錄應當包含一個main.yml檔案,用于定義此角色的特殊設定及其依賴關系

二:安裝搭建LAMP架構執行個體示範

2.1:建立服務元件工作目錄

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

'檢視目錄'
[[email protected] ~]# cd /etc/ansible/roles/
[[email protected] roles]# ls
httpd  mysql  php

[[email protected] roles]# ls httpd/
defaults  files  handlers  meta  tasks  templates  vars
[[email protected] roles]# ls mysql/
defaults  files  handlers  meta  tasks  templates  vars
[[email protected] roles]# ls php/
defaults  files  handlers  meta  tasks  templates  vars
           

2.2:建立yaml檔案

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
           

2.3:編寫http子產品

'寫一個簡單的task/main.yml'
vim /etc/ansible/roles/httpd/tasks/main.yml

- name: ensure apache is at the latest version 
  yum: pkg={{ shuai }} state=latest
  
'定義變量,可以定義在全局變量中,也可以定義在roles角色變量中,一般定義在角色變量中'  
vim /etc/ansible/roles/httpd/vars/main.yml 
shuai: httpd
           

2.4:編寫mysql子產品

vim /etc/ansible/roles/mysql/tasks/main.yml 

- name: ensure mysql is at the latest version
  yum: pkg={{ shuai }} state=latest

'定義變量'
vim /etc/ansible/roles/mysql/vars/main.yml
shuai: mariadb*
           

2.5:編寫php子產品

vim /etc/ansible/roles/php/tasks/main.yml 

- name: ensure php is at the latest version
  yum: pkg={{ shuai }} state=latest

'定義變量'
vim /etc/ansible/roles/php/vars/main.yml
shuai: php*
           

2.6:編寫roles執行個體控制裡面服務

vim /etc/ansible/site.yml

- hosts: webservers
  remote_user: root
  roles:
   - httpd
   - mysql
   - php

'執行劇本'
ansible-playbook site.yml 
PLAY [webservers] **********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [20.0.0.46]

TASK [httpd : ensure apache is at the latest version] **********************************************************
ok: [20.0.0.46]

TASK [ensure mysql is at the latest version] *******************************************************************
changed: [20.0.0.46]
...省略資訊........
           

安裝完成後,查詢驗證指定服務是否安裝

[[email protected] ~]# rpm -q httpd
httpd-2.4.6-93.el7.centos.x86_64
[[email protected] ~]# rpm -q mariadb
mariadb-5.5.65-1.el7.x86_64
[[email protected] ~]# rpm -q php*
php-5.4.16-46.1.el7_7.x86_64
           

本次角色使用安裝已經完成

繼續閱讀