自动化运维-Ansible (第三部:Playbook 介绍)

前言

以前有两篇文章分别讲了 Ansible 的部署、Ansible 的 模块使用,对 Ansible 有了最初的了解,这篇文章最主要是要介绍 Playbook。
须要了解 Ansible 的部署请点击:Ansible 第一部 :部署
须要了解 Ansible 的模块庆典节:Ansible 第二部:模块使用
mysql


Playbook 介绍

Playbook 是由一个或多个play 组成的列表,主要功能是将task 定义好的角色归并为一组进行统一管理,也就是经过task 调用 Asible 的模板将多个 play 组织在一个 Playbook 中运行。linux

playbook 由如下各部分组成:
        (1)Tasks :任务,即调用模块完成的一个操做;
        (2)Variables:变量;
        (3)Templates:模板;
        (4)Handlers:处理器,当一个条件知足时,触发执行的操做;
        (5)Roles:角色。

YAML 介绍

YAML 是一种用来表达资料顺序的格式,它因为餐卡了其余多种语言,因此具备很高的可读性。能够认为它就是一种语言格式,必须按照它的这种格式来写语言,才能生效。
它的特性:
1)具备很好的可读性,易于实现;
2)表达能力强,扩展性好;
3)和脚本语言的交互性好;
4)有一个一致的信息规模;
5)能够居于流来处理。
sql

官网地址:http://www.yaml.orgapache


YAML 经常使用的数据类型

YML 中有两种经常使用的数据类型,分别是:list 和 dictionary。
(1)list
列表(list)的全部元素均使用 “ - ” 开头,列如:
vim

-Apple
-Orange
-strawberry
-Mango

(2)dictionary
字典(dictionary)经过 key 与 value 进行标识,如:oracle

name: chenglong
Job: xuexi
Skill: Elite

也可使用 key:value 的形式放置于 { } 中进行标识,如:运维

{ name: Exanple Developer,Job: Developer,Skill: Elite }ssh

Ansilble 基础元素介绍

(1)Inventory(主机清单)ide

Ansible 为了更加便捷的管理主机,在主机清单中将被管理主机进行分组命名,默认的主机清单位置为:/etc/ansible/hosts 文件。工具


1)主机变量:
能够在定义主机时添加主机变量,以便在后续的 playbook 中使用,如:

[aaa_servers]
www1.baidu.com http_port=80 maxRequestsChild=800
www2.baidu.com http_port=8080 maxRequestsChild=900

2)组变量
组变量是指给指定主机设hi能够在 palybook 中直接使用的变量,如:

[aaa-vars]
net_server=ntp.example.org
nfs_server=nfs.example.org

3)组嵌套
在 Inventory 中的组还能够嵌套在其余的组,也能够向组中的主机指定变量,可是这些变量都只能在 ansible-playbook 工具中使用,直接使用 Ansible 工具并不会支持,如:

[aaa]
www1.baidu.com http_port=80 maxRequestsChild=800
www2.baidu.com http_port=8080 maxRequestsChild=900

[bbb]
192.168.100.100
192.168.100.101

[ccc:ddd]
aaa
bbb

自动化运维-Ansible (第三部:Playbook 介绍)

(2)变量

在 Ansible 中变量名仅能由字母、数字和下划线组成,而且只能以字母开头。可使用两种方式来传递 Ansible 变量。

1)经过命令行来传递变量。
在运行 playbook 的时候,能够经过命令行的方式传递变量,给 playbook 使用,如:

ansible-playbook test.yml -e "http_port=8080"

2)在写 playbook 时定义,而且调用。

- hosts: aaa
  remote_user: root
  vars:          **  //定义变量**
  - package: apache      //变量定义 package
  - server: httpd             //变量定义 server

  tasks:
  - name: check latest
    yum: name={{ package }} state=latest           //调用变量  package
  - name: start apache
    service: name={{ server }} state=started        //调用变量  server

自动化运维-Ansible (第三部:Playbook 介绍)

(3)条件测试

1)when 就是条件判断,你给与的条件成立,它就会执行 tasks 里的任务,若是不知足就不执行。

- hosts: aaa
  remote_user: root

  tasks:
  - name: install apache
    yum: name=httpd
    when:
     - ansible_distribution == "CentOS"     //知足条件 1
     - ansible_distribution_major_version == "6"   //知足条件 2

自动化运维-Ansible (第三部:Playbook 介绍)
自动化运维-Ansible (第三部:Playbook 介绍)

2)迭代,当须要执行重复任务时,若是一个一个写,就很麻烦,这时就须要用到 迭代,把须要重复执行的动做,定义为 item 变量并进行引用,而后经过 with_items 语句来指明元素。

- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages
    yum: name={{ item }} state=latest
    with_items:
    - httpd
    - openssh
    - mysql

Hosts 和 Users 介绍

palybook 的设计目的就是为了让某些主机以某个用户的身份去执行相应的任务。其中用于执行任务的主机用 hosts 定义,执行用户用 remote_user 来定义。以下:

- hosts: aaa
  remote_user: root

自动化运维-Ansible (第三部:Playbook 介绍)

remote_user 能够定义指定用户经过 sudo 的方法在被管理主机上运行执行

- hosts: aaa
  remote_user: root
  become: yes
  become_user: oracle    切换用户为Oracle

任务列表和 action 介绍

  • > play 的主体是 任务列表(Tasks list)。任务列表中的任务按照次序逐个在hosts 中指定的全部主机上执行,在顺序执行这些任务时,若是有错误发生将会回滚。
  • > task 的任务是按照指定的参数去执行模块,每一个 task 都使用 name 输出 palybook 的运行结果,通常输出的内容为描述该任务执行的步骤,若是没有提供将输出 action 的运行结果。
  • 列如:

- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages          // name: 自定义名称
    yum: name=httpd state=latest    // yum:安装 httpd 服务,检测是不是最新版本
  - name: disable selinux
    command: /sbin/setenforce 0       //关闭selinux
  - name: disable firewall
    command: systemctl stop firewalld    //关闭防火墙
  - name: apache
    service: name=httpd enabled=true state=started    //启动httpd服务,设置为开启自启

        ansible-playbook -C aaa.yml    检测语法与过程是否正确,不会正真的执行!

自动化运维-Ansible (第三部:Playbook 介绍)

Handlers 介绍

Handlers 用于当关注的资源变化的时候采起的操做。在 notify 中累出的操做便成为 handler,也就是在 notify 中须要条用 handler 中定义的操做。而 notify 这个动做 在每一个 play 的最后被触发,仅在全部的变化发生完成后一次性地执行指定操做。

自动化运维-Ansible (第三部:Playbook 介绍)

Templates 介绍

Templates 能够看做是一个编译过的模板文件,用来产生目标文本,传递变量给模板去替换里面中的标记。

准备一个配置文件模板,必须以 .j2 格式。再对模板进行编辑,统一模板。
[root@master ~]# vim /etc/httpd/conf/httpd.conf.j2
自动化运维-Ansible (第三部:Playbook 介绍)

- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages
    yum: name=httpd state=latest
  - name: disable selinux
    command: /sbin/setenforce 0
  - name: file to httpd
    template: src=/etc/httpd/conf/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

自动化运维-Ansible (第三部:Playbook 介绍)

Tages 介绍

若是屡次执行修改 playbook 会涉及到一些没有变化的代码,可使用tags 让用户选择跳过没有变化的代码,只运行 tags 标记的代码。它就是一个 “ 标签 ” 。

自动化运维-Ansible (第三部:Playbook 介绍)

相关文章
相关标签/搜索