Настройка 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/