Ansible 中的幂等性和随机变量

2023-12-23

有没有办法保证使用随机生成变量的剧本的幂等性?

例如,我想设置 crontab 以在不同时间触发多个服务器上的电子邮件,因此我使用 ansible 的 set_fact 模块创建随机整数:

  tasks:
  - set_fact:
      first_run_30="{{ 30 | random }}"
    run_once: yes

然后使用 ansible 将这些生成的变量应用到我的 crontab,如下所示:

   - name: Setup cron30job
    cron: name=cron30job minute={{first_run_30}},{{first_run_30 | int + 30}} job='/bin/bash /cron30job.sh' state=present user=root
    environment:
      MAILTO: '[email protected] /cdn-cgi/l/email-protection'
      MAILFROM: '[email protected] /cdn-cgi/l/email-protection'

这非常有效,但是,我相信,使用这种策略会破坏 ansible 的无效原则,因为每次播放时你都会看到变化:

TASK: [Setup cron30job] ***************************************** 
changed: [127.0.0.1]

此外,在 crontab 中,每次在三个单独的运行期间都在 root 下进行检查:

[ansible]# cat /var/spool/cron/root 
#Ansible: cron30job
5,35 * * * * /bin/bash /sw/test/cron30job.sh
#Ansible: cron30job
9,39 * * * * /bin/bash /sw/test/cron30job.sh
#Ansible: cron30job
6,36 * * * * /bin/bash /sw/test/cron30job.sh

如果有解决方法,或者在我的情况下可能无法实现无能,我想知道。


从 Ansible 版本 2.3 开始,可以从种子初始化随机数生成器。这样,您可以创建随机但幂等的数字:

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

Source: 随机数过滤器 http://docs.ansible.com/ansible/latest/playbooks_filters.html#random-number-filter

我使用此模式来生成随机 cron 启动时间:

  1. 不同目标服务器上的分钟数不同
  2. 同一服务器上不同日期的不同分钟(随机性)
  3. 重复运行 Ansible 时同一天和服务器的同一分钟(幂等性)

需要 Ansible >=2.3:

 cron:
    name: "{{some_name}}_{{item.day}}"
    state: present
    job: "{{some_job}}"
    weekday: "{{item.day}}"
    hour: "{{item.hour}}"
    minute: "{{59|random(seed=inventory_hostname + item.dow)}}"
  with_items:
 - { day: 0, hour: 3, dow: "sunday" }
 - { day: 1, hour: 7, dow: "monday" }
 - { day: 2, hour: 1, dow: "tuesday" }
 - { day: 3, hour: 5, dow: "wednesday" }
 - { day: 4, hour: 2, dow: "thursday" }
 - { day: 5, hour: 4, dow: "friday" }
 - { day: 6, hour: 7, dow: "saturday" }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible 中的幂等性和随机变量 的相关文章

  • Ansible 无法运行任何命令或 shell

    我在 RPi 上运行任何命令或 shell 时遇到问题 当我使用以下代码时 name Example command ansible builtin command cmd cat etc motd 我收到此错误 Unsupported p
  • WordPress 计划事件未在设定时间触发

    在 WordPress 中 我正在创建一个插件 用于向用户发送电子邮件 为此 我使用 WordPresscron工作 所以基本上它要做的就是每小时向用户发送电子邮件 所以我的代码看起来像这样 public function construc
  • 连接到上游时 Nginx 错误:(13:权限被拒绝)

    我在我的中收到此错误nginx error log file 2014 02 17 03 42 20 crit 5455 0 1 connect to unix tmp uwsgi sock failed 13 Permission den
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst
  • laravel cron 使用错误

    Laravel 错误 cron 使用 usr bin php home sitevk artisan 计划 运行 1 gt gt dev null 2 gt 1 应用 控制台 内核 use Illuminate Console Schedu
  • 如何编写 Perl 脚本来使用 curl 处理 URL?

    我有一个非常简单的任务 我有一个 crontab 每小时运行一个脚本 该脚本旨在简单地处理 URL 这就是我所拥有的 这不起作用 我收到语法错误 usr bin perl curl http domain com page html 我已经
  • 使用 Ansible 将二进制文件添加到 PATH

    我正在尝试安装Kiex https github com taylor kiex版本管理器Elixir http elixir lang org install html使用 Ansible 的编程语言 这些是我为此使用的戏剧 name K
  • 如何在 Jenkins 中安排构建?

    如何安排 Jenkins 构建 使其只能在每天的特定时间进行构建 例如下午 4 点开始 0 16 1 7 我理解为 每个月周一到周日下午 0 分钟 下午 4 点 但是它每分钟都会构建 如果有任何建议 我将不胜感激 谢谢 Update 请阅读
  • 每月第 n 天运行 APScheduler 作业

    我正在寻找一个 APScheduler 触发器 它将在每月的第 n 天执行一项作业 例如 我想在每个月的第一个星期二运行一个作业 或者每个月的第一个和第三个周一 有没有人有一个触发器可以实现这一点 你可以almost使用 cron 调度程序
  • 如何在 Ansible 中运行 MySQL 查询

    我需要编写一个 Ansible 脚本来在 MySQL 数据库中执行 SQL 查询 这是我尝试过的 你能指导一下吗 hosts localhost tasks name retrive data command mysql u root h
  • Cron 作业中的 PyAutoGUI

    我正在尝试运行一个程序 该程序可以通过 crontab 使用 Selenium 和 PyAutoGUI 在 python 3 6 中自动拉出一些选项卡 这是当 cron 不运行该程序时我尝试运行的脚本 import pyautogui im
  • 如何在 Jinja 中过滤字典?

    我有一个包字典 包名称是key和一些细节的字典是value php7 1 readline latest 7 1 9 1 ubuntu14 04 1 deb sury org 1 origins ppa launchpad net vers
  • 每 30 秒运行一次 Laravel 方法

    我有一个在我调用应用程序上的特定 URL 时运行的方法 它处理数据库队列中的行 该间隔被设置为 Cron 可能的最小间隔 即 1分钟 这需要减少到 30 秒 所以我想知道如何最好地实现这一目标 我想我可以在我的脚本中构建一个循环 运行代码两
  • 模板化字符串时出现模板错误:意外的字符 u - Ansible

    执行剧本以在远程主机中运行命令并使用 shell 传递输出时 出现以下错误 致命 master1 失败 gt MSG 模板化时出现模板错误 字符串 4 处出现意外的字符 u a 字符串 54aa7fda16833bff8358b6bd115
  • 开发/生产中的 Ansible 服务器/组

    我所处的情况是看不到正确的使用方法 我有多个分配了不同角色的服务器 分布在多个组中 与生产 登台环境相比 我在本地 Vagrant 环境中遇到了一些使用 group vars 的困难 在生产中 有更多的服务器 分配的组更少 在我的 Vagr
  • 如何使用 Vagrant 自动安装 Ansible Galaxy 角色?

    仅使用一本剧本 则不可能让 Ansible 自动安装依赖角色 至少按照这个所以线程 https stackoverflow com questions 25230376 how to automatically install ansibl
  • 如何在ansible清单文件中设置host_key_checking = false?

    我想用ansible playbook命令而不是 vagrant provision 然而设置host key checking false in the hosts文件似乎不起作用 hosts file vagrant ansible s
  • 如何每周日运行 crontab 作业

    我想弄清楚如何每周周日运行 crontab 作业 我认为以下应该可行 但我不确定我是否理解正确 下面的说法正确吗 5 8 6 这是 crontab 格式的解释 1 Entry Minute when the process will be
  • git push 无法在 cron 作业中工作

    我目前正在清理 CentOS 6 服务器上其他人留下的烂摊子 有一个应用程序需要每6小时备份一次到github帐户 有一个脚本负责准备数据并负责 git add 和 git commit git Push 由 expect 脚本负责 这样做
  • cron 任务是否会阻塞主进程或者nodejs 会创建一个worker 来执行cron 任务

    我在用节点 cron https github com ncb000gt node cron每分钟执行一些繁重的任务 更新数据库 这个任务是使用主进程来工作还是nodejs会创建一些工作人员来完成这些任务 var CronJob requi

随机推荐