确保文件仅在完好无损时部署

时间:2013-11-24 19:08:42

标签: python fabric

我得到了这个,以确保我没有收到失败的转移搞乱的东西:

from fabric.api import *

def do():
    put('filename', '/tmp/filename')
    output_target = run('md5sum /tmp/filename')
    output_source = local('md5sum ~/filename', capture=True)
    # am interested only in the 32 character checksum text
    if output_target[:33] == output_source[:33]:
        sudo('mv /tmp/filename /usr/local/bin/')
    else:
        abort('files do not match; aborting!')

出于某种原因,我认为没有必要,Fabric put()会处理这个问题吗?

1 个答案:

答案 0 :(得分:2)

不,Fabric不会在传输后检查数据完整性。如果需要,您可以检查the put() functionthe put() method on the SFTP class的源代码 - 您将看到没有保存后的完整性检查。

然而,下面使用的是SFTP协议。它提供了SSH级别的检查,所以我不担心文件在传输过程中被破坏。但它没有做你想要的确切的事情,即它没有检查文件是否已成功保存到硬盘驱动器并且与原始文件相同。您可以详细了解该阅读answers to this question on Server Falut