Это пример control-repo для puppet с тестами.
Чтобы попробовать, вам надо выполнить следующие команды находясь в корне этого репозитория:
bundle install
bundle exec r10k puppetfile install
Чтобы проверить что у вас работают тесты, вам надо запустить команду:
bundle exec rspec spec/hosts/ spec/classes/
- Репозиторий склонирован с каноничного https://github.com/puppetlabs/control-repo
- Для тестов используется https://github.com/rodjek/rspec-puppet
Puppetfile
- файл, в котором вы указываете какие puppet модули подключать.Gemfile
- какие gem использовать.spec/spec_helper.rb
- основа всех тестов. Самое главное - пути, если их настроить не правильно, ничего работать не будет:
RSpec.configure do |c|
c.module_path = File.join(base_dir, 'fixtures/modules') + ':' + File.join(base_dir, '../modules') + ':' + File.join(base_dir, '../site')
puts c.module_path
c.manifest = File.join('manifests', 'site.pp')
c.hiera_config = File.join(base_dir, '../hiera.yaml')
c.default_facts = YAML.load_file File.join(base_dir, '/default_facts.yaml')
end
spec/default_facts.yaml
- дефолтные факты, которые пригодятся при тестировании.- Сами тесты кладутся в директории:
spec/classes
- тесты классовspec/hosts
- тесты хостовspec/defines
- тесты определенийspec/functions
- тесты ваших функций
spec/fixtures
- сюда можно положить файлы (классы), которые, например, отсутсвуют в вашем репозитории, в моем случае это файл с секретами.- В файле
manifests/site.pp
заведен специальный хост обманка для тестов
node this.is.only.used.for.unit.tests { }
, чтобы тесты не пытались вытащить определение для дефолтной ноды.
Осталось раскрыть вопрос что делать, если у вас уже 500 профилей и 1000 нод, а тестов для них нет.
И я могу рассказать что делал я.
Есть отличная программа, которая выполнит за вас 80% работы по написанию тестов к уже существующим классам: https://github.com/nwops/puppet-retrospec , достаточно написать обертку над ней и использовать ее, что я и сделал.
У меня сейчас тестируется 45 уникальных хостов из 400 (да, всего 10%, но это самые важные 10%) и 54 класс из 500.
Конечно вручную все это запускать не интересно, надо автоматизировать.
Для этого я использую GitLab.
Посмотрите в файл .gitlab-ci.yml
, там не большой пример как это можно сделать.
И да, есть следующий уровень тестирования, который подходит уже и для тех, у кого не паппет, и для тех, у кого паппет, но хочет заморочиться.
Это https://serverspec.org, он позволяет сходить на сервер и проверить, что там все действительно так, как описано в файле конфигурации.
Или https://github.com/aelsabbahy/goss, который может сначала сформировать файл конфигурации из существующиего сервера, а потом тестировать что оно соответствует ему. И для него все равно чем вы наливаете сервер.
Есть еще и другие инструменты тестирования стейта сервера, это те, которые мне пришли сразу на ум.