Я интегрирую тесты rspec-puppet в наш кукольный проект и пытаюсь автоматически сгенерировать "следует скомпилировать " спецификации для всех хостов (и в конечном итоге, возможно, другой ресурс). Это делается для того, чтобы все, по крайней мере, успешно скомпилировалось.
Учитывая список узлов, я могу сделать это:
hosts.each do |host|
describe host, type: :host do
it { should compile }
end
end
Проблема в том, как на самом деле получить список хостов. Я могу использовать регулярное выражение для анализа файлов узлов, но это, очевидно, приводит к безумие... Поскольку гем puppet уже присутствует и используется для загрузки каталогов гемом rspec-puppet, могу ли я использовать его для получения списка хостов?
РЕДАКТИРОВАТЬ:
В конце концов мне удалось сделать это с помощью системы puppet pops но я не уверен, что это лучший способ сделать это или есть какая-то абстракция более высокого уровня, которую было бы проще использовать:
require 'spec_helper'
require 'puppet/pops'
code_dirs = [RSpec.configuration.module_path, RSpec.configuration.manifest_dir]
definitions =
Dir["{#{code_dirs.join(',')}}/**/*.pp"].
map {|file| Puppet::Pops::Parser::Parser.new.parse_file file}.
flat_map {|parsed_manifest| parsed_manifest.definitions}
hosts = definitions.
select {|definition| definition.is_a? Puppet::Pops::Model::NodeDefinition}.
flat_map {|node_definition| node_definition.host_matches}.
select {|host_match| host_match.is_a? Puppet::Pops::Model::LiteralString}.
map {|string_host_match| string_host_match.value}
classes = definitions.
select {|definition| definition.is_a? Puppet::Pops::Model::HostClassDefinition}.
map {|host_class_definition| host_class_definition.name}
hosts.each do |host|
describe host, type: :host do
it {should compile}
end
end
classes.each do |klass|
describe klass, type: :class do
it {should compile}
end
end
rake smoke:generate
с всплывающими окнами, как в опубликованном мной примере, чтобы создать простые файлы спецификацийshould compile
для каждого класса, хоста и определения в папкеspec/smoke
. По крайней мере, это должно помочь нам остановить коммит кода, который даже не компилируется. Я думаю, что octocatalog может помочь, как они упоминают, посмотреть, что нового в каталоге, прежде чем запускать его на реальных хостах. Интеграционные тесты с Beaker & Friends скоро появятся. - person eirc   schedule 15.09.2017