На Artifactory размещена интеграция Chef Supermarket + Chef Server - PullRequest
0 голосов
/ 11 октября 2019

Я установил экземпляр 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 может / должен делать для меня?

Ответы [ 2 ]

1 голос
/ 11 октября 2019

позвольте мне уточнить:

  • супермаркет шеф-поваров - репозиторий поваренных книг, в котором размещены поваренные книги с открытым исходным кодом. хотя вы можете запустить частный супермаркет для хранения ваших личных кулинарных книг
  • Поваренная книга metadata.rb определяет зависимости поваренной книги, используя инструкцию depends
  • , которую вы можете использовать berkshelf для управления зависимостями поваренной книги
  • сервер chef также выступает в качестве хранилища поваренных книг для своих клиентов (узлов), что означает, что узел может извлекать поваренные книги только с chef-сервера, к которому принадлежит узел ( см. client.rb)

, поскольку вы используете более одного chef-сервера, вам придется синхронизировать cookbokos с каждым из которых

на практике вы будете:

  1. использовать berkshelf для управления зависимостями поваренной книги от артефактов и супермаркетов (частных или общедоступных)
  2. использовать berkshelf до поставщик (копирование и загрузка) всех зависимостей поваренной книги (включая ваши собственные поваренные книги)
  3. использование knife или berkshelf для загрузки продаваемых поваренных книг
1 голос
/ 11 октября 2019

AFAIK: Супермаркет Chef и Chef Infra Server (Книжная полка) не подключены, поэтому автоматическое разрешение поваренной книги отсутствует. Вам потребуется процесс, который загружает поваренные книги из супермаркета / Artifactory на сервер Chef или использует подход Policyfiles https://docs.chef.io/policyfile.html.

...