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 с помощью заключительного Z и разделенных символом 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-кодированный SHA256 хеш 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'
И для CLI knife Chef через config.rb:
knife[:authentication_protocol_version] = '1.3'
Чтобы создать подписанные заголовки для непосредственного использования. Соберите указанные заголовки в перечисленном порядке, преобразуйте заголовки подписи в конкатенированную строку, подпишите и закодируйте результат в Base64. Конкатенация заголовков подписи подписывается с использованием закрытого ключа RSA клиента с хешированием SHA-256 и заливкой 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-кодированный SHA256 хеш 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
Запросы API с помощью knife
Плагин 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 | OK. Запрос был выполнен успешно. |
401 | Не авторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента, пароль и то, что для подписания запроса использовался правильный ключ. |
/license
Примечание
Конечная точка /license имеет следующие методы: GET.
GET
Метод GET используется для получения информации о лицензии для сервера Chef Infra.
Этот метод не имеет параметров.
Запрос
GET /license
Этот метод не имеет тела запроса.
Ответ
Ответ похож на:
{
"limit_exceeded": false,
"node_license": 25,
"node_count": 12,
"upgrade_url": "https://www.chef.io/pricing"
}
Когда node_count больше, чем node_license, то limit_exceeded равен true и консоль управления Chef отобразит уведомление об этом статусе. Для решения этой проблемы необходимо посетить URL обновления, добавить соответствующее количество лицензий и затем соответствующим образом обновить настройки конфигурации.
Файл chef-server.rb содержит настройки, которые можно использовать для редактирования количества узлов, находящихся под лицензией:
| Настройка | Описание |
|---|---|
license['nodes'] | Количество лицензированных узлов. Значение по умолчанию: 25. |
license['upgrade_url'] | URL для перехода к дополнительной информации о том, как обновить количество лицензированных узлов для организации. Значение по умолчанию: "https://www.chef.io/pricing". |
Коды ответов
| Код ответа | Описание |
|---|---|
200 | OK. Запрос был выполнен успешно. |
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 | OK. Запрос был выполнен успешно. |
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 | OK. Запрос был выполнен успешно. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
GET
Метод GET используется для получения подробной информации об указанной организации.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME
Ответ
Ответ похож на:
{
"name": "chef",
"full_name": "Chef Software, Inc.",
"guid": "f980d1asdfda0331235s00ff36862"
...
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 | OK. Запрос был выполнен успешно. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия. |
PUT
Метод PUT используется для обновления определения организации.
Этот метод не имеет параметров.
Запрос
PUT /organizations/NAME
с телом запроса, похожим на:
{
"name": "chef",
"full_name": "Chef Software, Inc."
}
Ответ
Ответ похож на:
{
"name": "chef",
"full_name": "Chef Software, Inc.",
"guid": "f980d1asdfda0331235s00ff36862"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 | OK. Запрос был выполнен успешно. |
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 | OK. |
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 | OK. Запрос был выполнен успешно. |
401 | Не авторизован. Пользователь или клиент, выполнивший запрос, не был авторизован. Проверьте имя пользователя/клиента и правильность ключа, используемого для подписания запроса. |
403 | Запрещено. Пользователю, выполнившему запрос, не разрешено выполнять это действие. |
404 | Не найдено. Запрашиваемый объект не существует. |
Дополнительная фильтрация
Фильтрация по /users может быть выполнена с помощью external_authentication_uid. Это для поддержки аутентификации SAML.
Например, чтобы получить пользователей, чей external_authentication_uid равен jane@doe.com, выполните следующие действия:
GET /users?external_authentication_uid=jane%40doe.com
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 | OK. Пользователь был создан. |
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 | OK. Запрос был выполнен успешно. |
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 | OK. Запрос был выполнен успешно. |
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.
Конечная точка /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, включая клиентов для узлов, которые были зарегистрированы на сервере Chef Infra, клиентов 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 запускаться как администратор. Необходимо указать либо имя, либо 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 при использовании API сервера Chef Infra.
Коды ответов
| Код ответа | Описание |
|---|---|
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 использует существующие значения, а не присваивает значения по умолчанию.
Примечание
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 | ОК. Запрос был выполнен успешно. |
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 | ОК. Запрос был выполнен успешно. |
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 | ОК. Запрос был выполнен успешно. |
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 | ОК. Запрос был выполнен успешно. |
201 | Создано. Объект был создан. |
401 | Не авторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет права на выполнение действия. |
404 | Не найдено. Запрашиваемый объект не существует. |
/containers
Конечная точка /containers имеет следующие методы: GET, POST.
GET
Метод GET используется для получения списка контейнеров.
Примечание: Конечная точка /containers не полезна за пределами кода сервера Chef Infra.
Этот метод не имеет параметров.
Запрос
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 | ОК. Запрос был выполнен успешно. |
401 | Не авторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет права на выполнение действия. |
404 | Не найдено. Запрашиваемый объект не существует. |
POST
Метод POST используется для создания контейнера.
Примечание: Использование метода POST конечной точки /containers может иметь непредвиденные последствия и, вероятно, нарушит вашу систему. Использование этого метода не поддерживается.
Этот метод не имеет параметров.
Запрос
POST /organizations/NAME
Этот метод имеет тело запроса, похожее на:
{
"containername": "mycontainer",
"containerpath": "mycontainer"
}
Ответ
Ответ похож на:
{
"uri"": "https://chef.example/organizations/test/containers/mycontainer"
}
Коды ответов
| Код ответа | Описание |
|---|---|
201 | ОК. Запрос был выполнен успешно. |
401 | Не авторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет права на выполнение действия. |
404 | Не найдено. Запрашиваемый объект не существует. |
/containers/NAME
DELETE
Метод DELETE используется для удаления контейнера.
Конечная точка /containers/Name имеет следующие методы: DELETE, GET.
Примечание: Использование метода DELETE конечной точки /containers/NAME может иметь непредвиденные последствия и, вероятно, нарушит вашу систему. Использование этого метода не поддерживается.
Этот метод не имеет параметров.
Запрос
DELETE /organizations/NAME/containers/NAME
Этот метод не использует тело запроса.
Ответ
Ответ не возвращает тело ответа.
Коды ответов
| Код ответа | Описание |
|---|---|
200 | ОК. Запрос был выполнен успешно. |
401 | Не авторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет права на выполнение действия. |
404 | Не найдено. Запрашиваемый объект не существует. |
GET
Метод GET используется для получения контейнера.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/containers/NAME
Этот метод не использует тело запроса.
Ответ
Ответ похож на:
{
"containername"": "mycontainer",
"containerpath"": "mycontainer"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 | ОК. Запрос был выполнен успешно. |
401 | Не авторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет права на выполнение действия. |
404 | Не найдено. Запрашиваемый объект не существует. |
/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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
401 | Не авторизован. Пользователь или клиент, выполнивший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписи запроса использовался правильный ключ. |
403 | Запрещено. Пользователь, выполнивший запрос, не имеет разрешения на выполнение действия. |
413 | Слишком большой объём запроса. Объём запроса не должен превышать 1000000 байт. |
/cookbooks
Кулинарная книга — это основная единица конфигурации и распространения политики в Chef Infra.
Кулинарная книга определяет сценарий и содержит всё необходимое для поддержки этого сценария:
- Рецепты, которые указывают, какие встроенные ресурсы Chef Infra использовать и в каком порядке их применять
- Значения атрибутов, которые позволяют настраивать конфигурацию на основе среды, например,
devилиprodution. - Пользовательские ресурсы для расширения Chef Infra за пределы встроенных ресурсов.
- Файлы и шаблоны для распространения информации по системам.
- Пользовательские плагины Ohai для расширения сбора конфигурации системы за пределы значений по умолчанию Ohai.
- Файл
metadata.rb, который описывает саму кулинарную книгу и все её зависимости.
При загрузке кулинарной книги включаются только новые или обновлённые файлы. Такой подход минимизирует объём памяти и время, необходимое во время цикла модификация-загрузка-тест. Для отслеживания файлов, которые уже были загружены, 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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 используется для удаления окружения.
Этот метод не имеет параметров.
Запрос
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
Метод 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
Метод 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
Метод 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
Метод 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
Метод 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 Client получит _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 | OK. Группа была обновлена. |
401 | Не авторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет права на выполнение действия. |
404 | Не найдено. Запрашимый объект не существует. |
/nodes
Узел — это любое устройство (физическое, виртуальное, облачное, сетевое и т. д.), находящееся под управлением Chef Infra.
Конечная точка /nodes имеет следующие методы: GET и POST.
GET
Метод GET используется для возврата хэша URI для узлов на сервере Chef Infra.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/nodes
Ответ
Ответ похож на:
{
"latte": "https://localhost/nodes/latte"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 | OK. Запрос был выполнен успешно. |
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 | OK. Запрос был выполнен успешно. |
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 | OK. Запрос был выполнен успешно. |
401 | Не авторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет права на выполнение действия. |
404 | Не найдено. Запрашимый объект не существует. |
HEAD
Метод HEAD используется для проверки существования узла.
Этот метод не имеет параметров.
Запрос
HEAD /organizations/NAME/nodes/NAME
Ответ
Метод не возвращает тело.
Коды ответов
| Код ответа | Описание |
|---|---|
200 | OK. Запрос был выполнен успешно. |
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 | OK. Запрос был выполнен успешно. |
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 | OK. Запрос был выполнен успешно. |
403 | Запрещено. Пользователь, сделавший запрос, не имеет права на выполнение действия. |
/policy_groups
Конечная точка /policy_groups имеет следующие методы: GET.
Каждый узел имеет отношение 1:многие к настройкам политик, хранящимся на сервере Chef Infra. Это отношение основано на группе политик, к которой связан узел, и затем на настройках политик, назначенных этой группе:
- Политика обычно названа по функциональной роли узла, например, «сервер приложений», «чат-сервер», «балансировщик нагрузки» и так далее.
- Группа политик определяет набор узлов в развертываемых единицах, обычно сопоставленных с организационными требованиями, такими как «dev», «test», «staging» и «production», но также может быть сопоставлена с более подробными требованиями по мере необходимости.
/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 | OK. Запрос был выполнен успешно. |
404 | Не найдено. Запрашимый объект не существует. |
/required_recipe
Конечная точка /required_recipe имеет следующий метод: GET.
GET
Используйте метод GET для просмотра рецепта, указанного администратором сервера Chef Infra Server в составе конфигурации сервера 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 | OK. Запрос выполнен успешно. Требуемый рецепт включён, путь к рецепту определён, и рецепт существует по указанному пути. |
401 | Не авторизован. Пользователь или клиент, выполнивший запрос, не был авторизован. Проверьте имя пользователя/клиента и убедитесь, что для подписания запроса использовался правильный ключ. |
403 | Запрещено. Пользователю, выполнившему запрос, нет разрешения на выполнение действия. |
404 | Не найдено. Требуемая функция рецепта не включена. |
/roles
Роль — это способ определения определённых шаблонов и процессов, которые существуют на узлах организации и относятся к одной функции. Каждая роль состоит из нулевых (или более) атрибутов и списка выполнения. У каждого узла может быть нулевая (или более) назначенная роль. При выполнении роли на узле детали конфигурации этого узла сравниваются с атрибутами роли, а затем содержимое списка выполнения этой роли применяется к деталям конфигурации узла. При запуске клиента Chef Infra Client он объединяет собственные атрибуты и списки выполнения с теми, что содержатся в каждой назначенной роли.
Конечная точка /roles имеет следующие методы: GET и POST.
GET
Метод GET используется для получения списка ролей вместе с их связанными URI.
Этот метод не имеет параметров.
Запрос
GET /organizations/NAME/roles
Ответ
Ответ похож на:
{
"webserver": "https://chef.example/organizations/org1/roles/webserver"
}
Коды ответов
| Код ответа | Описание |
|---|---|
200 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос выполнен успешно. |
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 | OK. Запрос был выполнен успешно. |
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 в языке Chef Infra, поле поиска в консоли управления 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 используется для получения данных universe.
Этот метод не имеет параметров. Тело запроса отсутствует.
Запрос
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 также устарела. Ожидается, что для большинства пользователей использование конечной точки вернёт 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/server/api_chef_server/