如何使用SwiftService跨帐户复制文件

时间:2017-09-02 11:01:51

标签: python openstack-swift

我在Cross Account Object Copy

上查看SwiftClient文档
curl -i -X PUT http://<host>:<port>
/v1/AUTH_test1/container/destination_obj
 -H 'X-Auth-Token: <token>'
 -H 'X-Copy-From: /container/source_obj'
 -H 'X-Copy-From-Account: AUTH_test2'
 -H 'Content-Length: 0'

这个工作正常。但是因为我已经使用了python-swiftclient library中的SwiftService类,但我能找到的最接近的是this commit on cross account upload。此外,它仅显示如何使用Connection类而非SwiftService

我在调用copy methodSwiftCopyObject内部时尝试覆盖os_storage_url但都没有成功。

知道我必须在这做什么吗?

更新:

copyupload时,我试图通过覆盖HTTP标头来破解库。

复制

通过将标题对象放入SwiftCopyObject

的选项来覆盖此方法
'header': ['Destination-Account:AUTH_name']

这会向example 2(The one with COPY method)

中的Swift Proxy API发送完全相同的HTTP请求

这给了我404,这与我手动将curl发送到API的结果相同。如果我们能够让它发挥作用,这可能是正确的方法。

上传

以类似的方式,我在SwiftUploadObject添加了标题,以指定在使用目标帐户的租户ID时从哪里复制。

SwiftUploadObject(source='/container/source_file.txt', object_name='file.txt', options={
'header': [
  'X-Copy-From:/container/source_file.txt',
  'X-Copy-From-Account:AUTH_source'
]})

这样做会让我找不到文件错误:FileNotFoundError: [Errno 2] No such file or directory: '/container/source_file.txt'。这可能是因为它试图查看目标帐户而不是源。

成功?

我尝试将source参数更改为None。我收到Object upload verification failed: md5 mismatch错误。但是,我可以看到文件现在完全位于目标容器中。 md5检查在失败时不会从目标容器中删除该文件。

虽然我可以利用这个黑客来完成这项工作,但我认为在生产中这样做是不明智的。

0 个答案:

没有答案