告知ansible playbook是否正在直接运行

告知ansible playbook是否正在直接运行,ansible,Ansible,我有一个整体剧本,我正在重构成一系列较小的剧本,然后导入。在导入它们时,这一切都很好,但是当使用例如vagrant单独测试它们时,apt缓存通常是过时的,并且我的一半包丢失了 当然,我可以在它们中的每一个中设置一个任务来更新apt缓存,但这似乎是浪费 是否有任何条件检查playbook是否在另一个playbook内运行或直接从命令行运行?或者检查缓存在全局范围内的var和基于该var的条件中是否是最新的 或者检查缓存在全局范围内的变量和基于该变量的条件中是否是最新的 如果您使用的是ansible

我有一个整体剧本,我正在重构成一系列较小的剧本,然后导入。在导入它们时,这一切都很好,但是当使用例如vagrant单独测试它们时,apt缓存通常是过时的,并且我的一半包丢失了

当然,我可以在它们中的每一个中设置一个任务来更新apt缓存,但这似乎是浪费

是否有任何条件检查playbook是否在另一个playbook内运行或直接从命令行运行?或者检查缓存在全局范围内的var和基于该var的条件中是否是最新的

或者检查缓存在全局范围内的变量和基于该变量的条件中是否是最新的

如果您使用的是ansible provisioner,那么您可以通过vagrant文件,通过/etc/ansible/facts.d中的静态事实,通过花费精力在命令行上声明一个额外的var,通过检查与我的例子中的VM so VBox对应的NIC供应商,或者通过虚拟化方法,很容易地声明您正在vagrant中运行,或者


另外,如果/var/lib/apt/lists/partial的mtime早于某些秒/分/秒数,您还可以实际声明一个过时阈值,并运行apt get update,这听起来更接近于你真正想要的,而不是让事物以一种方式在流浪中表现,另一种方式在真实中表现。

继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 }}'

你建议的最后一件事是我想要的,但是如果我stat/var/lib/apt/lists/lock,然后运行apt update,那么mtime不会改变?所以看起来我的判断是正确的,但碰巧选择了错误的文件-我责备样本量太小/var/lib/apt/lists/partial确实会在每次运行apt-get-update时更新