【问题标题】:Convert make rule to ansible将 make 规则转换为 ansible
【发布时间】:2018-09-06 08:25:48
【问题描述】:

我在 makefile 中有以下内容:

some_file: some_script
    bash some_script > $@

并希望在 ansible playbook 任务中复制此内容,在该任务中运行任务会重新创建文件,但前提是生成的脚本文件已更改,否则它是无操作的。有没有办法使用股票 ansible 模块来实现这一点?

【问题讨论】:

  • Ansible 不存储过去运行的状态,而是执行“stuff”(有时是孤立的)并比较结果。然后将状态标记为changedok。但是没有模块知道在随机生成文件的结果中要比较什么。
  • @techraf 我试图在这方面复制 make 的行为,而不是运行 makefile。 Make IIRC 查看生成文件和依赖文件的最后修改元数据,如果后者更新,则运行规则。这就是为什么你可以强制它运行例如touch文件。
  • 我理解你想要做什么。 Ansible 不存储...哦,我已经写了我的第一条评论。
  • @techraf make 也不存储它。正如我在 my 评论中所说,它查询文件系统。如果 ansible 不能做到这一点,无论如何,告诉我它不能,例如检查文件元数据。如果它可以告诉我怎么做,但不要做出与我所说的相反的假设。除非你能证明我错了。在这种情况下显示我怎么错了
  • 我不做任何假设。我告诉过你 Ansible 模块是如何工作的,请阅读我的第一条评论。我没有写关于 make 的文章,因为你问的是 Ansible,所以我解释了 Ansible 做什么和不做什么。您可以接受我的评论并自己实现您想要的逻辑,或者对您没有在 70 分钟内获得 SO 上的 codez 感到不高兴。

标签: ansible


【解决方案1】:

您必须分两个阶段执行:收集信息,然后有条件地执行

  vars:
    files:
    - some_file
    - some_script
  tasks:
  - stat: path={{ item }}
    register: stats
    with_items: '{{ files }}'
  - debug:
      msg: '{{ stats.results[0].stat.path }} is newer than {{ stats.results[1].stat.path }}'
    when: '{{ stats.results[0].stat.mtime > stats.results[1].stat.mtime }}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2017-07-15
    • 2014-01-19
    • 2015-09-09
    相关资源
    最近更新 更多