Spec-Zone.ru › Chef 18

API сервера Chef Infra

[редактировать на GitHub]

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 может проверить подпись с использованием открытого ключа. Разрешаются только авторизованные действия.

Примечание

Большинство запросов аутентификации на сервер Chef Infra абстрагированы от пользователя. Например, при использовании knife или пользовательского интерфейса сервера 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

Примечание

Этот конечная точка используется только для информационных целей и для срабатывания уведомления в консоли управления Chef о количестве имеющихся лицензий по сравнению с количеством лицензий, которые должны быть. Никаких других действий не выполняется, и функциональность и поведение сервера Chef Infra и любого добавленного компонента не изменяются.

Конечная точка /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 Все коммуникации в порядке.

500

Один (или несколько) сервисов не работают. Например:

{
  "status":"fail",
  "upstreams":
    {
      "service_name": "fail",
      "service_name": "pong",
      ...
    }
}

/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.

Примечание

Начиная с версии 12.1.0, параметры "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"
  }
}

Коды ответов

END_OF_DOCUMENT_MARKER
Код ответа Описание
201 ОК. Приглашение создано.
400 Ошибка запроса. Содержимое запроса отформатировано некорректно.
401 Неавторизован. Пользователь или клиент, сделавший запрос, не смог пройти аутентификацию. Проверьте имя пользователя/клиента и то, что для подписания запроса использовался правильный ключ.
403 Запрещено. Пользователь, сделавший запрос, не имеет разрешения на выполнение действия.
404 Не найдено. Приглашённый пользователь не существует.
409 Конфликт. Объект уже существует.

/clients

Используйте конечную точку /clients для управления клиентами и связанными с ними парами ключей RSA. Конечная точка /clients имеет следующие методы: GET и POST.

Примечание

Клиенты должны управляться с помощью knife, а не через API сервера Chef Infra. Взаимодействия между клиентами, узлами и acl сложны.

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.

Примечание

Начиная с версии 12.1.0, параметр "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.

Примечание

Начиная с версии 12.1.0, параметр "admin" больше не поддерживается при создании клиентов/пользователей. Если он используется в POST или PUT клиента или пользователя, он игнорируется.

Примечание

Начиная с версии 12.1.0, включение "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.

Примечание

В конце каждого выполнения Chef Infra Client объект узла сохраняется на сервере Chef Infra. Затем каждый объект узла добавляется в индекс поиска Apache Solr. Этот процесс асинхронный. По умолчанию объекты узлов добавляются в индекс поиска каждые 60 секунд или на 1000 объектов узлов, в зависимости от того, что произойдёт раньше.

Примечание

Эта конечная точка не имеет ограничений ACL, что означает, что ею может воспользоваться любой пользователь или клиент, способный выполнить запрос к серверу Chef Infra.

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.

Предупреждение

Эта обновление доступно после установки Chef Replication на сервере Chef Infra.

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API