如何在Ansible playbook中创build一个本地事实,这将跳过已经在之前的运行中完成的步骤?

我写了一个从git三个repo中克隆并从源代码编译的剧本。

每当我configuration使用这个剧本的机器时,无论本地副本是否已经更新,都会克隆回购。

我希望git克隆只能在第一次发生,而在其他时间运行剧本的时候,我希望Ansible跳过这一步。

我已经阅读了关于Ansible文档的“本地事实”,但我很难理解它应该如何实施。

这是我写的剧本:

--- - name: Install required packages apt: name={{item}} state=installed with_items: - "librdkafka-dev" - "libyajl-dev" - "librdkafka1" - "cmake" sudo: yes tags: kafkacat - name: Git clone kafkacat git: repo=git://github.com/company/kafkacat.git dest={{ kafkacat_installdir }} accept_hostkey=yes force=yes tags: kafkacat - name: Git clone librdkafka git: repo=git://github.com/company/librdkafka.git dest={{ kafkacat_installdir }}/librdkafka force=yes version={{ librdkafka_git_version }} tags: kafkacat - name: Git clone yajl git: repo=git://github.com/company/yajl dest={{ kafkacat_installdir }}/yajl force=yes version={{ yajl_git_version }} tags: kafkacat - name: librdkafka compilation (configure) command: chdir={{ kafkacat_installdir }}/librdkafka {{ kafkacat_installdir }}/librdkafka/configure tags: kafkacat - name: librdkafka compilation (make) command: chdir={{ kafkacat_installdir }}/librdkafka make tags: kafkacat - name: librdkafka compilation (make install) command: chdir={{ kafkacat_installdir }}/librdkafka make DESTDIR={{ kafkacat_installdir }}/tmp-bootstrap install tags: kafkacat - name: yajl compilation (configure) command: chdir={{ kafkacat_installdir }}/yajl {{ kafkacat_installdir }}/yajl/configure tags: kafkacat - name: yajl compilation (make) command: chdir={{ kafkacat_installdir }}/yajl make tags: kafkacat - name: yajl compilation (make install) command: chdir={{ kafkacat_installdir }}/yajl make DESTDIR={{ kafkacat_installdir }}/tmp-bootstrap install tags: kafkacat - name: Set vagrant user & group as the owner of the folder file: path={{ kafkacat_installdir }} owner={{ kafkacat_owner }} group={{ kafkacat_group }} state=directory recurse=yes sudo: yes tags: kafkacat - name: kafkacat compilation (configure) command: chdir={{ kafkacat_installdir }} {{ kafkacat_installdir }}/configure --enable-json --enable-static environment: env tags: kafkacat #- debug: var=env - name: kafkacat compilation (make) command: chdir={{ kafkacat_installdir }} make environment: env tags: kafkacat #- debug: var=env - name: kafkacat compilation (make install) command: chdir={{ kafkacat_installdir }} make install sudo: yes tags: kafkacat 

非常感谢您的帮助。

您可以创build自定义检查并跳过stat模块

你可能想要做这样的事情:

 - name: Check if repository is checked out. stat: path={{ kafkacat_installdir }}/kafkacat register: git_dir - name: Git clone kafkacat git: repo=git://github.com/company/kafkacat.git dest={{ kafkacat_installdir }} accept_hostkey=yes force=yes tags: kafkacat when: git_dir.stat is defined and git_dir.stat.isdir