Ansible---Roles简单搭建LAMP架构案例

Roles介绍

  • roles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来说,roles就是经过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并能够便捷地include它们,roles通常用于基于主机构建服务的场景中,但也能够用于构建守护进程等场景中。
  • 针对roles中各个不一样执行操做须要创建单独目录。php

  • 例如:
roles/
  httpd/
    files/
    templates/
    tasks/
    handlers/
    vars/
    defaults/
    meta/

roles内各目录含义解释

files:用来存放由copy模块或script模块调用的文件。
templates:用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。
tasks:此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可使用include包含其它的位于此目录的task文件。
handlers:此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动做。
vars:此目录应当包含一个main.yml文件,用于定义此角色用到的变量。
defaults:此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。
meta:此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。mysql

在一个playbook中使用roles的步骤:

1)建立以roles命令的目录。web

mkdir /etc/ansible/roles/ -p #yum装完默认就有sql

2)建立全局变量目录。apache

mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all #文件名本身定义,引用的时候注意vim

3)在roles目录中分别建立以各角色名称命令的目录,如httpd。架构

mkdir /etc/ansible/roles/common -pide

4)在每一个角色命令的目录中分别建立files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录能够建立为空目录,但不能够不建立。code

mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -pserver

mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p

5)在每一个角色的handlers、tasks、meta、defaults、vars目录下建立main.yml文件,千万不能自定义。

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yaml

touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yaml

6)在playbook文件中,调用各角色。

vim /etc/ansible/lamp.yaml

---
- hosts: webserver
  remote_user: root
  roles:
     - httpd
     - mysql

ansible-playbook lamp.yaml

利用Roles简单安装LAMP架构

一、建立工做目录及对应yaml文件

  • 建立roles执行目录

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

  • 建立执行目录下yaml文件,注意每一个目录下文件名称必须是main.yaml格式,不然没法识别.

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yaml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yaml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yaml

二、httpd模块

vim /etc/ansible/roles/httpd/tasks/main.yaml

- name: ensure apache is at the latest version 
  yum: pkg={{ pkg }} state=latest
  • 定义变量:能够定义在全局变量中,也能够定义在roles角色变量中,通常定义在角色变量中

vim/etc/ansible/roles/httpd/vars/main.yaml

pkg: httpd

三、mysql模块

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

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

vim /etc/ansible/roles/mysql/vars/main.yaml

pkg: mariadb*

四、php模块

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

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

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

pkg: php

五、编写role执行实例

vim /etc/ansible/lamp.yaml

---
- hosts: webserver     //对主机组执行role
  remote_user: root
  roles:      //依次须要执行的role
   - httpd
   - mysql
   - php
  • 按照playbook方式执行role

ansible-playbook lamp.yaml

相关文章
相关标签/搜索