Назад | Перейти на главную страницу

Скопировать (вниз) корзину Rackspace Cloud File в локальный каталог?

Как скопировать (вниз) сегмент Rackspace Cloud File в локальный каталог? Или еще лучше, как мне обновить локальный каталог, чтобы он стал копией корзины RS?

Существует множество инструментов для загрузки или "rsync", но я ищу инструмент, который копирует в другом направлении (вниз с сервера).

Вы можете загрузить контейнер рекурсивно, то есть включая подпапки и их содержимое, используя инструменты openstack / swift. В ubuntu инструменты можно установить с помощью apt-get install python-swift

Затем перейдите в каталог, в который вы хотите загрузить содержимое, и запустите

swift -A https://auth.api.rackspacecloud.com/v1.0 -U <username> -K <api-key> download <container-name>

Тогда содержимое <containername> контейнер будет загружен в текущий каталог. Вам необходимо предоставить <username> вы используете для входа в облачную панель управления и <api-key> доступно в разделе «Учетная запись» / «Настройки учетной записи» на той же панели управления.

Дуэйн,

Я не знаю ни одного существующего приложения, которое будет делать это, однако, используя официальный Rackspace Python SDK, pyrax, мы можем достичь вашей цели. pyrax не содержит полностью встроенных функций, необходимых для выполнения этого, но я потратил несколько минут и собрал что-то вместе, расширив функциональность pyrax по умолчанию.

Вы можете найти код на https://gist.github.com/5602713

В самом низу кода вам нужно будет обновить myusername с вашим настоящим именем пользователя, myapikey с вашим настоящим ключом api, 2 места с соответствующим регионом (который уже может быть DFW), some-container с настоящим именем контейнера и /path/to/some/local/directory/ с локальным каталогом, с которым вы хотите его синхронизировать.

Способ, которым sync_container_to_folder вызывается в нижней части скрипта, удаляет все локальные файлы, которые также не существуют удаленно, работая аналогично --delete аргумент для rsync. Можете добавить delete=False чтобы предотвратить эту функцию, например:

     cf.sync_container_to_folder('some-container',
                                 '/path/to/some/local/directory/',
                                 delete=False)

Варианты для sync_container_to_folder очень похожи на встроенную функцию из pyrax, sync_folder_to_container, как описано на https://github.com/rackspace/pyrax/blob/master/docs/cloud_files.md#syncing-a-local-folder-with-a-container

Я тестировал несколько небольших контейнеров, ничего большого, и могу подтвердить, что он работает хорошо. Но на всякий случай вы можете сначала протестировать вещи с помощью тестового контейнера и пустого локального каталога.

Кстати: вам нужно будет установить модуль pyrax и модуль python-dateutil, чтобы использовать это. Это не стандартные модули Python.

Вы не объясняете, является ли это регулярным - систематическим - требованием или разовым.

Если второе, а при определенных обстоятельствах первое, вам следует проверить такие инструменты, как Expandrive или CyberDuck который позволяет синхронизировать папку с машины в контейнер Cloud Files.

Что касается последнего (систематического требования), я бы не рекомендовал эти клиентские инструменты таким же образом - вам лучше написать что-нибудь самостоятельно, используя API. Мэтт дал хороший ответ о Пиракс - очевидно, при необходимости проверьте аналогичные привязки API на других языках - полный список находится в документы здесь.