Skip to content

avito-tech/puppet-module-template

Repository files navigation

Шаблон Puppet модуля

В этом репозитории находится шаблон модуля, который мы в Авито используем в своей Puppet-инфраструктуре.

Выложен в ознакомительных целях к статье «Инфраструктура как Код в Авито: уроки, которые мы извлекли». Разработка ведётся внутри Авито, этот репозиторий будет поддерживаться по мере возможностей.

Структура репозитория

.
├── CHANGELOG.md
├── data                              # данные для hiera модуля
│   ├── common.yaml
│   └── distrib
├── docs
│   └── avito-coding-standards.md     # Coding-standards для модулей
├── files                             # файлы модуля
├── .fixtures.yml                     # фикстуры для puppet-rspec тестов
├── Gemfile                           # ruby-зависимости для работы с проектом
├── hiera.yaml                        # конфигурация hiera для модуля
├── .kitchen.yml                      # конфигурация test-kitchen
├── lib                               # сюда кладутся фактеры и паппет-функции, написанные на ruby
│   ├── facter
│   └── puppet
|       └──functions
├── manifests                         # директория для манифестов модуля
│   └── init.pp
├── metadata.json                     # файл с метаданными модуля (автор, зависимости, версия и т.п.)
├── .overcommit.yml                   # настройки для overcommit (инструмент для запуска git хуков)
├── Puppetfile                        # здесь описано, что зависимости следует указывать в metadata.json
├── Rakefile
├── README.md
├── .rubocop.yml                      # настройки ruby-линтера
├── spec                              # здесь находятся тесты
│   ├── acceptance
│   ├── classes
│   ├── default_facts.yml
│   ├── facters
│   ├── fixtures
│   ├── functions
│   └── spec_helper.rb
└── templates                         # шаблоны, которые использует этот модуль

Разработка модуля

Перед началом работы нужно установить все зависимости через bundler:

bundle install

Валидация кода

Проверка синтаксиса:

bundle exec rake validate

Запуск Puppet-линтера:

bundle exec rake lint

Запуск Ruby-линтера:

bundle exec rake rubocop

Настройки ruby линтера находятся в .rubocop.yml

Тестирование кода

Юнит-тестирование (rspec-puppet):

Юнит тесты находятся в директории spec/{classes,defines,functions}. Более подробно про юнит тесты можно прочитать по ссылкам:

Запуск юнит тестов:

bundle exec rake spec

Удаление фикстур:

bundle exec rake spec_clean

Подготовка фикстур:

bundle exec rake spec_prep

Acceptance тестирование (test-kitchen)

Acceptance тесты запускаются в Docker, настройки test-kitchen находятся в файле .kitchen.yml. Для запуска тестов потребуется собрать свой Docker образ из Dockerfile.acceptance и добавить его имя в конфигурацию test-kitchen.

Используется Kitchen Puppet.

Запуск acceptance тестов:

bundle exec kitchen test -t spec/acceptance

Тесты пишутся на inspec и помещаются в spec/acceptance/<suite_name>/*_spec.rb. С примером написанных acceptance тестов можно ознакомиться в репозитории avito-vault.

Генерация документации

Для документирования кода используется Puppet Strings.

Генерация REFERENCE.md из Puppet Strings:

bundle exec reake strings:reference

Настройка git-хуков

Для управления git-хуками используется overcommit. Настройки git-хуков находятся в .overcommit.yml.

Смотри также

Puppet module coding standards — стандарты кодирования для модулей в Avito

About

Шаблон Puppet модуля к статье «Инфраструктура как код в Авито: уроки которые мы извлекли»

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published