Deployment 将可执行任务合并为一个任务,并定义“已更改”
作为部署的一部分,我想在主机上进行一些编译。这包括移动源文件、编译程序和删除源文件。我希望它能以这样一种方式工作,即如果程序没有改变,结果只是ok,而不是改变 这将准确地描述这种情况,因为如果程序没有改变,那么通过运行playbook,将创建一个假定不存在的目录,一个命令运行将产生一些文件,然后将其移动到相同副本所在的位置,然后源文件被删除,创建的目录再次不存在 具体而言,任务将类似于:Deployment 将可执行任务合并为一个任务,并定义“已更改”,deployment,compilation,ansible,Deployment,Compilation,Ansible,作为部署的一部分,我想在主机上进行一些编译。这包括移动源文件、编译程序和删除源文件。我希望它能以这样一种方式工作,即如果程序没有改变,结果只是ok,而不是改变 这将准确地描述这种情况,因为如果程序没有改变,那么通过运行playbook,将创建一个假定不存在的目录,一个命令运行将产生一些文件,然后将其移动到相同副本所在的位置,然后源文件被删除,创建的目录再次不存在 具体而言,任务将类似于: - copy: src: src/ dest: /tmp/my_program_src/ -
- 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_,并复制和文件修改某些内容,尽管它们相互抵消
如果/usr/local/bin/my_程序没有更改,我是否可以将其组合成一个报告ok的任务?如果是的话,怎么办?如果没有,那么做这样的事情的“正确”方式是什么?我建议你这样做。另一个选项是生成脚本并通过命令调用它:。然后用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
不了解如何从3个分组任务中获得1个返回值。这是为了装饰吗?我想在主机上做一些编译ー 不要在主机上编译。问题消失了。@techraf但做了什么?将编译委托给localhost,然后复制结果,是否仍在ansible中?或者根本不用ansible编译?我这样做的原因之一是,在我的特殊情况下,raco要编译racket,使用不同版本的软件进行编译是相当困难的,而不是您用来运行程序的版本。@ilias sp我主要是在寻找“正确”的方法来做事情。我认为这三个步骤在涉及到幂等性与否时,没有彼此是没有意义的。但我想知道正确的方法,不管这是否意味着要对任务进行分组。