Rakefile in puppet-strings-2.3.1 vs Rakefile in puppet-strings-2.4.0

- old
+ new

@@ -1,6 +1,41 @@ -require 'puppet_litmus/rake_tasks' if Bundler.rubygems.find_name('puppet_litmus').any? +if Bundler.rubygems.find_name('puppet_litmus').any? + require 'puppet_litmus/rake_tasks' + + # This is a _really_ horrible monkey-patch to fix up https://github.com/puppetlabs/bolt/issues/1614 + # Based on resolution https://github.com/puppetlabs/bolt/pull/1620 + # This can be removed once this is fixed, released into Bolt and into Litmus + require 'bolt_spec/run' + module BoltSpec + module Run + class BoltRunner + class << self + alias_method :original_with_runner, :with_runner + end + + def self.with_runner(config_data, inventory_data) + original_with_runner(deep_duplicate_object(config_data), deep_duplicate_object(inventory_data)) { |runner| yield runner } + end + + # From https://github.com/puppetlabs/pdk/blob/master/lib/pdk/util.rb + # Workaround for https://github.com/puppetlabs/bolt/issues/1614 + def self.deep_duplicate_object(object) + if object.is_a?(Array) + object.map { |item| deep_duplicate_object(item) } + elsif object.is_a?(Hash) + hash = object.dup + hash.each_pair { |key, value| hash[key] = deep_duplicate_object(value) } + hash + else + object + end + end + end + end + end +end + require 'puppetlabs_spec_helper/tasks/fixtures' require 'bundler/gem_tasks' require 'puppet-lint/tasks/puppet-lint' require 'rspec/core/rake_task' @@ -23,57 +58,10 @@ sh "erb -P -x -T '-' #{template} | ruby -c" end end namespace :litmus do - # Install the puppet module fixture on a collection of nodes - # - # @param :target_node_name [Array] nodes on which to install a puppet module for testing. - desc 'install_module_fixtures - build and install module fixtures' - task :install_module_fixtures, [:target_node_name] do |_task, args| - inventory_hash = inventory_hash_from_inventory_file - target_nodes = find_targets(inventory_hash, args[:target_node_name]) - if target_nodes.empty? - puts 'No targets found' - exit 0 - end - include BoltSpec::Run - require 'pdk/module/build' - - module_fixture_dir = File.expand_path(File.join(File.dirname(__FILE__), 'spec', 'fixtures', 'acceptance', 'modules', 'test')) - module_tar = nil - Dir.chdir(module_fixture_dir) do - opts = {} - opts[:force] = true - builder = PDK::Module::Build.new(opts) - module_tar = builder.build - puts 'Built' - module_tar = Dir.glob('pkg/*.tar.gz').max_by { |f| File.mtime(f) } - raise "Unable to find package in 'pkg/*.tar.gz'" if module_tar.nil? - module_tar = File.expand_path(module_tar) - end - - target_string = if args[:target_node_name].nil? - 'all' - else - args[:target_node_name] - end - # TODO: Currently this is Linux only - tmp_path = '/tmp/' - run_local_command("bundle exec bolt file upload #{module_tar} #{tmp_path}#{File.basename(module_tar)} --nodes #{target_string} --inventoryfile inventory.yaml") - install_module_command = "puppet module install #{tmp_path}#{File.basename(module_tar)}" - result = run_command(install_module_command, target_nodes, config: nil, inventory: inventory_hash) - if result.is_a?(Array) - result.each do |node| - puts "#{node['node']} failed #{node['result']}" if node['status'] != 'success' - end - else - raise "Failed trying to run '#{install_module_command}' against inventory." - end - puts 'Installed' - end - def install_remote_gem(gem_name, target_nodes, inventory_hash) # TODO: Currently this is Linux only install_command = "/opt/puppetlabs/puppet/bin/gem install #{gem_name}" result = run_command(install_command, target_nodes, config: nil, inventory: inventory_hash) if result.is_a?(Array) @@ -94,10 +82,11 @@ target_nodes = find_targets(inventory_hash, args[:target_node_name]) if target_nodes.empty? puts 'No targets found' exit 0 end + require 'bolt_spec/run' include BoltSpec::Run # Build the gem `gem build puppet-strings.gemspec --quiet` result = $CHILD_STATUS @@ -111,19 +100,22 @@ target_string = if args[:target_node_name].nil? 'all' else args[:target_node_name] end - # TODO: Currently this is Linux only + # TODO: Currently this is Linux targets only. no windows localhost tmp_path = '/tmp/' - run_local_command("bundle exec bolt file upload #{gem_tar} #{tmp_path}#{File.basename(gem_tar)} --nodes #{target_string} --inventoryfile inventory.yaml") + puts 'Copying gem to targets...' + run_local_command("bolt file upload #{gem_tar} #{tmp_path}#{File.basename(gem_tar)} --targets #{target_string} --inventoryfile inventory.yaml") - # Install dependent gems + puts 'Installing yard gem...' install_remote_gem('yard', target_nodes, inventory_hash) + puts 'Installing rgen gem...' install_remote_gem('rgen', target_nodes, inventory_hash) # Install puppet-strings + puts 'Installing puppet-strings gem...' install_remote_gem(tmp_path + File.basename(gem_tar), target_nodes, inventory_hash) puts 'Installed' end end @@ -154,10 +146,10 @@ breaking: { prefix: "Changed", labels: ["backwards-incompatible"] } } - config.exclude_labels = ['maintenance'] + config.exclude_labels = ['maintenance','incomplete'] config.user = 'puppetlabs' config.project = 'puppet-strings' end rescue LoadError desc 'Install github_changelog_generator to get access to automatic changelog generation'