我使用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
),我在以后的剧本调用中检查?
答案 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
一个文件,这将阻止在后续调用中执行脚本。