О списках выполнения
Список выполнения определяет всю информацию, необходимую 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-apply — встроенные в 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 Добавить элемент списка выполнения перед указанным элементом списка выполнения.
Примечание
Примеры
Следующие примеры демонстрируют использование этой подкоманды 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]'
Добавление рецепта с полным доменным именем
Для добавления рецепта в список выполнения с использованием полного квалифицированного формата введите:
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
Опции
У этой команды нет специфических опций.
Примечание
Примеры
Следующие примеры демонстрируют использование этой подкоманды 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.
Добавление рецепта
Для добавления роли или рецепта в список выполнения:
Откройте консоль управления Chef.
Нажмите Узлы.
Выберите узел.
Нажмите Изменить список выполнения.
-
В диалоговом окне Изменение списка выполнения узла перетащите роль или рецепт из списков Доступные роли или Доступные рецепты в текущий список выполнения.
Нажмите Сохранить список выполнения.
Добавление роли
Для добавления роли или рецепта в список выполнения:
Откройте консоль управления Chef.
Нажмите Узлы.
Выберите узел.
Нажмите Изменить список выполнения.
-
В диалоговом окне Изменение списка выполнения узла перетащите роль или рецепт из списков Доступные роли или Доступные рецепты в текущий список выполнения.
Нажмите Сохранить список выполнения.
Изменение узла
Для изменения списка выполнения:
- Откройте консоль управления Chef.
- Нажмите Узлы.
- Выберите узел.
- Нажмите Изменить список выполнения.
- В диалоговом окне Изменение списка выполнения узла внесите изменения.
- Нажмите Сохранить список выполнения.
Изменение роли
Для изменения списка выполнения роли:
Откройте консоль управления Chef.
Нажмите Политика.
Нажмите Роли.
Выберите роль.
-
Нажмите Изменить список выполнения.
Внесите изменения.
Нажмите Сохранить список выполнения.
Удаление рецепта
Для удаления роли или рецепта из списка выполнения:
Откройте консоль управления Chef.
Нажмите Узлы.
Выберите узел.
Нажмите Изменить список выполнения.
-
В диалоговом окне Изменение списка выполнения узла перетащите роль или рецепт из Текущий список выполнения в список доступных ролей или рецептов.
Нажмите Сохранить список выполнения.
Удаление роли
Для удаления роли или рецепта из списка выполнения:
Откройте консоль управления Chef.
Нажмите Узлы.
Выберите узел.
Нажмите Изменить список запуска.
-
В диалоговом окне Изменить список запуска узла перетащите роль или рецепт из Текущего списка запуска в список доступных ролей или рецептов.
Нажмите Сохранить список запуска.
Просмотр текущего
Чтобы просмотреть текущий список запуска для узла:
Откройте консоль управления Chef.
Нажмите Узлы.
Выберите узел.
Нажмите вкладку Подробности.
-
Текущий список запуска отображается в правом нижнем углу:
Просмотр узла
Чтобы просмотреть все узлы:
Откройте консоль управления Chef.
Нажмите Узлы.
Выберите узел.
Выберите вкладку Подробности.
-
Список запуска для узла отображается под заголовком Список запуска:
Примененные списки запуска
Список запуска сообщает 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.
На следующей диаграмме показаны этапы операции инициализации, а список ниже диаграммы описывает каждый из этих этапов более подробно.
Во время операции инициализации knife bootstrap происходит следующее:
| Этапы | Описание |
|---|---|
| knife bootstrap | Введите подкоманду knife bootstrap с рабочей станции. Включите имя хоста, IP-адрес или FQDN целевого узла в этой команде. Knife установит соединение SSH или WinRM с целевой системой и запустит скрипт инициализации. |
Получение скрипта установки с сайта Chef |
Скрипт оболочки запросит с сайта Chef самую последнюю версию скрипта установки Chef Infra Client ( |
| Получение пакета Chef Infra Client с сайта Chef | Скрипт установки затем собирает информацию о системе и определяет правильный пакет для Chef Infra Client, а затем загружает соответствующий пакет с omnitruck-direct.chef.io. |
| Установка Chef Infra Client | Chef Infra Client устанавливается на целевой узел с использованием системного пакета (.rpm, .msi и т. д.). |
Запуск выполнения Chef Infra Client |
На машинах на базе UNIX и Linux: второй скрипт оболочки выполняет бинарный файл На машинах Microsoft Windows: пакетный файл, полученный из шаблона bootstrap windows-chef-client-msi.erb, выполняет бинарный файл |
Завершение выполнения Chef Infra Client |
Запуск Chef Infra Client продолжается с использованием HTTPS (порт 443) и регистрирует узел на сервере Chef Infra. Первый запуск Chef Infra Client по умолчанию содержит пустой список запуска. Список запуска можно указать в рамках начальной операции инициализации с помощью параметра |
Запуск Chef Infra Client
«Запуск Chef Infra Client» — это термин, используемый для описания шагов, которые выполняет Chef Infra Client для настройки узла при запуске команды chef-client. На следующей диаграмме показаны различные этапы, происходящие во время запуска Chef Infra Client.
Во время каждого запуска Chef Infra Client происходит следующее:
| Этапы | Описание |
|---|---|
| Получение данных конфигурации | Chef Infra Client получает данные конфигурации процесса из файла client.rb на узле, а затем получает данные конфигурации узла из Ohai. Важной частью данных конфигурации является имя узла, которое находится в атрибуте node_name в файле client.rb или предоставляется Ohai. Если Ohai предоставляет имя узла, это обычно FQDN узла, который всегда уникален в организации. |
| Авторизация на сервере Chef Infra | Chef Infra Client авторизуется на сервере Chef Infra с использованием закрытого ключа RSA и API сервера Chef Infra. Имя узла требуется в процессе аутентификации на сервере Chef Infra. Если это первый запуск Chef Infra Client для узла, chef-validator будет использован для генерации закрытого ключа RSA. |
| Получение, перестройка объекта узла | Chef Infra Client загружает объект узла с сервера Chef Infra и затем перестраивает его. Объект узла состоит из системных атрибутов, обнаруженных Ohai, атрибутов, установленных в файлах политик или кулинарных книгах, и списка запуска кулинарных книг. При первом запуске Chef Infra Client на узле он создает объект узла из списка запуска по умолчанию. Узел, на котором еще не был запущен Chef Infra Client, не будет иметь объект узла или записи на сервере Chef Infra для объекта узла. При последующих запусках Chef Infra Client перестроенный объект узла также будет содержать список запуска из предыдущего запуска Chef Infra Client. |
| Расширение списка запуска | Chef Infra Client расширяет список запуска из перестроенного объекта узла и компилирует полный список рецептов в точном порядке их применения к узлу. |
| Синхронизация кулинарных книг | Chef Infra Client запрашивает все файлы кулинарных книг (включая рецепты, шаблоны, ресурсы, поставщики, атрибуты и библиотеки), которые ему необходимы для каждого действия, определенного в списке запуска, с сервера Chef Infra. Сервер Chef Infra отвечает Chef Infra Client полным списком файлов. Chef Infra Client сравнивает список файлов с файлами, которые уже существуют на узле с предыдущих запусков, а затем загружает копию каждого нового или измененного файла с сервера Chef Infra. |
| Сброс атрибутов узла | Все атрибуты в перестроенном объекте узла сбрасываются. Все атрибуты из файлов атрибутов, файлов политик и Ohai загружаются. Атрибуты, определенные в файлах атрибутов, сначала загружаются в соответствии с порядком кулинарных книг. Для каждой кулинарной книги атрибуты в файле default.rb загружаются в первую очередь, а затем дополнительные файлы атрибутов (если они есть) загружаются в лексикографическом порядке. Если файлы атрибутов находятся в каких-либо кулинарных книгах, указанных в качестве зависимостей в файле metadata.rb, они также загружаются. Все атрибуты в перестроенном объекте узла обновляются данными атрибутов в соответствии с приоритетом атрибутов. После обновления всех атрибутов перестроенный объект узла завершается. |
| Компиляция коллекции ресурсов | Chef Infra Client идентифицирует каждый ресурс в объекте узла и создает коллекцию ресурсов. Библиотеки загружаются в первую очередь, чтобы обеспечить доступность всех расширений языка и классов Ruby для всех ресурсов. Затем загружаются атрибуты, а затем — пользовательские ресурсы. Наконец, все рецепты загружаются в порядке, заданном расширенным списком запуска. Это также называется «фазой компиляции». |
| Конвергенция узла | Chef Infra Client настраивает систему на основе собранной информации. Каждый ресурс выполняется в порядке, определенном списком запуска, а затем в порядке, в котором каждый ресурс перечислен в каждом рецепте. Каждый ресурс определяет действие для выполнения, которое настраивает определенную часть системы. Этот процесс также называется конвергенцией. Это также называется «фазой выполнения». |
Обновление объекта узла, обработка исключений и обработчики отчетов |
Когда все действия, определенные ресурсами в коллекции ресурсов, выполнены, и Chef Infra Client успешно завершается, тогда Chef Infra Client обновляет объект узла на сервере Chef Infra с объектом узла, созданным во время запуска Chef Infra Client. (Этот объект узла будет загружен Chef Infra Client во время следующего запуска Chef Infra Client.) Это делает объект узла (и данные в объекте узла) доступным для поиска. Chef Infra Client всегда проверяет коллекцию ресурсов на наличие обработчиков исключений и отчетов. Если они присутствуют, каждый из них обрабатывается должным образом. |
| Остановка, ожидание следующего запуска | После завершения всех настроек и запуска Chef Infra Client, Chef Infra Client останавливается и ожидает следующего запроса на запуск. |
Порядок оценки атрибутов
Клиент 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/run_lists/