chef-run (утилита)
chef-run — это инструмент для выполнения задач ad-hoc на одном или нескольких целевых узлах с помощью Chef Infra Client. Для начала ознакомьтесь с аргументами и флагами chef-run, выполнив chef-run -h.
Применение ресурса к одному узлу через SSH
В самом простом случае chef-run нацеливается на одну машину и выполняет один ресурс на этой машине:
chef-run ssh://my_user@host1:2222 directory /tmp/foo --identity-file ~/.ssh/id_rsa
SSH — это протокол по умолчанию. При использовании SSH, chef-run пытается прочитать значения по умолчанию из вашего файла ~/.ssh/config. Учитывая следующую конфигурацию SSH:
Host host1
IdentityFile /Users/me/.ssh/id_rsa
User my_user
Port 2222
Вы можете указать команду chef-run как:
chef-run host1 directory /tmp/foo
Чтобы использовать аутентификацию по паролю вместо файла ключа, укажите пароль как часть информации о подключении или с помощью флага командной строки:
chef-run my_user:a_password@host1:2222 directory /tmp/foo
chef-run my_user@host1:2222 directory /tmp/foo --password a_password
Применение ресурса к одному узлу через WinRM
Для нацеливания на WinRM вы должны указать протокол winrm как часть информации о подключении:
chef-run 'winrm://my_user:my_p4ssword!@host' directory /tmp/foo
Подключения WinRM поддерживают только аутентификацию по паролю. Предоставьте имя пользователя и пароль, как показано в примере, или с помощью флагов --user и --password.
Подключения HTTPS поддерживаются с помощью флага --ssl.
chef-run через WinRM не поддерживает аутентификацию на основе сертификатов для целевых хостов.
Указание свойств и действий ресурса
Вы можете указать все ресурсы Chef Infra в командной строке. Введите команду chef-run первой, затем тип ресурса во втором месте, а имя ресурса — в третьем. Например:
chef-run host1 group awesome_group
Эта команда указывает ресурс group с именем awesome_group. Для указания свойств и действий используйте синтаксис key=value:
chef-run host1 group awesome_group gid=1001
chef-run host1 user super_person gid=1001 'password=complex=p@ssword!!'
chef-run host1 user super_person action=remove
См. документацию для каждого ресурса, чтобы увидеть доступные свойства для настройки. Как показано в предыдущем примере, вы можете заключить пару key=value в кавычки, если значение содержит символ, который будет интерпретирован оболочкой.
Выполнение рецепта
Чтобы выполнить весь рецепт, укажите рецепт с помощью его пути:
chef-run host1 /path/to/recipe.rb
chef-run host1 recipe.rb
Если ваш рецепт находится в кулинарной книге, вы также можете указать эту кулинарную книгу:
chef-run host1 /cookbooks/my_cookbook/recipes/default.rb
chef-run host1 /cookbooks/my_cookbook
Если вы укажете путь к кулинарной книге, chef-run выполнит рецепт по умолчанию из кулинарной книги на целевом узле.
chef-run также поддерживает поиск вашей кулинарной книги в локальном хранилище кулинарных книг. Предполагая, что ваше хранилище кулинарных книг находится в /cookbooks, запустите:
cd /cookbooks
chef-run host1 my_cookbook
chef-run host1 my_cookbook::non_default_recipe
::recipe_name сообщает chef-run выполнить рецепт, отличный от значения по умолчанию. chef-run читает ваш локальный файл конфигурации Chef Workstation ~/.chef-workstation/config.toml и файл конфигурации Chef ~/.chef/config.rb. Он ищет кулинарные книги в путях, указанных в обоих файлах. Значение конфигурации — массив, примерно такого вида:
Для ~/.chef-workstation/config.toml:
[chef]
cookbook_repo_paths = [
"/path/1",
"/path/b"
]
и для ~/.chef/config.rb:
cookbook_path ['/path/1', '/path/b']
Если вы запустите chef-run host1 my_cookbook и в текущем каталоге нет кулинарной книги с именем my_cookbook, chef-run ищет в конфигурированных путях, при этом пути, настроенные в ~/.chef-workstation/config.toml, имеют приоритет над путями в ~/.chef/config.rb.
Для указания путей поиска в качестве аргументов командной строки вместо использования файла конфигурации используйте:
chef-run host1 my_cookbook --cookbook-repo-paths '/path/1,/path/b'
Настройка зависимостей и источников кулинарных книг
При слиянии целевого узла chef-run создаёт пакет файла правил, который включает указанную кулинарную книгу. Если у указанной кулинарной книги есть собственный Policyfile.rb, он будет соблюдаться.
В вашем файле metadata.rb:
name "really_complicated"
...
depends "pretty_simple"
В вашем файле Policyfile.rb:
name "really_complicated"
default_source :supermarket
default_source :chef_repo, "../"
run_list "really_complicated::first"
cookbook "pretty_simple"
В вашем файле recipes/first.rb
log "lets include some stuff"
include_recipe "pretty_simple::second"
Выполнение chef-run host1 really_complicated::first сначала собирает все зависимости кулинарной книги really_complicated (pretty_simple) в подготовка к слиянию целевого узла. При выполнении на этом узле рецепт first находит свою локальную зависимость от кулинарной книги pretty_simple и затем выполняет свой рецепт second.
Вы можете указать разные источники кулинарных книг в Policyfile.rb, включая частный супермаркет. См. документацию по файлу правил (Policyfile) для примеров.
Подключение к Automate 2
Вы можете настроить удаленные узлы, управляемые chef-run, для отправки информации о выполнении в Automate. Сначала сгенерируйте маркер аутентификации.
Затем добавьте маркер в config.toml, указав соответствующий URL и маркер для сервера Automate:
[data_collector]
url="https://127.0.0.1/data-collector/v0/"
token="abc123="
Целевые узлы должны иметь сетевой доступ к порту 443 экземпляра Automate для отправки chef-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/workstation/chef_run/