Настройка Knife
knife — это командная утилита, которая обеспечивает интерфейс между локальным chef-repo и сервером Chef Infra. Командная утилита knife должна быть настроена для взаимодействия с сервером Chef Infra, а также с любой другой инфраструктурой в вашей организации.
Для настройки knife для взаимодействия с сервером Chef Infra в первый раз выполните knife configure для создания файла учетных данных Chef Infra в ~/.chef/credentials.
Предыдущие настройки Chef Infra рекомендовали настройку knife с файлом config.rb. Настройка knife с config.rb всё ещё действительна, но только для работы с одним сервером Chef Infra и одной организацией Chef Infra.
mkdir ~/.chef
touch ~/.chef/config.rb
New-Item -Path "c:\" -Name ".chef" -ItemType "directory"
New-Item -ItemType "file" -Path "c:\.chef\config.rb"
Конфигурация config.rb может включать произвольный код Ruby для расширения конфигурации за пределами статических значений. Это может использоваться для загрузки переменных окружения с рабочей станции. Это позволяет написать один файл config.rb, который может использоваться всеми пользователями в вашей организации. Этот единственный файл также может быть добавлен в ваш chef-repo, что позволит пользователям загружать разные файлы config.rb в зависимости от того, из какого chef-repo они выполняют команды. Это особенно полезно, когда каждый chef-repo указывает на другой сервер Chef или организацию.
Пример config.rb:
current_dir = File.dirname(__FILE__)
user = ENV['CHEF_USER'] || ENV['USER']
node_name user
client_key "#{ENV['HOME']}/chef-repo/.chef/#{user}.pem"
chef_server_url "https://api.opscode.com/organizations/#{ENV['ORGNAME']}"
syntax_check_cache_path "#{ENV['HOME']}/chef-repo/.chef/syntax_check_cache"
cookbook_path ["#{current_dir}/../cookbooks"]
cookbook_copyright "Your Company, Inc."
cookbook_license "Apache-2.0"
cookbook_email "cookbooks@yourcompany.com"
# Amazon AWS
knife[:aws_access_key_id] = ENV['AWS_ACCESS_KEY_ID']
knife[:aws_secret_access_key] = ENV['AWS_SECRET_ACCESS_KEY']
Поддержка профилей с Chef 13.7
Профили Knife упрощают переключение между серверами Chef Infra или между организациями на одном сервере Chef Infra. Профили Knife — это альтернатива config.rb — вы не можете использовать их оба.
Настройте профили knife, добавив их в файл .chef/credentials в вашем домашнем каталоге на вашей рабочей станции. Файл credentials имеет формат TOML. Каждый профиль перечислен как отдельная таблица с именем вашего выбора и сопровождается key = value парами. Ключи соответствуют любому параметру, разрешённому в файле config.rb.
Пути к файлам, такие как client_key или validator_key, являются относительными по отношению к ~/.chef , если вы не предоставили абсолютный путь. Определите клиентов с помощью client_name (предпочтительно) или node_name.
Сохраните данные учетных данных для использования в режиме целевого сервера (chef-client --target switch.example.org) в качестве отдельного профиля в файле учетных данных. Используйте имя DNS целевого сервера в качестве имени профиля и заключите его в одинарные кавычки, если имя содержит точку. Например: ['switch.example.org']. Ключи, являющиеся допустимыми параметрами конфигурации, передаются в train, такие как port.
# Example .chef/credentials file
[default]
client_name = "barney"
client_key = "barney_rubble.pem"
chef_server_url = "https://api.chef.io/organizations/bedrock"
# a 'config context' such as knife can be is configured as a separate table
[default.knife]
ssh_user = 'ubuntu' # this would have been knife[:ssh_user] in your config.rb
aws_profile = 'engineering'
use_sudo = true
# a client_key may also be specified inline as in this example
[dev]
client_name = "admin"
client_key = """
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCqGKukO1De7zhZj6EXAMPLEKEY
...ABC123=
-----END RSA PRIVATE KEY-----
"""
validator_key = "test-validator.pem"
chef_server_url = "https://api.chef-server.dev/organizations/test"
['web.preprod']
client_name = "brubble"
client_key = "preprod-brubble.pem"
chef_server_url = "https://preprod.chef-server.dev/organizations/preprod"
['switch.example.org']
user = "cisco"
password = "cisco"
enable_password = "cisco"
Существует четыре способа выбрать используемый профиль, упорядоченные по приоритету:
- Передайте параметр
--profileкоманде knife, напримерknife node list --profile dev. - Установите имя профиля в переменной окружения
CHEF_PROFILE. - Запишите имя профиля в файл
~/.chef/context. - В противном случае knife использует профиль «default».
Настройка Knife
Поддержка knife config с Chef 14.4
Используйте команду knife config для управления вашими профилями knife.
Перечислите свои профили с помощью команды knife config list-profiles.
Например:
knife config list-profiles
Возвращает что-то вроде:
## Profile Client Key Server
default barney ~/.chef/barney_rubble.pem https://api.chef.io/organizations/bedrock
dev admin ~/.chef/admin.pem https://api.chef-server.dev/organizations/test
web.preprod brubble ~/.chef/preprod-brubble.pem https://preprod.chef-server.dev/organizations/preprod
switch.example.org btm ~/.chef/btm.pem https://localhost:443
Строка, начинающаяся со звездочки, является текущим выбранным профилем. Для изменения текущего профиля выполните команду knife config use-profile NAME, которая запишет имя профиля в файл ~/.chef/context.
Выполнение knife config get-profile выводит имя текущего выбранного профиля.
Если вам нужно устранить неполадки с настройками, вы можете проверить значение, используемое knife, с помощью команды knife config get KEY, например:
knife config get chef_server_url
Loading from credentials file /home/barney/.chef/credentials
chef_server_url: https://api.chef-server.dev/organizations/test
Файл конфигурации config.rb
Файл config.rb содержит настройки для командной утилиты knife и всех установленных плагинов knife. См. документацию config.rb для получения полного списка параметров конфигурации.
Приоритет пути загрузки
Файл config.rb загружается каждый раз при вызове команды knife в следующем порядке загрузки:
- Из указанного места с флагом
--config - Из указанного места с переменной окружения
$KNIFE_HOME, если она установлена - Из файла
config.rbв текущем рабочем каталоге, например,./config.rb - Из файла
config.rbв каталоге.chefв текущем рабочем каталоге, например,./.chef/config.rb - Из файла
config.rbв каталоге.chef, расположенном на один каталог выше текущего рабочего каталога, например,../.chef/config.rb - Из
~/.chef/config.rb(платформы macOS и Linux) илиc:\Users\<username>\.chef(платформа Microsoft Windows)
Примечание
config.rb расположен по адресу: %HOMEDRIVE%:%HOMEPATH%\.chef (например, c:\Users\<username>\.chef). В скрипте для Microsoft Windows используйте: %USERPROFILE%\chef-repo\.chef. Конфигурация config.rb в репозитории Chef
Используйте команду knife configure для генерации вашего начального файла config.rb в вашем домашнем каталоге. См. knife configure для получения подробностей.
Настройка текстового редактора
Некоторые команды knife, такие как knife data bag edit, требуют редактирования информации как данных JSON с помощью текстового редактора. Например, следующая команда:
knife data bag edit admins admin_name
открывает текстовый редактор с данными, похожими на:
{
"id": "admin_name"
}
Затем внесите изменения в этот файл:
{
"id": "Justin C."
"description": "I am passing the time by letting time pass over me ..."
}
Тип текстового редактора, используемого knife, можно настроить, добавив запись в ваш файл config.rb или установив переменную окружения EDITOR. Например, для настройки knife на открытие текстового редактора vim добавьте следующее в ваш файл config.rb:
knife[:editor] = "/usr/bin/vim"
Когда путь к файлу в Microsoft Windows заключён в двойные кавычки (« «), тот же обратный слэш (\) , который используется для определения разделителя пути к файлу, также используется в Ruby для определения управляющего символа. Файл config.rb — это файл Ruby; поэтому разделители пути к файлам должны быть экранированы. Кроме того, пробелы в пути к файлу должны быть заменены на ~1 , чтобы длина каждого раздела в пути к файлу не превышала 8 символов. Например, если выбранным текстовым редактором является EditPad Pro и он расположен по следующему пути:
C:\\Program Files (x86)\EditPad Pro\EditPad.exe
настройка в файле config.rb будет похожей на:
knife[:editor] = "C:\\Progra~1\\EditPa~1\\EditPad.exe"
Один из способов обойти проблему с двойными и одинарными кавычками — поместить одинарные кавычки снаружи двойных. Например, для Notepad++:
knife[:editor] = '"C:\Program Files (x86)\Notepad++\notepad++.exe" -nosession -multiInst'
для Sublime Text:
knife[:editor] = '"C:\Program Files\Sublime Text 2\sublime_text.exe" --wait'
для TextPad:
knife[:editor] = '"C:\Program Files (x86)\TextPad 7\TextPad.exe"'
и для vim:
knife[:editor] = '"C:\Program Files (x86)\vim\vim74\gvim.exe"'
Использование кавычек
Команда текстового редактора не может содержать пробелы, которые не заключены в кавычки. Команда может быть введена с двойными кавычками (« «) или одинарными кавычками (' ‘), но это должно делаться последовательно, как показано в примерах выше.
© 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/knife_setup/