如何确定脚本以前是否使用Ansible运行?

时间:2015-03-19 11:48:12

标签: ansible

我使用Ansible将一个框架部署(Git clone,运行安装脚本)到服务器。安装步骤意味着运行install.sh脚本,如下所示:

- name: Install Foo Framework
  shell: ./install.sh
  args:
    chdir: ~/foo

如何确定我是否在之前的Ansible运行中执行了此步骤?我想在此步骤中添加when条件,只有在install.sh脚本之前未运行时才会执行。

install.sh脚本执行了一些操作(替换了用户主目录中的某些文件),但是之前看看脚本是否运行并不明显文件。 ~/foo.sh文件之前可能已经存在,不清楚它是否被安装脚本替换或之前是否存在。

Ansible中有没有办法在服务器上存储一个值,让我确定之前是否执行过这个特定的任务?或者我应该在用户的主目录中创建一个标记文件(例如~/foo-installed),我在以后的剧本调用中检查?

2 个答案:

答案 0 :(得分:3)

以下是我最终解决的问题。使用creates选项的指针有助于:

- name: Install Foo Framework
  shell: ./install.sh && touch ~/foo_installed
  args:
    chdir: ~/foo
    creates: ~/foo_installed

使用此方法,只有在安装脚本完成且没有错误时才会创建~/foo_installed文件。

答案 1 :(得分:2)

我建议改用script模块。此模块具有creates参数:

  

文件名,当它已经存在时,不会运行此步骤。 (在Ansible 1.5中添加)

因此,您的脚本可以简单地touch一个文件,这将阻止在后续调用中执行脚本。