可以使Ansible取消归档来写入静态文件夹修改时间吗?

半身人

我正在使用Ansible为WordPress安装编写构建过程。它目前没有应用程序级的构建系统,我选择了Ansible,以便它可以与服务器构建脚本完美地集成在一起,因此我只需按一下按钮就可以启动工作的服务器。

我的大多数WordPress插件都安装了该unarchive功能,指向官方wordpress.org安装服务器上的版本化插件。我仅遇到其中一个问题,即使文件完全相同,也始终将其标记为“已更改”。

在检查ls -Rl之前和之后的状态之后,我注意到该插件(WordPress HTTPS)是唯一使用内部子目录的插件,并且在每次解压缩时,文件夹的修改时间都会增加。

知道这是一个项目构建脚本,带有的connection可能会很有用local因此,我想这意味着未使用SSH。

这是我的剧本的摘录:

- name: Install the W3 Total Cache plugin
  unarchive: >
    src=https://downloads.wordpress.org/plugin/w3-total-cache.0.9.4.1.zip
    dest=wp-content/plugins
    copy=no

- name: Install the WP DB Manager plugin
  unarchive: >
    src=https://downloads.wordpress.org/plugin/wp-dbmanager.2.78.1.zip
    dest=wp-content/plugins
    copy=no

# @todo Since this has internal sub-folders, need to work out
# how to preserve timestamps of the original folders rather than
# re-writing them, which forces Ansible to record a change of
# server state.
- name: Install the WordPress HTTPS plugin
  unarchive: >
    src=https://downloads.wordpress.org/plugin/wordpress-https.3.3.6.zip
    dest=wp-content/plugins
    copy=no

解决此问题的一种简便方法是在使用ls -R之前和之后,使用选项包括文件大小而不包括时间戳,然后md5sum输出。然后,如果校验和发生变化,我可以将其标记为已更改。它可以工作,但不是很优雅(为了一致性,我想对所有插件都这样做)。

另一种方法是,如果插件文件已经存在,则放弃该任务,但是当我将插件版本号更改为最新副本时,这将导致问题。

因此,理想情况下,我正在寻找一种表示unarchive要从zip文件而不是从playbook运行时更改文件夹修改时间的开关是否有可能?


更新:评论者询问文件内容是否可能以任何方式更改。为了确定它们是否具有,我编写了此脚本,该脚本为(1)所有文件内容和(2)所有文件/目录时间戳创建校验和:

#!/bin/bash

# Save pwd and then change dir to root location
STARTDIR=`pwd`
cd `dirname $0`/../..

# Clear collation file
echo > /tmp/wp-checksum

# List all files recursively
find wp-content/plugins/wordpress-https/ -type f | while read file
do
    #echo $file
    cat $file >> /tmp/wp-checksum
done

# Get checksum of file contents
sha1sum /tmp/wp-checksum

# Get checksum of file sizes
ls -Rl wp-content/plugins/wordpress-https/ | sha1sum

# Go back to original dir
cd $STARTDIR

我将其作为我的剧本的一部分来运行(使用标签单独运行),并收到了以下信息:

PLAY [Set this playbook to run locally] ****************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [jonblog : Run checksum command] ******************************************
changed: [localhost]

TASK [jonblog : debug] *********************************************************
ok: [localhost] => {
    "checksum_before.stdout_lines": [
        "374fadc4df1578f78fd60b1be6758477c2c533fa  /tmp/wp-checksum", 
        "10d66f7bdbbdd3af531d1b11a3db3059a5868838  -"
    ]
}

TASK [jonblog : Install the WordPress HTTPS plugin] ***************
changed: [localhost]

TASK [jonblog : Run checksum command] ******************************************
changed: [localhost]

TASK [jonblog : debug] *********************************************************
ok: [localhost] => {
    "checksum_after.stdout_lines": [
        "374fadc4df1578f78fd60b1be6758477c2c533fa  /tmp/wp-checksum", 
        "719c9da94b525e723b1abe188ee9f5bbaf121f3f  -"
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=6    changed=3    unreachable=0    failed=0   

调试行反映文件内容的校验和哈希(这是相同的),然后ls -Rl反映文件结构的校验和哈希(这已更改)。这与我先前的手动发现目录校验和正在更改的情况是一致的。

因此,接下来我该怎么做才能找出为什么文件夹修改时间未正确地将此操作标记为已更改的原因?

半身人

我的解决方案是修改校验和脚本,并使该脚本成为Ansible进程的永久功能。当Ansible应该替我做自己的校验和时,感觉有点不明智。

最受欢迎的新答案是解释我做错了事,或者新版本的Ansible解决了该问题。

如果有时间,我会向Ansible团队提出这个可能的错误。但是,有时我会怀疑在忙碌的跟踪器上提高bug时的努力/回报率-我已经有一项出色的项目,它已经等待了一段时间,并且我也选择解决这一问题。

更新(18个月后)

这个Ansible构建系统从未使其投入使用。感觉就像我一直在努力工作。最近,当我决定需要将博客移至另一台服务器时,我最终对其进行了Docker化。这花了几周的时间(因为在真正的WordPress安装中要考虑的事情很多),但总的来说,我发现此过程比使用编排工具要好得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用修改时间创建文件夹列表

来自分类Dev

我可以使用批处理脚本取消隐藏单个文件夹或文件吗?

来自分类Dev

您可以在Linux系统上隐藏文件夹的“修改日期”时间吗?

来自分类Dev

可以使用httrack为目标文件夹添加时间戳吗?

来自分类Dev

可以使用azure python sdk根据“上次修改时间”过滤azure数据湖文件吗?

来自分类Dev

开始写入之前的文件修改时间

来自分类Dev

Ansible 幂等性问题,取消归档然后修改提取的文件

来自分类Dev

如何获取按修改时间排序的FTP文件夹中的文件

来自分类Dev

我可以删除.tar.gz归档文件的安装文件夹吗?

来自分类Dev

使用boost :: filesystem :: last_write_time获取锁定文件夹的修改时间

来自分类Dev

我可以使用PHP从zip归档文件中的文件中读取原始文件的修改日期吗?

来自分类Dev

如何修改文件夹的上次写入时间和上次访问权限

来自分类Dev

修改提取文件夹的时间

来自分类Dev

将文件复制到已安装的Samba文件夹时,禁止更新“修改时间”

来自分类Dev

将文件复制到已安装的Samba文件夹时,防止更新“修改时间”

来自分类Dev

我可以使用父文件夹的名称重命名文件夹中的文件吗?

来自分类Dev

我可以列出按修改日期排序的文件夹中的文件吗?

来自分类Dev

COM对象可以使用其文件夹以外的文件吗?

来自分类Dev

我可以使用FileSystemObject使用其索引从文件夹中获取单个文件吗?

来自分类Dev

我可以使用fread下载文件夹中的所有文件吗?

来自分类Dev

我可以使用Django自定义命令的文件夹代替文件吗?

来自分类Dev

我可以使用Nautilus将文件拖放到加密的文件夹中吗?

来自分类Dev

OpenCMS-可以关闭具有静态内容的文件夹的Cookie吗?

来自分类Dev

可以使用Box API获取文件夹的标签吗?

来自分类Dev

可以使用共享的IMAP电子邮件帐户模拟公用文件夹吗?

来自分类Dev

我可以使用Skydrive同步我选择的文件夹吗?

来自分类Dev

您可以使Windows 7不本地化文件夹名称吗?

来自分类Dev

您可以使用Javascript生成图像和文件夹结构吗

来自分类Dev

我可以使用 ls -R 显示最多 2 个文件夹深度吗?

Related 相关文章

  1. 1

    使用修改时间创建文件夹列表

  2. 2

    我可以使用批处理脚本取消隐藏单个文件夹或文件吗?

  3. 3

    您可以在Linux系统上隐藏文件夹的“修改日期”时间吗?

  4. 4

    可以使用httrack为目标文件夹添加时间戳吗?

  5. 5

    可以使用azure python sdk根据“上次修改时间”过滤azure数据湖文件吗?

  6. 6

    开始写入之前的文件修改时间

  7. 7

    Ansible 幂等性问题,取消归档然后修改提取的文件

  8. 8

    如何获取按修改时间排序的FTP文件夹中的文件

  9. 9

    我可以删除.tar.gz归档文件的安装文件夹吗?

  10. 10

    使用boost :: filesystem :: last_write_time获取锁定文件夹的修改时间

  11. 11

    我可以使用PHP从zip归档文件中的文件中读取原始文件的修改日期吗?

  12. 12

    如何修改文件夹的上次写入时间和上次访问权限

  13. 13

    修改提取文件夹的时间

  14. 14

    将文件复制到已安装的Samba文件夹时,禁止更新“修改时间”

  15. 15

    将文件复制到已安装的Samba文件夹时,防止更新“修改时间”

  16. 16

    我可以使用父文件夹的名称重命名文件夹中的文件吗?

  17. 17

    我可以列出按修改日期排序的文件夹中的文件吗?

  18. 18

    COM对象可以使用其文件夹以外的文件吗?

  19. 19

    我可以使用FileSystemObject使用其索引从文件夹中获取单个文件吗?

  20. 20

    我可以使用fread下载文件夹中的所有文件吗?

  21. 21

    我可以使用Django自定义命令的文件夹代替文件吗?

  22. 22

    我可以使用Nautilus将文件拖放到加密的文件夹中吗?

  23. 23

    OpenCMS-可以关闭具有静态内容的文件夹的Cookie吗?

  24. 24

    可以使用Box API获取文件夹的标签吗?

  25. 25

    可以使用共享的IMAP电子邮件帐户模拟公用文件夹吗?

  26. 26

    我可以使用Skydrive同步我选择的文件夹吗?

  27. 27

    您可以使Windows 7不本地化文件夹名称吗?

  28. 28

    您可以使用Javascript生成图像和文件夹结构吗

  29. 29

    我可以使用 ls -R 显示最多 2 个文件夹深度吗?

热门标签

归档