作为部署的一部分,我想在主机上进行一些编译。这包括移动源文件,编译程序和删除源文件。我希望它以这样的方式工作,如果程序没有改变,这只会导致ok
而不是changed
。
这将准确地描述情况,因为如果程序没有改变,那么通过运行playbook将创建(假定的)不存在的目录,命令运行导致某些文件然后被移动到相同副本的位置过去是,然后删除源文件,再次创建目录不存在。
具体而言,任务类似于:
- copy:
src: src/
dest: /tmp/my_program_src/
- shell: my_compiler -o /usr/local/bin/my_program /tmp/my_program_src/main.file
become: true
- file:
path: /tmp/my_program_src/
state: absent
当然,实际发生的是三个报告都“改变了”;因为对于shell我必须自己定义changed_when
,而copy
以及file
会改变一些东西,尽管它们相互抵消。
如果ok
没有改变,我可以将这个组合成一个报告/usr/local/bin/my_program
的任务吗?如果是,那怎么样?如果不是,那么做这样的事情的“正确”方法是什么?
答案 0 :(得分:1)
command:
调用它。然后用Ansible检查sha1,但我不喜欢这个选项。
---
- name: Example
hosts: localhost
gather_facts: False
connection: local
tasks:
- name: Get cksum of my program
stat:
path : "/usr/local/bin/my_program"
register: myprogram1
- name: Current SHA1
set_fact:
mp1sha1: "{{ myprogram1.stat.checksum }}"
- name: Copy File
copy:
src: src/
dest: /tmp/my_program_src/
changed_when: False
- name: Compile
shell: my_compiler -o /usr/local/bin/my_program /tmp/my_program_src/main.file
become: true
changed_when: False
- name: Remove src
file:
path: /tmp/my_program_src/
state: absent
changed_when: False
- name: Get cksum of my program
stat:
path : "/usr/local/bin/my_program"
register: myprogram2
- name: Current SHA1
set_fact:
mp2sha1: "{{ myprogram2.stat.checksum }}"
- name: Compilation Changed
debug:
msg: "Check Compilation"
changed_when: mp2sha1 == mp1sha1