Spec-Zone.ru › Chef 18

О списках выполнения

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

Список выполнения определяет всю информацию, необходимую Chef для настройки узла в нужном состоянии. Список выполнения:

  • Упорядоченный список ролей и/или рецептов, которые выполняются в точном порядке, определённом в списке выполнения; если рецепт указан более одного раза в списке выполнения, Chef Infra Client не выполнит его дважды
  • Всегда специфичен для узла, на котором он выполняется; узлы могут иметь список выполнения, идентичный списку выполнения, используемому другими узлами
  • Хранится как часть объекта узла на сервере Chef
  • Поддерживается с помощью knife и затем загружается со рабочей станции на сервер Chef Infra, или поддерживается с помощью Chef Automate

Формат списка выполнения

Список выполнения должен быть в одном из следующих форматов: полное имя, кулинарная книга или по умолчанию. Как роли, так и рецепты должны быть в кавычках, например:

"role[NAME]"

или

"recipe[COOKBOOK::RECIPE]"

Используйте запятую для разделения ролей и рецептов при добавлении более одного элемента в список выполнения:

"recipe[COOKBOOK::RECIPE],COOKBOOK::RECIPE,role[NAME]"

Пустые списки выполнения

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

  • Параметры конфигурации в файле config.rb
  • Права пользователя как к серверу Chef Infra, так и к узлу, на котором будет происходить выполнение Chef Infra Client

Команды knife

Следующие команды knife могут быть использованы для управления списками выполнения на сервере Chef Infra.

Кавычки, Windows

При выполнении knife в Microsoft Windows строка может интерпретироваться как шаблон подстановки, когда кавычки отсутствуют в команде. Количество кавычек зависит от оболочки, из которой выполняется команда.

При выполнении knife из командной строки, строка должна быть окружена одинарными кавычками (' '). Например:

knife node run_list set test-node 'recipe[iptables]'

При выполнении knife из Windows PowerShell, строка должна быть окружена тройными одинарными кавычками (''' '''). Например:

knife node run_list set test-node '''recipe[iptables]'''

Import-Module chef

Выпуск Chef Client 12.4 добавляет необязательную функцию в пакет MSI (Microsoft Installer) для Chef. Эта функция позволяет передавать строки в кавычках из командной строки Windows PowerShell без необходимости в тройных одинарных кавычках (''' '''). Эта функция устанавливает модуль Windows PowerShell (обычно в C:\opscode\chef\modules) который также добавляется в переменную среды PSModulePath. Эта функция по умолчанию не включена. Чтобы активировать эту функцию, выполните следующую команду в Windows PowerShell:

Import-Module chef

или добавьте Import-Module chef в профиль Windows PowerShell, расположенный по адресу:

~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Этот модуль экспортирует командлеты с такими же именами, как и инструменты командной строки — chef-client, knife — которые встроены в Chef.

Например:

knife exec -E 'puts ARGV' """&s0meth1ng"""

теперь:

knife exec -E 'puts ARGV' '&s0meth1ng'

и:

knife node run_list set test-node '''role[ssssssomething]'''

теперь:

knife node run_list set test-node 'role[ssssssomething]'

Чтобы удалить эту функцию, выполните следующую команду в Windows PowerShell:

Remove-Module chef

run_list add

Используйте аргумент run_list add для добавления элементов списка выполнения (ролей или рецептов) к узлу.

Список выполнения должен быть в одном из следующих форматов: полное имя, кулинарная книга или по умолчанию. Как роли, так и рецепты должны быть в кавычках, например:

"role[NAME]"

или

"recipe[COOKBOOK::RECIPE]"

Используйте запятую для разделения ролей и рецептов при добавлении более одного элемента в список выполнения:

"recipe[COOKBOOK::RECIPE],COOKBOOK::RECIPE,role[NAME]"

Синтаксис

Этот аргумент имеет следующий синтаксис:

knife node run_list add NODE_NAME RUN_LIST_ITEM (options)

Опции

Этот аргумент имеет следующие опции:

-a ITEM, --after ITEM

Добавить элемент списка выполнения после указанного элемента списка выполнения.

-b ITEM, --before ITEM

Добавить элемент списка выполнения перед указанным элементом списка выполнения.

Примечание

См. config.rb для получения дополнительной информации о том, как добавить определённые опции knife в качестве параметров в файле config.rb.

Примеры

Следующие примеры показывают, как использовать эту подкоманду knife:

Добавить роль

Чтобы добавить роль в список выполнения, введите:

knife node run_list add NODE_NAME 'role[ROLE_NAME]'
Добавить роли и рецепты

Чтобы добавить роли и рецепты в список выполнения, введите:

knife node run_list add NODE_NAME 'recipe[COOKBOOK::RECIPE_NAME],recipe[COOKBOOK::RECIPE_NAME],role[ROLE_NAME]'
Добавить рецепт с FQDN

Чтобы добавить рецепт в список выполнения, используя полное имя, введите:

knife node run_list add NODE_NAME 'recipe[COOKBOOK::RECIPE_NAME]'
Добавить рецепт с кулинарной книгой

Чтобы добавить рецепт в список выполнения, используя формат кулинарной книги, введите:

knife node run_list add NODE_NAME 'COOKBOOK::RECIPE_NAME'
Добавить рецепт по умолчанию

Чтобы добавить рецепт по умолчанию кулинарной книги в список выполнения, введите:

knife node run_list add NODE_NAME 'COOKBOOK'

run_list remove

Используйте аргумент run_list remove для удаления элементов списка выполнения (ролей или рецептов) из узла. Рецепт должен быть в одном из следующих форматов: полное имя, кулинарная книга или по умолчанию. Как роли, так и рецепты должны быть в кавычках, например: 'role[ROLE_NAME]' или 'recipe[COOKBOOK::RECIPE_NAME]'. Используйте запятую для разделения ролей и рецептов при удалении более одного, так: 'recipe[COOKBOOK::RECIPE_NAME],COOKBOOK::RECIPE_NAME,role[ROLE_NAME]'.

Синтаксис

Этот аргумент имеет следующий синтаксис:

knife node run_list remove NODE_NAME RUN_LIST_ITEM

Опции

У этой команды нет специфических опций.

Примечание

См. config.rb для получения дополнительной информации о том, как добавить определённые опции knife в качестве параметров в файле config.rb.

Примеры

Следующие примеры показывают, как использовать эту подкоманду knife:

Удалить роль

Чтобы удалить роль из списка выполнения, введите:

knife node run_list remove NODE_NAME 'role[ROLE_NAME]'
Удалить список выполнения

Чтобы удалить рецепт из списка выполнения, используя полное имя, введите:

knife node run_list remove NODE_NAME 'recipe[COOKBOOK::RECIPE_NAME]'

run_list set

Используйте аргумент run_list set для установки списка выполнения для узла. Рецепт должен быть в одном из следующих форматов: полное имя, кулинарная книга или по умолчанию. Как роли, так и рецепты должны быть в кавычках, например: "role[ROLE_NAME]" или "recipe[COOKBOOK::RECIPE_NAME]". Используйте запятую для разделения ролей и рецептов при установке более одного, так: "recipe[COOKBOOK::RECIPE_NAME],COOKBOOK::RECIPE_NAME,role[ROLE_NAME]".

Синтаксис

Этот аргумент имеет следующий синтаксис:

knife node run_list set NODE_NAME RUN_LIST_ITEM

Опции

У этой команды нет специфических опций.

Примеры

Нет.

статус

Следующие примеры показывают, как использовать подкоманду knife status для проверки состояния списков выполнения.

Просмотр статуса, включать списки выполнения

Чтобы включить списки выполнения в статус, введите:

knife status --run-list

чтобы получить что-то вроде:

20 hours ago, dev-vm.chisamore.com, ubuntu 10.04, dev-vm.chisamore.com, 10.66.44.126, role[lb].
3 hours ago, i-225f954f, ubuntu 10.04, ec2-67-202-63-102.compute-1.amazonaws.com, 67.202.63.102, role[web].
3 hours ago, i-a45298c9, ubuntu 10.04, ec2-174-129-127-206.compute-1.amazonaws.com, 174.129.127.206, role[web].
3 hours ago, i-5272a43f, ubuntu 10.04, ec2-184-73-9-250.compute-1.amazonaws.com, 184.73.9.250, role[web].
3 hours ago, i-226ca64f, ubuntu 10.04, ec2-75-101-240-230.compute-1.amazonaws.com, 75.101.240.230, role[web].
3 hours ago, i-f65c969b, ubuntu 10.04, ec2-184-73-60-141.compute-1.amazonaws.com, 184.73.60.141, role[web].

Просмотр статуса с помощью запроса

Чтобы показать состояние подмножества узлов, возвращаемых определённым запросом, введите:

knife status "role:web" --run-list

чтобы получить что-то вроде:

3 hours ago, i-225f954f, ubuntu 10.04, ec2-67-202-63-102.compute-1.amazonaws.com, 67.202.63.102, role[web].
3 hours ago, i-a45298c9, ubuntu 10.04, ec2-174-129-127-206.compute-1.amazonaws.com, 174.129.127.206, role[web].
3 hours ago, i-5272a43f, ubuntu 10.04, ec2-184-73-9-250.compute-1.amazonaws.com, 184.73.9.250, role[web].
3 hours ago, i-226ca64f, ubuntu 10.04, ec2-75-101-240-230.compute-1.amazonaws.com, 75.101.240.230, role[web].
3 hours ago, i-f65c969b, ubuntu 10.04, ec2-184-73-60-141.compute-1.amazonaws.com, 184.73.60.141, role[web].

Применённые списки выполнения

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

Операции загрузки

Команда knife bootstrap — распространённый способ установки Chef Infra Client на узел. По умолчанию этот подход предполагает, что узел может получить доступ к веб-сайту Chef, чтобы загрузить пакет Chef Infra Client с этого сайта.

Установщик Chef Infra Client определит версию операционной системы и затем установит соответствующую версию Chef Infra Client с помощью одной команды для установки Chef Infra Client и всех его зависимостей, включая встроенную версию Ruby, OpenSSL, парсеры, библиотеки и утилиты командной строки.

Установщик Chef Infra Client помещает всё в уникальную директорию (/opt/chef/), чтобы Chef Infra Client не конфликтовал с другими приложениями, которые могут работать на целевом компьютере. После установки Chef Infra Client требует нескольких дополнительных шагов конфигурации перед выполнением первого запуска Chef Infra Client на узле.

Узел — это любое физическое, виртуальное или облачное устройство, которое настраивается и поддерживается экземпляром Chef Infra Client. Загрузка устанавливает Chef Infra Client на целевую систему, чтобы он мог работать как клиент и настраивает узел для связи с сервером Chef Infra. Существует два способа сделать это:

  • Выполнить команду knife bootstrap со рабочей станции.
  • Выполнить автономную установку для загрузки с самого узла без необходимости подключения SSH или WinRM.

На следующей диаграмме показаны этапы операции загрузки, а список под диаграммой описывает каждый из этих этапов подробнее.

image

Во время операции загрузки knife bootstrap происходит следующее:

Этапы Описание
knife bootstrap Введите подкоманду knife bootstrap с рабочей станции. Включите имя хоста, IP-адрес или полное доменное имя целевого узла в эту команду. Knife установит SSH- или WinRM-соединение с целевой системой и запустит скрипт инициализации.

Получение скрипта установки из Chef

Скрипт оболочки запросит на сайте Chef самую последнюю версию скрипта установки Chef Infra Client (install.sh или install.ps1).

Получение пакета Chef Infra Client из Chef Затем скрипт установки собирает информацию о системе и определяет подходящий пакет для Chef Infra Client, а затем загружает соответствующий пакет с omnitruck-direct.chef.io.
Установка Chef Infra Client Chef Infra Client устанавливается на целевой узел с помощью системного пакета (.rpm, .msi и т. д.).

Запуск выполнения Chef Infra Client

На машинах на основе UNIX и Linux: второй скрипт оболочки выполняет двоичный файл chef-client с набором начальных настроек, хранящихся в first-boot.json на узле. first-boot.json генерируется с рабочей станции как часть начальной подкоманды knife bootstrap.

На машинах Microsoft Windows: пакетный файл, полученный из шаблона bootstrap windows-chef-client-msi.erb, выполняет двоичный файл chef-client с набором начальных настроек, хранящихся в first-boot.json на узле. first-boot.json генерируется с рабочей станции как часть начальной подкоманды knife bootstrap.

Завершение выполнения Chef Infra Client

Выполнение Chef Infra Client продолжается с использованием HTTPS (порт 443) и регистрирует узел в сервере Chef Infra Server.

Первое выполнение Chef Infra Client по умолчанию содержит пустой список задач. Список задач можно указать как часть начальной операции инициализации с помощью опции --run-list в составе подкоманды knife bootstrap.

Выполнение Chef Infra Client

Термин «выполнение Chef Infra Client» описывает шаги, выполняемые Chef Infra Client для настройки узла при запуске команды chef-client. На диаграмме ниже показаны различные этапы, происходящие во время выполнения Chef Infra Client.

Anatomy of a Chef Infra Client Run

Во время каждого выполнения Chef Infra Client происходит следующее:

Этапы Описание
Получение данных конфигурации Chef Infra Client получает данные конфигурации процесса из файла client.rb на узле, а затем получает данные конфигурации узла из Ohai. Важным элементом данных конфигурации является имя узла, которое находится в атрибуте node_name в файле client.rb или предоставляется Ohai. Если Ohai предоставляет имя узла, это обычно полное доменное имя (FQDN) узла, которое всегда уникально в рамках организации.
Авторизация на сервере Chef Infra Server Chef Infra Client авторизуется на сервере Chef Infra Server с использованием закрытого ключа RSA и API сервера Chef Infra Server. Имя узла требуется в процессе аутентификации на сервере Chef Infra Server. Если это первое выполнение Chef Infra Client для узла, chef-validator будет использован для генерации закрытого ключа RSA.
Получение, перестроение объекта узла Chef Infra Client получает объект узла с сервера Chef Infra Server и затем перестраивает его. Объект узла состоит из системных атрибутов, обнаруженных Ohai, атрибутов, заданных в файлах правил или кулинарных книгах, и списка задач кулинарных книг. Первый раз, когда Chef Infra Client выполняется на узле, он создает объект узла из списка задач по умолчанию. Узел, на котором еще не выполнялся Chef Infra Client, не будет иметь объект узла или запись на сервере Chef Infra Server для объекта узла. При последующих запусках Chef Infra Client перестроенный объект узла также будет содержать список задач из предыдущего запуска Chef Infra Client.
Расширение списка задач Chef Infra Client расширяет список задач из перестроенного объекта узла и собирает полный список рецептов в точном порядке, в котором они будут применяться к узлу.
Синхронизация кулинарных книг Chef Infra Client запрашивает все файлы кулинарных книг (включая рецепты, шаблоны, ресурсы, поставщики, атрибуты и библиотеки), которые ему необходимы для каждого действия, указанного в списке задач, с сервера Chef Infra Server. Сервер Chef Infra Server отвечает Chef Infra Client полным списком файлов. Chef Infra Client сравнивает список файлов с файлами, которые уже существуют на узле с предыдущих запусков, а затем загружает копию каждого нового или измененного файла с сервера Chef Infra Server.
Сброс атрибутов узла Все атрибуты в перестроенном объекте узла сбрасываются. Все атрибуты из файлов атрибутов, файлов правил и Ohai загружаются. Атрибуты, определенные в файлах атрибутов, сначала загружаются в соответствии с порядком кулинарных книг. Для каждой кулинарной книги атрибуты в файле default.rb загружаются в первую очередь, а затем дополнительные файлы атрибутов (если они есть) загружаются в лексикографическом порядке. Если файлы атрибутов найдены в любых кулинарных книгах, которые указаны как зависимости в файле metadata.rb, они также загружаются. Все атрибуты в перестроенном объекте узла обновляются данными атрибутов в соответствии с приоритетами атрибутов. После обновления всех атрибутов перестроенный объект узла завершается.
Компиляция коллекции ресурсов Chef Infra Client определяет каждый ресурс в объекте узла и создает коллекцию ресурсов. Библиотеки загружаются в первую очередь, чтобы убедиться, что все языковые расширения и классы Ruby доступны для всех ресурсов. Затем загружаются атрибуты, за которыми следуют пользовательские ресурсы. Наконец, все рецепты загружаются в порядке, указанном расширенным списком задач. Это также называется "фазой компиляции".
Сборка узла Chef Infra Client настраивает систему на основе собранной информации. Каждый ресурс выполняется в порядке, указанном в списке задач, а затем в порядке, в котором каждый ресурс перечислен в каждом рецепте. Каждый ресурс определяет действие для выполнения, которое настраивает определенную часть системы. Этот процесс также называется сведением. Это также называется "фазой выполнения".

Обновление объекта узла, обработка исключений и обработчики отчетов

Когда все действия, определенные ресурсами в коллекции ресурсов, выполнены, и Chef Infra Client завершается успешно, тогда Chef Infra Client обновляет объект узла на сервере Chef Infra Server с объектом узла, созданным во время выполнения Chef Infra Client. (Этот объект узла будет загружен Chef Infra Client во время следующего запуска Chef Infra Client.) Это делает объект узла (и данные в объекте узла) доступным для поиска.

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

Получение и выполнение профилей соответствия Chef InSpec После завершения выполнения Chef Infra Client он запускает фазу соответствия, которая представляет собой выполнение Chef InSpec в рамках Chef Infra Client. Chef InSpec извлекает тесты либо из устаревшей кулинарной книги аудита, либо из текущего профиля InSpec.
Отправка или сохранение отчета о соответствии Когда все тесты InSpec завершатся, Chef InSpec проверяет обработчики отчетов, определенные в устаревшей кулинарной книге аудита или в текущем профиле InSpec, и обрабатывает их соответствующим образом.
Остановка, ожидание следующего запуска Когда все настроено и выполнение Chef Infra Client завершено, Chef Infra Client останавливается и ожидает, пока его снова не попросят запуститься.

© 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/run_lists/

Spec-Zone.ru

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