我知道幂等函数返回的结果可以多次返回,而无需本质上更改应用程序(例如向数字加零或将该数字乘以 1)。
some_package_manager upgrade X -y
从这个意义上说,通过 Ansible + cron 计划执行的操作state=latest
并不是幂等的,因为结果确实会本质上改变应用程序;每次新升级都有新功能。
那么“幂等 Ansible ad-hok 命令/剧本”的概念是在哪里、为什么以及何时出现的呢?
答案1
“幂等性”通常是配置管理系统的一种属性,Ansible 只是其中的一个例子。木偶也将自己描述为幂等的;像 Ansible 一样,说“准幂等”会更准确,因为它们都提供了打破严格幂等的方法。
我认为你的问题部分是由于对幂等性的更正式含义的误解而引起的,幂等性是一种无论你应用多少次都会给出相同结果的操作。
虽然加零或乘一都满足幂等性的定义,但它们就是我们所说的琐碎地幂等的。它们是无操作的,并且一般来说幂等性不一定是无操作的。
一些示例可能会帮助您获得幂等性的更普遍的直觉:
- 将一个数除以一个数。
- 从自身减去一个数字。
- 将 3D 对象展平到表面上:一旦展平,进一步展平不会进一步改变其形状。
- 燃烧原木:一旦完全燃烧,再施加更多火焰就不会进一步燃烧。
- 用勺子将咖啡溶解到热水中:咖啡一旦溶解,进一步搅拌不会使其“更溶解”。
- 让狗“坐下”:第一次会产生效果,但后续的“坐下”命令不会产生变化。
- 将配置文件从一台计算机复制到另一台计算机:第一次复制后,再次复制该文件将不会进一步更改目标文件。
最后两个示例最接近配置管理系统上下文中幂等性的含义。最简单的是,它们通过复制文件或发出命令将远程计算机置于所需状态。一旦遥控器处于该状态,复制文件或再次发出命令应该/将不会产生任何影响。
幂等性被宣传为 Ansible 或 Puppet 等配置管理系统的理想属性的原因是,在管理大量服务器时,如果尽可能多的服务器彼此具有相同的配置,则是最方便的。为了强制一致性,您复制所需的配置文件,以相同的方式设置防火墙等。但最好能够重复执行此操作,因为在运行大型服务器场时,您不想浪费时间计算找出哪些由于某些维护或升级而略有偏差。您只希望能够立即告诉所有服务器:“采用首选配置”。
这就像如果你试图管理一屋子的狗,你希望它们都坐下:其中一些已经坐着,但另一些则站着。发出“坐下”命令不会影响已经就座的人,但会使整个房间进入所需的统一配置。