Я установил экземпляр Artifactory и настроил на нем удаленный супермаркет Chef, который реплицируется из локального репозитория на другом Artifactory. Я доволен существующим конвейером, так как это означает, что доставка артефактов заказчику автоматизируется посредством двухтактной репликации.
На стороне клиента у нас также есть сервер Chef, который предназначен дляорганизовать развертывание путем запуска поваренных книг на различных серверах в соответствии с их ролями / настройкой среды.
ORG: Artifactory (Local Chef Repo)
-----------------------------------
|
<web>
|
-----------------------------------
CUST: Artifactory (Remote Chef Repo)
Chef Server
У меня есть пустой каталог, в котором я создал .chef / knife.rb, получил доверие между сервером chef инастроил мой супермаркет.
knife[:supermarket_site] = 'http://<user>:<api_key>@customer-artifactory:8081/artifactory/api/chef/org-chef'
Когда я запускаю knife supermarket list
, я получаю список всех поваренных книг из супермаркета шеф-поваров, размещенного в артефакте. Однако проблема, с которой я сталкиваюсь, заключается в том, что, когда я подключаю Chef Server к миксу, он не может разрешить кулинарные книги.
user@workstation:~/chef-ops$ knife ssh 'name:vm01' sudo chef-client -x <user> -P <password>
vm01 knife sudo password:
vm01
vm01 Starting Chef Infra Client, version 15.3.14
vm01 resolving cookbooks for run list: ["repository"]
vm01
vm01 ================================================================================
vm01 Error Resolving Cookbooks for Run List:
vm01 ================================================================================
vm01
vm01 Missing Cookbooks:
vm01 ------------------
vm01 The following cookbooks are required by the client but don't exist on the server:
vm01 * repository
vm01
vm01
vm01 Expanded Run List:
vm01 ------------------
vm01 * repository
vm01
vm01 System Info:
vm01 ------------
vm01 chef_version=15.3.14
vm01 platform=ubuntu
vm01 platform_version=18.04
vm01 ruby=ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-linux]
vm01 program_name=/usr/bin/chef-client
vm01 executable=/opt/chef/bin/chef-client
vm01
vm01
vm01 Running handlers:
vm01 [2019-10-11T10:28:05+00:00] ERROR: Running exception handlers
vm01 Running handlers complete
vm01 [2019-10-11T10:28:05+00:00] ERROR: Exception handlers complete
vm01 Chef Infra Client failed. 0 resources updated in 04 seconds
vm01 [2019-10-11T10:28:05+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
vm01 [2019-10-11T10:28:05+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
vm01 [2019-10-11T10:28:05+00:00] FATAL: Net::HTTPServerException: 412 "Precondition Failed"
Я понимаю, что это вероятно, потому что установка в knife.rb не распространяется на ChefСервер, поэтому мне нужно настроить Chef Server для просмотра Artifactory.
Я посмотрел следующую документацию, касающуюся использования частных супермаркетов Chef, но они, похоже, не соответствуют моему сценарию использования.
Просматривая эти различные ресурсы (и не только), я не уверен, что Artifactory и Chef Server можно настроить для достижения автоматического разрешения поваренной книги. Там, кажется, нет никакой документации по этому вопросу. Например, каким будет URL-адрес обратного вызова Chef Server в Artifactory?
oc_id['applications'] = {
'supermarket' => {
'redirect_uri' => 'http://customer-artifactory:8081/artifactory/api/oauth2/???'
}
}
Правильно ли я считаю, что Chef Server не может напрямую разрешить поваренные книги из Artifactory и что нам нужно создать какой-то видконвейер для синхронизации Chef Server с Artifactory chef repository?
Единственный вариант, который я вижу, - это создать процедуру, которая регулярно выполняет knife supermarket list
, а затем перебирает результаты, загружая их из Artifactory Supermarket и затем загружая все новые версии на Chef Server через скрипт оболочкина регулярной основе (cron работа / Дженкинс). Я подумал, что было бы лучше, если бы Chef Server запрашивал поваренные книги в супермаркете на разовой основе, поскольку он только тогда запрашивал бы то, что ему нужно в любой момент.
Я ошибаюсь, полагая, что это похоже начто Artifactory / Chef Server может / должен делать для меня?