Ansibel之roles的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansibel之roles的使用相关的知识,希望对你有一定的参考价值。

Ansibel之roles的使用

roles介绍

roles能够根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们,roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

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文件,用于定义此角色的特殊设定及其依赖关系。

    搭建LAMP架构

    创建各个模版所需要的文件夹

    
    [[email protected] roles]# mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,valts,meta} -p
    #创建httpd服务所需要的目录
    [[email protected] roles]# ls
    httpd
    [[email protected] roles]# cd httpd/
    [[email protected] httpd]# ls
    defaults  files  handlers  meta  tasks  templates  vars

[[email protected] httpd]# mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
#创建mysql服务所需要的目录

[[email protected] httpd]# mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p
#创建php服务所需要的目录

#### 创建main.yml文件

[[email protected] httpd]# touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
[[email protected] httpd]# touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
[[email protected] httpd]# touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

#### 编写httpd服务模块

[[email protected] httpd]# vim tasks/main.yml

  • name: ensure apache is at the latest version
    yum: pkg={{ pkg }} state=latest

[[email protected] httpd]# vim /etc/ansible/roles/httpd/vars/main.yml
[[email protected] httpd]# cat /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
#定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中

#### 编写mysql服务模块

[[email protected] httpd]# vim /etc/ansible/roles/mysql/tasks/main.yml
[[email protected] httpd]# cat /etc/ansible/roles/mysql/tasks/main.yml

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

[[email protected] httpd]# vim /etc/ansible/roles/mysql/vars/main.yml
[[email protected] httpd]# cat /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*

#### 编写php服务模块

[[email protected] httpd]# vim /etc/ansible/roles/php/tasks/main.yml
[[email protected] httpd]# cat /etc/ansible/roles/php/tasks/main.yml

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

[[email protected] httpd]# vim /etc/ansible/roles/php/vars/main.yml
[[email protected] httpd]# cat /etc/ansible/roles/php/vars/main.yml
pkg: php

#### 编写role文件

[[email protected] httpd]# vim /etc/ansible/site.yml
[[email protected] httpd]# cat /etc/ansible/site.yml

  • hosts: webserver
    remote_user: root
    roles:
    • httpd
    • mysql
    • php
      #### 运行文件

      [[email protected] ansible]# ansible-playbook site.yml --syntax-check

playbook: site.yml

[[email protected] ansible]# ansible-playbook site.yml

PLAY [webserver] ****

TASK [Gathering Facts] **
Enter passphrase for key ‘/root/.ssh/id_rsa‘:
ok: [192.168.58.132]

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

TASK [mysql : ensure mysql is at the latest version] ****
ok: [192.168.58.132]

TASK [php : ensure php is at the latest version] ****
changed: [192.168.58.132]

PLAY RECAP **
192.168.58.132 : ok=4 changed=1 unreachable=0 failed=0

[[email protected] ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
[[email protected] ~]# rpm -q mariadb
mariadb-5.5.56-2.el7.x86_64
[[email protected] ~]# rpm -q php
php-5.4.16-45.el7.x86_64
#可以看到安装成功

以上是关于Ansibel之roles的使用的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 navbar

[原创]实战之Ansible生成Apache多主机配置

Ansible 之 roles使用

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

Ansible之roles使用

Ansible之Roles角色