From 52dfe615424b471a4669c06ffc7f49fca4adc100 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Wed, 31 May 2017 16:16:08 +0200 Subject: [PATCH 1/2] Handle File resources with no parameters Fixes: NoMethodError: undefined method `key?' for nil:NilClass --- lib/octocatalog-diff/catalog-util/fileresources.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/octocatalog-diff/catalog-util/fileresources.rb b/lib/octocatalog-diff/catalog-util/fileresources.rb index 97244599..a979f7d4 100644 --- a/lib/octocatalog-diff/catalog-util/fileresources.rb +++ b/lib/octocatalog-diff/catalog-util/fileresources.rb @@ -122,6 +122,7 @@ def self._convert_file_resources(resources, compilation_dir, environment = 'prod # @return [Boolean] True of resource is convertible, false if not def self.resource_convertible?(resource) return true if resource['type'] == 'File' && \ + !resource['parameters'].nil? && \ resource['parameters'].key?('source') && \ !resource['parameters'].key?('content') && \ resource['parameters']['source'] =~ %r{^puppet:///modules/([^/]+)/(.+)} From 8eb2534f6e69528f864ce660cb347964964aa5a0 Mon Sep 17 00:00:00 2001 From: Kevin Paulisse Date: Wed, 31 May 2017 21:58:19 -0500 Subject: [PATCH 2/2] Create repo and integration spec for fixed regressions --- .../fixtures/repos/regressions/README.md | 5 ++++ .../fixtures/repos/regressions/hiera.yaml | 9 +++++++ .../repos/regressions/hieradata/common.yaml | 3 +++ .../repos/regressions/manifests/site.pp | 3 +++ .../file_no_parameters/manifests/init.pp | 5 ++++ .../integration/regressions_spec.rb | 27 +++++++++++++++++++ 6 files changed, 52 insertions(+) create mode 100644 spec/octocatalog-diff/fixtures/repos/regressions/README.md create mode 100644 spec/octocatalog-diff/fixtures/repos/regressions/hiera.yaml create mode 100644 spec/octocatalog-diff/fixtures/repos/regressions/hieradata/common.yaml create mode 100644 spec/octocatalog-diff/fixtures/repos/regressions/manifests/site.pp create mode 100644 spec/octocatalog-diff/fixtures/repos/regressions/modules/file_no_parameters/manifests/init.pp create mode 100644 spec/octocatalog-diff/integration/regressions_spec.rb diff --git a/spec/octocatalog-diff/fixtures/repos/regressions/README.md b/spec/octocatalog-diff/fixtures/repos/regressions/README.md new file mode 100644 index 00000000..fe040b3f --- /dev/null +++ b/spec/octocatalog-diff/fixtures/repos/regressions/README.md @@ -0,0 +1,5 @@ +# regressions repo fixture + +We occasionally encounter edge cases that don't deserve their entire fixture. + +We'll add them here. diff --git a/spec/octocatalog-diff/fixtures/repos/regressions/hiera.yaml b/spec/octocatalog-diff/fixtures/repos/regressions/hiera.yaml new file mode 100644 index 00000000..5d877dad --- /dev/null +++ b/spec/octocatalog-diff/fixtures/repos/regressions/hiera.yaml @@ -0,0 +1,9 @@ +--- +:backends: + - yaml +:yaml: + :datadir: /var/lib/puppet/environments/%{::environment}/hieradata +:hierarchy: + - common +:merge_behavior: deeper +:logger: console diff --git a/spec/octocatalog-diff/fixtures/repos/regressions/hieradata/common.yaml b/spec/octocatalog-diff/fixtures/repos/regressions/hieradata/common.yaml new file mode 100644 index 00000000..2f509873 --- /dev/null +++ b/spec/octocatalog-diff/fixtures/repos/regressions/hieradata/common.yaml @@ -0,0 +1,3 @@ +--- + classes: + - file_no_parameters diff --git a/spec/octocatalog-diff/fixtures/repos/regressions/manifests/site.pp b/spec/octocatalog-diff/fixtures/repos/regressions/manifests/site.pp new file mode 100644 index 00000000..beaa9be3 --- /dev/null +++ b/spec/octocatalog-diff/fixtures/repos/regressions/manifests/site.pp @@ -0,0 +1,3 @@ +node default { + hiera_include('classes') +} diff --git a/spec/octocatalog-diff/fixtures/repos/regressions/modules/file_no_parameters/manifests/init.pp b/spec/octocatalog-diff/fixtures/repos/regressions/modules/file_no_parameters/manifests/init.pp new file mode 100644 index 00000000..9bb15d11 --- /dev/null +++ b/spec/octocatalog-diff/fixtures/repos/regressions/modules/file_no_parameters/manifests/init.pp @@ -0,0 +1,5 @@ +# https://github.com/github/octocatalog-diff/pull/122 + +class file_no_parameters { + file { '/tmp/foo': } +} diff --git a/spec/octocatalog-diff/integration/regressions_spec.rb b/spec/octocatalog-diff/integration/regressions_spec.rb new file mode 100644 index 00000000..86a04c73 --- /dev/null +++ b/spec/octocatalog-diff/integration/regressions_spec.rb @@ -0,0 +1,27 @@ +# Miscellaneous regressions +# +# - file resource with no parameters +# Inspired by https://github.com/github/octocatalog-diff/pull/122 + +# frozen_string_literal: true + +require_relative 'integration_helper' + +describe 'miscellaneous regressions' do + before(:all) do + @result = OctocatalogDiff::Integration.integration( + spec_repo: 'regressions', + spec_fact_file: 'facts.yaml', + argv: [ + '--hiera-config', 'environments/production/hiera.yaml', + '--hiera-path-strip', '/var/lib/puppet' + ] + ) + end + + it 'should run without an error' do + expect(@result[:exitcode]).not_to eq(-1), "Internal error: #{OctocatalogDiff::Integration.format_exception(@result)}" + expect(@result[:exitcode]).to eq(0), "Runtime error: #{@result[:logs]}" + expect(@result[:diffs].size).to eq(0), @result[:diffs].map(&:inspect).join("\n") + end +end