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