首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible -未存档的模块覆盖

Ansible -未存档的模块覆盖
EN

Stack Overflow用户
提问于 2017-11-22 22:14:33
回答 2查看 9.1K关注 0票数 6

我正在使用ansible并使用攻略。在本攻略中,我执行下载(从web url)和将文件解压到主机(使用unarchive模块),然后将一些文件从控制机器复制到主机(使用复制模块)。

发生的情况是,每次我使用unarchive模块时,虽然每个文件都是相同的,但ansible会覆盖主机中的文件。如果内容相同,我如何才能使其不被覆盖?

我的攻略:

代码语言:javascript
复制
---
- hosts: group1
sudo: yes
tasks:

  - name: Download and Extract apache
  unarchive:
   src: http://mirrors.up.pt/pub/apache/tomcat/tomcat-9/v9.0.1/bin/apache-tomcat-9.0.1.tar.gz
   dest: /opt/
   remote_src: yes

- name: Copy file to host
  copy: src=/etc/ansible/files/myfile.xml dest=/opt/apache-tomcat-9.0.1/conf/myfile.xml
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-22 22:21:13

添加一个引用未存档位置的内容的creates选项。

c.f.文档页面here (对照您正在使用的版本检查版本)。

例如:

代码语言:javascript
复制
- unarchive:
    remote_src : yes
    src        : "{{ url }}"
    dest       : "{{ install_dir }}/"
    creates    : "{{ flagFile }}" 

如果unarchive创建了一个包含名为bar的文件的/tmp/foo目录,那么flagFile可以是/tmp/foo/bar,如果已经存在,unarchive就不会再次运行。

票数 7
EN

Stack Overflow用户

发布于 2022-01-28 00:25:45

我已经根据情况采取了多种方式来处理这个问题。

选项1:

归档文件创建的其中一个文件具有特定的名称,例如foo-version_no

在这种情况下,我可以添加以下选项:

creates: 'foo=version_no'

如果这个文件存在,ansible将不会解压缩它。

警告:

如果解压的目录应该包含12个文件,并且其中至少有1个文件已被删除或更改,则解压模块将不会替换它们。

选项2:

如果文件名中没有版本号,请检查解压缩目录中的一个文件,并判断它是否为正确的文件。

可能是文件上的校验和;唯一参数的grep;或者执行带有'--version‘选项的命令。将结果注册到一个变量中:

register: correct_file

然后,unarchive命令可以具有when参数:

unarchive: . . . . . . when: (correct_file.stdout != My_Required_Version and correct_file is defined)

最后一部分是关于定义的,因为如果你确定提取的文件根本不存在,你会跳过检查版本,所以变量'correct_file‘将是未定义的。

警告:

请参阅选项1中的警告。

提取选项3:使用一个参数,或者使用一个不会覆盖文件的提取命令(如果文件没有更改)。

警告:仍然会有一些开销,因为提取命令需要评估每个文件,但不会生成新的文件。

选项4:

有另一种方法可以评估解压缩目录中文件的质量,并根据该结果设置一个变量。

一个简单的例子是对所有文件运行校验和,然后对该输出运行校验和,生成“校验和的校验和”。

例如:

curr_sum=$( cksum $( cksum /path/to/extracted/files/* ) ) if [ $curr_sum -eq $Correct_Value ] then echo "This is OK" exit 0 else echo "This is not ok" exit 1 fi

在ansible中,您将运行此命令并注册结果。然后将输出与预设值进行比较:

cmd: "script_name" register: cksum_answer failed_when: failed . . . unarchive: . . . . . . when: cksum_answer.rc == 1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47436886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档