判断ansible剧本是否正在直接运行

时间:2018-09-07 17:08:07

标签: ansible

我有一个完整的剧本,我正在重构为一系列较小的剧本,这些剧本可以导入。导入它们时很好,但是用例如流浪汉的apt-cache通常是过时的,一半的软件包丢失了。

我当然可以提出一项任务来更新其中每一个中的apt-cache,但这似乎很浪费。

是否有条件检查某个剧本是在其他剧本中运行还是直接从命令行运行?还是在全局范围内的变量和条件中检查缓存是否实际上是最新的?

2 个答案:

答案 0 :(得分:1)

  

或者在全局范围内的变量和条件中检查缓存是否实际上是最新的

您可以通过Vagrantfile中的静态事实,很容易地通过/etc/ansible/facts.d(如果您使用的是“ provisioner”)来声明您正在无所作为。通过在命令行上检查Extra-var,方法是检查与VM相对应的NIC供应商(在我的情况下为VBox),虚拟化方法或or或or。

另外,也欢迎您实际声明“陈旧性”阈值,如果apt-get update的mtime早于某些秒/分钟/等,则运行/var/lib/apt/lists/partial更接近您真正想要的,而不是让事物在Vagrant中表现为一种方式,而在现实中则表现为另一种方式。

答案 1 :(得分:0)

在我接受Matthew L. Daniel的出色回答之后,这是实际的任务:

tasks:
  - name: Get the apt-cache stat
    stat: path=/var/lib/apt/lists/partial
    register: cachage

  - name: Update apt cache
    apt: update_cache=yes
    when: '{{ (ansible_date_time.epoch|float - cachage.stat.mtime) > 1800.0 }}'