О репозитории chef-repo
chef-repo — это каталог на вашей рабочей станции, который хранит всё необходимое для определения вашей инфраструктуры с помощью Chef Infra:
- Кухни (включая рецепты, атрибуты, пользовательские ресурсы, библиотеки и шаблоны)
- Мешки данных
- Policyfiles
Каталог chef-repo должен быть синхронизирован с системой управления версиями, например, git. Все данные в chef-repo должны рассматриваться как исходный код.
Вы будете использовать команды chef и knife для загрузки данных на сервер Chef Infra из каталога chef-repo. После загрузки Chef Infra Client использует эти данные для управления узлами, зарегистрированными на сервере Chef Infra, и для обеспечения применения правильных кук, policyfiles и настроек к правильным узлам в правильном порядке.
Структура каталогов
chef-repo содержит несколько каталогов, каждый из которых имеет файл README, описывающий его назначение и способ использования при управлении системами.
Подкаталоги в chef-repo:
| Каталог | Описание |
|---|---|
.chef/ |
Скрытый каталог, используемый для хранения файлов ключей валидации и, необязательно, файла config.rb. |
cookbooks/ |
Содержит кухни, загруженные из Chef Supermarket или созданные локально. |
data_bags/ |
Хранит мешки данных (и элементы мешков данных) в формате JSON (.json). |
policyfiles/ |
Хранит Policyfiles в формате Ruby (.rb). |
.chef/
Каталог .chef — это скрытый каталог, используемый для хранения файлов ключей валидации и, необязательно, файла config.rb.
cookbooks/
Каталог cookbooks/ используется для хранения кук, которые Chef Infra Client использует при настройке различных систем в организации. Этот каталог содержит кухни, используемые для настройки систем в инфраструктуре. Каждая кухня может быть настроена для хранения данных о копирайтах, электронной почте и лицензиях, специфичных для этой кухни.
data_bags/
Каталог data_bags/ используется для хранения всех мешков данных, существующих для организации. Каждый подкаталог соответствует одному мешку данных на сервере Chef Infra и содержит файл JSON для каждого элемента мешка данных. Если подкаталог не существует, создайте его с помощью команд SSL. После создания элемента мешка данных его можно загрузить на сервер Chef Infra.
policyfiles/
Каталог policyfiles/ используется для хранения Policyfiles, которые определяют набор кук и атрибутов, которые необходимо применить к определённым системам, управляемым сервером Chef Infra.
Файлы chefignore
Файл chefignore используется для указания knife, какие файлы кук в chef-repo следует игнорировать при загрузке данных на сервер Chef Infra. К такому типу данных относятся файлы подкачки, данные системы управления версиями, данные выходных данных сборки и т. д. Файл chefignore использует синтаксис Ruby File.fnmatch для определения шаблонов игнорирования, используя *, **, и ? шаблоны подстановки.
- Шаблон относит к корню кухни
- Шаблон может содержать имена относительных каталогов
- Шаблон может соответствовать всем файлам в каталоге
Файл chefignore может находиться в любом подкаталоге chef-repo: /, /cookbooks, /cookbooks/COOKBOOK_NAME/, и т. д. Он должен содержать разделы, похожие на следующие:
## section
*ignore_pattern
## section
ignore_pattern*
## section
**ignore_pattern
## section
ignore_pattern**
## section
?ignore_pattern
## section
ignore_pattern?
Примеры
Следующие примеры показывают, как добавлять записи в файл chefignore.
Игнорирование файлов подкачки редактора
Многие текстовые редакторы оставляют файлы. Чтобы предотвратить загрузку этих файлов на сервер Chef Infra, добавьте запись в файл chefignore. Для Emacs сделайте что-то вроде:
*~
а для vim, что-то вроде:
*.sw[a-z]
Игнорирование данных Subversion верхнего уровня
Если вы используете Subversion как систему контроля версий, важно не загружать определенные файлы, которые Subversion использует для ведения истории каждой версии файла. Это связано с тем, что Chef Infra Client никогда не будет использовать их при настройке узлов, а также объем данных в загрузке, включающей данные Subversion верхнего уровня, может быть значительным.
Чтобы предотвратить загрузку данных Subversion верхнего уровня, добавьте что-то подобное в файл chefignore:
*/.svn/*
Чтобы проверить, что данные Subversion верхнего уровня не загружаются на сервер Chef Infra, используйте knife и выполните команду, подобную следующей:
knife cookbook show name_of_cookbook cookbook_version | grep .svn
Игнорирование всех файлов в каталоге
Файл chefignore можно использовать для игнорирования всех файлов в каталоге. Например:
files/default/subdirectory/*
или:
files/default/subdirectory/**
Несколько пользователей, один репозиторий
Настройка 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-repo
Используйте команду chef generate repo для создания каталога chef-repo вместе с основной структурой папок. Эта команда использует инструмент командной строки chef, который входит в состав Chef Workstation, для создания chef-repo.
chef generate repo REPO_NAME
Примечание
--roles при выполнении команды.
© 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/chef_repo/