|
1 | 1 | # frozen_string_literal: true
|
2 | 2 |
|
3 | 3 | require 'diffy'
|
| 4 | +require 'digest' |
4 | 5 | require 'hashdiff'
|
5 | 6 | require 'json'
|
6 | 7 | require 'set'
|
|
11 | 12 | require_relative '../util/util'
|
12 | 13 | require_relative 'filter'
|
13 | 14 |
|
| 15 | +HashDiff = Hashdiff unless defined? HashDiff |
| 16 | + |
14 | 17 | module OctocatalogDiff
|
15 | 18 | module CatalogDiff
|
16 | 19 | # Calculate the difference between two Puppet catalogs.
|
@@ -263,7 +266,7 @@ def filter_and_cleanup(catalog_resources)
|
263 | 266 |
|
264 | 267 | # Handle parameters
|
265 | 268 | if k == 'parameters'
|
266 |
| - cleansed_param = cleanse_parameters_hash(v) |
| 269 | + cleansed_param = cleanse_parameters_hash(v, resource.fetch('sensitive_parameters', [])) |
267 | 270 | hsh[k] = cleansed_param unless cleansed_param.nil? || cleansed_param.empty?
|
268 | 271 | elsif k == 'tags'
|
269 | 272 | # The order of tags is unimportant. Sort this array to avoid false diffs if order changes.
|
@@ -456,10 +459,18 @@ def ignored?(diff)
|
456 | 459 |
|
457 | 460 | # Cleanse parameters of filtered attributes.
|
458 | 461 | # @param parameters_hash [Hash] Hash of parameters
|
| 462 | + # @param sensitive_parameters [Array] Array of sensitive parameters |
459 | 463 | # @return [Hash] Cleaned parameters hash (original input hash is not altered)
|
460 |
| - def cleanse_parameters_hash(parameters_hash) |
| 464 | + def cleanse_parameters_hash(parameters_hash, sensitive_parameters) |
461 | 465 | result = parameters_hash.dup
|
462 | 466 |
|
| 467 | + # hides sensitive params. We still need to know if there's a going to |
| 468 | + # be a diff, so we hash the value. |
| 469 | + sensitive_parameters.each do |p| |
| 470 | + md5 = Digest::MD5.hexdigest Marshal.dump(result[p]) |
| 471 | + result[p] = 'Sensitive [md5sum ' + md5 + ']' |
| 472 | + end |
| 473 | + |
463 | 474 | # 'before' and 'require' handle internal Puppet ordering but do not affect what
|
464 | 475 | # happens on the target machine. Don't consider these for the purpose of catalog diff.
|
465 | 476 | result.delete('before')
|
|
0 commit comments