if/then/when流程控制
条件判断在ansible任务中的使用频率非常高,有些任务使用带有幂等性检查的模块,比如yum和apt模块可以检测软件包是否已经被安装。
上面有个词叫幂等性,它是什么意思?
if/then/when流程控制
条件判断在ansible任务中的使用频率非常高,有些任务使用带有幂等性检查的模块,比如yum和apt模块可以检测软件包是否已经被安装。
上面有个词叫幂等性,它是什么意思?
同一动作执行多次,对被执行对象的影响的结果状态总是一致的,就可以称为幂等性。
比如SQL语句对数据的读取操作是幂等的,修改操作,如果只是update到固定的一个值,是幂等的,如果是在原有值基础上加1,就不是幂等的
简单解释就是,不管备操作节点环境是什么情况,不管操作多少次,结果都是你希望看到的。
再详细一点的解释
当你希望一个文件中存在一行内容为 "aaaaaa", 如果不存在就会插入,如果存在就会跳过
当你希望系统中文件权限为 root:root 664 , 不管之前是什么,执行之后都会是 root:root 664
其他所有操作都是类似这样的,非幂等性的操作是不允许存在的
比如: 向文件中插入一行内容 "aaaa", 每次执行都会插入一行,那么就会有很多行 "aaaa"
这样的操作就不是幂等性的
这就是幂等性
@同意并接受 的答案很赞同。
有些动作如查询、HTTP里的GET这些本来就是幂等的。
有些动作很复杂,可以通过提前一步校验是否已变动来实现,就像描述中的先检查一下是否已安装,如已安装,则无动作。
这里有个问题:我在实践中 ansible 使用了command,但发现这个 command 并不是幂等性,比如我向一个文件插入一个内容,但是发现执行多次 playbook,每次都会向文件插入一次内容。这样的话,就不是幂等性了。
是我操作错误的原因吗?
定义:一个操作如果多次任意执行所产生的影响,均与一次执行的影响相同。(用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。)
例:一个订单,点击支付扣除100元,将订单状态更新成已完成。(如果由于网络原因,扣除100元这个动作没有成功,则订单状态还是未完成,点击支付还会发生扣除100元这个动作;如果由于网络原因,扣除100元成功,订单状态已完成,但是并没有返回结果,则点击支付不会再扣除100元这个动作,而是直接返回支付成功结果)。
同样的操作执行第二次,第三次....不会改变操作对象的状态。
如有一个http请求,要求删除id=0001的学生记录
DELETE /api/stus/0001
HOST: ....
这个请求执行1+n次,其中的n次请求都不会造成更多的记录被删除
就是多次相同的操作,结果都不变
比如,读取一个文件,1次和10次,读出来的内容应该是一样的。