前言

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


Playbook 介绍

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

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

YAML 介绍

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

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


YAML 常用的数据类型

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

-Apple
-Orange
-strawberry
-Mango

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

name: chenglong
Job: xuexi
Skill: Elite

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

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

Ansilble 基础元素介绍

(1)Inventory(主机清单)

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

(2)变量

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

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

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

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

- hosts: aaaremote_user: rootvars:          **  //定义变量**- package: apache      //变量定义 package- server: httpd             //变量定义 servertasks:- name: check latestyum: name={{ package }} state=latest           //调用变量  package- name: start apacheservice: name={{ server }} state=started        //调用变量  server

(3)条件测试

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

- hosts: aaaremote_user: roottasks:- name: install apacheyum: name=httpdwhen:- ansible_distribution == "CentOS"     //满足条件 1- ansible_distribution_major_version == "6"   //满足条件 2


2)迭代,当需要执行重复任务时,如果一个一个写,就很麻烦,这时就需要用到 迭代,把需要重复执行的动作,定义为 item 变量并进行引用,然后通过 with_items 语句来指明元素。

- hosts: aaaremote_user: roottasks:- name: install pachagesyum: name={{ item }} state=latestwith_items:- httpd- openssh- mysql

Hosts 和 Users 介绍

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

- hosts: aaaremote_user: root

remote_user 可以定义指定用户通过 sudo 的方法在被管理主机上运行执行

- hosts: aaaremote_user: rootbecome: yesbecome_user: oracle    切换用户为Oracle

任务列表和 action 介绍

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

- hosts: aaaremote_user: roottasks:- name: install pachages          // name: 自定义名称yum: name=httpd state=latest    // yum:安装 httpd 服务,检测是否是最新版本- name: disable selinuxcommand: /sbin/setenforce 0       //关闭selinux- name: disable firewallcommand: systemctl stop firewalld    //关闭防火墙- name: apacheservice: name=httpd enabled=true state=started    //启动httpd服务,设置为开启自启ansible-playbook -C aaa.yml    检测语法与过程是否正确,不会正真的执行!

Handlers 介绍

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

Templates 介绍

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

准备一个配置文件模板,必须以 .j2 格式。再对模板进行编辑,统一模板。
[root@master ~]# vim /etc/httpd/conf/httpd.conf.j2

- hosts: aaaremote_user: roottasks:- name: install pachagesyum: name=httpd state=latest- name: disable selinuxcommand: /sbin/setenforce 0- name: file to httpdtemplate: src=/etc/httpd/conf/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

Tages 介绍

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

转载于:https://blog.51cto.com/13746824/2309868

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

  1. 自动化运维—ansible

    2019独角兽企业重金招聘Python工程师标准>>> 自动化运维-ansible 一.Ansible介绍 Ansilbe是一个部署一群远程主机的工具.远程的主机可以是远程虚拟机或物 ...

  2. 自动化运维---ansible常用模块之文件操作(findreplace模块)

    自动化运维-ansible常用模块之文件操作(find&replace模块) 文章目录 自动化运维---ansible常用模块之文件操作(find&replace模块) 1.find模 ...

  3. linux自动化运维ansible

    linux自动化运维ansible 一.概述 二.安装 1.配置安装源 2.安装 3.查询版本信息 三.设置主机清单 1.添加ip及账号信息 2.修改主配置文件 3.测试是否成功 四.模块应用 1.模 ...

  4. 企业自动化运维ansible

    自动化运维工具ansible 运维自动化发展历程及技术应用 云计算工程师核心职能 Linux运维工程师职能划分 自动化动维应用场景 文件传输 命令执行 应用部署 配置管理 任务流编排 企业实际应用场景 ...

  5. 自动化运维-Ansible详解

    ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...

  6. 自动化运维-Ansible 运维自动化 ( 配置管理工具 )

    当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开源平台 ...

  7. ansible自动化运维(三)——Playbook实战

    前言 1.什么是ansible playbook? Playbooks是一种完全不同的运用Ansible的方式,而且是非常之强大的:也是系统ansible命令的集合,其利用yaml语言编写,运行过程, ...

  8. 自动化运维-Ansible(redhat 8)

    在控制节点安装Ansible redhat 8自带python 3:如果没有安装,需要自行安装 查看是否安装python3 [root@localhost ~]# yum list installed ...

  9. 自动化运维: Ansible

    文章目录 为什么选择 Ansible Ansible 基本架构 Ansible 基本组成 Ansible 工作原理 Ansible 安装 主机清单 1. 简单的主机和组 2. 端口与别名 3. 指定主 ...

最新文章

  1. Class101–如何高效地构建强大的数字绘画
  2. element ui 前台模板_用 Vue+ElementUI 搭建后台管理极简模板
  3. CentOS 6.6编译安装LAMP(Apache2+PHP+Mysql+PHPmyAdmin)
  4. 【算法】LeetCode算法题-Remove Duplicates from Sorted Array
  5. Python subprocess.check_output 执行shell命令 返回结果(单次执行shell命令)
  6. c语言数据结构五子棋实验报告,数据结构课程设计-五子棋
  7. Java InputStream转换为String
  8. Say“No”,你学会了吗?
  9. Java数据结构与算法(十) 图
  10. 全套思源黑体合集(含ttf/ttc版/行高修正版)
  11. Echarts中饼状图显示百分比
  12. pikachu~~~验证码绕过(on client on server)
  13. 转载新闻 你应该知道的一些 Linux 技巧
  14. python 爬虫程序详解
  15. 【夏目鬼鬼分享】StringBoot整合RabbitMQ,使用Direct、Fanout、Topic三种模式
  16. dmx512 java,stm32 DMX512核心代码
  17. 第十周计算个人所得税
  18. 完全免费的不限速下载器Progressive Downloader
  19. 计算机机器视觉原理之全连接神经网络1
  20. 403,和404 啥意思?

热门文章

  1. ES6的Reflect对象
  2. 一道二叉树的题目--后序遍历+中序遍历确定二叉树
  3. FTP上传下载使用ASCII与binary的区别
  4. WDA 程序文本翻译OTR
  5. 作业2结对(升级版)
  6. .NET生成常用16、32位MD5加密的两种方法
  7. 由Net Applications的浏览器的市场份额想开的
  8. 诗与远方:无题(五十九)
  9. Python OSError: [Errno 22] Invalid argument:的出现和解决
  10. javaweb项目启动时日志不报错项目又起不来-跑空猫