С 1991 года на компьютерном рынке России
e-mail

т.: 676 0965, 676 0396
Москва, Сосинская ул. 43,
м. Волгоградский проспект
Реализация облачного хранилища с OpenStack Swift.

ГЛАВА 4


Использование Swift.

В этой главе рассматриваются различные механизмы, которые обеспечивают доступ к Swift. Используя эти механизмы, мы сможем выполнять аутентификацию учетных записей, просматривать контейнеры, создавать контейнеры, создавать объекты, удалять объекты и тому подобное. Инструменты и библиотеки, такие как CLI клиента Swift, клиент cURL, HTTP REST API, библиотеки Java, библиотеки Ruby OpenStack и библиотеки Python внутренне используют Swift API чтобы обеспечить доступ к кластеру Swift. В частности, мы будем использовать клиент CLI (интерфейса командной строки) Swift, cURL и HTTP REST API для доступа к Swift и выполнению различных операций с контейнерами и объектами. Кроме того, мы будем использовать облако хранения Long-Term Storage (LTS2) фирмы EVault для демонстрации использования Swift.

Установка клиентов

Этот раздел расскажет об установке cURL и клиента инструментов командной строки Swift CLI. В этом разделе мы опишем, как установить эти инструменты на операционную систему Linux Ubuntu 12.04. Пожалуйста, ознакомьтесь к другими наборами команд дистрибутивов Linux для установки клиентов в этих операционных системах. Также доступны версии этих инструментов для Windows и Mac. Следующие команды используются для установки cURL и клиента Swift CLI:

  • cURL: Этот инструментарий командной строки может использоваться для передачи данных с использованием различных протоколов. Для установки cURL используется следующая команда: # apt-get install curl
  • Клиент Swift CLI: Это средство для доступа и выполнения операций на кластере Swift. Этот инструмент устанавливается с использованием следующей команды: # apt-get install python-swiftclient
  • Клиент REST API: Для доступа к службам Swift через REST API мы можем использовать средства сторонних разработчиков, например, такие как веб-отладчик Fiddler, который поддерживает архитектуру REST.

Создание маркера с использованием аутентификации

Первый шаг для того, чтобы получить доступ к контейнерам или объектам заключается в аутентификации пользователя посредством отправки запроса в службу аутентификации и получения действующего маркера, который затем может быть использован в последующих командах для выполнения различных операций. Мы используем аутентификацию Keystone в нашей конфигурации и приведенных в этой главе примерах. Существует еще один способ проверки подлинности, называемый Swauth, который может быть использован. Он работает слегка отличным способом, но мы не будем здесь разбираться с деталями Swauth. Следующая команда используется, чтобы получить действующий ключ аутентификации Keystone:
# curl -X POST -i https://auth.lts2.evault.com/v2.0/Tokens -H 'Contenttype: application/json' -d '{"auth":{"passwordCredentials":{"username":"user","password":"password"},"tenantName":"tenant1"}}'

В приведенной команде конечной точкой аутентификации является https://auth.lts2.evault.com/v2.0 производимый EValut.

Ниже демонстрируется сгенерированный маркер (он был усечен для лучшей читаемости):
token = MIIGIwYJKoZIhvcNAQcCoIIGFDCCBhACAQExCTAHBgUrDgMCGjCCBHkGCSqGSI b3DQEHAaCCBGoEggRme…yJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAx My0xMS0yNlQwNjoxODo0Mi4zNTA0NTciLCU+KNYN20G7KJO05bXbbpSAWw+5Vfl8zl6Jq AKKWENTrlKBvsFzO-peLBwcKZXTpfJkJxqK7Vpzc-NIygSwPWjODs--0WTes+CyoRD

Этот маркер в последующем используется в командах доступа Swift, например, в следующей команде:
curl -X HEAD -i https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b -H 'X-Auth-Token: token' -H 'Content-type: application/json'

Дополнительные детали о командах приводятся в последующих разделах.

Отображение информации метаданных для учетных записей, контейнеров и объектов

Данный раздел описвает процедуру получения информации об учетных записях, контейнерах или объектах.

С использованием клиента Swift CLI

Команда клиента Swift CLI stat используется для получения информации об учетной записи, контейнере или объекте. Для получения информации о контейнере после команды stat должно быть указано имя контейнера. Для получения информации об объектее после команды stat должны быть указаны имена контейнера и объекта.

Для отображения состояния учетной записи выполните следующий запрос:
# swift --os-auth-token=token --os-storage-url= https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b stat

В предыдущей команде token является маркером, сгенерированным как это описано в предыдущем разделе, а 26cef4782cca4e5aabbb9497b8c1ee1b является именем учетной записи.

Отклик отображает следующую информацию об учетной записи:
Account: 26cef4782cca4e5aabbb9497b8c1ee1b
Containers: 2
Objects: 6
Bytes: 17
Accept-Ranges: bytes
Server: nginx/1.4.1

С использованием cURL

Следующая команда демонстрирует возможность получения той же информации обучетной записи при помощи cURL. Она показывает, что учетная запись содержит два контейнера и шесть объектов.

Выполните следующий запрос:
# curl -X HEAD -i https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b -H 'X-Auth-Token: token' -H 'Content-type: application/json'

Ответ предыдущей команды выглядит следующим образом:
HTTP/1.1 204 No Content
Server: nginx/1.4.1
Date: Wed, 04 Dec 2013 06:53:13 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 0
X-Account-Bytes-Used: 3439364822
X-Account-Container-Count: 2
X-Account-Object-Count: 6

С использованием REST API

Поддерживающий REST отладчик веб Fiddler использовался для отправки запроса и получение HTTP отклика. Выполните следующий запрос:
Method : HEAD
URL : https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1e
e1b Header : X-Auth-Token: token
Data : No data
Отклик будет следующим:
HTTP/1.1 204 No Content
Server: nginx/1.4.1
Date: Wed, 04 Dec 2013 06:47:17 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 0
X-Account-Bytes-Used: 3439364822
X-Account-Container-Count: 2
X-Account-Object-Count: 6

Как вы можете убедиться, это другой механизм выполнения команды, однако очень схожий с доступом в кластеру Swift с использованием cURL.

Вывод списка контейнеров

Данный раздел описывает как получить представленную в учетной записи информацию о контейнерах.

С использованием клиента CLI

Выполните следующий запрос:
swift --os-auth-token=token --os-storage-url= https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b list

Ответ на запрос выглядит следующим образом:
cities
countries

С использованием cURL

Приводимая ниже команда показывает как получить ту же информацию о контейнерах с помощью cURL. Она сообщает, что учетная запись содержит два контейнера и шесть объектов.

Выполните следующий запрос:
curl -X GET –i https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b -H 'X-Auth_token: token'

Отклик на запрос следующий:
HTTP/1.1 200 OK
X-Account-Container-Count: 2
X-Account-Object-Count: 6

cities
countries

Здесь мы видим, что вывод имеет заголовок и тело, в отличие от предадущего примера, в котором был только заголовок, а тело отсутствовало.

Вывод списка объектов контейнера

Этот раздел описывает как получить список присутсвующих в контейнере объектов.

С использованием клиента Swift CLI

Следующая команда показывает как вывести список объектов при помощи клиента Swift CLI (в этом примере мы перечисляем объекты в контейнере городов):

Выполните следующий запрос:
swift --os-auth-token=token --os-storage-url= https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b list cities

Отклик на запрос следующий:
London.txt Mumbai.txt NewYork.txt

С использованием cURL

Следующая команда демонстрирует как перечислить объекты с помощью cURL. В данном примере мы перечисляем объекты контейнера cities.

Выполните следующий запрос:
curl -X GET -i https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b/cities -H 'X-Auth-Token: token '

Ответ на запрос выглядит следующим образом:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 34
X-Container-Object-Count: 3

London.txt
Mumbai.txt
NewYork.txt

С использованием REST API

В данном примере мы выводим список объектов контейнера cities. Выполните следующий запрос:
Method : GET
URL : URL : https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b/countries
Header : X-Auth-Token: token
Data : No content

Ответ на запрос выглядит следующим образом:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 38
X-Container-Object-Count: 3

France.txt
India.txt
UnitedStates.txt

Обновление метаданных для контейнера

В этом разделе описывается как добавить или обновить метаданные для контейнера.

С использованием клиента Swift CLI

В данном примере мы добавляем метаданные для контейнера, который мы только что посетили. Выполните следующий запрос:
swift --os-auth-token=token --os-storage-url= https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b post countries -H "X-Container-Meta-Countries: visited"

С использованием REST API

Теперь мы добавляем метаданные с использованием REST API.

Выполните следующий запрос:
Method : POST
URL : https://storage.lts2.evault.com/v1/26cef4782cca4e5aabbb9497b8c1ee1b/countries
Header : X-Auth-Token: token
X-Container-Meta-Countries: visited
Data : No content

Переменные окружения

Для упрощения команд CLI могут быть использованы следующие переменные окружения:

  • OS_USERNAME: Содержит имя пользователя для доступа к учетной записи
  • OS_PASSWORD: Содержит пароль, связанный с именем пользователя
  • OS_TENANT_NAME: Содержит имя владельца
  • OS_AUTH_URL: Содержит URL аутентификации

Экспортировав эти переменные окружения один раз, у нас больше не будет необходимости передавать эти значения как входные параметры при выполнении инструментов Swift CLI.

Псевдо- иерархические каталоги

Система хранения объектов OpenStorage Swift может имитировать иерархическую структуру каталогов в контейнерах, в том числе / (косую черту) в имени объекта.

Давайте загрузим файл (AMERICA/USA/Newyork.txt) в контейнер Continent с использованием следующей команды:
# swift upload Continent AMERICA/USA/Newyork.txt

Давайте выведем список контейнера Continent который имеет несколько псевдо- иерархических папок с использованием следующей команды:
# swift list Continent

AMERICA/USA/Newyork.txt
ASIA/ASIA.txt
ASIA/China/China.txt
ASIA/INDIA/India.txt
Australia/Australia.txt
continent.txt

Мы можем использовать / как параметр разделителя (delimiter), чтобы ограничить отображаемые результаты. Мы также можем использовать параметр префикса (prefix) вместе с параметром разделителя для просмотра объектов в псевдо- каталоге вместе с псевдо- каталогами внутри них. Ниже приведено несколько примеров, демонстрирующих использование этих параметров:
# swift list Continent --delimiter /

AMERICA/
ASIA/
Australia/
continent.txt


# swift list Continent --delimiter / --prefix ASIA/

ASIA/ASIA.txt
ASIA/China/
ASIA/INDIA/


# swift list Continent --delimiter / --prefix ASIA/INDIA/

ASIA/INDIA/India.txt

ACL контейнера

Как мы видели в предыдущих разделах, для того, чтобы получить доступ к контейнерам и объектам, в заголовке X-Auth-Token каждого запроса должен быть направлен действующий маркер аутентификации. В противном случае, будет возвращен код ошибки авторизации. В некоторых случаях для определенных контейнеров и объектов доступ должен быть обеспечен другим клиентам и приложениям. Доступ может быть обеспечен путем установки элемента метаданных для контейнера под названием X-Container-Read. Следующий пример устанавливает этот Access Control Lists (ACL) к cities контейнера:

Во-первых, давайте выведем список состояния контейнера, который показывает отсутствие ACL. Выполните следующую команду с правами администратора (пользователь с правами администратора будет иметь право запускать эту команду):
# swift stat cities

Значения Read ACL и Write ACL в следующем ответе указывают на отсутствие ACL:
Account: 26cef4782cca4e5aabbb9497b8c1ee1b
Container: cities
Objects: 3
Read ACL:
Write ACL:
Sync To:

Когда пользователь tenant1:user1, который не имеет доступа к данному контейнеру, пытается получить доступ к данному контейнеру, возвращается сообщение об ошибке запрета доступа.

Выполните следующий запрос:
# swift -V 2.0 -A https://auth.lts2.evault.com/v2.0 -U tenant1:user1 -K t1 list cities

В качестве ответа будет возвращена ошибка, вызванная запретом на доступ. Эта ошибка выгдядит следующим образом:
Container GET failed: 403 Forbidden
Access was denied to this resource

В предыдущем примере, имя пользователя обеспечивается с помощью параметра -U, а ключ для доступа к учетной записи предоставляется с помощью опции -K.

Теперь, давайте установим элемент метаданных X-Container-Read и обеспеченим доступа на чтение для tenant1:user1. Эта операция может быть выполнена только пользователем с правами администратора, при помощи следующей команды:
# swift post -r tenant1:user1 cities

Для проверки допусков ACL мы выполним следующую команду:
# swift stat cities

Отклик на выполненную команду будет следующим:
Account: 26cef4782cca4e5aabbb9497b8c1ee1b
Container: cities
Objects: 3
Read ACL: tenant1:user1
Write ACL:
Sync To:

Теперь, когда пользователь tenant1:user1 попытается получить доступ к данному контейнеру, доступ разрешен и команда выполнится успешно.

Выполните следующий запрос:
# swift -V 2.0 -A https://auth.lts2.evault.com/v2.0 -U tenant1:user1 -K t1 list cities

Отклик на запрос будет следующим:
London.txt
Mumbai.txt
NewYork.txt

Так как ACL X-Container-Write на контейнер cities не установлен для пользователя tenant1:user1, этот пользователь не сможет записывать в контейнер cities. Чтобы предоставить право записи, давайте установим ACL X-Container-Write следующим образом:
# swift post -w tenant1:user1 cities

Чтобы проверить разрешения ACL, мы выполним следующую команду:
# swift stat cities

Ответ предыдущей команды будет следующим:
Account: 26cef4782cca4e5aabbb9497b8c1ee1b
Container: cities
Objects: 3
Read ACL: tenant1:user1
Write ACL: tenant1:user1 Sync To:

Теперь пользователь tenant1:user1 может записывать в контейнер cities.

Если мы хотим предоставить доступ большому числу пользователей, могут быть использованы ACL такие, как .r:*, .rlistings. Префикс .r:* позволяет извлекать из контейнера объекты любому пользователю, а .rlistings включает просмотр списка содержимого контейнера.

Обмен большими объектами

Как уже обсуждалось в Главе 2. Архитектура OpenStack Swift, Swift ограничивает загрузку отдельного объекта объемом в 5ГБ. Объекты бОльшего размера могут быть разделены на сегменты по 5ГБ или меньше путем задания параметра размера сегмента в аргументе инструмента командной строки Swift CLI и загружать в специальный контейнер (создаваемый в пределах контейнера, в который загружается объект).

После того, как загрузка была завершена, должен быть создан объект манифест, который содержит информацию о сегментах. Файл манифеста имеет нулевой размер и заголовки, такие как X-Object-Manifest, которые идентифицируют специальный контейнер, где хранятся сегменты и имя, с которого начнется именование всех сегментов. Например, если мы должна загрузить France.txt, имеющий размер 8 Гб, контейнер countries, то объект France.txt должен быть разделен надвое (5 ГБайт и 3 ГБайта). Имя порции объекта начнется с France.txt (France.txt/../00000000 и France.txt/../00000001).

Будет создан специальный контейнер с названием countries_segments, и порции данных будут загружаться в этот контейнер. В контейнере countries будет создан объект манифеста с названием France.txt. Файл манифеста будет иметь нулевую длину и будет содержать следующий заголовок. (Не обязательно помещать сегменты в специальный контейнер и они могут существовать в том же контейнере):
X-Object-Manifest: countries_segments/France.txt

Когда загрузка объекта большого размера выполнена, Swift автоматически объединяет все сегменты и загружается весь объект большого размера.

CLI клиента Swift имеет флаг -S для определения размера сегмента, который может быть использован для разделения больших объектов на сегменты и последующей загрузки. Следующая команда использует для загрузки файла размер сегмента 5368709120 байт: Сделайте следующий запрос:
# swift upload countries -S 5368709120 France.txt

Выдача предыдущей команды выглядит следующим образом:
France.txt segment 0
France.txt segment 1
France.txt segment 2
France.txt

Следующая команда может быть использована для просмотра списка присутствующих контейнеров:
# Swift list

Ответ предыдущей команды будет следующим:
Countries
Countries_segments
cities

Следующая команда перечислит объекты в контейнере countries_segments:
# Swift list

Вывод последней команды выглядит так:
France.txt/1385989364.105938/5368709120/00000000
France.txt/1385989364.105938/5368709120/00000001
France.txt/1385989364.105938/5368709120/00000002
(Прим. пер.: в оригинале отсутствует последняя строчка, я счел это опиской.)

Совместимость с API Amazon S3

Пользователи, знакомые с API Amazon S3 и осуществляющими доступ к сегментам (bucket) и объектам S3, могут осуществлять Swift доступ использую S3 совместимый API с помощью программного обеспечения среднего уровня Swift3.

Здесь мы покажем шаги, требующиеся одному методу, который использует API S3 для доступа к хранилищу объектов Swift. Эти шаги объясняют как установить необходимые инструменты и пакеты, создать права и обновить файлы настройки.

Следующие шаги выполнены на узле прокси сервера, который работает под управлением дистрибутива Ubuntu 12.04:

  1. Вначале пользователь запрашивает права EC2 (ключ доступа и ключ безопасности). Команды keystone user-list и keystone tenant-list для получения ID пользователя и ID владельца. Следующая команда может быть использована для создания этих ключей (она должна быть выполнена на прокси сервере):
    # keystone ec2-credentials-create --userid 916673a90b8749e18f0ee3ec5bf17ab9 --tenant-id 6530edfe037242d1ac8bb07b7fd76046
    Ответ такой:
    +-----------+----------------------------------+
    |  Property |              Value               |
    +-----------+----------------------------------+
    |   access  | 1178d235dbd84d48b417170ec9aed72c |
    |   secret  | c4ea0a8fbf7d4a469f6d0fb5cdb47d5b |
    | tenant_id | 6530edfe037242d1ac8bb07b7fd76046 |
    |  user_id  | 916673a90b8749e18f0ee3ec5bf17ab9 |
  2. Установите пакет Swift3, выполнив следующие команды (эти команды требуют предварительной установки в вашей системе Git):
    # sudo git clone https://github.com/fujita/swift3.git # cd swift3
    # sudo python setup.py install
  3. Установите пакет libdigest-hmac-perl выполнив следующую команду (этот пакет используется для проверки согласованности между двумя элементами, которые совместно используют код безопасности):
    # apt-get install libdigest-hmac-perl
  4. Отредактируйте файл proxy-server.conf и, если вы хотите использовать аутентификацию keystone, сделайте следующие изменения:
    • Измените строку конвейера (pipeline) в файле proxy-server.conf на:
      [pipeline:main]
      pipeline = catch_errors cache swift3 s3token authtoken
      keystone proxy-server
    • Добавьте фильтр Swift3 WSGI в файл proxy-server.conf используя следующую команду:
      [filter:swift3]
      use = egg:swift3#swift3
    • Добавьте фильтр s3token как это показано в следующей команде:
      [filter:s3token]
      paste.filter_factory = keystone.middleware.s3_token:filter_factory
      auth_port = 35357
      auth_host = 127.0.0.1
      auth_protocol = http
    • Перезапустите службу прокси при помощи следующей команды:
      # Service swift-proxy restart
  5. На клиенте, который будет осуществлять доступ к хранилищу объектов Swift должны быть выполнены следующие шаги:
    • Поскольку мы будем использовать s3curl для команд S3, загрузите s3-curl.zip со следующей ссылки:
      http://s3.amazonaws.com/doc/s3-example-code/s3-curl.zip
    • Перед выполнением следующей команды убедитесь, что у вас установлена утилита wget:
      # wget http://s3.amazonaws.com/doc/s3-example-code/s3-curl.zip
    • Распакуйте s3-curl.zip и предоставьте доступ с исполнением файлу s3curl.pl
    • Создайте файл .s3curl, а также измените ID и ключ персональной учетной записи на права EC2 (ключи доступа и безопасности) выданные пользователю. Для создания такого файла, как приеден ниже, мы используем редактор vi:
      #vi ~/.s3curl
      %awsSecretAccessKeys = (
      # personal account
      personal => {
      id => '1178d235dbd84d48b417170ec9aed72c',
      key => 'c4ea0a8fbf7d4a469f6d0fb5cdb47d5b',
      },
      # corporate account
      work => {
      id => '1ATXQ3HHA59CYF1CVS02',
      key => 'WQY4SrSS95pJUT95V6zWea01gBKBCL6PI0cdxeH8',
      },
      );

Доступ к Swift с использованием команд S3

В данном разделе мы приведем примеры команд S3 для выполнения различных действий.

  • Список сегментов (bucket): Эта команда перечисляет все сегменты для данного пользователя. Сегменты в S3 являются аналогами контейнеров в Swift.
    # ./s3curl.pl --id=personal -- https://auth.lts2.evault.com –v
    Ответ будет следующим:

    cities2009-02-03T16:45:09.000Z
    countries2009-02-03T16:45:09.000Z
  • Список объектов в сегменте (bucket): Эта команда перечисляет все объекты, присутствующие в описанном сегменте. Давайте выведем список всех объектов в сегменте cities с использованием следующей команды:
    # ./s3curl.pl --id=personal -- https://auth.lts2.evault.com/cities -v
  • Создание сегмента (bucket): Следующая команда создает сегмент с именем continents:
    # ./s3curl.pl --id=personal --createBucket -- -v https://auth.lts2.evault.com/continents
  • Удаление сегмента (bucket): Следующая команда удалит сегмент с именем continents:
    # ./s3curl.pl --id=personal --delete -- -v https://auth.lts2.evault.com/continents

Доступ к Swift с использованием библиотек клиента

Для доступа к кластеру Swift cуществуют различные библиотеки, доступные в java, Python, Ruby, PHP и других языках программирования. С использованием этих библиотек приложения могут быть упрощены. Давайте осветим некоторые из этих библиотек.

Java

Для написания приложений на java для связи со Swift и выполнения различных операций с учетными записями, контейнерами и объектами могут быть использована библиотека Apache jclouds (http://jclouds.apache.org/documentation/quickstart/rackspace/), в частности org.jclouds.openstack.swift.CommonSwiftClient.

Простейший код выглядит следующим образом:
import org.jclouds.ContextBuilder;
import org.jclouds.blobstore.BlobStore;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.openstack.swift.CommonSwiftAsyncClient;
import org.jclouds.openstack.swift.CommonSwiftClient;

BlobStoreContext context = ContextBuilder.newBuilder(provider)
           .endpoint("http://auth.lts2.evault.com/")
           .credentials(user, password)
           .modules(modules)
           .buildView(BlobStoreContext.class);
storage = context.getBlobStore();
swift = context.unwrap();
containers = swift.getApi().listContainers();
objects = swift.getApi().listObjects(myContainer);

Python

Библиотека python-swiftclient обеспечивает связывание языка Phyton с OpenStackSwift. После осуществления аутентификации, следующий код примера показывает как перечислить контейнеры:
#!/usr/bin/env python

http_connection = http_connection(url)
cont = get_container(url, token, container, marker, limit, prefix,
delimiter, end_marker, path, http_conn)

Дополнителная информация о библиотеки доступна по адресу: https://github.com/openstack/python-swiftclient/

Ruby

Библиотека ruby-openstack (https://github.com/ruby-openstack/rubyopenstack) обеспечивает соединение ruby с облаком OpenStack. Код следующего примера демонстрирует как вывести список контейнеров и объектов:
Lts2 = OpenStack::Connection.create(:username => USER, :api_key =>
API_KEY, :authtenant => TENANT, :auth_url => API_URL, :service_type =>
"object-store")

Lts2.containers
=>["cities" , "countries"]
Cont = Lts2.container("cities")
Cont.objects
=>[" London.txt"," Mumbai.txt"," NewYork.txt"]

Заключение

В этой главе вы узнали как использовать различных клиентов Swift для взаимодействовия с кластерами Swift и получать информацию об учетных записях, контейнерах и объектах. Вы уже познакомились со списками контроля доступа (ACL), передачей больших объектов, а также к различными клиентскими библиотеками Swift, которые могут быть использованы для написания приложений на нужном Вам языке, например на Java, Ruby и Python.

В следующей главе мы обсудим управление системой Swift и подлежащих рассмотрению вещах при замене или расширении дисков, узлов и зон. Она также предоставит информацию о различных инструментах, которые могут быть использованы для сбора информации о поведении системы хранения объектов.

Глава 3 Оглавление Глава 5
 
Перевод: Copyright © 2014  .
All rights reserved.
Ссылки обязательны (Refs and links obligatory).
http://www.mdl.ru