教你在Linux上使用ansible写“剧本”,定义一个“剧本”模板后,让控制集群自动执行我们剧本中所写的“剧情”,几个自动化运维的简单实例
目录
1.loop的使用
2.使用when,当条件成立时才执行任务
3.notify和handler的使用
4.tags使用
5.处理任务失败
6. 构建一个jinja2模板
7.forks和serial的区别
7.1 Aniable运行play机制---forks
7.2 serial--Ansible运行滚动机制
8.导入playbook和task
1.loop的使用
使用loop来输出 My name is zhangsan/lisi My age is 18/20
- name: zhangsan
age: 18
- name: lisi
age: 20
给定数据Services,要求使用loop来重启服务:
提示:将services定义为变量
可以使用lookup('dict', services)来进行转换或者使用{{ services | dict2items }}
services:
httpd:
name: httpd
state: restarted
firewalld:
name: firewalld
state: restarted
2.使用when,当条件成立时才执行任务
测试给定一个0/1,
给定一个未定义的变量,
给定一个变量当变量>10时才执行
使用and 和 or来连接两个条件: True and False , True or False
loop和when联合使用 1 中,当name == firewalld时不执行任务
3.notify和handler的使用
定义一个任务:使用shell模块执行 echo "123", 使用notify通知handler 任务 debug info
定义handler: 包含一个任务:debug info: 执行 输出: I handled the notify
4.tags使用
定义三个任务:分别打上标签:tag1, tag2, tag2
执行playbook, 且指定只执行tag2
5.处理任务失败
ignore_errors的使用: 定义任务使用command模块执行 test1111,
再定义一个任务:使用debug模块输出: This is test for ignore errors(确保这个任务可以正常执行)
failed_when: 定义一个任务: 使用shell模块执行echo 123, 将此任务设置为执行失败
changed_when: 定义一个任务: 使用shell模块执行echo 123 > /root/changed_test, 将此任务的changed状态改为0
block, rescue, always: 在block定义两个任务,在rescue中定义两个任务,在always中定义两个任务,去执行让rescue中的任务可以执行
[root@server .ansible]# vim fail.yml
[root@server .ansible]# ansible-playbook fail.yml
6. 构建一个jinja2模板
要求:在模板中输出1-10, 打印主机的全限定名称, 输出默认的IP地址
如果权限定名称为node1.example.com 将其输出为: node1
7.forks和serial的区别
7.1 Aniable运行play机制---forks
1)当Ansible处理playbook时,会按顺序运行每个play。确定play的主机列表之后,Ansible将按顺序运行每个任务
2)通常,所有主机必须在任何主机在play中启动下一个任务之前成功完成任务
3) 注意:
理论上,Ansible可以同时连接到play中的所有主机以执行每项任务。这非常适用于小型主机列表。但如果该play以数百台主机为目标,则可能会给控制节点带来沉重负担
4) Ansible所进行的最大同时连接数由Ansible配置文件中的forks参数控制,默认情况下设为5(forks:分叉)
通过以下方式之一来验证:[root@localhost ~]# grep forks /etc/ansible/ansible.cfg #forks = 5
5) 例如,假设Ansible控制节点配置了5个forks的默认值,并且play具有10个受管主机。
Ansible将在前5个受管主机上执行play中的第一个任务,然后在其他5个受管主机上对第一个任务执行第二轮。
在所有受管主机上执行第一个任务后,Ansible将继续一次在5受管主机的组中的所有受管主机上执行下一个任务。Ansible将依次对每个任务执行此操作,直到play结束。
6)forks的默认值设置得非常保守。如果你的控制节点正在管理Linux主机,则大多数任务将在受管主机上运行,并且控制节点的负载较少。在这种情况下,通常可以将forks的值设置得更高,可能接近100,然后性能就会提高
7)如果playbook在控制节点上运行很多代码,则应明智地提高forks限值。如果使用Ansible管理网络路由器和交换机,则大多数模块在控制节点上运行而不是在网络设备上运行。
由于这会增加控制节点上的负载,因此其支持forks数量增加的能力将显著低于仅管理Linux主机的控制节点
8)可以从命令行覆盖Ansible配置文件中forks的默认设置。ansible和ansible-playbook命令均提供-f或--forks选项以指定要使用的forks数量
7.2 serial--Ansible运行滚动机制
1)通常,当Ansible运行play时,它会确保所有受管主机在启动任何主机进行下一个任务之前已完成每个任务。在所有受管主机完成所有任务后,将运行任何通知的处理程序
2)但是,在所有主机上运行所有任务可能会导致意外行为。
例如,如果play更新负载均衡Web服务器集群,则可能需要在进行更新时让每个Web服务器停止服务。如果所有服务器都在同一个play中更新,则它们可能全部同时停止服务
3)避免此问题的一种方法是使用serial关键字,通过play批量运行主机。在下一批次启动之前,每批主机将在整个play中运行
4)演示实例:
[root@localhost project]# cat playbook.yml
---
- hosts: all
serial: 2
tasks:
- name: install httpd
yum:
name: httpd
state: present
notify:
- start httpd
handlers:
- name: start httpd
service:
name: httpd
state: started
在上面的示例中,Ansible一次在两个受管主机上执行play,直至所有受管主机都已更新
5)更新机制:
- Ansible首先在前两个受管主机上执行play中的任务。如果这两个主机中的任何一个或两个都通知了处理程序,则Ansible将根据这两个主机的需要运行处理程序。
- 在这两个受管主机上执行完play时,Ansible会在接下来的两个受管主机上重复该过程。Ansible继续以这种方式运行play,直到所有受管主机都已更新
6)假设上一示例中的webservers组包含5个Web服务器,它们位于负载均衡器后面。将serial参数设置为2后,play一次将运行两台Web服务器。因此,5台Web服务器中的大多数服务器将始终可用
- 相反,如果不使用serial关键字,将同时在5台Web服务器上执行play和生成的处理程序。这可能会导致服务中断,因为Web服务将在所有Web服务器上同时重新启动
7)重要:
在设置了serial: 2 的上一个场景中,如果出现问题并且处理的前2个主机的play失败,则playbook将中止,其余3个主机将不会通过play运行。这是一个有用的功能,因为只有一部分服务器会不可用,使服务降级而不是中断
serial关键字也可以指定为百分比。此百分比应用于play中的主机总数,以确定滚动更新批处理大小。无论百分比为何,每一工序的主机数始终为1或以上
8.导入playbook和task
建立一个import_playbook.yaml 然后将其导入另一个playbook: main_playbook.yaml
建立一个import_task.yaml里面只写任务:将其导入main_task_playbook.yaml中
教你在Linux上使用ansible写“剧本”,定义一个“剧本”模板后,让控制集群自动执行我们剧本中所写的“剧情”,几个自动化运维的简单实例相关推荐
- puppet、Ansible、SaltStack 自动化运维工具简单对比
puppet: 有产品线已经在用,优点是历史悠久,比较成熟,在可远程可本地,功能强劲,不过这厮批量执行功能没得,为了批量执行个命令写个配置文件,好像有点大刀砍蚊子腿的感觉了,而且有客户端在,和授权系统 ...
- 常见的自动化运维工具介绍及特点、安装ansible
常见的自动化运维工具介绍及特点.安装ansible 一.什么是自动化运维? 简单来说,自动化运维就是将日常重复性工作按照事先设定好的规则,在一定时间范围内自动化运行,而不需要人为参与. 将周期性.重复 ...
- linux框架下搭建orl,DevOps和自动化运维实践/Linux\Unix技术丛书
导语 内容提要 随着云计算.Docker.Kubernetes技术的流行,相信大家经常会听到"容器云"这个专业词汇,容器技术的兴起,对于传统的运维知识体系而言也是一种冲击和挑战.& ...
- linux自动化运维ansible
linux自动化运维ansible 一.概述 二.安装 1.配置安装源 2.安装 3.查询版本信息 三.设置主机清单 1.添加ip及账号信息 2.修改主配置文件 3.测试是否成功 四.模块应用 1.模 ...
- Linux九阴真经之九阴白骨爪残卷4(自动化运维之ansible用法一)
ansible是什么? ansible是什么? 它是一个配置管理工具,也是一个自动化运维工具. ansible能做什么? ansible 可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工 ...
- ansible(自动化运维上)——ansible部署,添加主机组,连通性测试
ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef. func.fabric)的优点.实现了批量系统配置.批 ...
- Linux 自动化运维工具 ansible
文章目录 1.简介 2.安装 3.常用命令选项说明 4.使用 4.1.执行远程命令 4.2.执行远程脚本 4.3.分发文件到远程服务器 4.3.1.复制单个文件 4.3.2.复制压缩文件到远程并解压 ...
- Linux下自动化运维工具ansible
文章目录 Ansible简介 Ansible特性 ansible架构 Ansible 配置使用 1.yum安装及eper-release依赖 2.配置管理主机 3.配置秘钥对 3.1 生成秘钥对 3. ...
- Linux自动化运维工具ansible详解
文章目录 认识ansible ansible的组成 ansible的相关文件 ansible的使用 ansible的常用模块 1.copy模块 2.fetch模块 3.command模块 4.shel ...
最新文章
- 蒙特卡洛粒子滤波定位算法_粒子滤波——来自哈佛的详细的粒子滤波器教程【1】...
- apache服务器配置证书方法!
- IEEE802.11协议栈
- 关于mpi的理论知识以及编写程序来实现数据积分中的梯形积分法。
- 20211005 Hermite矩阵及几个性质
- Easy Multiplication 快速傅里叶变换
- 通过投影增强数据模型
- c++将文本中的字符串一次读入到内存
- hash签名 java_java开发区块链只需150行代码
- 干货 | 140页《深度强化学习入门》
- 链表的游标(cursor)实现
- Linux 进程与信号的概念和操作 linux process and signals
- 模拟京东登陆 java_java京东自动登录
- 冲刺大厂每日算法面试题,动态规划21天——第七天
- ReactNative--控件小记-更新中
- 沙漠下新雨,树木爆翠绿,没有放弃与更新,就不成其智慧。我们不必时刻刷新微博和朋友圈,比起这些,刷新自我更加重要。我们并不需要生活在别处,不需要流于表面,我们需要时常更新生命。
- Go组队学习 9.异常处理
- 手把手教你搭建明星脸相似度分析系统
- ubc计算机二学位培养方案,UT/McGill/UBC CS二学位(主要介绍多大二学位了)
- 【网络协议】TCP/IP 协议