Есть несколько шагов в зависимости от того, насколько сложны тесты, какие части тестируются и, конечно же, сколько времени потребуется для выполнения тестов.
Для модульного тестирования мы используем rspec puppet и можем проверить, что наши манифесты и модули компилируются и содержат ожидаемые значения. Его можно использовать для проверки того, что конкретные типы, классы или определения находятся в скомпилированном каталоге и что параметры соответствуют ожиданиям.
Позже мы можем провести некоторое интеграционное тестирование, запустив новую виртуальную машину с Vagrant и проверив, нет ли ошибок при инициализации, а также проверив, что некоторые условия выполнены.
Для rspec-puppet PuppetLabs создала проект под названием puppetlabs_spec_helper, который позволит нам не писать кучу шаблонов. Недостатком является то, что он позволяет использовать только модули для тестирования из git. Если вы уже используете librarian-puppet (и вам следует!), Вы можете легко использовать один и тот же Puppetfile для развертывания модулей и их тестирования. В противном случае звучит как бесполезное тестирование, вы можете закончить разными версиями на разных машинах разработки, CI-сервере, мастере кукол… Так что просто добавьте в библиотеку rakefile вызов библиотекаря puppet, чтобы заполнить фиксации rspec-puppet, прежде чем запускать спецификации. ,
К сожалению, rspec-puppet не работает с Puppet 3.0.x, и требуется как минимум Puppet 3.1.0-rc1. Это было немного неудачно, когда мы перешли на Puppet 3 и начали использовать hiera , который оказывается очень полезным, когда у нас есть более простые манифесты и внешние данные, вводимые для наших установок Maestro с Puppet с нуля.
Вы также можете использовать тот же Puppetfile для запуска Vagrant-боксов с точно такой же версией модулей. Мы используем Cucumber и Aruba для выполнения vagrant, обеспечения виртуальной машины марионеткой и проверки нескольких вещей, таких как открытые порты, сервисы,… но это другая история
пример
В этом проекте puppet-for-java-devs вы найдете фрагменты, которые демонстрируют все эти интегрированные инструменты. Он включает в себя определение трехуровневой системы с определениями Puppet для базы данных postgresql, узлов tomcat с установленной войной и узлов apache, стоящих перед ними.
Установите все необходимые драгоценные камни
bundle install
Установите все модули Puppet с помощью Puppet Librarian
librarian-puppet install
Запустите спецификации с Puppet-rspec
bundle exec rake
Начать все VMS с Vagrant
vagrant up
Rakefile
require 'bundler' Bundler.require(:rake) require 'rake/clean' require 'puppetlabs_spec_helper/rake_tasks' CLEAN.include('modules', 'spec/fixtures/', 'doc') CLOBBER.include('.tmp', '.librarian') task :librarian_spec_prep do sh "librarian-puppet install" end task :spec_prep => :librarian_spec_prep task :default => [:spec]
Кукольный файл для библиотекаря-кукольный
forge 'http://forge.puppetlabs.com' mod 'puppetlabs/java', '0.1.6' mod 'puppetlabs/apache', '0.4.0' mod 'inkling/postgresql', '0.2.0' mod 'puppetlabs/firewall', '0.0.4' mod 'tomcat', :git => 'https://github.com/carlossg/puppet-tomcat.git', :ref => 'centos' mod 'maestrodev/maven', '1.x' mod 'stahnma/epel', '0.0.2' mod 'maestrodev/avahi', '1.x' mod 'other', :path => 'mymodules/other'
tomcat_spec.rb с rspec-puppet
require 'spec_helper' describe 'tomcat1.acme.com' do let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'CentOS', :operatingsystemrelease => 6.3} } it { should contain_class('java').with_distribution /openjdk/ } it "configure webapp" do should contain_maven('/srv/tomcat/appfuse/webapps/ROOT.war') should contain_maven('/srv/tomcat/appfuse/webapps/ROOT/WEB-INF/lib/postgresql-9.1-901.jdbc4.jar') end end
Vagrantfile
Vagrant::Config.run do |config| config.vm.box = "CentOS-6.3-x86_64-minimal" config.vm.box_url = "https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box" config.vm.customize ["modifyvm", :id, "--rtcuseutc", "on"] # use UTC clock https://github.com/mitchellh/vagrant/issues/912 # db server config.vm.define :db do |config| config.vm.host_name = "db.acme.local" config.vm.customize ["modifyvm", :id, "--name", "db"] # name for VirtualBox GUI config.vm.forward_port 5432, 5432 config.vm.network :hostonly, "192.168.33.10" config.vm.provision :puppet do |puppet| puppet.module_path = "modules" puppet.manifest_file = "site.pp" end end # tomcat server config.vm.define :tomcat1 do |config| config.vm.host_name = "tomcat1.acme.local" config.vm.customize ["modifyvm", :id, "--name", "tomcat1"] # name for VirtualBox GUI config.vm.forward_port 8080, 8081 config.vm.network :hostonly, "192.168.33.11" config.vm.provision :puppet do |puppet| puppet.module_path = "modules" puppet.manifest_file = "site.pp" end end # web server config.vm.define :www do |config| config.vm.host_name = "www.acme.local" config.vm.customize ["modifyvm", :id, "--name", "www"] # name for VirtualBox GUI config.vm.forward_port 80, 8080 config.vm.network :hostonly, "192.168.33.12" config.vm.provision :puppet do |puppet| puppet.module_path = "modules" puppet.manifest_file = "site.pp" end end end