Настройка Knife
Утилита командной строки knife должна быть настроена для взаимодействия с сервером Chef Infra Server, а также с любой другой инфраструктурой в вашей организации. Это делается изначально во время настройки рабочей станции, но последующие изменения можно внести с помощью файла конфигурации config.rb.
Файл конфигурации config.rb
Knife настраивается с помощью файла конфигурации config.rb, который содержит настройки как для утилиты командной строки knife, так и для всех установленных плагинов knife. Полный список параметров конфигурации в файле config.rb см. в 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)
Примечание
%HOMEDRIVE%:%HOMEPATH%\.chef (например, c:\Users\<username>\.chef). Если этот путь нужно использовать в сценарии, используйте %USERPROFILE%\chef-repo\.chef.Конфигурация config.rb в репозитории Chef
Конфигурация 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']
Генерация файла config.rb
Команда knife knife configure может быть использована для генерации вашего начального файла конфигурации config.rb в вашем домашнем каталоге. Подробнее см. knife configure.
Профили Knife
Поддержка профилей начиная с Chef 13.7
Профили Knife предоставляют альтернативу использованию файлов config.rb для настройки вашего клиента knife. Это облегчает переключение между несколькими серверами Chef Infra или между несколькими организациями на одном сервере Chef Infra. Настройте профили knife, добавив их в файл .chef/credentials в вашем домашнем каталоге на вашей рабочей станции. Файл credentials имеет формат TOML. Каждый профиль перечислен как отдельная таблица с именем по вашему выбору, за которой следуют пары ключ-значение. Ключи соответствуют любому параметру, разрешенному в файле config.rb.
Пути файлов, такие как client_key или validator_key, будут относительными к ~/.chef, если не указаны абсолютные пути. Клиенты могут быть идентифицированы с помощью node_name или client_name, при этом client_name предпочтительнее.
Данные аутентификации для использования с режимом Target (например, chef-client --target switch.example.org) также могут быть сохранены в отдельном профиле в файле данных аутентификации. Имя профиля должно совпадать с именем DNS целевого узла и должно быть заключено в одинарные кавычки, если имя содержит точку. Например: ['switch.example.org']. Ключи, являющиеся допустимыми параметрами конфигурации, будут переданы в train, например, port.
# Example .chef/credentials file
[default]
node_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-----
MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp
wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5
1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh
3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2
pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVxx6xx2fvLi55/mbSYxECQQDeAw6fiIQX
GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il
AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF
L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k
X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl
U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ
37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0=
-----END RSA PRIVATE KEY-----
"""
validator_key = "test-validator.pem"
chef_server_url = "https://api.chef-server.dev/organizations/test"
['web.preprod']
node_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 могут быть управляемы командой knife config.
Вы можете вывести список своих профилей, используя команду 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
Настройка текстового редактора
Некоторые команды 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/