API сервера Chef Infra
API сервера Chef Infra — это REST API, предоставляющий доступ к объектам сервера Chef Infra, включая узлы, среды, роли, пользователей, организации, кулинарные книги (и версии кулинарных книг), и используется для управления списком клиентов API и связанными парами открытых ключей RSA.
Требования
API сервера Chef Infra имеет следующие требования:
- Заголовок
Acceptдолжен быть установлен в значениеapplication/json. - Для запросов
PUTиPOSTзаголовокContent-Typeдолжен быть установлен в значениеapplication/json. - Заголовок
X-Chef-Versionдолжен быть установлен на версию API сервера Chef Infra, которая используется. - Запрос должен быть подписан путём добавления заголовков аутентификации. Для подписи запросов можно использовать ‘Mixlib::Authentication’.
- Запрос должен быть правильно отформатирован. Наиболее простой способ гарантировать правильный формат запроса — использовать библиотеку
Chef::ServerAPI.
Заголовки аутентификации
Аутентификация на сервере Chef Infra требует определенного набора HTTP-заголовков, подписанных с помощью закрытого ключа, связанного с клиентом, который отправляет запрос. Запрос авторизован, если сервер Chef Infra может проверить подпись с использованием открытого ключа. Разрешены только авторизованные действия.
Примечание
knife exec , запросы на аутентификацию необходимо сделать более явными, но всё равно без необходимости в заголовках аутентификации. В некоторых случаях, таких как использование произвольного Ruby-кода, клиента API сервера Chef Infra или cURL, может потребоваться включить полный заголовок аутентификации в запрос на сервер Chef Infra.Обязательные заголовки
Требуются следующие заголовки аутентификации:
| Функция | Описание |
|---|---|
Accept |
Формат, в котором сервер Chef Infra предоставляет данные ответа. Этот заголовок должен быть установлен на значение application/json. |
Content-Type |
Формат, в котором данные отправляются на сервер Chef Infra. Этот заголовок необходим для запросов PUT и POST и должен быть установлен на значение application/json. |
Host |
Имя хоста (и номер порта), на который отправляется запрос. (Номер порта 80 указывать не нужно). Например: api.chef.io (что эквивалентно api.chef.io:80) или api.chef.io:443. |
Method |
Метод из запроса. |
Path |
Опустить для версии аутентификации 1. Указать для версии аутентификации 1.3 |
X-Chef-Version |
Версия исполняемого файла Chef Infra Client, из которого отправляется запрос. Этот заголовок гарантирует, что ответы будут в правильном формате. Например: 12.0.2 или 11.16.x. |
X-Ops-Authorization-N |
Один (или несколько) сегментов по 60 символов, составляющих канонический заголовок. Канонический заголовок подписывается закрытым ключом машины-клиента, отправившей запрос, и также закодирован с использованием Base64. Если требуется более одного сегмента, каждый должен быть именован последовательно, например, X-Ops-Authorization-1, X-Ops-Authorization-2, X-Ops-Authorization-N, где N представляет целое число, используемое последним заголовком, который является частью запроса. |
X-Ops-Content-Hash |
Для версии API 1. Результат хеширования SHA-1 тела запроса, закодированного с использованием Base64. Кодирование Base64 должно иметь переводы строк каждые 60 символов. Для версии API 1.3. Результат хеширования SHA-256 тела запроса, закодированного с использованием Base64. Кодирование Base64 должно иметь переводы строк каждые 60 символов. |
X-Ops-Server-API-Version |
Используйте X-Ops-Server-API-Version для указания версии API сервера Chef Infra. Например: X-Ops-Server-API-Version: 1. X-Ops-Server-API-Version: 0 поддерживается для использования с сервером Chef Infra версии 12, но будет устаревать в рамках следующего крупного релиза. |
X-Ops-Sign |
Установите этот заголовок в следующее значение: algorithm=sha1,version=1.0 или version=1.3. |
X-Ops-Timestamp |
Отметка времени в формате ISO-8601 с указанием UTC знаком «T» в конце и отделённая символом T. Например: 2013-03-10T14:14:44Z. |
X-Ops-UserId |
Имя клиента API, закрытый ключ которого будет использован для создания заголовка авторизации. |
Примечание
X-Ops-Server-API-Info для идентификации версии API сервера Chef Infra.Формат канонического заголовка 1.0 с использованием SHA-1
Подписанные заголовки шифруются с помощью метода OpenSSL RSA_private_encrypt и кодируются в Base64. Подписанные заголовки используются для создания одного или нескольких заголовков X-Ops-Authorization-N из сегментов по 60 символов. Канонический заголовок должен быть создан путём конкатенации следующих заголовков, шифрования и кодирования:
Method:HTTP_METHOD
Hashed Path:HASHED_PATH
X-Ops-Content-Hash:HASHED_BODY
X-Ops-Timestamp:TIME
X-Ops-UserId:USERID
где:
-
HTTP_METHOD— метод, используемый в запросе API (GET,POST, и так далее) -
HASHED_PATH— путь запроса:/organizations/NAME/name_of_endpoint.HASHED_PATHдолжен быть хеширован с использованием SHA-1 и закодирован с использованием Base64, не должен содержать повторяющихся слэшей (/), не должен заканчиваться слэшем (если путь не/), и не должен содержать строку запроса. -
X-Ops-Content-Hash— закодированный в Base64 хеш SHA-256 JSON тела запроса. -
X-Ops-Timestamp— время UTC в формате RFC3339. -
X-Ops-UserId— имя клиента или пользователя в текстовом формате.
Сервер Chef Infra расшифровывает этот заголовок и проверяет соответствие его содержимого содержимому нешифрованных заголовков в запросе. Проверяется отметка времени сообщения, чтобы убедиться, что запрос был получен в разумное время. Один из подходов к генерации подписанных заголовков — использование mixlib-authentication, который представляет собой объектно-ориентированный заголовок подписи аутентификации, похожий на тот, который используется Chef Infra Client.
Пример
Следующий пример демонстрирует запрос на аутентификацию:
GET /organizations/NAME/nodes HTTP/1.1
Accept: application/json
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Host: api.chef.io:443
User-Agent: Chef Knife/12.0.2 (ruby-2.1.1-p320; ohai-8.0.0; x86_64-darwin12.0.2; +http://chef.io)
X-Chef-Version: 12.0.2
X-Ops-Authorization-1: BE3NnBritishaf3ifuwLSPCCYasdfXaRN5oZb4c6hbW0aefI
X-Ops-Authorization-2: sL4j1qtEZzi/2WeF67UuytdsdfgbOc5CjgECQwqrym9gCUON
X-Ops-Authorization-3: yf0p7PrLRCNasdfaHhQ2LWSea+kTcu0dkasdfvaTghfCDC57
X-Ops-Authorization-4: 155i+ZlthfasfasdffukusbIUGBKUYFjhbvcds3k0i0gqs+V
X-Ops-Authorization-5: /sLcR7JjQky7sdafIHNfsBQrISktNPower1236hbFIayFBx3
X-Ops-Authorization-6: nodilAGMb166@haC/fttwlWQ2N1LasdqqGomRedtyhSqXA==
X-Ops-Content-Hash: 2jmj7l5rfasfgSw0ygaVb/vlWAghYkK/YBwk=
X-Ops-Server-API-Info: 1
X-Ops-Sign: algorithm=sha1;version=1.0;
X-Ops-Userid: user_id
X-Ops-Timestamp: 2014-12-12T17:13:28Z
Формат канонического заголовка 1.3 с использованием SHA-256
Серверы Chef Infra версии 12.4.0 и выше поддерживают протокол подписи версии 1.3, который добавляет поддержку алгоритмов SHA-256. Его можно включить в Chef Infra Client через файл client.rb:
authentication_protocol_version = '1.3'
И для командной строки Chef's knife через config.rb:
knife[:authentication_protocol_version] = '1.3'
Чтобы создать подписанные заголовки для прямого использования. Соберите указанные заголовки в перечисленном порядке, преобразуйте заголовки подписи в конкатенированную строку, подпишите и закодируйте результат в Base64. Конкатенация заголовков подписи подписывается с использованием закрытого ключа клиента RSA, с хешированием SHA-256 и padding PKCS1v15. Разбейте значение, закодированное в Base64, на фрагменты по 60 символов и создайте заголовки X-Ops-Authorization-N с этими фрагментами.
Method:HTTP_METHOD
Path:PATH
X-Ops-Content-Hash:HASHED_BODY
X-Ops-Sign
X-Ops-Timestamp:TIME
X-Ops-UserId:USERID
X-Ops-Server-API-Version
где:
-
HTTP_METHOD— метод, используемый в запросе API (GET,POST, и т.д.) -
PATH— путь запроса:/organizations/NAME/name_of_endpoint. Значение не должно содержать повторяющихся слэшей (/), не должно заканчиваться слэшем (если путь не/), и не должно содержать строку запроса. -
X-Ops-Content-Hash— закодированный в Base64 хеш SHA-256 JSON тела запроса. -
X-Ops-Signимеет значение “version=1.3”. -
X-Ops-Timestamp— время UTC в формате RFC3339. -
X-Ops-UserId— имя клиента или пользователя в текстовом формате. -
X-Ops-Server-API-Version— числовое значение API сервера Chef Infra.
Пример
Следующий пример демонстрирует запрос на аутентификацию:
GET /organizations/NAME/nodes HTTP/1.1
Accept: application/json
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Host: api.chef.io:443
Method: GET
Path: /organizations/NAME/nodes
User-Agent: Chef Knife/12.0.2 (ruby-2.1.1-p320; ohai-8.0.0; x86_64-darwin12.0.2; +http://chef.io)
X-Chef-Version: 14.0.0
X-Ops-Content-Hash: 2jmj7l5rfasfgSw0ygaVb/vlWAghYkK/YBwk=
X-Ops-Authorization-1: BE3NnBritishaf3ifuwLSPCCYasdfXaRN5oZb4c6hbW0aefI
X-Ops-Authorization-2: sL4j1qtEZzi/2WeF67UuytdsdfgbOc5CjgECQwqrym9gCUON
X-Ops-Authorization-3: yf0p7PrLRCNasdfaHhQ2LWSea+kTcu0dkasdfvaTghfCDC57
X-Ops-Authorization-4: 155i+ZlthfasfasdffukusbIUGBKUYFjhbvcds3k0i0gqs+V
X-Ops-Authorization-5: /sLcR7JjQky7sdafIHNfsBQrISktNPower1236hbFIayFBx3
X-Ops-Authorization-6: nodilAGMb166@haC/fttwlWQ2N1LasdqqGomRedtyhSqXA==
X-Ops-Server-API-Info: 1
X-Ops-Sign: version=1.3;
X-Ops-Timestamp: 2014-12-12T17:13:28Z
X-Ops-Userid: user_id
Запросы knife к API
Плагин knife — это набор одной (или нескольких) подкоманд, которые можно добавить к knife для поддержки дополнительных функций, которые не встроены в базовый набор подкоманд knife. Многие плагины knife созданы членами сообщества Chef, и несколько из них созданы и поддерживаются Chef.
Плагин knife можно использовать для отправки запросов с аутентификацией к API сервера Chef Infra с помощью следующих методов:
| Метод | Описание |
|---|---|
rest.delete_rest |
Используется для удаления объекта с сервера Chef Infra. |
rest.get_rest |
Используется для получения деталей объекта на сервере Chef Infra. |
rest.post_rest |
Используется для добавления объекта на сервер Chef Infra. |
rest.put_rest |
Используется для обновления объекта на сервере Chef Infra. |
Например:
module MyCommands
class MyNodeDelete < Chef::Knife
#An implementation of knife node delete
banner 'knife my node delete [NODE_NAME]'
def run
if name_args.length < 1
show_usage
ui.fatal('You must specify a node name.')
exit 1
end
nodename = name_args[0]
api_endpoint = "nodes/#{nodename}"
# Again, we could just call rest.delete_rest
nodey = rest.get_rest(api_endpoint)
ui.confirm("Do you really want to delete #{nodey}")
nodey.destroy
end
end
end
Глобальные конечные точки
Глобальная конечная точка может использоваться для доступа ко всем организациям на сервере Chef Infra.
/authenticate_user
Конечная точка /authenticate_user имеет следующие методы: POST.
POST
Метод POST используется для аутентификации пользователя. Эта конечная точка используется службой Chef Identity для аутентификации пользователей Chef Supermarket на сервере Chef Infra.
Этот метод не имеет параметров.
Запрос
POST /authenticate_user
с телом запроса, подобным:
{
"username" : "grantmc",
"password" : "p@ssw0rd"
}
Ответ
Этот метод не имеет тела ответа.
Коды ответа
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Нет доступа. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента, пароль и убедитесь, что для подписания запроса использовался правильный ключ. |
/license
Примечание
Конечная точка /license имеет следующие методы: GET.
GET
Метод GET используется для получения информации о лицензии для сервера Chef Infra.
Этот метод не имеет параметров.
Запрос
GET /license
Этот метод не имеет тела запроса.
Ответ
Ответ аналогичен:
{
"limit_exceeded": false,
"node_license": 25,
"node_count": 12,
"upgrade_url": "http://www.chef.io/contact/on-premises-simple"
}
Когда node_count больше, чем node_license, то limit_exceeded является true, и консоль управления Chef отобразит уведомление об этом статусе. Способ решения этой проблемы заключается в переходе по адресу обновления, добавлении соответствующего количества лицензий и соответствующем обновлении параметров конфигурации.
Файл chef-server.rb содержит настройки, которые можно использовать для изменения количества узлов, которые находятся под лицензией:
| Настройка | Описание |
|---|---|
license['nodes'] |
Количество узлов с лицензией. Значение по умолчанию: 25. |
license['upgrade_url'] |
Адрес для получения дополнительной информации об обновлении количества узлов с лицензией для организации. Значение по умолчанию: "http://www.chef.io/contact/on-premises-simple". |
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Нет доступа. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и убедитесь, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который отправил запрос, не имеет разрешения на выполнение действия. |
/organizations
Сервер Chef Infra может содержать несколько организаций.
Конечная точка /organizations имеет следующие методы: GET и POST.
Предупреждение
pivotal, который создается в процессе установки сервера Chef Infra. (См. пример «Запрос пользователей и организаций» ниже для примера доступа к этой конечной точке с помощью пользователя pivotal).GET
Метод GET используется для получения списка организаций на сервере Chef Infra.
Запрос
GET /organizations
Ответ
{
"org_name1": https://url/for/org_name1",
"org_name2": https://url/for/org_name2"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
403 |
Запрещено. Пользователь, который отправил запрос, не имеет разрешения на выполнение действия. |
POST
Метод POST используется для создания организации на сервере Chef Infra.
Этот метод не имеет параметров.
Запрос
POST /organizations
с телом запроса, аналогичным:
{
"name": "org_name1",
"full_name": "Org_name1 Full Name"
}
где:
-
nameдолжно начинаться с буквы в нижнем регистре или цифры, может содержать только буквы в нижнем регистре, цифры, дефисы и символы подчеркивания и должно иметь длину от 1 до 255 символов. Например:chef. -
full_nameдолжно начинаться с символа, отличного от пробела, и должно иметь длину от 1 до 1023 символов. Например:Chef Software, Inc..
Примечание
admins, не будет связан с организацией.Ответ
Ответ аналогичен:
{
"clientname": "org_name1-validator",
"private_key": "-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAx2uyX ...",
"uri": "https://url/for/org_name1"
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Создано. Запрос был выполнен успешно. Организация была создана. |
400 |
Ошибка запроса. Содержимое запроса отформатировано неправильно. |
403 |
Запрещено. Пользователь, который отправил запрос, не имеет разрешения на выполнение действия. |
409 |
Конфликт. Организация уже существует. |
/organizations/NAME
Организация — это единичный экземпляр сервера Chef Infra, включающий все узлы, управляемые этим сервером Chef Infra, и все рабочие станции, которые будут запускать knife и получать доступ к серверу Chef Infra с помощью API сервера Chef Infra.
Конечная точка /organizations/NAME имеет следующие методы: DELETE, GET, и PUT.
DELETE
Метод DELETE используется для удаления организации.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME
Ответ
Ответ аналогичен:
{
"name": "chef",
"full_name": "Chef Software, Inc.",
"guid": "f980d1asdfda0331235s00ff36862"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
403 |
Запрещено. Пользователь, который отправил запрос, не имеет разрешения на выполнение действия. |
GET
Метод GET используется для получения данных для указанной организации.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME
Ответ
{
"name": "chef",
"full_name": "Chef Software, Inc.",
"guid": "f980d1asdfda0331235s00ff36862"
...
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
403 |
Запрещено. Пользователь, который отправил запрос, не имеет разрешения на выполнение действия. |
PUT
Метод PUT используется для обновления определения организации.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME
с телом запроса, аналогичным:
{
"name": "chef",
"full_name": "Chef Software, Inc."
}
Ответ
Ответ аналогичен:
{
"name": "chef",
"full_name": "Chef Software, Inc.",
"guid": "f980d1asdfda0331235s00ff36862"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
400 |
Ошибка запроса. Содержимое запроса отформатировано неправильно. |
403 |
Запрещено. Пользователь, который отправил запрос, не имеет разрешения на выполнение действия. |
410 |
Удалино. Не удалось обновить приватный ключ. |
/_stats
Используйте конечную точку /_stats для отображения статистики использования пула подключений внутри Erchef, Postgresql и Erlang VM. Конечная точка _stats использует базовый аутентификацию вместо схемы X-Ops-Authorization, обычно используемой для подключения к серверу Chef Infra. По умолчанию для запроса к конечной точке _stats используется пользователь statsuser. Пароль для statsuser доступен как opscode_erchef::stats_password из команды chef-server-ctl show-service-credentials.
Конечная точка /_stats имеет следующий метод: GET.
GET
Метод GET используется для получения статистики.
Этот метод имеет следующие параметры:
| Параметр | Описание |
|---|---|
format=json |
Возвратить результаты в формате JSON. |
format=text |
Возвратить результаты в текстовом формате. |
Запрос
GET /_stats
Этот метод не имеет параметров. Этот метод не имеет тела запроса. Конечная точка /_stats не требует заголовков аутентификации.
Ответ
Тело ответа аналогично:
[
{
"name": "erlang_vm_time_correction",
"type": "UNTYPED",
"help": "1 if time correction is enabled, otherwise 0.",
"metrics": [
{
"value": "1"
}
]
},
{
"name": "erlang_vm_thread_pool_size",
"type": "GAUGE",
"help": "The number of async threads in the async thread pool used for asynchronous driver calls.",
"metrics": [
{
"value": "5"
}
]
},
...
{
"name": "pg_stat_seq_scan",
"type": "COUNTER",
"help": "Number of sequential scans initiated on all tables",
"metrics": [
{
"value": "22147"
}
]
}
]
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. |
401 |
Нет доступа. Пользователь или пароль неверны. |
406 |
Неприемлемый формат. Запрошен неверный формат. |
/_status
Используйте конечную точку /_status для проверки состояния связи между серверами front-end и back-end. Эта конечная точка расположена по адресу /_status на серверах front-end. Конечная точка /_status не требует заголовков аутентификации.
GET
Метод GET используется для получения подробностей о статусе сервера Chef Infra Server.
Запрос
GET /_status
Этот метод не имеет параметров. Этот метод не имеет тела запроса.
Ответ
Ответ вернёт что-то вроде следующего:
{
"status": "pong",
"upstreams":
{
"service_name": "pong",
"service_name": "pong",
...
}
"keygen":
{
"keys": 10,
....
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Все коммуникации в порядке. |
|
Один (или более) сервисов не работают. Например: |
/users
Пользователь — это индивидуальная учётная запись, созданная для получения доступа к серверу Chef Infra Server. Например:
- Учётная запись гостевого сервера Chef Infra Server
- Пользователь, который управляет рабочей станцией, с которой будет управляться сервер Chef Infra Server
Конечная точка /users имеет следующие методы: GET и POST.
Предупреждение
pivotal, который создаётся в процессе установки сервера Chef Infra Server. (См. пример «Запрос пользователей и организаций» ниже для примера доступа к этой конечной точке с пользователем pivotal).Примечание
/users для версии 1 API сервера Chef Infra Server. Версия 0 API имеет некоторые различия в теле запроса и результатах.GET
Метод GET используется для получения списка пользователей на сервере Chef Infra Server.
Этот метод имеет следующие параметры:
| Параметр | Описание |
|---|---|
email=jane@chef.com |
Фильтрует возвращаемых пользователей по их идентификатору электронной почты. |
external_authentication_uid=jane@chef.com |
Фильтрует возвращаемых пользователей по их внешнему идентификатору входа. |
verbose=true |
Возвращает список пользователей с полями "email", "first_name", "last_name". Если этот флаг установлен, параметры email и external_authentication_uid игнорируются. |
Запрос
GET /users
Ответ
Ответ похож на:
{
"user1": "https://chef.example/users/user1",
"user2": "https://chef.example/users/user2"
}
Подробный ответ похож на:
{
"janechef": { "email": "jane.chef@user.com", "first_name": "jane", "last_name": "chef_user" },
"yaelsmith": { "email": "yeal.chef@user.com", "first_name": "yeal", "last_name": "smith" }
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Всё в порядке. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который выполнил запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который выполнил запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
Необязательное фильтрация
Фильтрация по /users может быть выполнена с помощью external_authentication_uid. Это для поддержки аутентификации SAML.
Например, чтобы получить пользователей, у которых external_authentication_uid равно jane@doe.com, выполните следующее:
GET /users?external_authentication_uid=jane%40doe.com
Новое в Chef Server 12.7.
POST
Метод POST используется для создания пользователя на сервере Chef Infra Server.
Этот метод не имеет параметров.
Запрос
POST /users
с телом запроса, похожим на:
{
"username": "robert-forster",
"display_name": "robert",
"email": "robert@noreply.com",
"first_name": "robert",
"last_name": "forster",
"middle_name": "",
"password": "yeahpass",
"create_key": true,
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoYyN0AIhUh7Fw1+gQtR+ \n0/HY3625IUlVheoUeUz3WnsTrUGSSS4fHvxUiCJlNni1sQvcJ0xC9Bw3iMz7YVFO\nWz5SeKmajqKEnNywN8/NByZhhlLdBxBX/UN04/7aHZMoZxrrjXGLcyjvXN3uxyCO\nyPY989pa68LJ9jXWyyfKjCYdztSFcRuwF7tWgqnlsc8pve/UaWamNOTXQnyrQ6Dp\ndn+1jiNbEJIdxiza7DJMH/9/i/mLIDEFCLRPQ3RqW4T8QrSbkyzPO/iwaHl9U196\n06Ajv1RNnfyHnBXIM+I5mxJRyJCyDFo/MACc5AgO6M0a7sJ/sdX+WccgcHEVbPAl\n1wIDAQAB \n-----END PUBLIC KEY-----\n\n"
}
где:
-
usernameдолжен начинаться с маленькой буквы или цифры, может содержать только маленькие буквы, цифры, дефисы и нижние подчеркивания. Например:chef.usernameдолжен быть присутствовать и иметь действительное значение. Действительное имя пользователя — это список элементов, разделенных точкой, соответствующихa-z0-9!#$%&'*+/=?^_`{|}~-. -
display_nameдолжен быть присутствовать. -
emailдолжен быть присутствовать и иметь действительное значение. Проверка электронной почты не допускает всех символов Юникода. - Либо
external_authentication_uid, либоpasswordдолжны быть присутствовать и иметь значение. - Во время POST-запроса значение
public_keyбудет выделено и повторно отправлено в часть API ключей в последних версиях сервера Chef Infra Server. - Можно указать только один из ключей,
create_keyилиpublic_key. Если указанcreate_key, генерируется и возвращается по умолчанию закрытый ключ.
Ответ
Ответ похож на:
{
"uri": "https://chef.example/users/robert-forster",
"chef_key": {
"name": "default",
"public_key": "-----BEGIN RSA PUBLIC KEY...",
"expiration_date": "infinity",
"uri": "https://chef.example/users/robert-forster/keys/default",
"private_key": "-----BEGIN RSA PRIVATE KEY..."
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Успешно. Пользователь создан. |
400 |
Ошибка запроса. Содержимое запроса отформатировано неправильно. |
401 |
Не авторизован. Пользователь или клиент, который выполнил запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который выполнил запрос, не имеет разрешения на выполнение действия. |
409 |
Конфликт. Объект уже существует. |
413 |
Запрос слишком большой. Запрос не может быть больше 1000000 байт. |
/users/NAME
Конечная точка /users/USER_NAME имеет следующие методы: DELETE, GET, и PUT.
Примечание
/users/NAME для версии 1 API сервера Chef Infra Server. Версия 0 API имеет некоторые различия в теле запроса и результатах.DELETE
Метод DELETE используется для удаления пользователя.
Этот метод не имеет параметров.
Запрос
DELETE /users/USER_NAME
Ответ
Ответ похож на:
{
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Всё в порядке. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который выполнил запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который выполнил запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возврата подробностей о пользователе.
Этот метод не имеет параметров.
Запрос
GET /users/USER_NAME
Ответ
Ответ похож на:
{
"username": "robert-forster",
"display_name": "robert",
"email": "robert@noreply.com",
"first_name": "robert",
"last_name": "forster"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Всё в порядке. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который выполнил запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который выполнил запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
PUT
Метод PUT используется для обновления конкретного пользователя. Если для метода PUT не указаны значения, сервер Chef Infra Server использует существующие значения, а не присваивает значения по умолчанию.
Примечание
PUT поддерживает переименование. Если запрашивается PUT /users/foo с { "username: "bar""}, то foo будет переименован в bar, и всё содержимое, ранее связанное с foo, будет связано с bar.Примечание
"public_key", "private_key", и "create_key" в запросах PUT к клиентам/пользователям приведут к ответу 400.Этот метод не имеет параметров.
Запрос
PUT /users/NAME
с телом запроса, похожим на:
{
"username": "grant.mclennan",
"display_name": "Grant McLennan",
"email": "grant@newlocation.com",
"first_name": "Grant",
"last_name": "McLennan",
"middle_name": "james",
"public_key" : "-------- BEGIN PUBLIC KEY ----and a valid key here"
}
Ответ
Ответ похож на:
{
"uri": "https://chef.example/users/grant.mclennan",
"chef_key": {
"name": "default",
"public_key": "-----BEGIN RSA PUBLIC KEY...",
"expiration_date": "infinity",
"uri": "https://chef.example/users/rober-forster/keys/default",
"private_key": ""
}
}
Если был сгенерирован новый закрытый ключ, возвращаются оба ключа: закрытый и открытый.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос был выполнен успешно. |
201 |
Создано. Объект был создан. (Этот код ответа возвращается только при переименовании пользователя.) |
400 |
Неверно. Неверные или отсутствующие значения. В противном случае запрос имеет неправильный формат. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
409 |
Конфликт. Этот код ответа возвращается только при переименовании пользователя, но пользователь с таким именем уже существует. |
413 |
Размер запроса слишком большой. Размер запроса не может превышать 1000000 байт. |
/users/USER/keys/
Конечная точка /users/USER/keys имеет следующие методы: GET и POST. Ключи пользователей — это открытые ключи RSA в формате файла SSL .pem и используются для аутентификации. Сервер Chef Infra не сохраняет закрытые ключи для пользователей.
GET
Метод GET используется для получения идентификаторов ключей, связанных URI и состояний срока действия всех ключей указанного пользователя.
Этот метод не имеет параметров.
Запрос
GET /users/USER/keys/
Ответ
Ответ похож на:
[
{
"name" : "default",
"uri" : "https://chef.example/users/USER/keys/default",
"expired" : false
},
{
"name" : "key1",
"uri" : "https://chef.example/users/USER/keys/key1",
"expired" : false
}
]
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
POST
Метод POST используется для добавления ключа для указанного пользователя.
Этот метод не имеет параметров.
Запрос
POST /users/USER/keys/
с телом запроса, похожим на:
{
"name" : "key1",
"public_key" : "-------- BEGIN PUBLIC KEY ----and a valid key here",
"expiration_date" : "infinity"
}
Ответ
Ответ похож на:
{
"name" : "key1",
"uri" : "https://chapi_chef_server.mdef.example/users/user1/keys/key1",
"expired": false
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Создано. Объект был создан. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/users/USER/keys/KEY
Конечная точка /users/USER/keys/KEY имеет следующие методы: DELETE, GET, и PUT.
DELETE
Метод DELETE используется для удаления указанного ключа для указанного пользователя.
Этот метод не имеет параметров.
Запрос
DELETE /users/USER/keys/KEY
Ответ
Ответ возвращает информацию об удалённом ключе и похож на:
{
"name" : "default",
"public_key" : "-------- BEGIN PUBLIC KEY --------- ...",
"expiration_date" : "2020-12-31T00:00:00Z"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возврата подробной информации о конкретном ключе для конкретного пользователя.
Этот метод не имеет параметров.
Запрос
GET /users/USER/keys/KEY
Ответ
Ответ похож на:
{
"name" : "default",
"public_key" : "-------- BEGIN PUBLIC KEY --------- ...",
"expiration_date" : "2020-12-31T00:00:00Z"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
PUT
Метод PUT используется для обновления одного или нескольких свойств конкретного ключа для конкретного пользователя.
Этот метод не имеет параметров.
Запрос
PUT /users/USER/keys/KEY
с телом запроса, похожим на:
{
"name" : "new_key_name",
"public_key" : "-------- BEGIN PUBLIC KEY ----and a valid key here",
"expiration_date" : "2020-12-31T00:00:00Z"
}
Ответ
Ответ содержит обновлённую информацию о ключе и похож на:
{
"name" : "new_key_name",
"public_key" : "-------- BEGIN PUBLIC KEY --------- ...",
"expiration_date" : "2020-12-31T00:00:00Z"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос был выполнен успешно. |
201 |
Создано. Объект был создан. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
Конечные точки для организаций
Каждый запрос на аутентификацию, специфичный для организации, должен включать /organizations/NAME в качестве части имени конечной точки. Например, полная конечная точка для получения списка ролей:
GET /organizations/NAME/roles
где ORG_NAME — имя организации.
/association_requests
Пользователи могут быть приглашены в организации через веб-интерфейс в консоли управления Chef или через конечную точку POST в API Chef Infra Server.
Конечная точка /association_requests имеет следующие методы: DELETE, GET, и POST.
DELETE
Метод DELETE используется для удаления ожидающего приглашения.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/association_requests/ID
Этот метод не имеет тела запроса.
Ответ
Ответ похож на:
{
"id": "79b9382ab70e962907cee1747f9969a4",
"orgname": "testorg",
"username" "janedoe"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для получения списка ожидающих приглашений.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/association_requests
Этот метод не имеет тела запроса.
Ответ
Ответ возвращает словарь, похожий на:
[
{
"id": "79b9382ab70e962907cee1747f9969a4",
"username": "marygupta"
},
{
"id": "24t1432uf33x799382abb7096g8190b5",
"username": "johnirving"
}
]
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
POST
Метод POST используется для создания приглашения.
Этот метод не имеет параметров.
Запрос
{
"user": "billysmith"
}
POST /organizations/NAME/association_requests
Ответ
Ответ похож на:
{
"uri": "https://chef.example/organizations/test/association_requests/79b9382ab70e962907cee1747f9969a4",
"organization_user": {
"username": "authorizeduser"
},
"organization": {
"name": "test"
},
"user": {
"email": "sallyjane@domain.org",
"first_name": "sally"
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
ОК. Приглашение создано. |
400 |
Ошибка запроса. Содержимое запроса отформатировано некорректно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, используемого для подписания запроса. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Приглашённый пользователь не существует. |
409 |
Конфликт. Объект уже существует. |
/clients
Используйте конечную точку /clients для управления клиентами и связанными с ними парами ключей RSA. Конечная точка /clients имеет следующие методы: GET и POST.
Примечание
GET
Метод GET используется для возврата списка клиентов на Chef Infra Server, включая клиентов для узлов, зарегистрированных на Chef Infra Server, клиентов chef-validator и клиентов chef-server-webui для всей организации.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/clients
Этот метод не имеет тела запроса.
Ответ
Ответ похож на:
{
"org1-validator" : "https://chef.example/orgaizations/org1/clients/org1-validator",
"client1" : "https://chef.example/orgaizations/org1/clients/client1"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, используемого для подписания запроса. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
POST
Метод POST используется для создания нового API-клиента.
Примечание
"admin" больше не поддерживается при создании и поддержке клиентов/пользователей. Если он используется в части POST или PUT клиента или пользователя, параметр "admin" игнорируется.Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/clients
с телом запроса, похожим на:
{
"name": "name_of_API_client",
"clientname": "name_of_API_client",
"validator": true,
"create_key": true
}
где name_of_API_client — имя создаваемого API-клиента, а admin указывает, будет ли API-клиент работать как административный API-клиент. Необходимо указать либо имя, либо clientname.
Ответ
Ответ похож на:
{
"uri": "https://chef.example/orgaizations/org1/clients/client1",
"chef_key": {
"name": "default",
"expiration_date": "infinity",
"private_key": "-----BEGIN RSA PRIVATE KEY----- ...",
"public_key": "-----BEGIN PUBLIC KEY----- ... ",
"uri": "https://chef.example/orgaizations/org1/clients/client1/keys/default"
}
Храните закрытый ключ в безопасном месте. Он потребуется позже (наряду с именем клиента) для доступа к Chef Infra Server при использовании API Chef Infra Server.
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Создано. Клиент был создан. |
400 |
Ошибка запроса. Содержимое запроса отформатировано некорректно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, используемого для подписания запроса. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
409 |
Конфликт. Объект уже существует. |
413 |
Запрос слишком большой. Размер запроса не должен превышать 1000000 байт. |
/clients/NAME
Конечная точка /clients/NAME используется для управления конкретным клиентом. Эта конечная точка имеет следующие методы: DELETE, GET, и PUT.
DELETE
Метод DELETE используется для удаления конкретного клиента.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/clients/NAME
Этот метод не имеет тела запроса.
Ответ
Ответ не содержит тела.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, используемого для подписания запроса. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возврата конкретного API-клиента.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/clients/NAME
Этот метод не имеет тела запроса.
Ответ
Ответ похож на:
{
"name": "user1",
"clientname": "user1",
"orgname": "test",
"json_class": "Chef::ApiClient",
"chef_type": "client",
"validator": "false"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, используемого для подписания запроса. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
PUT
Метод PUT используется для обновления конкретного клиента. Если значения не указаны для метода PUT, Chef Infra Server будет использовать существующие значения вместо назначения значений по умолчанию.
Примечание
PUT поддерживает переименования. Если запрашивается PUT /client/foo с { "name: "bar""}, то это переименует foo в bar и всё содержимое, ранее связанное с foo, будет связано с bar.Примечание
"admin" больше не поддерживается при создании и поддержке клиентов/пользователей. Если он используется в части POST или PUT клиента или пользователя, то он игнорируется.Примечание
"public_key", "private_key", или "create_key" в запросах PUT к клиентам/пользователям приведёт к ответу 400.Примечание
"name" и "clientname" не являются независимыми значениями. Отправка запроса PUT с разными значениями вернёт ошибку 400. Для установки обоих значений можно указать любое из имён.Запрос
PUT /organizations/NAME/clients/NAME
с телом запроса, похожим на:
{
"name": "monkeypants",
"validator": false
}
Ответ
Ответ похож на:
{
"name": "monkeypants",
"clientname": "monkeypants",
"validator": true,
"json_class":"Chef::ApiClient",
"chef_type":"client"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос выполнен успешно. |
201 |
Создано. Клиент был обновлён. (Этот код ответа возвращается только при переименовании клиента.) |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, используемого для подписания запроса. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
409 |
Конфликт. Этот код ответа возвращается только при переименовании клиента, но клиент с новым именем уже существует. |
413 |
Запрос слишком большой. Размер запроса не должен превышать 1000000 байт. |
/clients/CLIENT/keys/
Конечная точка /clients/CLIENT/keys имеет следующие методы: GET и POST.
GET
Метод GET используется для получения всех идентификаторов ключей указанного клиента, связанных URI и состояний истечения срока действия.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/clients/CLIENT/keys
Этот метод не имеет тела запроса.
Ответ
Ответ похож на:
[
{
"name": "default",
"uri": "https://chef.example/organizations/example/clients/client1/keys/default",
"expired": false
},
{
"name": "key1",
"uri": "https://chef.example/organizations/example/clients/client1/keys/key1",
"expired": true
}
]
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
POST
Метод POST используется для добавления ключа для указанного клиента.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/clients/CLIENT/keys
с телом запроса, похожим на:
{
"name": "key1",
"public_key": "-------- BEGIN PUBLIC KEY ----and a valid key here",
"expiration_date": "infinity"
}
Ответ
Ответ похож на:
{
"uri": "https://chef.example/organizations/example/clients/client1/keys/key1"
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Создано. Объект был создан. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/clients/CLIENT/keys/KEY
Конечная точка /clients/CLIENT/keys/KEY имеет следующие методы: DELETE, GET, и PUT.
DELETE
Метод DELETE используется для удаления указанного ключа для указанного клиента.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/clients/CLIENT/keys/KEY
Этот метод не имеет тела запроса.
Ответ
Ответ возвращает информацию об удаленном ключе и похож на:
{
"name": "default",
"public_key": "-------- BEGIN PUBLIC KEY --------- ...",
"expiration_date": "2020-12-31T00:00:00Z"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возвращения подробностей для определенного ключа определенного клиента.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/clients/CLIENT/keys/KEY
Этот метод не имеет тела запроса.
Ответ
Ответ похож на:
{
"name" : "default",
"public_key" : "-------- BEGIN PUBLIC KEY --------- ...",
"expiration_date" : "2020-12-31T00:00:00Z"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
PUT
Метод PUT используется для обновления одного или нескольких свойств для определенного ключа определенного клиента.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/clients/CLIENT/keys/KEY
с телом запроса, похожим на:
{
"name": "new_key_name",
"public_key": "-------- BEGIN PUBLIC KEY ----and a valid key here",
"expiration_date": "2020-12-31T00:00:00Z"
}
Ответ
Ответ содержит обновлённую информацию о ключе и похож на:
{
"name": "new_key_name",
"public_key": "-------- BEGIN PUBLIC KEY --------- ...",
"expiration_date": "2020-12-31T00:00:00Z"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
201 |
Создано. Объект был создан. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/containers
Конечная точка /containers имеет следующие методы: GET, POST.
GET
Метод GET используется для получения списка контейнеров.
Примечание: Конечная точка /containers бесполезна за пределами кода Chef Infra Server.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/containers
Этот метод не использует тело запроса.
Ответ
Ответ похож на:
{
"clients": "https://chef.example/organizations/example/containers/clients",
"containers": "https://chef.example/organizations/example/containers/containers",
"cookbooks": "https://chef.example/organizations/example/containers/cookbooks",
"data": "https://chef.example/organizations/example/containers/data",
"environments": "https://chef.example/organizations/example/containers/environments",
"groups": "https://chef.example/organizations/example/containers/groups",
"nodes": "https://chef.example/organizations/example/containers/nodes",
"roles": "https://chef.example/organizations/example/containers/roles",
"sandboxes": "https://chef.example/organizations/example/containers/sandboxes"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
POST
Метод POST используется для создания контейнера.
Примечание: Использование метода POST конечной точки /containers может иметь непредвиденные последствия и, вероятно, сломает вашу систему. Использование этого метода не поддерживается.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME
Этот метод имеет тело запроса, подобное:
{
"containername": "mycontainer",
"containerpath": "mycontainer"
}
Ответ
Ответ похож на:
{
"uri"": "https://chef.example/organizations/test/containers/mycontainer"
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/containers/NAME
DELETE
Метод DELETE используется для удаления контейнера.
Конечная точка /containers/Name имеет следующие методы: DELETE, GET.
Примечание: Использование метода DELETE конечной точки /containers/NAME может иметь непредвиденные последствия и, вероятно, сломает вашу систему. Использование этого метода не поддерживается.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/containers/NAME
Этот метод не использует тело запроса.
Ответ
Ответ не возвращает тело ответа.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для получения контейнера.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/containers/NAME
Этот метод не использует тело запроса.
Ответ
Ответ похож на:
{
"containername"": "mycontainer",
"containerpath"": "mycontainer"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/cookbook_artifacts
Cookbook artifacts — это конкретные версии кулинарных книг, которые были указаны файлом политики, применённым к узлу.
Конечная точка /organization/NAME/cookbook_artifacts имеет следующие методы: GET.
GET
Метод GET используется для возвращения хэша всех артефактов кулинарной книги и их версий.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/cookbook_artifacts
У этого метода нет тела запроса.
Ответ
Ответ похож на:
{
"oc-influxdb": {
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/oc-influxdb",
"versions": [
{
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/oc-influxdb/9634a5d998b02ff069761f6e1309a41572d0f858",
"identifier": "9634a5d998b02ff069761f6e1309a41572d0f858"
},
{
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/oc-influxdb/d774c9bb079f21b64c34275ecd4b371e0cae71a1",
"identifier": "d774c9bb079f21b64c34275ecd4b371e0cae71a1"
}
]
},
"rabbitmq": {
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/rabbitmq",
"versions": [
{
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/rabbitmq/58035a5b41c005f3b5b98f22ccaed1a0d6161e22",
"identifier": "58035a5b41c005f3b5b98f22ccaed1a0d6161e22"
},
{
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/rabbitmq/5c08f92cc01f94ee37d382c32023b137ee343a1e",
"identifier": "5c08f92cc01f94ee37d382c32023b137ee343a1e"
}
]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
/cookbook_artifacts/NAME
Эта конечная точка перечисляет версии артефакта кулинарной книги с заданным именем.
Конечная точка /organization/NAME/cookbook_artifacts/NAME имеет следующие методы: GET.
GET
Метод GET используется для возвращения хэша одного артефакта кулинарной книги и его версий.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/cookbook_artifacts/NAME
У этого метода нет тела запроса.
Ответ
Ответ похож на:
{
"rabbitmq": {
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/rabbitmq",
"versions": [
{
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/rabbitmq/0bd7539be0434e3355aff8ecccf4543ecf5c4be2",
"identifier": "0bd7539be0434e3355aff8ecccf4543ecf5c4be2"
},
{
"url": "https://chef.example/organizations/example-org/cookbook_artifacts/rabbitmq/0e1016d364685b87456c648136da04a2559821ec",
"identifier": "0e1016d364685b87456c648136da04a2559821ec"
}
]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/cookbook_artifacts/NAME/ID
Конечная точка /organization/NAME/cookbook_artifacts/NAME/ID имеет следующие методы: DELETE, GET, и PUT.
DELETE
Метод DELETE используется для удаления одной версии артефакта кулинарной книги.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/cookbook_artifacts/NAME/ID
У этого метода нет тела запроса.
Ответ
Ответ содержит запись об удалённом ресурсе и похож на:
{
"version": "5.7.7",
"name": "rabbitmq",
"identifier": "f3cf8ea7d8bfc59e35ec541946e3e82cd4b73e74",
"frozen?": false,
"chef_type": "cookbook_version",
"attributes": [
{
"name": "default.rb",
"path": "attributes/default.rb",
"checksum": "e5a530cca3898d8bd07604435dc5156e",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-e5a530cca3898d8bd07604435dc5156e"
}
],
"definitions": [
],
"files": [
],
"libraries": [
{
"name": "matchers.rb",
"path": "libraries/matchers.rb",
"checksum": "24c3f44c4d1d62300a56051f0069f639",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-24c3f44c4d1d62300a56051f0069f639"
},
{
"name": "helpers.rb",
"path": "libraries/helpers.rb",
"checksum": "df65c4a7259fcb30c6f3f1305ebf7502",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-df65c4a7259fcb30c6f3f1305ebf7502"
},
{
"name": "default.rb",
"path": "libraries/default.rb",
"checksum": "94292faac84ba797e720501700b30f74",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-94292faac84ba797e720501700b30f74"
}
],
"providers": [
{
"name": "user.rb",
"path": "providers/user.rb",
"checksum": "c31c9cc749f21962c825f983a6679d94",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-c31c9cc749f21962c825f983a6679d94"
},
{
"name": "policy.rb",
"path": "providers/policy.rb",
"checksum": "746c8a3f248f5bbfa51f5d2ba60b6315",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-746c8a3f248f5bbfa51f5d2ba60b6315"
}
],
"recipes": [
{
"name": "default.rb",
"path": "recipes/default.rb",
"checksum": "99a9b404ff6038d6ac55a90ca68c347a",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-99a9b404ff6038d6ac55a90ca68c347a"
},
{
"name": "cluster.rb",
"path": "recipes/cluster.rb",
"checksum": "fc0a86c1f858c9d37e11282efc9fe329",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-fc0a86c1f858c9d37e11282efc9fe329"
}
],
"resources": [
{
"name": "cluster.rb",
"path": "resources/cluster.rb",
"checksum": "85e74276e19bfdad581dce4f5c59f94a",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-85e74276e19bfdad581dce4f5c59f94a"
}
],
"root_files": [
{
"name": "metadata.rb",
"path": "metadata.rb",
"checksum": "36b395e758138a4295d1e3f9b3df5da9",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-36b395e758138a4295d1e3f9b3df5da9"
},
{
"name": "README.md",
"path": "README.md",
"checksum": "99873670f0994642f5e6baade52c8020",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-99873670f0994642f5e6baade52c8020"
}
],
"templates": [
{
"name": "default.rabbitmq-server.erb",
"path": "templates/default/default.rabbitmq-server.erb",
"checksum": "077855f4dc37f7fb708976134d8b2551",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-077855f4dc37f7fb708976134d8b2551"
},
{
"name": "90forceyes.erb",
"path": "templates/default/90forceyes.erb",
"checksum": "73cc571097cf77c74b4e7b5b680020c9",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-73cc571097cf77c74b4e7b5b680020c9"
}
],
"metadata": {
"name": "rabbitmq",
"description": "Installs and configures RabbitMQ server",
"long_description": "",
"maintainer": "Chef Software, Inc. and contributors",
"maintainer_email": "mklishin@pivotal.io",
"license": "Apache-2.0",
"platforms": {
"amazon": ">= 2.0",
"centos": ">= 7.0",
"debian": ">= 8.0",
"opensuse": ">= 0.0.0",
"opensuseleap": ">= 0.0.0",
"oracle": ">= 0.0.0",
"redhat": ">= 0.0.0",
"scientific": ">= 0.0.0",
"smartos": ">= 0.0.0",
"suse": ">= 0.0.0",
"ubuntu": ">= 14.04"
},
"dependencies": {
"erlang": ">= 0.0.0",
"yum-epel": ">= 0.0.0",
"yum-erlang_solutions": ">= 0.0.0",
"dpkg_autostart": ">= 0.0.0",
"logrotate": ">= 0.0.0"
},
"providing": {
"rabbitmq::cluster": ">= 0.0.0",
"rabbitmq::community_plugins": ">= 0.0.0",
"rabbitmq": ">= 0.0.0",
"rabbitmq::erlang_package": ">= 0.0.0",
"rabbitmq::esl_erlang_package": ">= 0.0.0",
"rabbitmq::management_ui": ">= 0.0.0",
"rabbitmq::mgmt_console": ">= 0.0.0",
"rabbitmq::plugin_management": ">= 0.0.0",
"rabbitmq::plugins": ">= 0.0.0",
"rabbitmq::policies": ">= 0.0.0",
"rabbitmq::policy_management": ">= 0.0.0",
"rabbitmq::systemd_limits": ">= 0.0.0",
"rabbitmq::user_management": ">= 0.0.0",
"rabbitmq::users": ">= 0.0.0",
"rabbitmq::vhosts": ">= 0.0.0",
"rabbitmq::virtualhost_management": ">= 0.0.0"
},
"recipes": {
"rabbitmq": "Install and configure RabbitMQ",
"rabbitmq::systemd_limits": "Sets up kernel limits (e.g. nofile) for RabbitMQ via systemd",
"rabbitmq::cluster": "Set up RabbitMQ clustering.",
"rabbitmq::management_ui": "Sets up RabbitMQ management plugin/UI",
"rabbitmq::mgmt_console": "Deprecated, alias for rabbitmq::management_ui",
"rabbitmq::plugins": "Manage plugins with node attributes",
"rabbitmq::plugin_management": "Deprecated, alias for rabbitmq::plugins",
"rabbitmq::vhosts": "Manage virtual hosts with node attributes",
"rabbitmq::virtualhost_management": "Deprecated, alias for rabbitmq::vhosts",
"rabbitmq::users": "Manage users with node attributes",
"rabbitmq::user_management": "Deprecated, alias for rabbitmq::users",
"rabbitmq::policies": "Manage policies with node attributes",
"rabbitmq::policy_management": "Deprecated, alias for rabbitmq::policies",
"rabbitmq::erlang_package": "Provisions Erlang via Team RabbitMQ packages",
"rabbitmq::esl_erlang_package": "Alias for erlang::esl",
"rabbitmq::community_plugins": ""
},
"version": "5.7.7",
"source_url": "https://github.com/rabbitmq/chef-cookbook",
"issues_url": "https://github.com/rabbitmq/chef-cookbook/issues",
"privacy": false,
"chef_versions": [
],
"ohai_versions": [
],
"gems": [
]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возвращения одной версии артефакта кулинарной книги.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/cookbook_artifacts/NAME/ID
У этого метода нет тела запроса.
Ответ
Ответ похож на:
{
"version": "5.7.7",
"name": "rabbitmq",
"identifier": "f3cf8ea7d8bfc59e35ec541946e3e82cd4b73e74",
"frozen?": false,
"chef_type": "cookbook_version",
"attributes": [
{
"name": "default.rb",
"path": "attributes/default.rb",
"checksum": "e5a530cca3898d8bd07604435dc5156e",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-e5a530cca3898d8bd07604435dc5156e"
}
],
"definitions": [
],
"files": [
],
"libraries": [
{
"name": "matchers.rb",
"path": "libraries/matchers.rb",
"checksum": "24c3f44c4d1d62300a56051f0069f639",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-24c3f44c4d1d62300a56051f0069f639"
},
{
"name": "helpers.rb",
"path": "libraries/helpers.rb",
"checksum": "df65c4a7259fcb30c6f3f1305ebf7502",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-df65c4a7259fcb30c6f3f1305ebf7502"
},
{
"name": "default.rb",
"path": "libraries/default.rb",
"checksum": "94292faac84ba797e720501700b30f74",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-94292faac84ba797e720501700b30f74"
}
],
"providers": [
{
"name": "user.rb",
"path": "providers/user.rb",
"checksum": "c31c9cc749f21962c825f983a6679d94",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-c31c9cc749f21962c825f983a6679d94"
},
{
"name": "policy.rb",
"path": "providers/policy.rb",
"checksum": "746c8a3f248f5bbfa51f5d2ba60b6315",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-746c8a3f248f5bbfa51f5d2ba60b6315"
}
],
"recipes": [
{
"name": "default.rb",
"path": "recipes/default.rb",
"checksum": "99a9b404ff6038d6ac55a90ca68c347a",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-99a9b404ff6038d6ac55a90ca68c347a"
},
{
"name": "cluster.rb",
"path": "recipes/cluster.rb",
"checksum": "fc0a86c1f858c9d37e11282efc9fe329",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-fc0a86c1f858c9d37e11282efc9fe329"
}
],
"resources": [
{
"name": "cluster.rb",
"path": "resources/cluster.rb",
"checksum": "85e74276e19bfdad581dce4f5c59f94a",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-85e74276e19bfdad581dce4f5c59f94a"
}
],
"root_files": [
{
"name": "metadata.rb",
"path": "metadata.rb",
"checksum": "36b395e758138a4295d1e3f9b3df5da9",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-36b395e758138a4295d1e3f9b3df5da9"
},
{
"name": "README.md",
"path": "README.md",
"checksum": "99873670f0994642f5e6baade52c8020",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-99873670f0994642f5e6baade52c8020"
}
],
"templates": [
{
"name": "default.rabbitmq-server.erb",
"path": "templates/default/default.rabbitmq-server.erb",
"checksum": "077855f4dc37f7fb708976134d8b2551",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-077855f4dc37f7fb708976134d8b2551"
},
{
"name": "90forceyes.erb",
"path": "templates/default/90forceyes.erb",
"checksum": "73cc571097cf77c74b4e7b5b680020c9",
"specificity": "default",
"url": "https://chef.example/bookshelf/organization-9f69768696feedcd165633b8b475cc0b/checksum-73cc571097cf77c74b4e7b5b680020c9"
}
],
"metadata": {
"name": "rabbitmq",
"description": "Installs and configures RabbitMQ server",
"long_description": "",
"maintainer": "Chef Software, Inc. and contributors",
"maintainer_email": "mklishin@pivotal.io",
"license": "Apache-2.0",
"platforms": {
"amazon": ">= 2.0",
"centos": ">= 7.0",
"debian": ">= 8.0",
"opensuse": ">= 0.0.0",
"opensuseleap": ">= 0.0.0",
"oracle": ">= 0.0.0",
"redhat": ">= 0.0.0",
"scientific": ">= 0.0.0",
"smartos": ">= 0.0.0",
"suse": ">= 0.0.0",
"ubuntu": ">= 14.04"
},
"dependencies": {
"erlang": ">= 0.0.0",
"yum-epel": ">= 0.0.0",
"yum-erlang_solutions": ">= 0.0.0",
"dpkg_autostart": ">= 0.0.0",
"logrotate": ">= 0.0.0"
},
"providing": {
"rabbitmq::cluster": ">= 0.0.0",
"rabbitmq::community_plugins": ">= 0.0.0",
"rabbitmq": ">= 0.0.0",
"rabbitmq::erlang_package": ">= 0.0.0",
"rabbitmq::esl_erlang_package": ">= 0.0.0",
"rabbitmq::management_ui": ">= 0.0.0",
"rabbitmq::mgmt_console": ">= 0.0.0",
"rabbitmq::plugin_management": ">= 0.0.0",
"rabbitmq::plugins": ">= 0.0.0",
"rabbitmq::policies": ">= 0.0.0",
"rabbitmq::policy_management": ">= 0.0.0",
"rabbitmq::systemd_limits": ">= 0.0.0",
"rabbitmq::user_management": ">= 0.0.0",
"rabbitmq::users": ">= 0.0.0",
"rabbitmq::vhosts": ">= 0.0.0",
"rabbitmq::virtualhost_management": ">= 0.0.0"
},
"recipes": {
"rabbitmq": "Install and configure RabbitMQ",
"rabbitmq::systemd_limits": "Sets up kernel limits (e.g. nofile) for RabbitMQ via systemd",
"rabbitmq::cluster": "Set up RabbitMQ clustering.",
"rabbitmq::management_ui": "Sets up RabbitMQ management plugin/UI",
"rabbitmq::mgmt_console": "Deprecated, alias for rabbitmq::management_ui",
"rabbitmq::plugins": "Manage plugins with node attributes",
"rabbitmq::plugin_management": "Deprecated, alias for rabbitmq::plugins",
"rabbitmq::vhosts": "Manage virtual hosts with node attributes",
"rabbitmq::virtualhost_management": "Deprecated, alias for rabbitmq::vhosts",
"rabbitmq::users": "Manage users with node attributes",
"rabbitmq::user_management": "Deprecated, alias for rabbitmq::users",
"rabbitmq::policies": "Manage policies with node attributes",
"rabbitmq::policy_management": "Deprecated, alias for rabbitmq::policies",
"rabbitmq::erlang_package": "Provisions Erlang via Team RabbitMQ packages",
"rabbitmq::esl_erlang_package": "Alias for erlang::esl",
"rabbitmq::community_plugins": ""
},
"version": "5.7.7",
"source_url": "https://github.com/rabbitmq/chef-cookbook",
"issues_url": "https://github.com/rabbitmq/chef-cookbook/issues",
"privacy": false,
"chef_versions": [
],
"ohai_versions": [
],
"gems": [
]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
PUT
Метод PUT используется для создания или обновления одной версии артефакта кулинарной книги.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/cookbook_artifacts/NAME/ID
Тело запроса похоже на:
{
"definitions": [
{
"name": "unicorn_config.rb",
"checksum": "c92b659171552e896074caa58dada0c2",
"path": "definitions/unicorn_config.rb",
"specificity": "default"
}
],
"attributes": [],
"files": [],
"providers": [],
"metadata": {
"dependencies": {"ruby": [], "rubygems": []},
"name": "unicorn",
"maintainer_email": "ops@chef.io",
"attributes": {},
"license": "Apache 2.0",
"suggestions": {},
"platforms": {},
"maintainer": "Chef Software, Inc.",
"long_description": "= LICENSE AND AUTHOR:\\n\\nAuthor:: Adam Jacob...",
"recommendations": {},
"version": "0.1.2",
"conflicting": {},
"recipes": {"unicorn": "Installs unicorn rubygem"},
"groupings": {},
"replacing": {},
"description": "Installs/Configures unicorn",
"providing": {}
},
"libraries": [],
"templates": [
{
"name": "unicorn.rb.erb",
"checksum": "36a1cc1b225708db96d48026c3f624b2",
"path": "templates/default/unicorn.rb.erb",
"specificity": "default"
}
],
"resources": [],
"name": "unicorn",
"identifier": "ba0dadcbca26710a521e0e3160cc5e20",
"recipes": [
{
"name": "default.rb",
"checksum": "ba0dadcbca26710a521e0e3160cc5e20",
"path": "recipes/default.rb",
"specificity": "default"
}
],
"root_files": [
{
"name": "README.rdoc",
"checksum": "d18c630c8a68ffa4852d13214d0525a6",
"path": "README.rdoc",
"specificity": "default"
},
{
"name": "metadata.rb",
"checksum": "967087a09f48f234028d3aa27a094882",
"path": "metadata.rb",
"specificity": "default"
},
{
"name": "metadata.json",
"checksum": "45b27c78955f6a738d2d42d88056c57c",
"path": "metadata.json",
"specificity": "default"
}
],
"chef_type": "cookbook_artifact_version"
}
где значения checksum должны быть предварительно загружены на сервер Chef Infra с помощью конечной точки песочницы. После того, как пользователь загрузит файл с определённой контрольной суммой, повторные загрузки не требуются. Неиспользуемые значения checksum будут удалены.
Ответ
У этого метода нет тела ответа.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
413 |
Запрос слишком большой. Запрос не должен превышать 1000000 байт. |
/cookbooks
Кулинарная книга — это базовая единица конфигурации и распространения политики. Кулинарная книга определяет сценарий и содержит всё необходимое для поддержки этого сценария:
- Рецепты, которые указывают ресурсы, которые следует использовать, и порядок их применения
- Значения атрибутов
- Распределения файлов
- Шаблоны
- Расширения Chef, такие как пользовательские ресурсы и библиотеки
При загрузке кулинарной книги будут включены только новые или обновлённые файлы. Это минимизирует объём хранилища и время, требуемые во время цикла изменения-загрузки-тестирования. Для отслеживания уже загруженных файлов Chef Infra Client использует контрольную сумму и присваивает контрольную сумму каждому файлу. Эти контрольные суммы используются в манифесте версии кулинарной книги, наряду с теми же записями, которые хранят описание файла (имя, специфичность и так далее), а также контрольную сумму и URL, из которого можно получить содержимое файла.
Конечная точка /cookbooks имеет следующие методы: GET.
GET
Метод GET используется для возвращения хэша всех кулинарных книг и версий кулинарных книг.
Этот метод имеет следующие параметры:
| Параметр | Описание |
|---|---|
num_versions=n |
Количество версий кулинарных книг, которые должны быть включены в ответ, где n — это количество версий кулинарных книг. Например: num_versions=3 возвращает три последние версии в порядке убывания (от новейшей к старейшей). Используйте num_versions=all для возвращения всех версий кулинарных книг. Если num_versions не указан, возвращается одна версия кулинарной книги. 0 — это недопустимый ввод (возвращается пустой массив версий каждой кулинарной книги). |
Запрос
GET /organizations/NAME/cookbooks
Ответ
Ответ похож на:
{
"apache2": {
"url": "https://localhost/cookbooks/apache2",
"versions": [
{"url": "https://localhost/cookbooks/apache2/5.1.0",
"version": "5.1.0"},
{"url": "https://localhost/cookbooks/apache2/4.2.0",
"version": "4.2.0"}
]
},
"nginx": {
"url": "https://localhost/cookbooks/nginx",
"versions": [
{"url": "https://localhost/cookbooks/nginx/1.0.0",
"version": "1.0.0"},
{"url": "https://localhost/cookbooks/nginx/0.3.0",
"version": "0.3.0"}
]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
/cookbooks/_latest
Конечная точка /cookbooks/_latest имеет следующие методы: GET.
GET
Метод GET используется для возвращения списка самых последних версий кулинарных книг.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/cookbooks/_latest
Ответ
Например, если кулинарные книги foo и bar оба существуют на сервере Chef Infra и оба имеют версии 0.1.0 и 0.2.0, ответ похож на:
{
"foo": "https://localhost/cookbooks/foo/0.2.0",
"bar": "https://localhost/cookbooks/bar/0.2.0"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
ОК. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/cookbooks/_recipes
Конечная точка /cookbooks/_recipes имеет следующие методы: GET.
GET
Метод GET используется для возвращения имён всех рецептов в самых последних версиях кулинарных книг.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/cookbooks/_recipes
Ответ
Ответ похож на:
{
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/cookbooks/NAME
У конечной точки /cookbooks/NAME есть следующие методы: GET.
GET
Метод GET используется для возвращения хэша, содержащего пару «ключ-значение», которая соответствует указанному кулинарному рецепту, с URL для кулинарного рецепта и каждой версии кулинарного рецепта.
Запрос
GET /organizations/NAME/cookbooks/NAME
Ответ
Ответ похож на:
{
"apache2": {
"url": "https://localhost/cookbooks/apache2",
"versions": [
{"url": "https://localhost/cookbooks/apache2/5.1.0",
"version": "5.1.0"},
{"url": "https://localhost/cookbooks/apache2/4.2.0",
"version": "4.2.0"}
]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/cookbooks/NAME/version
Версия кулинарного рецепта представляет собой набор функциональности, отличающийся от кулинарного рецепта, на основе которого она основана. Версия может существовать по многим причинам, таким как обеспечение правильного использования стороннего компонента, исправление ошибки или добавление улучшения. Версия кулинарного рецепта определяется с помощью синтаксиса и операторов, может быть связана с окружениями, метаданными кулинарного рецепта и/или списками выполнения и может быть заморожена (для предотвращения внесения нежелательных обновлений).
Версия кулинарного рецепта поддерживается так же, как и сам кулинарный рецепт, в отношении контроля версий, загрузки на сервер Chef Infra и того, как Chef Infra Client применяет этот кулинарный рецепт при конфигурировании узлов.
У конечной точки /cookbooks/NAME/VERSION есть следующие методы: DELETE, GET, и PUT.
DELETE
Метод DELETE используется для удаления версии кулинарного рецепта.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/cookbooks/NAME/VERSION
Ответ
Этот метод не имеет тела ответа. Неиспользуемые checksum значения будут удалены из памяти.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возвращения описания кулинарного рецепта, включая его метаданные и ссылки на файлы компонентов.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/cookbooks/NAME/VERSION
где VERSION может быть _latest для перемещения в начало.
Ответ
Ответ похож на:
{
"cookbook_name": "getting-started",
"files": [
],
"chef_type": "cookbook_version",
"definitions": [
],
"libraries": [
],
"attributes": [
{
"url": "https://domain.com/org_name/(...rest of URL)",
"path": "attributes/default.rb",
"specificity": "default",
"name": "default.rb",
"checksum": "fa0fc4abf3f6787fdsaasadfrc5c35de667c"
}
],
"recipes": [
{
"url": "https://domain.com/org_name/(...rest of URL)",
"path": "recipes/default.rb",
"specificity": "default",
"name": "default.rb",
"checksum": "7e79b1ace7728fdsadfsdaf857e60fc69"
}
],
"providers": [
],
"resources": [
],
"templates": [
{
"url": "https://domain.com/org_name/(...rest of URL)",
"path": "templates/default/chef-getting-started.txt.erb",
"specificity": "default",
"name": "chef-getting-started.txt.erb",
"checksum": "a29d6f2545sdffds1f140c3a78b1fe"
}
],
"root_files": [
{
"url": "https://domain.com/org_name/(...rest of URL)",
"path": ".DS_Store",
"specificity": "default",
"name": ".DS_Store",
"checksum": "c107b500aafd12asdffdsdf5c2a7d6"
},
{
"url": "https://domain.com/org_name/(...rest of URL)",
"path": "metadata.json",
"specificity": "default",
"name": "metadata.json",
"checksum": "20f09570e54dasdf0f3ae01e6401c90f"
},
{
"url": "https://domain.com/org_name/(...rest of URL)",
"path": "metadata.rb",
"specificity": "default",
"name": "metadata.rb",
"checksum": "71027aefasd487fdsa4cb6994b66ed"
},
{
"url": "https://domain.com/org_name/(...rest of URL)",
"path": "README.rdoc",
"specificity": "default",
"name": "README.rdoc",
"checksum": "8b9275e56fee974easdfasdfbb729"
}
],
"name": "getting-started-0.4.0",
"frozen?": false,
"version": "0.4.0",
"json_class": "Chef::CookbookVersion",
"metadata": {
"maintainer": "Maintainer",
"attributes": { },
"suggestions": { },
"recipes": { "getting-started": "" },
"dependencies": { },
"platforms": { },
"groupings": { },
"recommendations": { },
"name": "getting-started",
"description": "description",
"version": "0.4.0",
"maintainer_email": "sysadmin@chef.io",
"long_description": "= DESCRIPTION:\n\nThis cookbook is used to do some things.\n\n",
"providing": { "getting-started": ">= 0.0.0" },
"replacing": { },
"conflicting": { },
"license": "Apache 2.0"
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
PUT
Метод PUT используется для создания или обновления версии кулинарного рецепта.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/cookbooks/NAME/VERSION
с телом запроса, похожим на:
{
"definitions": [
{
"name": "unicorn_config.rb",
"checksum": "c92b659171552e896074caa58dada0c2",
"path": "definitions/unicorn_config.rb",
"specificity": "default"
}
],
"name": "unicorn-0.1.2",
"attributes": [],
"files": [],
"json_class": "Chef::CookbookVersion",
"providers": [],
"metadata": {
"dependencies": {"ruby": [], "rubygems": []},
"name": "unicorn",
"maintainer_email": "ops@chef.io",
"attributes": {},
"license": "Apache 2.0",
"suggestions": {},
"platforms": {},
"maintainer": "Chef Software, Inc.",
"long_description": "= LICENSE AND AUTHOR:\n\nAuthor:: Adam Jacob...",
"recommendations": {},
"version": "0.1.2",
"conflicting": {},
"recipes": {"unicorn": "Installs unicorn rubygem"},
"groupings": {},
"replacing": {},
"description": "Installs/Configures unicorn",
"providing": {}
},
"libraries": [],
"templates": [
{
"name": "unicorn.rb.erb",
"checksum": "36a1cc1b225708db96d48026c3f624b2",
"path": "templates/default/unicorn.rb.erb",
"specificity": "default"
}
],
"resources": [],
"cookbook_name": "unicorn",
"version": "0.1.2",
"recipes": [
{
"name": "default.rb",
"checksum": "ba0dadcbca26710a521e0e3160cc5e20",
"path": "recipes/default.rb",
"specificity": "default"
}
],
"root_files": [
{
"name": "README.rdoc",
"checksum": "d18c630c8a68ffa4852d13214d0525a6",
"path": "README.rdoc",
"specificity": "default"
},
{
"name": "metadata.rb",
"checksum": "967087a09f48f234028d3aa27a094882",
"path": "metadata.rb",
"specificity": "default"
},
{
"name": "metadata.json",
"checksum": "45b27c78955f6a738d2d42d88056c57c",
"path": "metadata.json",
"specificity": "default"
}
],
"chef_type": "cookbook_version"
}
где значения checksum должны быть предварительно загружены на сервер Chef Infra с помощью конечной точки песочницы. После загрузки файла с определённой контрольной суммой пользователем повторные загрузки не нужны. Неиспользуемые checksum значения будут удалены из памяти.
Ответ
Этот метод не имеет тела ответа.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
413 |
Запрос слишком большой. Размер запроса не должен превышать 1000000 байт. |
/data
Пакеты данных хранят глобальные переменные в формате JSON. Пакеты данных индексируются для поиска и могут быть загружены кулинарным рецептом или доступны во время поиска.
У конечной точки /data есть следующие методы: GET и POST.
GET
Метод GET используется для возвращения списка всех пакетов данных на сервере Chef Infra.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/data
Ответ
Ответ похож на:
{
"users": "https://chef.example/organizations/NAME/data/users",
"applications": "https://chef.example/organizations/NAME/data/applications"
}
представленный в виде списка пар «ключ-значение», где (в приведённом выше примере) users и applications — имена пакетов данных, а https://chef.example/organizations/NAME/data/foo — путь к пакету данных.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
POST
Метод POST используется для создания нового пакета данных на сервере Chef Infra.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/data
с телом запроса, содержащим пару «ключ-значение» для пакета данных и похожим на:
{
"name": "users"
}
где (в приведённом выше примере) name — ключ, а «users» — значение.
Ответ
Ответ похож на:
{
"uri": "https://organizations/NAME/data/users",
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Создано. Объект был создан. |
400 |
Неверный запрос. Содержимое запроса отформатировано некорректно. |
401 |
Неавторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
409 |
Конфликт. Пакет данных с таким именем уже существует. |
413 |
Запрос слишком большой. Размер запроса не должен превышать 1000000 байт. |
/data/NAME
Конечная точка /data/NAME используется для просмотра и обновления данных для конкретного пакета данных. Эта конечная точка имеет следующие методы: DELETE, GET, и POST.
DELETE
Метод DELETE используется для удаления пакета данных.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/data/NAME
Тело запроса отсутствует.
Ответ
Ответ похож на:
{
"name": "users",
"json_class": "Chef::DataBag",
"chef_type": "data_bag"
}
где пары «ключ-значение» представляют последнее состояние элемента пакета данных.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возврата хеша всех записей в указанном пакете данных.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/data/NAME
Ответ
Ответ похож на:
{
"adam": "https://chef.example/organizations/NAME/data/users/adam"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписи запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
POST
Метод POST используется для создания новой записи пакета данных.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/data/NAME
с телом запроса, похожим на:
{
"id": "adam",
"real_name": "Adam Jacob"
}
где id обязательно.
Ответ
Этому методу не требуется тело ответа.
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
OK. Элемент был создан. |
400 |
Ошибка запроса. Содержимое запроса отформатировано неверно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписи запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
409 |
Конфликт. Объект уже существует. |
413 |
Размер сущности запроса слишком велик. Размер запроса не может превышать 1000000 байт. |
/data/NAME/ITEM
Пакет данных — это контейнер для связанных элементов пакета данных, где каждый отдельный элемент пакета данных — это JSON-файл. knife может загрузить элемент пакета данных, указав имя пакета данных, к которому относится элемент, и имя файла элемента пакета данных. Единственное структурное требование к элементу пакета данных заключается в том, что он должен иметь id:
{
/* This is a supported comment style */
// This style is also supported
"id": "ITEM_NAME",
"key": "value"
}
где
-
keyиvalue— пара «ключ-значение» для каждого дополнительного атрибута в элементе пакета данных -
/* ... */и// ...показывают два способа добавления комментариев в элемент пакета данных
Конечная точка /data/NAME/ITEM позволяет просматривать и управлять парами «ключ-значение» в элементе пакета данных. Эта конечная точка имеет следующие методы: DELETE, GET, и PUT.
DELETE
Метод DELETE используется для удаления пары «ключ-значение» в элементе пакета данных.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/data/NAME/ITEM
Ответ
Ответ похож на:
{
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписи запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
GET
Метод GET используется для просмотра всех пар «ключ-значение» в элементе пакета данных.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/data/NAME/ITEM
Ответ
Ответ похож на:
{
"real_name": "Adam Jacob",
"id": "adam"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписи запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
PUT
Метод PUT используется для замены содержимого элемента пакета данных содержимым этого запроса.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/data/NAME/ITEM
с телом запроса, похожим на:
{
"real_name": "Adam Brent Jacob",
"id": "adam"
}
где id обязательно.
Ответ
Ответ похож на:
{
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписи запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
413 |
Размер сущности запроса слишком велик. Размер запроса не может превышать 1000000 байт. |
/environments
Окружение — это способ сопоставить реальный рабочий процесс организации с тем, что можно настроить и управлять с помощью Chef Infra. Это сопоставление выполняется путем установки атрибутов и привязки куков на уровне окружения. С помощью окружений вы можете изменять конфигурации куков в зависимости от назначения системы. Например, назначив различные среды разработки и производства, вы можете определить правильный URL-адрес сервера базы данных для каждой среды. Окружения также позволяют организациям уверенно переносить новые версии куков из среды разработки в производственную, пройдя этапы тестирования в тестовых средах перед выходом в производство.
Конечная точка /environments имеет следующие методы: GET и POST.
GET
Метод GET используется для возврата структуры данных, которая содержит ссылку на каждое доступное окружение.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/environments
Ответ
Ответ похож на:
{
"_default": "https://api.chef.io/organizations/org_name/environments/_default",
"webserver": "https://api.chef.io/organizations/org_name/environments/webserver"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписи запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
POST
Метод POST используется для создания нового окружения.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/environments
с телом запроса, похожим на:
{
"name": "dev",
"default_attributes": {},
"json_class": "Chef::Environment",
"description": "",
"cookbook_versions": {},
"chef_type": "environment"
}
Ответ
Ответ похож на:
{ "uri": "https://localhost/environments/dev" }
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Создано. Объект был создан. |
400 |
Ошибка запроса. Содержимое запроса отформатировано неверно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписи запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет права на выполнение действия. |
409 |
Конфликт. Объект уже существует. |
413 |
Размер сущности запроса слишком велик. Размер запроса не может превышать 1000000 байт. |
/environments/_default
Конечная точка /environments/_default имеет следующие методы: GET.
GET
Метод GET используется для получения информации об окружении _default на сервере Chef Infra.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/environments/_default
Ответ
Ответ похож на:
{
"name": "_default",
"description": "The default Chef environment",
"json_class": "Chef::Environment",
"chef_type": "environment",
"default_attributes": {
},
"override_attributes": {
},
"cookbook_versions": {
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/environments/NAME
Конечная точка /environments/NAME имеет следующие методы: DELETE, GET, и PUT.
УДАЛЕНИЕ
Метод DELETE используется для удаления среды.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/environments/NAME
Ответ
Ответ вернёт JSON для удалённой среды, аналогичный следующему:
{
"name":"backend",
"description":"",
"cookbook_versions":{},
"json_class":"Chef::Environment",
"chef_type":"environment",
"default_attributes":{},
"override_attributes":{}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
ПОЛУЧЕНИЕ
Метод GET используется для возвращения подробностей о среде в формате JSON.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/environments/NAME
Ответ
Ответ аналогичен:
{
"name": "_default",
"description": "The default Chef environment",
"json_class": "Chef::Environment",
"chef_type": "environment",
"default_attributes": { }
"override_attributes": { },
"cookbook_versions": { },
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
ОБНОВЛЕНИЕ
Метод PUT используется для обновления деталей среды на сервере Chef Infra.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/environments/NAME
с телом запроса, содержащим обновлённый JSON для среды, аналогичный:
{
"name": "dev",
"attributes": {},
"json_class": "Chef::Environment",
"description": "The Dev Environment",
"cookbook_versions": {},
"chef_type": "environment"
}
Ответ
Ответ вернёт обновлённую среду.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
413 |
Размер запроса слишком велик. Запрос не может быть больше 1000000 байт. |
/environments/NAME/cookbooks/NAME
Конечная точка /environments/NAME/cookbooks/NAME имеет следующие методы: GET.
ПОЛУЧЕНИЕ
Метод GET используется для возвращения хэша пар ключ-значение для запрошенного кулинарного сборника.
Этот метод имеет следующие параметры:
| Параметр | Описание |
|---|---|
num_versions=n |
Количество версий кулинарного сборника для включения в ответ, где n — количество версий кулинарного сборника. Например: num_versions=3 возвращает три последние версии в порядке убывания (самые новые — самые старые). Используйте num_versions=all для возвращения всех версий кулинарного сборника. Если num_versions не указан, возвращается одна версия кулинарного сборника. 0 — недопустимый ввод (возвращается пустой массив для версий каждого кулинарного сборника). |
Запрос
GET /organizations/NAME/environments/NAME/cookbooks/NAME
где первое вхождение NAME — имя среды, а второе — имя кулинарного сборника.
Ответ
Ответ аналогичен:
{
"apache2": {
"url": "https://localhost/cookbooks/apache2",
"versions": [
{"url": "https://localhost/cookbooks/apache2/5.1.0",
"version": "5.1.0"},
{"url": "https://localhost/cookbooks/apache2/4.2.0",
"version": "4.2.0"}
]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/environments/NAME/cookbook_versions
Конечная точка /environments/NAME/cookbook_versions имеет следующие методы: POST.
СОЗДАТЬ
Метод POST используется для возвращения хэша кулинарных сборников и версий кулинарных сборников (включая все зависимости), которые требуются массивом run_list. Ограничения версий могут быть указаны с использованием символа @ после имени кулинарного сборника в качестве разделителя. Ограничения версий также могут присутствовать, когда атрибут cookbook_versions указан для среды или когда зависимости указаны кулинарным сборником.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/environments/NAME/cookbook_versions
с телом запроса, аналогичным:
{
"run_list": [
"zed@0.0.1",
"bar",
"mysql",
"gem",
"nginx@0.99.2",
"cron",
"foo"
]
}
где @x.x.x представляет ограничение для версии кулинарного сборника.
Ответ
Ответ вернёт список кулинарных сборников, необходимых для массива run_list в запросе. Возвращаемые кулинарные сборники часто являются последними версиями каждого кулинарного сборника. В зависимости от любых ограничений в запросе или от зависимостей, которые может иметь кулинарный сборник для конкретных версий кулинарных сборников, запрос не всегда возвращает последнюю версию кулинарного сборника для каждого кулинарного сборника.
Ответ аналогичен:
{
"cookbook_name": {
"recipes": [
{
"name": "default.rb",
"path": "recipes/default.rb",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
"name": "recipe_name.rb",
"path": "recipes/recipe_name.rb",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
...
}
],
"definitions": [
],
"libraries": [
],
"attributes": [
],
"files": [
],
"templates": [
{
"name": "template_name.erb",
"path": "templates/default/template_name.erb",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
...
}
],
"resources": [
],
"providers": [
],
"root_files": [
{
"name": "metadata.rb",
"path": "metadata.rb",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
}
],
"cookbook_name": "cookbook_name-1.0.2",
"metadata": {
"name": "cookbook_name",
"description": "description",
"long_description": "",
"maintainer": "maintainer",
"maintainer_email": "maintainer@email.com",
"license": "license",
"platforms": {
},
"dependencies": {
"cookbook_name": ">= 0.0.0",
"cookbook_name": ">= 1.2.3",
...
"cookbook_name": ">= 0.1.0"
},
"recommendations": {
},
"suggestions": {
},
"conflicting": {
},
"providing": {
"cookbook_name": ">= 0.0.0",
"cookbook_name::recipe_name": ">= 0.0.0",
"cookbook_name::recipe_name": ">= 1.2.3",
"cookbook_name::recipe_name": ">= 0.1.0"
},
"replacing": {
},
"attributes": {
},
"groupings": {
},
"recipes": {
"cookbook_name": "description",
"cookbook_name::recipe_name": "",
...
"cookbook_name::recipe_name": ""
},
"version": "0.0.0"
},
"version": "0.0.0",
"name": "cookbook_name-1.0.2",
"frozen?": false,
"chef_type": "cookbook_version",
"json_class": "Chef::CookbookVersion"
},
"cookbook_name": {
"recipes": [
{
"name": "default.rb",
"path": "recipes/default.rb",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
],
"definitions": [
],
"libraries": [
{
"name": "library_file.rb",
"path": "libraries/library_file.rb",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
}
],
"attributes": [
{
"name": "default.rb",
"path": "attributes/default.rb",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
}
],
"files": [
],
"templates": [
],
"resources": [
],
"providers": [
],
"root_files": [
{
"name": ".gitignore",
"path": ".gitignore",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
"name": ".kitchen.yml",
"path": ".kitchen.yml",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
"name": "CHANGELOG.md",
"path": "CHANGELOG.md",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
"name": "CONTRIBUTING",
"path": "CONTRIBUTING",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
"name": "LICENSE",
"path": "LICENSE",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
"name": "metadata.json",
"path": "metadata.json",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
"name": "metadata.rb",
"path": "metadata.rb",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
{
"name": "README.md",
"path": "README.md",
"checksum": "12345efg78912346abcddefg789",
"specificity": "default",
"url": "https://URL"
},
],
"chef_type": "cookbook_version",
"name": "cookbook_name-1.0.2",
"cookbook_name": "cookbook_name",
"version": "1.0.2",
"metadata": {
"name": "cookbook_name",
"description": "description",
"long_description": "",
"maintainer": "maintainer",
"maintainer_email": "maintainer@email.com",
"license": "license",
"platforms": {
},
"dependencies": {
},
"recommendations": {
},
"suggestions": {
},
"conflicting": {
},
"providing": {
},
"replacing": {
},
"attributes": {
},
"groupings": {
},
"recipes": {
},
"version": "1.0.2"
},
"frozen?": true,
"json_class": "Chef::CookbookVersion"
},
"cookbook_name": {
...
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
400 |
Неверный запрос. Содержимое запроса отформатировано некорректно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
412 |
Запрещено. Набор кулинарных сборников и/или версий кулинарных сборников не смог быть найден, чтобы соответствовать всем требованиям списка выполнения. Кулинарный сборник в списке выполнения может отсутствовать. Может присутствовать зависимость от кулинарного сборника, которого нет. Ограничение на кулинарный сборник, созданный списком выполнения, средой или версией кулинарного сборника, может не соответствовать доступной версии кулинарного сборника. |
413 |
Размер запроса слишком велик. Запрос не может быть больше 1000000 байт. |
/environments/NAME/cookbooks
Конечная точка /environments/NAME/cookbooks имеет следующие методы: GET.
ПОЛУЧЕНИЕ
Метод GET используется для получения списка кулинарных сборников и версий кулинарных сборников, которые доступны для указанной среды.
Этот метод имеет следующие параметры:
| Параметр | Описание |
|---|---|
num_versions=n |
Количество версий кулинарного сборника для включения в ответ, где n — количество версий кулинарного сборника. Например: num_versions=3 возвращает три последние версии в порядке убывания (самые новые — самые старые). Используйте num_versions=all для возвращения всех версий кулинарного сборника. Если num_versions не указан, возвращается одна версия кулинарного сборника. 0 — недопустимый ввод (возвращается пустой массив для версий каждого кулинарного сборника). |
Запрос
GET /organizations/NAME/environments/NAME/cookbooks
Ответ
Ответ аналогичен:
{
"apache2": {
"url": "https://localhost/cookbooks/apache2",
"versions": [
{"url": "https://localhost/cookbooks/apache2/5.1.0",
"version": "5.1.0"},
{"url": "https://localhost/cookbooks/apache2/4.2.0",
"version": "4.2.0"}
]
},
"nginx": {
"url": "https://localhost/cookbooks/nginx",
"versions": [
{"url": "https://localhost/cookbooks/nginx/1.0.0",
"version": "1.0.0"},
{"url": "https://localhost/cookbooks/nginx/0.3.0",
"version": "0.3.0"}
]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/environments/NAME/nodes
Указанный /environments/NAME/nodes конечный пункт имеет следующие методы: GET.
GET
Метод GET используется для возврата списка узлов в заданной среде.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/environments/NAME/nodes
Ответ
Ответ похож на:
{
"blah": "https://api.chef.io/org/org_name/nodes/_default",
"boxer": "https://api.chef.io/org/org_name/nodes/frontend",
"blarrrrgh": "https://api.chef.io/org/org_name/nodes/backend"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/environments/NAME/recipes
Указанный /environments/NAME/recipes конечный пункт имеет следующие методы: GET.
GET
Метод GET используется для возврата списка рецептов, доступных для данной среды.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/environments/NAME/recipes
где первое вхождение NAME — имя среды, а второе — имя рецепта.
Ответ
Ответ похож на:
[
"ant",
"apache2",
"apache2::mod_auth_openid",
"apache2::mod_authnz_ldap",
"apt",
"aws",
"capistrano",
"chef",
"chef::bootstrap_client",
"chef-client::config",
"chef-client",
...
]
Список рецептов будет представлять собой рецепты по умолчанию для данного кулинарного руководства. Если среда имеет несколько версий кулинарного руководства, соответствующих её ограничениям, будут отображены только рецепты из последней версии этого кулинарного руководства.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/environments/NAME/roles/NAME
Указанный /environments/NAME/roles/NAME конечный пункт имеет следующие методы: GET.
GET
Метод GET используется для возврата атрибута run_list роли (когда имя среды равно _default) или для возврата env_run_lists[environment_name] (для сред, отличных от стандартных).
Примечание
GET /roles/NAME/environments/NAME; рекомендуется (но не обязательно) использовать GET /roles/NAME/environments/NAME вместо этого конечного пункта.Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/environments/NAME/roles/NAME
где первое вхождение NAME — имя среды, а второе — имя роли.
Ответ
Ответ похож на:
{
"run_list": [
"recipe[recipe_name]",
"role[role_name]",
"recipe[recipe_name]",
"role[role_name]",
"recipe[recipe_name]",
"role[role_name]"
]
}
Клиент Chef Infra будет подбирать список _default выполнения, если env_run_list[environment_name] равно null или отсутствует.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/groups
Указанный /groups конечный пункт имеет следующие методы: GET и POST.
GET
Метод GET используется для получения списка групп на сервере Chef Infra для одной организации.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/groups
Ответ
Ответ похож на:
{
"33a5c28a8efe11e195005fsaes25400298d3f": "https://url/for/group1",
"admins": "https://url/for/groups/admins",
"billing-admins": "https://url/for/billing-admins",
"clients": "https://url/for/clients",
"developers": "https://url/for/developers",
"users": "https://url/for/groups/users"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
POST
Метод POST используется для создания группы на сервере Chef Infra для одной организации.
Запрос
POST /organizations/NAME/groups
с телом запроса, похожим на:
{
"name": "group1",
"groupname": "group1",
"orgname": "test",
"actors": []
"clients": ["mynode"],
"groups": ["admins"],
"users": ["betina"]
}
Ответ
Ответ похож на:
{
"uri": "https://chef.example/organizations/test/groups/group1",
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
OK. Группа была создана. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
409 |
Конфликт. Запрашиваемая группа уже существует. |
/groups/GROUP_NAME
Указанный /groups/GROUP_NAME конечный пункт имеет следующие методы: DELETE, GET и PUT.
DELETE
Метод DELETE используется для удаления группы из одной организации.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/groups/GROUP_NAME
без тела запроса.
Ответ
Ответ похож на:
{
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Группа была удалена. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для получения списков пользователей и других групп, которые принадлежат группе.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/groups/GROUP_NAME
Ответ
Ответ похож на:
{
"actors": [
"pivotal",
"grantmc"
],
"users": [
"pivotal",
"grantmc"
],
"clients": [
],
"groups": [
"000000000000ad94b5ddde157c070f0c"
],
"orgname": "inbetweens",
"name": "admins",
"groupname": "admins"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, который сделал запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 |
Запрещено. Пользователь, который сделал запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
PUT
Метод PUT используется для обновления группы в одной организации. Обновление принадлежности клиентов, групп и пользователей заменяет определения для группы. GET группы и объединяет изменения для создания необходимых списков участников.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/groups/GROUP_NAME
с телом запроса, похожим на:
{
"name": "group1",
"groupname": "groupnew",
"actors": {
"clients": ["mynode","addme"],
"groups": ["admins"],
"users": ["betina"]
}
}
Ответ
Ответ похож на:
{
"name": "group1",
"groupname": "groupnew",
"orgname": "test",
"actors": {
"clients": ["mynode","addme"],
"groups": ["admins"],
"users": ["betina"]
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Успешно. Группа обновлена. |
401 |
Не авторизован. Пользователь или клиент, сделавший запрос, не был авторизован. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
/nodes
Узел — это любое устройство (физическое, виртуальное, облачное, сетевое и т.д.), находящееся под управлением Chef Infra.
Конечная точка /nodes имеет следующие методы: GET и POST.
GET
Метод GET используется для возвращения хеша URI для узлов на сервере Chef Infra.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/nodes
Ответ
Ответ похож на:
{
"latte": "https://localhost/nodes/latte"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, сделавший запрос, не был авторизован. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
POST
Метод POST используется для создания нового узла.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/nodes
с телом запроса, похожим на:
{
"name": "latte",
"chef_type": "node",
"json_class": "Chef::Node",
"attributes": {
"hardware_type": "laptop"
},
"overrides": {},
"defaults": {},
"run_list": [ "recipe[unicorn]" ]
}
где name — имя узла. Другие атрибуты необязательны. Порядок атрибута run_list имеет значение.
Ответ
Ответ похож на:
{ "uri": "https://localhost/nodes/latte" }
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Создано. Объект был создан. |
400 |
Неверный запрос. Содержимое запроса отформатировано неправильно. |
401 |
Не авторизован. Пользователь или клиент, сделавший запрос, не был авторизован. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
409 |
Конфликт. Объект уже существует. |
413 |
Слишком большой запрос. Размеры запроса не должны превышать 1000000 байт. |
/nodes/NAME
Конечная точка /nodes/NAME имеет следующие методы: DELETE, GET, HEAD и PUT.
DELETE
Метод DELETE используется для удаления узла.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/nodes/NAME
Ответ
Ответ вернет последнее известное состояние узла, подобное:
{
"overrides": {},
"name": "latte",
"chef_type": "node",
"json_class": "Chef::Node",
"attributes": {
"hardware_type": "laptop"
},
"run_list": [
"recipe[apache2]"
],
"defaults": {}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, сделавший запрос, не был авторизован. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
GET
Метод GET используется для возвращения деталей узла в формате JSON.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/nodes/NAME
Ответ
Ответ похож на:
{
"name": "node_name",
"chef_environment": "_default",
"run_list": [
"recipe[recipe_name]"
]
"json_class": "Chef::Node",
"chef_type": "node",
"automatic": { ... },
"normal": { "tags": [ ] },
"default": { },
"override": { }
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, сделавший запрос, не был авторизован. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
HEAD
Метод HEAD используется для проверки существования узла.
Этот метод не имеет параметров.
Запрос
HEAD /organizations/NAME/nodes/NAME
Ответ
Метод не возвращает тело.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, сделавший запрос, не был авторизован. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
PUT
Метод PUT используется для обновления узла.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/nodes/NAME
с телом запроса, похожим на:
{
"overrides": {},
"name": "latte",
"chef_type": "node",
"json_class": "Chef::Node",
"attributes": {
"hardware_type": "laptop"
},
"run_list": [
'recipe[cookbook_name::recipe_name],
role[role_name]'
],
"defaults": {}
}
Ответ
Ответ вернёт обновлённый узел.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, сделавший запрос, не был авторизован. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
404 |
Не найдено. Запрашимый объект не существует. |
413 |
Слишком большой запрос. Размеры запроса не должны превышать 1000000 байт. |
/policies
Конечная точка /policies имеет следующие методы: GET.
GET
Метод GET используется для получения списка политик (включая ревизии политик) с сервера Chef Infra.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/policies
Ответ
Ответ группирует политики по имени и ревизии и похож на:
{
"aar": {
"uri": "https://chef.example/organizations/org1/policies/aar",
"revisions": {
"37f9b658cdd1d9319bac8920581723efcc2014304b5f3827ee0779e10ffbdcc9": {
},
"95040c199302c85c9ccf1bcc6746968b820b1fa25d92477ea2ec5386cd58b9c5": {
},
"d81e80ae9bb9778e8c4b7652d29b11d2111e763a840d0cadb34b46a8b2ca4347": {
}
}
},
"jenkins": {
"uri": "https://chef.example/organizations/org1/policies/jenkins",
"revisions": {
"613f803bdd035d574df7fa6da525b38df45a74ca82b38b79655efed8a189e073": {
},
"6fe753184c8946052d3231bb4212116df28d89a3a5f7ae52832ad408419dd5eb": {
},
"cc1a0801e75df1d1ea5b0d2c71ba7d31c539423b81478f65e6388b9ee415ad87": {
}
}
}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
403 |
Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
/policy_groups
Конечная точка /policy_groups имеет следующие методы: GET.
Каждый узел имеет отношение 1:многие с настройками политик, хранящимися на сервере Chef Infra. Это отношение основано на группе политик, к которой принадлежит узел, и затем на настройках политик, назначенных этой группе:
- Политика обычно названа по функциональной роли узла, например, «сервер приложений», «сервер чата», «балансировщик нагрузки» и так далее
- Группа политик определяет набор узлов в развертываемой группе, как правило, сопоставленных с организационными требованиями, такими как «разработка», «тестирование», «препродажа» и «производство», но также может быть сопоставлена с более подробными требованиями по необходимости
/principals/NAME
Конечная точка /principals/NAME имеет следующие методы: GET.
GET
Метод GET используется для получения списка открытых ключей для клиентов и пользователей, чтобы гарантировать наличие достаточной информации для авторизованных запросов.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/principals/NAME
Ответ
Для пользователя или клиента значение типа будет разным. Тело ответа возвращает массив принципалов, что позволяет клиенту с тем же именем, что и у пользователя. Ответ для пользователя или клиента похож на:
{
"Principals: [
{
"name": "normal_user",
"type": "user",
"public_key": "-----BEGIN PUBLIC KEY-----...",
"authz_id": "eca5fdd45a8b4bacc04bbc6e37a340bes",
"org_member":false
}
]
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
404 |
Не найдено. Запрашимый объект не существует. |
/required_recipe
Конечная точка /required_recipe имеет следующий метод: GET.
GET
Используйте метод GET, чтобы просмотреть рецепт, указанный администратором сервера Chef Infra Server в рамках его конфигурации. Этот рецепт будет выполнен всеми клиентами Chef Infra Client, подключенными к серверу Chef Infra Server. Функция required_recipe предназначена для специалистов экспертного уровня, выполняющих изолированные изменения конфигурации на целевых системах. Возвращаемый текст — содержимое одного файла рецепта.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/required_recipe
Этот метод не имеет тела запроса.
Ответ
Ответ возвращается в формате простого текста, а не в формате JSON. Ответ похож на:
"# My required recipe
file '/tmp/build'
package 'secret_sauce'
"
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. Требуемый рецепт включён, путь к рецепту определён, и рецепт существует по указанному пути. |
401 |
Нет доступа. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, использованного для подписания запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешений на выполнение действия. |
404 |
Не найдено. Требуемая функция рецепта не включена. |
/roles
Роль — это способ определения определённых шаблонов и процессов, которые существуют на узлах организации и относятся к одной функциональной группе. Каждая роль состоит из нуля (или более) атрибутов и списка выполнения (run-list). Каждый узел может иметь присвоенные ему ноль (или более) ролей. При выполнении роли на узле детали конфигурации этого узла сравниваются с атрибутами роли, а затем содержимое списка выполнения этой роли применяется к деталям конфигурации узла. При выполнении Chef Infra Client он объединяет свои собственные атрибуты и списки выполнения со списками, содержащимися в каждой назначенной роли.
У конечной точки /roles есть следующие методы: GET и POST.
GET
Метод GET используется для получения списка ролей вместе с их связанными URI.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/roles
Ответ
Ответ похож на:
{
"webserver": "https://chef.example/organizations/org1/roles/webserver"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Нет доступа. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, использованного для подписания запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешений на выполнение действия. |
POST
Метод POST используется для создания новой роли на сервере Chef Infra Server.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/roles
с телом запроса, похожим на:
{
"name": "webserver",
"default_attributes": {},
"description": "A webserver",
"env_run_lists": {
"testenv": {
"recipe[pegasus]"
}
},
"run_list": [
"recipe[unicorn]",
"recipe[apache2]"
],
"override_attributes": {}
}
Ответ
Ответ похож на:
{ "uri": "https://chef.example/organizations/org1/roles/webserver" }
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Успешно. Запрос выполнен успешно. |
400 |
Неверный запрос. Содержимое запроса отформатировано некорректно. |
401 |
Нет доступа. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, использованного для подписания запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешений на выполнение действия. |
409 |
Конфликт. Объект уже существует. |
413 |
Запрос слишком большой. Размер запроса не может превышать 1000000 байт. |
/roles/NAME
У конечной точки /roles/NAME есть следующие методы: GET, DELETE, и PUT.
DELETE
Метод DELETE используется для удаления роли на сервере Chef Infra Server.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/roles/NAME
Ответ
Ответ похож на:
{
"name": "webserver",
"chef_type": "role",
"json_class": "Chef::Role",
"default_attributes": {},
"description": "A webserver",
"env_run_lists": {
"env1": {
"recipe[foo1]"
}
},
"run_list": [
"recipe[apache2]"
],
"override_attributes": {}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Нет доступа. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, использованного для подписания запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешений на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возврата деталей роли в формате JSON.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/roles/NAME
Ответ
Ответ похож на:
{
"name": "webserver",
"chef_type": "role",
"json_class": "Chef::Role",
"default_attributes": {},
"description": "A webserver",
"env_run_lists": {},
"run_list": [
"recipe[unicorn]",
"recipe[apache2]"
],
"override_attributes": {}
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Нет доступа. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, использованного для подписания запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешений на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
PUT
Метод PUT используется для обновления роли на сервере Chef Infra Server.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/roles/NAME
с телом запроса, похожим на:
{
"name": "webserver",
"default_attributes": {},
"description": "A webserver",
"env_run_lists": {},
"default_attributes": {},
"run_list": [
"recipe[apache2]"
],
"override_attributes": {}
}
Ответ
Ответ вернёт JSON обновлённой роли.
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Нет доступа. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, использованного для подписания запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешений на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
413 |
Запрос слишком большой. Размер запроса не может превышать 1000000 байт. |
/roles/NAME/environments
У конечной точки /roles/NAME/environments есть следующий метод: GET.
GET
Метод GET возвращает список сред, которые имеют специфичные для среды списки выполнения в данной роли в формате JSON.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/roles/NAME/environments
Ответ
Ответ похож на:
["_default","production","qa"]
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Нет доступа. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, использованного для подписания запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешений на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/roles/NAME/environments/NAME
У конечной точки /roles/NAME/environments/NAME есть следующий метод: GET.
GET
Метод GET возвращает список выполнения, специфичный для среды (env_run_lists[environment_name]) для роли.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/roles/NAME/environments/NAME
где первое NAME — имя роли, а второе — имя среды.
Ответ
Ответ похож на:
{"run_list":["recipe[foo]"]}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
Успешно. Запрос выполнен успешно. |
401 |
Нет доступа. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и правильность ключа, использованного для подписания запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет разрешений на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
/sandboxes
Песочница используется для коммита файлов, чтобы их нужно было обновлять только один раз, а не каждый раз при загрузке кулинарной книги. У конечной точки /sandboxes есть следующие методы: POST.
POST
Метод POST используется для создания новой песочницы. Этот метод принимает список контрольных сумм в качестве входных данных и возвращает URL-адреса, по которым нужно PUT файлы, которые необходимо загрузить.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/sandboxes
с телом запроса, подобным:
{"checksums": {
"385ea5490c86570c7de71070bce9384a":null,
"f6f73175e979bd90af6184ec277f760c":null,
"2e03dd7e5b2e6c8eab1cf41ac61396d5":null
}
}
Ответ
Ответ похож на:
{"uri":
"https://api.chef.io/organizations/testorg/sandboxes/eff7b6f8b3ef44c6867216662d5eeb5f",
"checksums":
{"385ea5490c86570c7de71070bce9384a":
{"url":
"https://s3.amazonaws.com/opscode-platform-production-data/organization-(...)",
"needs_upload":true},
"f6f73175e979bd90af6184ec277f760c"=>
{"url":
"https://s3.amazonaws.com/opscode-platform-production-data/organization-(...)",
"needs_upload":true},
"2e03dd7e5b2e6c8eab1cf41ac61396d5":
{"url":
"https://s3.amazonaws.com/opscode-platform-production-data/organization-(...)",
"needs_upload":true}
},
"sandbox_id"=>"eff7b6f8b3ef44c6867216662d5eeb5f"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. Хэш, который сопоставляет каждую контрольную сумму с хэшем, содержащим булево поле needs_upload и URL, если needs_upload установлено в значение true. |
400 |
Ошибка запроса. Объект уже был сохранён или один (или несколько) объектов не были правильно загружены. Тело запроса не содержит корректно сформированного параметра checksums , который является хэшем, содержащим ключ для каждой контрольной суммы. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение этого действия. |
413 |
Слишком большой объём запроса. Размер запроса не должен превышать 1000000 байт. |
/sandboxes/ID
Каждая песочница имеет уникальный идентификатор. У конечной точки /sandboxes/ID есть следующие методы: PUT.
PUT
Метод PUT используется для фиксации файлов, находящихся в песочнице, в их конечное местоположение, чтобы изменения в кулинарных книгах не требовали повторной загрузки одних и тех же данных.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME/sandboxes/ID
с телом запроса, подобным:
{"is_completed":true}
Ответ
Ответ похож на:
{
"guid": guid,
"name": guid,
"checksums":
{"385ea5490c86570c7de71070bce9384a":
{"url":
"https://s3.amazonaws.com/opscode-platform-production-data/organization-(...)",
"needs_upload":true}
},
"create_time": <get an example of time format>,
"is_completed": true
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
400 |
Ошибка запроса. Содержимое запроса отформатировано некорректно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение этого действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
413 |
Слишком большой объём запроса. Размер запроса не должен превышать 1000000 байт. |
/search
Индексы поиска позволяют выполнять запросы к любому типу данных, индексированному сервером Chef Infra, включая пакеты данных (и элементы пакетов данных), среды, узлы и роли. Определённый синтаксис запроса поддерживает шаблоны поиска, такие как точное совпадение, подстановочные знаки, диапазоны и неточное соответствие. Поиск — это полнотекстовый запрос, который можно выполнить из нескольких мест, включая рецепт, с помощью подкоманды search в knife, метода search в Recipe DSL, поля поиска в консоли управления Chef и с помощью конечных точек /search или /search/INDEX в API сервера Chef Infra. Двигатель поиска основан на Elasticsearch и работает с сервера Chef Infra.
Конечная точка /search позволяет выполнять поиск по узлам, ролям, пакетам данных и средам. У этой конечной точки есть следующие методы: GET.
Примечание
Примечание
GET
Метод GET используется для возвращения структуры данных, содержащей ссылки на каждый доступный индекс поиска. По умолчанию индексы role, node, client, и data bag всегда будут доступны (где индекс data bag — имя пакета данных на сервере Chef Infra). Индексы поиска могут отставать от текущих данных в любой момент времени. Если требуется записать данные и сразу же выполнить поиск, рекомендуется искусственная задержка (не менее 10 секунд).
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/search
Этого метода нет тела запроса.
Ответ
Ответ похож на:
{
"node": "https://chef.example/organizations/org1/search/node",
"role": "https://chef.example/organizations/org1/search/role",
"client": "https://chef.example/organizations/org1/search/client",
"users": "https://chef.example/organizations/org1/search/users"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение этого действия. |
/search/INDEX
Используйте конечную точку /search/INDEX для доступа к индексам поиска на сервере Chef Infra. У конечной точки /search/INDEX есть следующие методы: GET и POST.
Запрос поиска состоит из двух частей: ключа и шаблона поиска. Синтаксис запроса поиска:
key:search_pattern
где key — имя поля, которое находится в JSON-описании индексируемого объекта на сервере Chef Infra (роль, узел, клиент, среда или пакет данных), и search_pattern определяет, что будет искаться, используя один из следующих шаблонов поиска: точное совпадение, подстановочные знаки, диапазон или неточное соответствие. И key, и search_pattern чувствительны к регистру; key имеет ограниченную поддержку подстановочных знаков с несколькими символами с использованием звездочки («*») (при условии, что это не первый символ).
GET
Метод GET используется для возврата всех данных, которые соответствуют запросу в запросе GET.
Этот метод имеет следующие параметры:
| Параметр | Описание |
|---|---|
q |
Запрос поиска, используемый для определения списка элементов на сервере Chef Infra. Этот параметр использует тот же синтаксис, что и подкоманда knife search. |
rows |
Количество строк, которое нужно вернуть. |
start |
Строка, с которой начинаются возвращаемые результаты. |
Запрос
GET /organizations/NAME/search/INDEX
Ответ
Ответ содержит общее количество строк, соответствующих запросу, а для поиска по индексу узлов похож на:
{
"total": 1,
"start": 0,
"rows": [
{
"automatic": {"hardware_type": "laptop"},
"chef_environment": "_default",
"chef_type": "node",
"default": {}
"json_class": "Chef::Node",
"name": "latte",
"normal": {},
"override": {"hardware_type": "laptop"},
"run_list": ["recipe[unicorn]"]
}
]
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Не авторизован. Пользователь или клиент, отправивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса был использован правильный ключ. |
403 |
Запрещено. Пользователь, отправивший запрос, не имеет разрешения на выполнение этого действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
POST
Частичный запрос поиска позволяет выполнять поиск по определённым ключам атрибутов, хранящимся на сервере Chef Infra. Частичный запрос поиска может искать те же объекты на сервере Chef Infra, что и полный запрос поиска, включая указание индекса объекта и предоставление запроса, который может соответствовать соответствующему индексу. В то время как полный запрос поиска вернёт массив объектов, которые соответствуют (каждый объект содержит полный набор атрибутов для узла), частичный запрос поиска вернёт только значения атрибутов, которые соответствуют. Одно из основных преимуществ использования частичного запроса поиска заключается в том, что он требует меньше памяти и пропускной способности сети во время обработки результатов поиска Chef Infra Client. Атрибуты, которые должны быть возвращены частичным запросом поиска, указываются в теле запроса JSON.
Этот метод имеет следующие параметры:
| Параметр | Описание |
|---|---|
q |
Запрос поиска, используемый для определения списка элементов на сервере Chef Infra. Этот параметр использует тот же синтаксис, что и подкоманда search. |
rows |
Количество строк, которое нужно вернуть. |
start |
Строка, с которой начинаются возвращаемые результаты. |
Запрос
POST /organizations/NAME/search
с телом запроса, подобным:
{
"name": [ "name" ],
"ip": [ "ipaddress" ],
"kernel_version": [ "kernel", "version" ]
}
Ответ
Ответ похож на:
{
"total":1,
"start":0,
"rows": [
{
"url": "https://chef.example/organization/org1/nodes/latte",
"data": {
"name": "latte",
"ip": "123.4.5.6789",
"kernel_version": {"linux": "1.2.3"}
}
}
]
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, выполнивший запрос, не был авторизован. Проверьте имя пользователя/клиента и правильность ключа для подписи запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет права на выполнение действия. |
413 |
Запрос слишком большой. Размер запроса не должен превышать 1000000 байт. |
/universe
Используйте конечную точку /universe для получения известного набора кулинарных книг, а затем используйте их с Berkshelf и Chef Supermarket.
Конечная точка /universe имеет следующие методы: GET.
GET
Метод GET используется для получения данных вселенной.
Этот метод не имеет параметров. Этот метод не имеет тела запроса.
Запрос
GET /universe
Ответ
Ответ вернет json-хеш, где имя каждой кулинарной книги является ключом верхнего уровня. Каждая кулинарная книга будет содержать список каждой версии, а также информацию о местоположении и зависимостях:
{
"ffmpeg": {
"0.1.0": {
"location_path": "http://supermarket.chef.io/api/v1/cookbooks/ffmpeg/0.1.0/download",
"location_type": "supermarket",
"dependencies": {
"git": ">= 0.0.0",
"build-essential": ">= 0.0.0",
"libvpx": "~> 0.1.1",
"x264": "~> 0.1.1"
}
},
"0.1.1": {
"location_path": "http://supermarket.chef.io/api/v1/cookbooks/ffmpeg/0.1.1/download",
"location_type": "supermarket",
"dependencies": {
"git": ">= 0.0.0",
"build-essential": ">= 0.0.0",
"libvpx": "~> 0.1.1",
"x264": "~> 0.1.1"
}
}
},
"pssh": {
"0.1.0": {
"location_path": "http://supermarket.chef.io/api/v1/cookbooks/pssh.1.0/download",
"location_type": "supermarket",
"dependencies": {}
}
}
}
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. Были возвращены данные одной (или нескольких) кулинарных книг и связанной с ними информации о версиях. |
/updated_since
Конечная точка /updated_since обеспечивает синхронизацию реплицированных экземпляров сервера Chef Infra с основным сервером Chef Infra. /updated_since была частью продукта Chef Replication. Chef Replication больше не является продуктом, и конечная точка /updated_since также устарела. Ожидается, что для большинства пользователей Chef запрос вернет код состояния HTTP 404. Конечная точка /organizations/NAME/updated_since имеет следующие методы: GET.
Предупреждение
GET
Метод GET используется для возврата деталей организации в формате JSON.
Запрос
GET /organizations/NAME/updated_since?seq=NUM
где NUM - наибольшее целое число, ранее возвращённое в качестве идентификатора.
Ответ
Ответ вернёт массив путей к объектам, которые были созданы, обновлены или удалены с момента NUM, подобно:
[
{
"action": "create",
"id": 1,
"path": "/roles/foo"
},
{
"action": "create",
"id": 2,
"path": "/roles/foo2"
},
{
"action": "create",
"id": 3,
"path": "/roles/foo3"
},
{
"action": "update",
"id": 4,
"path": "/roles/foo3"
}
]
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, выполнивший запрос, не был авторизован. Проверьте имя пользователя/клиента и правильность ключа для подписи запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует или функция не реализована. |
/users
Пользователь может быть связан с организацией.
Конечная точка /users имеет следующие методы: GET и POST.
GET
Метод GET используется для возвращения массива имён пользователей, связанных с организацией.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/users
Этот метод не имеет тела запроса.
Ответ
Ответ похож на:
[
{ "user": { "username": "paperlatte" } }
]
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, выполнивший запрос, не был авторизован. Проверьте имя пользователя/клиента и правильность ключа для подписи запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет права на выполнение действия. |
POST
Метод POST используется для немедленного связывания пользователя с организацией. Только для суперпользователя.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME/users
с телом запроса, подобным:
{
"username": "paperlatte",
}
где username - имя пользователя, который должен быть связан.
Ответ
Блок ответа не возвращается.
Коды ответов
| Код ответа | Описание |
|---|---|
201 |
Создано. Пользователь был связан с организацией. |
400 |
Неверный запрос. Содержимое запроса отформатировано некорректно. |
401 |
Неавторизован. Пользователь или клиент, выполнивший запрос, не был авторизован. Проверьте имя пользователя/клиента и правильность ключа для подписи запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет права на выполнение действия. |
409 |
Конфликт. Пользователь уже связан. |
/users/NAME
Конечная точка /users/NAME имеет следующие методы: DELETE, GET.
DELETE
Метод DELETE используется для удаления связи пользователя с организацией.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/users/NAME
Ответ
Ответ вернёт конечное состояние пользователя, подобно:
{
"username": "paperlatte"
"email": "latte",
"display_name": "Ms. Latte",
"first_name": "Paper",
"last_name": "Latte",
"public_key": "-----BEGIN PUBLIC KEY----- ... "
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. Связь пользователя была удалена. |
401 |
Неавторизован. Пользователь или клиент, выполнивший запрос, не был авторизован. Проверьте имя пользователя/клиента и правильность ключа для подписи запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для возвращения деталей пользователя в формате JSON.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/users/NAME
Ответ
Ответ похож на:
{
"username": "paperlatte"
"email": "latte",
"display_name": "Ms. Latte",
"first_name": "Paper",
"last_name": "Latte",
"public_key": "-----BEGIN PUBLIC KEY----- ... "
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 |
OK. Запрос был выполнен успешно. |
401 |
Неавторизован. Пользователь или клиент, выполнивший запрос, не был авторизован. Проверьте имя пользователя/клиента и правильность ключа для подписи запроса. |
403 |
Запрещено. Пользователь, выполнивший запрос, не имеет права на выполнение действия. |
404 |
Не найдено. Запрашиваемый объект не существует. |
Примеры
В следующих разделах показаны примеры использования API сервера Chef Infra.
Запрос пользователей и организаций
В данном примере показано, как запросить API сервера Chef Infra для получения списка организаций и пользователей. К конечным точкам /organizations и /users можно получить доступ только пользователю pivotal, который является учётной записью пользователя, созданной Chef при установке сервера Chef Infra.
Запустите следующую команду из каталога .chef, содержащего файл pivotal.rb:
require 'chef'
require 'chef/server_api'
Chef::Config.from_file('.chef/pivotal.rb')
rest = Chef::ServerAPI.new(Chef::Config[:chef_server_url])
orgs = rest.get('/organizations')
puts "\n=== Listing of organizations"
orgs.each do |org|
puts org
end
puts "\n=== Listing of Users"
users = rest.get('/users')
users.each do |user|
puts user
end
Пример файла .chef/pivotal.rb показан ниже:
current_dir = File.dirname(__FILE__)
node_name 'pivotal'
chef_server_url 'https://192.0.2.0:443'
chef_server_root 'https://192.0.2.0:443'
client_key "#{current_dir}/pivotal.pem"
Примечание
pivotal.pem должен существовать в указанном месте, а IP-адреса должны быть верными для сервера Chef Infra.
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/api_chef_server/