ansible自动化运维工具(5)

目录

  • 一. 实施处理程序
      • 1. 处理程序
      • 2. 处理任务失败
      • 3. 总结
  • 二. 在受管节点上创建文件或目录
      • 修改文件并将其复制到主机
          • 2.1 常用文件模块
          • 2.2 file 模块处理文件
  • 三. 使用 jinja2 模板部署自定义文件
      • 3.1 jinja2模块介绍
      • 3.2 控制结构
      • 3.3 变量过滤器
      • 3.4 总结
  • 四. 管理大项目
      • 4.1 利用主机模式选择主机
      • 4.2 管理动态清单
      • 4.3 配置并行
      • 4.4 管理滚动更新
      • 4.5 包含和导入文件
      • 4.6 管理大项目综合实验

一. 实施处理程序

1. 处理程序

处理程序是响应由其他任务触发的通知的任务

1.1 只有在 template 任务通知已发生更改时才触发
ansible自动化运维工具(5)_第1张图片

1.2 ansible 把 notify 语句当作数组
ansible自动化运维工具(5)_第2张图片

  • 写 playbook
    ansible自动化运维工具(5)_第3张图片
    ansible自动化运维工具(5)_第4张图片

1.3 使用处理程序注意

1.处理程序始终按照 play 的 handlers 部分指定的顺序运行,不按 notify 里的

2.处理程序通常在相关 play 中所有其他任务运行完后运行

3.处理程序名称存在于个 play 命名空间中(如果两个处理程序同名,只会运行一个)

4.如果多个任务通知处理程序,处理程序也只会运行一次

5.如果包含 notify 的语句任务没有报告 changed 结果,则处理程序不会获得通知
ansible自动化运维工具(5)_第5张图片

2. 处理任务失败

通常 playbook 遇到错误会中止执行,但是有时我们想要失败时也继续执行

2.1 忽略任务失败
关键字:ignore_errors
ansible自动化运维工具(5)_第6张图片

ansible自动化运维工具(5)_第7张图片

2.2 任务失败后强制执行处理程序
通常任务失败,play 会中止,那么收到 play 中之前任务通知的处理程序将不会运行,如果要运 行,需要使用关键字:
force_handlers:yes

ansible自动化运维工具(5)_第8张图片
ansible自动化运维工具(5)_第9张图片

2.3 指定任务失败条件
关键字:failed_when
ansible自动化运维工具(5)_第10张图片
2.4 指定任务何时报告"Changed"结果
关键字:changed_when

ansible自动化运维工具(5)_第11张图片

2.5 ansible 块和错误处理
三种关键字

block 定义要运行的主要任务
rescue 定义要在 block 子句中定义的任务失败时运行的任务
always 定义时中独立运行的任务

练习:
1. 故意制造错误
ansible自动化运维工具(5)_第12张图片
ansible自动化运维工具(5)_第13张图片
2. 添加忽略关键字
ansible自动化运维工具(5)_第14张图片
ansible自动化运维工具(5)_第15张图片
3. 使用 block、rescue、always 将任务分开
ansible自动化运维工具(5)_第16张图片
ansible自动化运维工具(5)_第17张图片
4. 再修改,将 http 的包改为正确
ansible自动化运维工具(5)_第18张图片
ansible自动化运维工具(5)_第19张图片
5. 控制’changed’条件
ansible自动化运维工具(5)_第20张图片

运行发现 check time 任务始终是 changed
因为任务没有更改受管主机,所以不应该每次都是 changed
ansible自动化运维工具(5)_第21张图片
6.修改文件

ansible自动化运维工具(5)_第22张图片

ansible自动化运维工具(5)_第23张图片
7. 使用 failed_when 关键字
ansible自动化运维工具(5)_第24张图片
ansible自动化运维工具(5)_第25张图片

3. 总结

1.循环迭代的方法

2.条件用于仅再符合特定条件时执行任务或 play

3.处理程序用法

4.只有任务报告受管主机做了更改,才会通知处理程序

5.处理任务失败,即使成功的任务也可以标记为失败

6.block块用于将任务分组为单元,通过任务是否成功来确定执行其他任务与否

二. 在受管节点上创建文件或目录

修改文件并将其复制到主机

2.1 常用文件模块
blockinfile 将文本块添加到现有文件
copy 将文件复制到受管主机
fetch 从受管主机拷贝文件到控制节点
file 设置文件属性
lineinfile 确保特定行位于某个文件
stat 检索文件状态信息
synchronize rsync 命令的一个打包程序
2.2 file 模块处理文件

file 模块处理文件,如果不存在就新建
ansible自动化运维工具(5)_第26张图片
在这里插入图片描述

  • 修改文件属性
    ansible自动化运维工具(5)_第27张图片
    ansible自动化运维工具(5)_第28张图片
    ansible自动化运维工具(5)_第29张图片

  • 永久更改
    ansible自动化运维工具(5)_第30张图片
    ansible自动化运维工具(5)_第31张图片
    在这里插入图片描述

2.3 在受管主机上复制和编辑文件
blockinfile
blockinfile 模块帮助我们在指定的文件中插入”一段文本”,这段文本是被标记过的,也就是我们在这段文本上做了记号,以便在以后的操作中可以通过”标记”找到这段文本,然后修改或者删除它

blockinfile copy fetch lineinfile

2.4 从受管主机中删除文件
ansible自动化运维工具(5)_第32张图片
2.5 检测受管主机上的文件状态

MD5 全称是报文摘要算法,此算法对任意长度的信息逐位计算,产生一个二进制长度为 128 位(十六进制长度 32 位)的报文摘要

ansible自动化运维工具(5)_第33张图片
ansible自动化运维工具(5)_第34张图片

2.6 同步控制节点和受管主机之间的文件
synchronize模块主要用于目录、文件的同步,主要基于rsync命令工具同步目录和文件
常用的src为源目录,dest为目标目录
在这里插入图片描述

三. 使用 jinja2 模板部署自定义文件

3.1 jinja2模块介绍

1. jinja2简介

jinja2具有以下优点:

1.相对于Template,jinja2更加灵活,它提供了控制结构,表达式和继承等。
2.相对于Mako,jinja2仅有控制结构,不允许在模板中编写太多的业务逻辑。
3.相对于Django模板,jinja2性能更好。
4.Jinja2模板的可读性很棒。
{% EXPR %} 表达式或者逻辑
{{ EXPR }} 最终向用户输出表达式或结果
{# COMMENT #} 注释

2.构建 jinja2 模板

jinja2 模板由多个元素组成:数据、变量、表达式

模板中使用的变量可以在 playbook 的 vars 中指定

模板中所有的值都使用变量方式,将来会被受管主机对应的值替代

vim /etc/ssh/sshd_config

ansible自动化运维工具(5)_第35张图片

3. 部署 jinja2 模板

ansible自动化运维工具(5)_第36张图片

3.2 控制结构

1. 使用循环

. jinja2 使用 for 语句提供循环

1. 
{ % for user in users %} 
	{{ user }}         #user 变量将遍历 users
 {% endfor %} 
2.
  {% for myhost in groups['myhosts'] %}  #列出 myhosts 组中所有主机
  	 {{ myhosts }}
 {% endfor %}. 使用条件句

  {% if finished %}   #只有此条件为真,才会将 result 变量的值放入文件 
  		{{ result }}
   {% endif %} 

jinja2 的循环和条件只能在模板中使用,不能在 playbook 中使用

3.3 变量过滤器

{{ output | to_json }}     #以 json 格式输出
{{ output | to_yaml }} 


{{ output | from_json }}    #对 json 格式字符串进行解析
 {{ output | from_yaml }}

变量可以通过“过滤器”进行修改,过滤器可以理解为是jinja2里面的内置函数和字符串处理函数。

常用的过滤器有:

过滤器名称 说明
safe 渲染时值不转义
capitialize 把值的首字母转换成大写,其他子母转换为小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的HTML标签都删掉
join 拼接多个值为字符串
replace 替换字符串的值
round 默认对数字进行四舍五入,也可以用参数进行控制
int 把值转换成整型
  • 练习
    ansible自动化运维工具(5)_第37张图片
    在这里插入图片描述
    ansible自动化运维工具(5)_第38张图片
    ansible自动化运维工具(5)_第39张图片
    ansible自动化运维工具(5)_第40张图片

3.4 总结

1.file 模块库包含创建、复制、编辑、修改等权限和其他属性

2.使用 jinja2 模板动态构建文件来部署

3.jinja2 模板由两个元素构成:变量和表达式,在使用 jinja2 模板时,他们被替换为值

4.通过 jinja2 过滤器,模板表达式可以从一种数据格式转换为另一种

四. 管理大项目

4.1 利用主机模式选择主机

1.使用通配符匹配多个主机
-hosts:'*'  匹配所有 
 -hosts:'*.example.com'   匹配所有已example.com结尾的主机 
  -hosts:'172.25.254.*'    匹配所有此网段的主机
2.通过列表匹配主机或主机组
-hosts:www1.example.com,www2.example.com,172.25.254.250   匹配此三台主机
-hosts:webservers,westos   匹配此两个主机组
3.将通配符和列表等一起使用 
-hosts:webservers,&westos 即属于webserver组也属于westos组  
4.匹配westos组中所有主机,但是 servera.lab.example.com除外 
-hosts:westos,!servera.lab.example.com
5.匹配所有主机除了servera.lab.example.com 
-hosts all,!servera.lab.example.com

4.2 管理动态清单

github 有很多动态清单脚本

编写动态清单程序

将 INI 格式的清单转换为 JSON 格式
ansible自动化运维工具(5)_第41张图片
ansible自动化运维工具(5)_第42张图片

4.3 配置并行

使用 forks 在 ansible 中配置并行
ansible 最大同时连接数由 ansible 配置文件中 forks 参数控制

在这里插入图片描述
可以在命令行使用 -f 或者 --forks 参数来指定并行数

4.4 管理滚动更新

如果更新发生在负载均衡服务器,更新完成会重启,可能导致后端所有 web 服务器停止服务, 可以使用 serial 关键字来分批运行
ansible自动化运维工具(5)_第43张图片
ansible自动化运维工具(5)_第44张图片

serial 参数优点:
在更新时如果出现问题,那么在前 2 台发生问题是 playbook 就会 停止运行,后面的服务器不会执行,那么也就保证了服务的高可用

4.5 包含和导入文件

大型 playbook 管理起来比较复杂,可以用模块化的方式管理

两种方法:包含、导入

1. 导入 playbook

例 1:
 - name: configure webserver
    import_playbook: web.yml 
    
例 2:
 - name: Play 1
    hosts: localhost 
    tasks:
      - debug: 
          msg: Play1
   - name: Import Playbook
     import_playbook: play2.yml

2. 导入和包含任务的 playbook

一个只有任务的 playbook
ansible自动化运维工具(5)_第45张图片

  • 导入任务

ansible自动化运维工具(5)_第46张图片

使用导入时,when 等条件语句应用于导入的每个任务;循环不能作用于导入的任务

  • 包含任务

ansible自动化运维工具(5)_第47张图片

3. 为外部 play 和任务定义变量

提高复用性

ansible自动化运维工具(5)_第48张图片
可以用于导入
ansible自动化运维工具(5)_第49张图片

4.6 管理大项目综合实验

ansible自动化运维工具(5)_第50张图片
ansible自动化运维工具(5)_第51张图片
ansible自动化运维工具(5)_第52张图片
ansible自动化运维工具(5)_第53张图片
ansible自动化运维工具(5)_第54张图片

  • 运行

ansible自动化运维工具(5)_第55张图片
ansible自动化运维工具(5)_第56张图片

  • 测试

ansible自动化运维工具(5)_第57张图片

ansible自动化运维工具(5)_第58张图片

你可能感兴趣的:(ansible自动化运维工具(5))