文档章节

Ansible随机数

大别阿郎
 大别阿郎
发布于 08/17 13:05
字数 551
阅读 21
收藏 0

想为你的Ansible剧本取一个随机数?还想在接下来的运行中保持系统的等幂性?这里有一个答案。

假如,你要为一大批服务器设置cron任务,却不想让它们同时启动,你可以这样设置分钟数:

minutes: "{{ 60 | random }}" 

但是,如此生成的随机(分钟)数在运行之后,会产生许多不必要的任务变化。到了Ansbile 2.3,事情有了改观。

Ansible 2.3的改进

在Ansible的2.3版本中,可以从一个“种子”里获取随机。这样就可以得到一个随机但等幂的数值:

"{{ 59 |random(seed=inventory_hostname) }} * * * * root /script/from/cron"

以前版本的Ansible怎么办?
你可以根据任何一个变量或真值(Ansible从主机上采集到的FACT数据)来编造一个伪随机数。如,你可以用inventory_hostname来在各不同的主机上生成“随机数”,还能保证剧本的运行等幂。在剧本中,这样写:

minutes: "{{ ( inventory_hostname | hash | list | map('int',0,16) | sum ) % 60 }}"  

魔术可以这样解释:

第1步:获取主机名 inventory_hostname,如:myserver

第2步:将其序列化,取得一个哈希数,如"c3a7a35a28dcce27daad3a7a90caad99b967a904"

第3步:将其拆分为单字数组[["c","3","a",...]

第4步:每个单字实际上是一个16进制数字

第5步:把这些数字转成十进制

第6步:将所有的数字加起来

第7步:总和除以60之后的余数,就是最终的“随机数”

于是,Ansible的剧本中,你的cron任务可能会这样写:

cron:
  name: myjob
  job: myscript.sh
  minute: "{{ ( inventory_hostname | hash | list | map('int',0,16) | sum ) % 60 }}"
  hour: "{{ (( inventory_hostname | hash | list | map('int',0,16) | sum ) % 2) + 6 }}"

这样,就可以在6:00 - 7:59之间随机一个分钟点运行myscript.sh程序,还能保证剧本运行结果的等幂性。

这篇文章是本人翻译过来的,原作请见链接。

本文转载自:https://ansibledaily.com/idempotent-random-number/

共有 人打赏支持
大别阿郎
粉丝 5
博文 33
码字总数 18268
作品 0
广州
个人站长
翻译-Salt与Ansible全方位比较

原文链接:http://jensrantil.github.io/salt-vs-ansible.html 作者: Jens Rantil 之前某些时候我需要评估配置管理系统。结合从他人得到的意见,我认为Puppet及Chef在配置和运行方面过于复杂...

无敌西瓜
2015/07/21
0
0
CentOS 6.5 Corosync + pacemaker实现httpd服务的高可用

Corosync:它属于OpenAIS(开放式应用接口规范)中的一个项目corosync一版本中本身不具备投票功能,到了corosync 2.0之后引入了votequorum子系统也具备了投票功能了,如果我们用的是1版本的,又...

wei0164
2014/04/23
0
0
centos7 ansible yum安装web软件

一、网站拓扑 ansible主机inventory的情况: # cat ansible_inventory.txt [front] 10.11.7.224 ansibleconnection=ssh ansiblesshuser=root ansiblessh_pass=xuAK 10.11.5.209 ansibleconn......

youkoudiancom
2017/04/15
0
0
自动化运维ansible的介绍

Ansible的概念: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 ...

Dysunshine
06/26
0
0
ansible hosts文件详解

# This is the default ansible 'hosts' file. # # It should live in /etc/ansible/hosts # # - Comments begin with the '#' character # - Blank lines are ignored # - Groups of hosts ......

kan1one
2017/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

转:XMLHttpRequest2 新技巧

”XMLHttpRequest 的异步调用网上找的例子运行没问题,但稍微改了一点点就报错”InvalidStateError: XMLHttpRequest has an invalid context“。断断续续 搞了3天终于通了,可以接收二进制文...

SamXIAO
28分钟前
1
0
=====D服务器定时任务=====

Linux定时任务 crontab linux系统是有cron这个系统服务来控制的,Liunx系统上包含很多的计划性工作,使用者自己可以设置计划任务,所以linux系统提供了使用者控制计划任务的命令 crontab的启...

覃光林
37分钟前
1
0
xilinx资源

本系列教学视频由赛灵思高级战略应用工程师带领你:从零开始,一步步深入 掌握 HLS 以及 UltraFAST 设计方法,帮助您成为系统设计和算法加速的大拿! http://www.eetrend.com/topics/2018-0...

whoisliang
48分钟前
2
0
企业级开源四层负载均衡解决方案--LVS

网盘链接 企业级开源四层负载均衡解决方案--LVS 本课程将在Linux环境下,学习配置使用LVS,对Web集群和MySQL集群进行负载均衡,并结合利用Keepalived实现负载均衡器的高可用,实现对后端Rea...

qq__2304636824
57分钟前
3
0
Windows上安装Spacemacs

emacs安装 下载地址emacs 安装比较简单,解压后执行\bin\addpm.exe即可 emacs配置 emacs的默认配置文件路径和.emacs.d文件夹都是在Windows主目录下的 C:\Users\Administrator\AppData\Roami...

yxmsw2007
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部