Spec-Zone.ru › Chef 16

chef-run (утилита)

[править на GitHub]

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/

Spec-Zone.ru

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