Настройка 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-репозиторий, позволяя пользователям загружать разные файлы config.rb в зависимости от того, из какого chef-репозитория они выполняют команды. Это особенно полезно, когда каждый chef-репозиторий указывает на другой сервер 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. Это упрощает переключение 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/knife_setup/