之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结.

为什么引入playbook?
一般运维人员完成一个任务, 比如安装部署一个httpd服务会需要多个模块(一个模块也可以称之为task)提供功能来完成。而playbook就是组织多个task的容器,它的实质就是一个文件,有着特定的组织格式,它采用的语法格式是YAML(Yet Another Markup Language)。YAML语法能够简单的表示散列表,字典等数据结构。简单来说, playbook是由一个或多个模块组成的,使用多个不同的模块,完成一件事情。

Ansible核心功能
-  pyYAML用于ansible编写剧本所使用的语言格式(saltstack---python);
-  rsync-ini语法, sersync-xml语法, nsible-pyYAML语法;
-  paramiko远程连接与数据传输;
-  Jinja2用于编写ansible的模板信息;

YAML三板斧
缩进: YAML使用一个固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用tabs;
冒号: 以冒号结尾的除外,其他所有冒号后面所有必须有空格;
短横线: 表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一列表;

YAML基本语法
列表:每一个列表成员前面都要有一个短横线和一个空格

fruits:- Apple- Orange- Strawberry- Mango或者:
fruits: ['Apple', 'Orange', 'Strawberry', 'Mango']

字典:每一个成员由键值对组成,注意冒号后面要有空格

martin:name: Martin D'vloperjob: Developerskill: Elite
或者
martin: {name: Martin D'vloper, job: Developer, skill: Elite}

列表和字典可以混合使用

-  martin:name: Martin D'vloperjob: Developerskills:- python- perl- pascal
-  tabitha:name: Tabitha Bitumenjob: Developerskills:- lisp- fortran- erlang

playbook基础组件
Hosts:运行执行任务(task)的目标主机
remote_user:在远程主机上执行任务的用户
tasks:任务列表
handlers:任务,与tasks不同的是只有在接受到通知时才会被触发
templates:使用模板语言的文本文件,使用jinja2语法。
variables:变量,变量替换{{ variable_name }}

整个playbook是以task为中心,表明要执行的任务。hosts和remote_user表明在哪些远程主机以何种身份执行。其他组件让其能够更加灵活。下面介绍下这些插件:

1.  variable
变量定义在资产 (inventory) 中, 默认就是/etc/ansible/hosts文件中

主机变量:
192.168.200.136 http_port=808 maxRequestsPerChild=808
192.168.200.137 http_port=8080 maxRequestsPerChild=909主机组变量:
[websers]
192.168.200.136
192.168.200.137[websers:vars]
ntp_server=ntp.exampl.com
proxy=proxy.exampl.com

变量定义在playbook中

- hosts: webserversvars:http_port: 80

使用facts变量

facts变量是由setup模块获取远程主机的信息。用法:
# ansible 192.168.200.136 -m setup

在roles中定义变量, 这个后面会介绍到.

ansible-playbook 命令中传入参数

使用 -e选项传入参数
# ansible-playbook 192.168.200.136 -e "httpd_port=808" httpd04.yml

变量的引用

{{ var_name }}

2.  templates
它是一个模块功能,与copy不同的是他的文本文件采用了jinga2语法,jinga2基本语法如下:

字面量:字符串:使用单引号或双引号数字:整型,浮点数列表:{item1,item2,...}字典:{key1:value1,key2:value2,...}布尔型:true/false
算术运算:+,-,*,/,//,%,**
比较运算:==,!=,>,>=,<,<=
逻辑运算:and,or,not

注意:template只能在palybook中使用。

3.  tasks
执行的模块命令

格式:action:模块参数(此种方式只在较新的版本中出现)module:参数(已键值对的形式出现)每一个task都有一个名称,用于标记此任务。任务示例:name: install httpdyum: name=httpd state=present注意:shell和command没有参数,可在后面直接跟命令shell: ss -tnl | grep :801)某任务的运行状态为changed后,可通过相应的notify通知相应的handlers
2)任务可以通过tags打标签,然后通过palybook命令-t选项调用.

playbook调用方式

用法:
ansible-playbook  <filename.yml> ... [options]

<filename.yml>: yaml格式的playbook文件路径,必须指明
[options]: 选项

-C, --check:并不在远程主机上执行,只是测试。
-i PATH, --inventory=PATH:资产的文件路径
--flush-cache:清楚fact缓存
--list-hosts:列出匹配的远程主机,并不执行任何动作
-t, TAGS, --tags=TAGS:运行指定的标签任务
--skip-tags:跳过指定的notify,后面详细介绍。

palybook书写格式

- hosts: 172.16.60.211                #处理指定服务器.   - (空格)hosts:(空格)172.16.20.211task:                               #剧本所要干的事情; (空格)(空格)task:- name:                             #(两个空格)-(空格)name:command: echo hello clsn linux    #(四个空格)command:(空格)        

palybook格式示例

[root@ansible-server ~]# vim /etc/ansible/test.yaml
- hosts: 172.16.60.213tasks:- name: Install Rsyncyum: name=rsync state=installedplaybook检查方法
[root@ansible-server ~]# ansible-playbook --syntax-check /etc/ansible/test.yamlplaybook: /etc/ansible/test.yaml
[root@ansible-server ~]# ansible-playbook -C /etc/ansible/test.yamlPLAY [172.16.60.213] *******************************************************************************************************************TASK [Gathering Facts] *****************************************************************************************************************
ok: [172.16.60.213]TASK [Install Rsync] *******************************************************************************************************************
ok: [172.16.60.213]PLAY RECAP *****************************************************************************************************************************
172.16.60.213              : ok=2    changed=0    unreachable=0    failed=0  上面两个检查命令, 第一个是进行playbook剧本配置信息语法检查; 第二个是模拟playbook剧本执行(彩排)

palybook剧本文件示例

ansible-playbook编写内容扩展剧本任务编写多个任务

- hosts: alltasks:- name: restart-networkcron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'- name: sync timecron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

剧本编写内容扩展:剧本任务编写多个主机

- hosts: 172.16.60.7tasks:- name: restart-networkcron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'- name: sync timecron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"- hosts: 172.16.60.31tasks:- name: show ip addr to fileshell: echo $(hostname -i) >> /tmp/ip.txt

playbook剧本编写方式
-  多主机单任务编写方式
-  多主机多任务编写方式
-  不同主机多任务编写方式

Ansible-playbook案例分享

1) 机器环境
角色                   外网ip                      内网ip                           部署软件
m01                  eth0:10.0.0.61         eth1:172.16.1.61         ansible
backup              eth0:10.0.0.41         eth1:172.16.1.41         rsync
nfs                    eth0:10.0.0.31          eth1:172.16.1.31         nfs、Sersync
web01               eth0:10.0.0.7           eth1:172.16.1.7            httpd2) 目录规划
[root@m01 ~]# mkdir /etc/ansible/ansible_playbook/{file,conf,scripts} -p
[root@m01 ~]# tree /etc/ansible/ansible_playbook/
/etc/ansible/ansible_playbook/
├── conf
└── file
└── scripts3) rsync配置文件
准备对应的配置文件存放至/etc/ansible/ansible_playbook/conf/
[root@m01 conf]# cat /etc/ansible/ansible_playbook/conf/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.password
log file = /var/log/rsyncd.log
#####################################[backup]
path = /backup
[data]
path = /data4) nfs配置文件
准备nfs配置文件exports
[root@m01 ansible_playbook]# cat /etc/ansible/ansible_playbook/conf/nfs_exports
/data/ 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)5) Sersync软件包
下载Sersync软件包
[root@m01 ansible_playbook]# ll /etc/ansible/ansible_playbook/file/
-rw-r--r-- 1 root root 727290 Aug  1 12:04 sersync.tar.gz6) sersync配置文件
准备sersync实时同步的配置文件
[root@m01 ansible_playbook]# cat /etc/ansible/ansible_playbook/conf/confxml.xml.nfs7) 基础环境部署
基础环境:所有机器统一的配置
需要关闭firewalld以及selinux、epel仓库、ssh端口、优化基础配置
需要安装rsync和nfs-utils
准备www用户
需要准备/etc/rsync.pass密码文件
需要准备全网备份脚本基础的playbook剧本
[root@m01 ansible_playbook]# cat base.yaml
- hosts: alltasks:- name: Install Epel Reposget_url: url=http://mirrors.aliyun.com/repo/epel-7.repo dest=/etc/yum.repos.d/epel.repo- name: Install Rsync Nfs-Utilsyum: name=rsync,nfs-utils state=installed- name: Create Group WWWgroup: name=www gid=666- name: Create User WWWuser: name=www uid=666 group=666 create_home=no shell=/sbin/nologin- name: Create Rsync_Client_Passcopy: content='1' dest=/etc/rsync.pass mode=600- name: Create Scripts Directoryfile: path=/server/scripts recurse=yes state=directory- name: Push File Scriptscopy: src=./scripts/rsync_backup_md5.sh dest=/server/scripts/- name: Crontable Scriptscron: name="backup scripts" hour=01 minute=00 job="/bin/bash /server/scripts/rsync_backup_md5.sh &>/dev/null"8) 应用环境:Rsync
安装rsync
配置rsync(配置变更,一定要进行重载操作)
创建虚拟用户,权限调整
创建目录/data/  /backup
启动rsync
配置邮箱->邮箱的发件人->校验的脚本[root@m01 ansible_playbook]# cat rsync.yaml
- hosts: backuptasks:- name: Installed Rsync Serveryum: name=rsync,mailx state=installed- name: configure Rsync Servercopy: src=./conf/rsyncd.conf dest=/etc/rsyncd.confnotify: Restart Rsync Server- name: Create Virt Usercopy: content='rsync_backup:1' dest=/etc/rsync.password mode=600- name: Create Datafile: path=/data state=directory recurse=yes owner=www group=www mode=755- name: Create Backupfile: path=/backup state=directory recurse=yes owner=www group=www mode=755- name: Start RsyncServerservice: name=rsyncd state=started enabled=yes- name: Push Check Scriptscopy: src=./scripts/rsync_check_backup.sh dest=/server/scripts/- name: Crond Check Scriptscron: name="check scripts" hour=05 minute=00 job="/bin/bash /server/scripts/rsync_check_backup.sh &>/dev/null"9)  应用环境:NFS
安装nfs-utils
配置nfs (当修改了配置,触发重载操作)
创建目录,授权
启动[root@m01 ansible_playbook]# cat nfs.yaml
- hosts: nfstasks:- name: Installed Nfs Serveryum: name=nfs-utils state=installed- name: Configure Nfs Servercopy: src=./conf/exports dest=/etc/exportsnotify: Restart Nfs Server- name: Create Share Datafile: path=/data state=directory recurse=yes owner=www group=www mode=755- name: Start Nfs Serverservice: name=nfs-server state=started enabled=yeshandlers:- name: Restart Nfs Serverservice: name=nfs-server state=restarted10) 应用环境:Sersync
下载sersync
解压,改名,配置
启动[root@m01 ansible_playbook]# cat sersync.yaml
- hosts: nfstasks:- name: Scp Sersynccopy: src=./file/sersync2.5.4_64bit_binary_stable_final.tar.gz dest=/usr/local/sersync.tar.gz- name: Zipshell: cd /usr/local && tar xf sersync.tar.gz && mv GNU-Linux-x86 sersyncargs:creates: /usr/local/sersync- name: configure Sersynccopy: src=./conf/confxml.xml dest=/usr/local/sersync/- name: Start Sersyncshell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml11) 应用环境:WEB
挂载nfs共享的目录[root@m01 ansible_playbook]# cat web.yaml
- hosts: webtasks:- name: Mount NFS Server Share Datamount: src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted12) 包含include
[root@m01 ansible_playbook]# cat mail.yaml
- import_playbook: base.yaml
- import_playbook: rsync.yaml
- import_playbook: nfs.yaml
- import_playbook: sersync.yaml
- import_playbook: web.yaml13) 操作后测试步骤
快照还原
推送公钥
使用ping模块测试
执行ansible-playbook测试
测试全网备份,测试是否能发邮件,并校验结果
测试nfs的挂载
测试实时同步

转载于:https://www.cnblogs.com/kevingrace/p/5569648.html

Ansible之playbook的使用总结 - 运维笔记相关推荐

  1. 【干货】美团点评架构师私藏的内部Linux运维笔记!

    最近不少小伙伴后台联系,希望能弄一些大厂的学习资料,我这边费了很大劲,联系到老朋友,原美团点评架构师张sir,问他要了些美团点评架构的内部资料. 这份资料含金量非常高,包含整个美团点评架构架构图,Li ...

  2. 运维笔记--postgresql占用CPU问题定位

    运维笔记--postgresql占用CPU问题定位 场景描述: 业务系统访问变慢,登陆服务器查看系统负载并不高,然后查看占用CPU较高的进程,发现是连接数据库的几个进程占用系统资源较多. 处理方式: ...

  3. 老男孩的运维笔记文档-高级部分(系统架构师)列表(三)

    ############################################################ # # USER          YYYY-MM-DD – ACTION # ...

  4. [运维笔记] PowerShell (模块).模块的查找、安装、卸载、更新、保存、发布

    [运维笔记] PowerShell (库/模块).库的查找.安装.卸载.更新.保存.发布 作者主页:jcLee95:https://blog.csdn.net/qq_28550263?spm=3001 ...

  5. [运维笔记] PowerShell (模块).模块清单

    [运维笔记] PowerShell (模块).模块清单 作者:jcLee95 目 录 1. 模块清单是什么 2. 如何创建模块清单 3. 模块清单.psd1文件内容解释 4. 某库的模块清单实例 1. ...

  6. Nginx基础应用配置小结 - 运维笔记

    Nginx基础应用配置小结 - 运维笔记 在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介 N ...

  7. linux运维笔记:动态网页资源

    linux运维笔记:动态网页资源 1.动态网页资源介绍 所谓的动态网页是与静态网页相对而言,也就是说,动态网页的URL后缀 不是.htm..html..shtml..xml..js..css等静态网页 ...

  8. Nginx重启时提示nginx: [emerg] bind() to 0.0.0.0解决方法 老蒋 发布于 2019-06-03 分类:运维笔记 评论(0) 2000+站长交流QQ群: 59

    c 老蒋 发布于 2019-06-03 分类:运维笔记 评论(0) 2000+站长交流QQ群: 594467847(资源和技术交流) 昨天下午老蒋在一台服务器中折腾迁移数据问题的时候,重启Nginx的 ...

  9. linux运维笔记:DNS解析IP地址的过程(dns解析的原理 )

    linux运维笔记:DNS解析IP地址的过程(dns解析的原理 ) 1.首先:说一下dns解析的流程,大家都知道,计算机之间只能通过ip相互通信,因为ip不好记,于是才使用dns服务器把域名解析为相应 ...

  10. H5直播站点运维笔记一 服务器篇

    H5直播站点运维笔记一 服务器 服务器篇 一.CentOS6基础操作 1. 查看服务器版本 2. 查看服务器性能 3. 文件查找 4. 软件查找 5. 用户系统 6. 远程登录工具 二.FTP ( V ...

最新文章

  1. 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java
  2. vs2005+Access开发网站管理系统日志1
  3. 重读ORB_SLAM之Tracking线程难点
  4. 8年,永洪科技凭什么跑出中国BI领军速度?
  5. Yarn管理界面中各个参数和yarn-site.xml中参数的对应关系
  6. Linux 中统计一个进程的线程数
  7. 剑指offer-python解答
  8. java 秒表时间格式化_java方法计时器,懒汉式,转换为00:00:00格式
  9. 5G 套餐最快本月开售;谷歌被指骗取人脸数据;Calibre 4.0 发布 | 极客头条
  10. C++——unique()和unique_copy()
  11. 4种方法解决js跨域的实现方式
  12. [bigdata-56] py3+selenium 抓取学信网 最简demo
  13. Oracle PeopleSoft 应用安全加固
  14. 去谷歌面试,竟让扔鸡蛋?
  15. python_分水岭算法
  16. 纵即逝的烟花蓄势于纸
  17. 博客变味:从一方净土沦落为企业枪手
  18. 手写签名插件—jSignature使用心得
  19. 圣商,牢记使命成就当代圣商
  20. CS224d lecture 14札记

热门文章

  1. jdi屏幕斜纹_如何看待小米6使用有斜纹的jdi屏幕?
  2. 10投屏后没有声音_10年后,学区房有没有可能成为“负资产”?这位专家说了实话...
  3. java复用的具体实现_Java应用架构读书笔记(6):实现复用
  4. java map存储格式_java HashMap HashSet的存储方式
  5. Swift 5 Dictionary用法大全
  6. 基于PCA降维实现人脸识别
  7. android开发第一个程序,Android开发入门之第一个android程序
  8. pycharm关闭pytest模式
  9. python appium 并行多设备_appium 多个设备同时执行
  10. 电脑太慢了最简单的办法怎么弄_最简单的电脑端微信多开方法