ГЛАВА 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:
- Вначале пользователь запрашивает права 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 |
- Установите пакет Swift3, выполнив следующие команды (эти команды требуют предварительной установки в вашей системе Git):
# sudo git clone https://github.com/fujita/swift3.git
# cd swift3
# sudo python setup.py install
- Установите пакет
libdigest-hmac-perl выполнив следующую команду (этот пакет используется для проверки согласованности между двумя элементами, которые совместно используют код безопасности):
# apt-get install libdigest-hmac-perl
- Отредактируйте файл
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
- На клиенте, который будет осуществлять доступ к хранилищу объектов 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 и подлежащих рассмотрению вещах при замене или расширении дисков, узлов и зон.
Она также предоставит информацию о различных инструментах, которые могут быть использованы для сбора информации о поведении системы хранения объектов.
|