octocatalog-diff 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. checksums.yaml +7 -0
  2. data/.version +1 -0
  3. data/LICENSE +20 -0
  4. data/README.md +82 -0
  5. data/bin/octocatalog-diff +75 -0
  6. data/doc/advanced-bootstrap.md +33 -0
  7. data/doc/advanced-cache-dir.md +24 -0
  8. data/doc/advanced-catalog-only.md +37 -0
  9. data/doc/advanced-ci.md +13 -0
  10. data/doc/advanced-dynamic-ignores.md +123 -0
  11. data/doc/advanced-future-parser.md +11 -0
  12. data/doc/advanced-ignores.md +224 -0
  13. data/doc/advanced-output-formats.md +96 -0
  14. data/doc/advanced-output-hacks.md +45 -0
  15. data/doc/advanced-override-facts.md +67 -0
  16. data/doc/advanced-pe-enc.md +52 -0
  17. data/doc/advanced-puppet-master.md +50 -0
  18. data/doc/advanced-puppet-versions.md +9 -0
  19. data/doc/advanced-storeconfigs.md +72 -0
  20. data/doc/advanced-using-without-git.md +15 -0
  21. data/doc/advanced.md +43 -0
  22. data/doc/basic.md +70 -0
  23. data/doc/configuration-enc.md +69 -0
  24. data/doc/configuration-hiera.md +103 -0
  25. data/doc/configuration-puppetdb.md +49 -0
  26. data/doc/configuration.md +51 -0
  27. data/doc/dev/README.md +1 -0
  28. data/doc/dev/coverage.md +34 -0
  29. data/doc/dev/how-to-add-options.md +83 -0
  30. data/doc/dev/integration-tests.md +63 -0
  31. data/doc/dev/releasing.md +19 -0
  32. data/doc/installation.md +49 -0
  33. data/doc/limitations.md +34 -0
  34. data/doc/optionsref.md +947 -0
  35. data/doc/requirements.md +16 -0
  36. data/doc/roadmap.md +26 -0
  37. data/doc/similar.md +17 -0
  38. data/doc/troubleshooting.md +54 -0
  39. data/lib/octocatalog-diff.rb +12 -0
  40. data/lib/octocatalog-diff/bootstrap.rb +53 -0
  41. data/lib/octocatalog-diff/catalog-diff/cli.rb +205 -0
  42. data/lib/octocatalog-diff/catalog-diff/cli/catalogs.rb +240 -0
  43. data/lib/octocatalog-diff/catalog-diff/cli/diffs.rb +145 -0
  44. data/lib/octocatalog-diff/catalog-diff/cli/helpers/fact_override.rb +99 -0
  45. data/lib/octocatalog-diff/catalog-diff/cli/options.rb +173 -0
  46. data/lib/octocatalog-diff/catalog-diff/cli/options/basedir.rb +14 -0
  47. data/lib/octocatalog-diff/catalog-diff/cli/options/bootstrap_environment.rb +18 -0
  48. data/lib/octocatalog-diff/catalog-diff/cli/options/bootstrap_script.rb +14 -0
  49. data/lib/octocatalog-diff/catalog-diff/cli/options/bootstrap_then_exit.rb +12 -0
  50. data/lib/octocatalog-diff/catalog-diff/cli/options/bootstrapped_dirs.rb +18 -0
  51. data/lib/octocatalog-diff/catalog-diff/cli/options/cached_master_dir.rb +21 -0
  52. data/lib/octocatalog-diff/catalog-diff/cli/options/catalog_only.rb +14 -0
  53. data/lib/octocatalog-diff/catalog-diff/cli/options/color.rb +13 -0
  54. data/lib/octocatalog-diff/catalog-diff/cli/options/compare_file_text.rb +15 -0
  55. data/lib/octocatalog-diff/catalog-diff/cli/options/debug.rb +12 -0
  56. data/lib/octocatalog-diff/catalog-diff/cli/options/display_datatype_changes.rb +16 -0
  57. data/lib/octocatalog-diff/catalog-diff/cli/options/display_detail_add.rb +12 -0
  58. data/lib/octocatalog-diff/catalog-diff/cli/options/display_source_file_line.rb +12 -0
  59. data/lib/octocatalog-diff/catalog-diff/cli/options/enc.rb +31 -0
  60. data/lib/octocatalog-diff/catalog-diff/cli/options/existing_catalogs.rb +25 -0
  61. data/lib/octocatalog-diff/catalog-diff/cli/options/fact_file.rb +23 -0
  62. data/lib/octocatalog-diff/catalog-diff/cli/options/fact_override.rb +19 -0
  63. data/lib/octocatalog-diff/catalog-diff/cli/options/facts_terminus.rb +16 -0
  64. data/lib/octocatalog-diff/catalog-diff/cli/options/from_puppetdb.rb +13 -0
  65. data/lib/octocatalog-diff/catalog-diff/cli/options/header.rb +24 -0
  66. data/lib/octocatalog-diff/catalog-diff/cli/options/hiera_config.rb +18 -0
  67. data/lib/octocatalog-diff/catalog-diff/cli/options/hiera_path_strip.rb +12 -0
  68. data/lib/octocatalog-diff/catalog-diff/cli/options/hostname.rb +13 -0
  69. data/lib/octocatalog-diff/catalog-diff/cli/options/ignore.rb +24 -0
  70. data/lib/octocatalog-diff/catalog-diff/cli/options/ignore_attr.rb +16 -0
  71. data/lib/octocatalog-diff/catalog-diff/cli/options/ignore_tags.rb +23 -0
  72. data/lib/octocatalog-diff/catalog-diff/cli/options/include_tags.rb +12 -0
  73. data/lib/octocatalog-diff/catalog-diff/cli/options/master_cache_branch.rb +12 -0
  74. data/lib/octocatalog-diff/catalog-diff/cli/options/output_file.rb +15 -0
  75. data/lib/octocatalog-diff/catalog-diff/cli/options/output_format.rb +15 -0
  76. data/lib/octocatalog-diff/catalog-diff/cli/options/parallel.rb +12 -0
  77. data/lib/octocatalog-diff/catalog-diff/cli/options/parser.rb +48 -0
  78. data/lib/octocatalog-diff/catalog-diff/cli/options/pass_env_vars.rb +19 -0
  79. data/lib/octocatalog-diff/catalog-diff/cli/options/pe_enc_ssl_ca.rb +15 -0
  80. data/lib/octocatalog-diff/catalog-diff/cli/options/pe_enc_ssl_client_cert.rb +14 -0
  81. data/lib/octocatalog-diff/catalog-diff/cli/options/pe_enc_ssl_client_key.rb +14 -0
  82. data/lib/octocatalog-diff/catalog-diff/cli/options/pe_enc_token.rb +15 -0
  83. data/lib/octocatalog-diff/catalog-diff/cli/options/pe_enc_token_file.rb +17 -0
  84. data/lib/octocatalog-diff/catalog-diff/cli/options/pe_enc_url.rb +19 -0
  85. data/lib/octocatalog-diff/catalog-diff/cli/options/puppet_binary.rb +16 -0
  86. data/lib/octocatalog-diff/catalog-diff/cli/options/puppet_master.rb +16 -0
  87. data/lib/octocatalog-diff/catalog-diff/cli/options/puppet_master_api_version.rb +20 -0
  88. data/lib/octocatalog-diff/catalog-diff/cli/options/puppet_master_ssl_ca.rb +19 -0
  89. data/lib/octocatalog-diff/catalog-diff/cli/options/puppet_master_ssl_client_cert.rb +19 -0
  90. data/lib/octocatalog-diff/catalog-diff/cli/options/puppet_master_ssl_client_key.rb +19 -0
  91. data/lib/octocatalog-diff/catalog-diff/cli/options/puppetdb_ssl_ca.rb +15 -0
  92. data/lib/octocatalog-diff/catalog-diff/cli/options/puppetdb_ssl_client_cert.rb +14 -0
  93. data/lib/octocatalog-diff/catalog-diff/cli/options/puppetdb_ssl_client_key.rb +14 -0
  94. data/lib/octocatalog-diff/catalog-diff/cli/options/puppetdb_ssl_client_password.rb +14 -0
  95. data/lib/octocatalog-diff/catalog-diff/cli/options/puppetdb_ssl_client_password_file.rb +13 -0
  96. data/lib/octocatalog-diff/catalog-diff/cli/options/puppetdb_url.rb +18 -0
  97. data/lib/octocatalog-diff/catalog-diff/cli/options/quiet.rb +12 -0
  98. data/lib/octocatalog-diff/catalog-diff/cli/options/retry_failed_catalog.rb +13 -0
  99. data/lib/octocatalog-diff/catalog-diff/cli/options/safe_to_delete_cached_master_dir.rb +15 -0
  100. data/lib/octocatalog-diff/catalog-diff/cli/options/storeconfigs.rb +12 -0
  101. data/lib/octocatalog-diff/catalog-diff/cli/options/suppress_absent_file_details.rb +14 -0
  102. data/lib/octocatalog-diff/catalog-diff/cli/options/to_from_branch.rb +16 -0
  103. data/lib/octocatalog-diff/catalog-diff/cli/printer.rb +52 -0
  104. data/lib/octocatalog-diff/catalog-diff/differ.rb +615 -0
  105. data/lib/octocatalog-diff/catalog-diff/display.rb +125 -0
  106. data/lib/octocatalog-diff/catalog-diff/display/json.rb +25 -0
  107. data/lib/octocatalog-diff/catalog-diff/display/text.rb +452 -0
  108. data/lib/octocatalog-diff/catalog-util/bootstrap.rb +145 -0
  109. data/lib/octocatalog-diff/catalog-util/builddir.rb +289 -0
  110. data/lib/octocatalog-diff/catalog-util/cached_master_directory.rb +169 -0
  111. data/lib/octocatalog-diff/catalog-util/command.rb +96 -0
  112. data/lib/octocatalog-diff/catalog-util/enc.rb +77 -0
  113. data/lib/octocatalog-diff/catalog-util/enc/noop.rb +22 -0
  114. data/lib/octocatalog-diff/catalog-util/enc/pe.rb +99 -0
  115. data/lib/octocatalog-diff/catalog-util/enc/pe/v1.rb +61 -0
  116. data/lib/octocatalog-diff/catalog-util/enc/script.rb +88 -0
  117. data/lib/octocatalog-diff/catalog-util/facts.rb +89 -0
  118. data/lib/octocatalog-diff/catalog-util/fileresources.rb +83 -0
  119. data/lib/octocatalog-diff/catalog-util/git.rb +65 -0
  120. data/lib/octocatalog-diff/catalog.rb +209 -0
  121. data/lib/octocatalog-diff/catalog/computed.rb +205 -0
  122. data/lib/octocatalog-diff/catalog/json.rb +30 -0
  123. data/lib/octocatalog-diff/catalog/noop.rb +19 -0
  124. data/lib/octocatalog-diff/catalog/puppetdb.rb +82 -0
  125. data/lib/octocatalog-diff/catalog/puppetmaster.rb +121 -0
  126. data/lib/octocatalog-diff/external/pson/LICENSE +17 -0
  127. data/lib/octocatalog-diff/external/pson/README.md +20 -0
  128. data/lib/octocatalog-diff/external/pson/common.rb +370 -0
  129. data/lib/octocatalog-diff/external/pson/pure.rb +15 -0
  130. data/lib/octocatalog-diff/external/pson/pure/generator.rb +395 -0
  131. data/lib/octocatalog-diff/external/pson/pure/parser.rb +307 -0
  132. data/lib/octocatalog-diff/external/pson/version.rb +8 -0
  133. data/lib/octocatalog-diff/facts.rb +125 -0
  134. data/lib/octocatalog-diff/facts/json.rb +20 -0
  135. data/lib/octocatalog-diff/facts/puppetdb.rb +59 -0
  136. data/lib/octocatalog-diff/facts/yaml.rb +29 -0
  137. data/lib/octocatalog-diff/puppetdb.rb +163 -0
  138. data/lib/octocatalog-diff/util/colored.rb +20 -0
  139. data/lib/octocatalog-diff/util/httparty.rb +158 -0
  140. data/lib/octocatalog-diff/util/parallel.rb +170 -0
  141. data/lib/octocatalog-diff/util/puppetversion.rb +24 -0
  142. data/lib/octocatalog-diff/version.rb +7 -0
  143. metadata +386 -0
@@ -0,0 +1,14 @@
1
+ # Allow specification of a bootstrap script. This runs after checking out the directory, and before running
2
+ # puppet there. Good for running librarian to install modules, and anything else site-specific that needs
3
+ # to be done.
4
+ # @param parser [OptionParser object] The OptionParser argument
5
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
6
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:bootstrap_script) do
7
+ has_weight 40
8
+
9
+ def parse(parser, options)
10
+ parser.on('--bootstrap-script FILENAME', 'Bootstrap script relative to checkout directory') do |file|
11
+ options[:bootstrap_script] = file
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # Option to bootstrap directories and then exit
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:bootstrap_then_exit) do
5
+ has_weight 70
6
+
7
+ def parse(parser, options)
8
+ parser.on('--bootstrap-then-exit', 'Bootstrap from-dir and/or to-dir and then exit') do
9
+ options[:bootstrap_then_exit] = true
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ # Allow (or create) directories that are already bootstrapped. Handy to allow "bootstrap once, build many"
2
+ # to save time when diffing multiple catalogs on this system.
3
+ # @param parser [OptionParser object] The OptionParser argument
4
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
5
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:bootstrapped_dirs) do
6
+ has_weight 60
7
+
8
+ def parse(parser, options)
9
+ these_options = { 'from' => :bootstrapped_from_dir, 'to' => :bootstrapped_to_dir }
10
+ these_options.each do |tag, hash_key|
11
+ parser.on("--bootstrapped-#{tag}-dir DIRNAME", "Use a pre-bootstrapped '#{tag}' directory") do |dir|
12
+ options[hash_key] = File.absolute_path(dir)
13
+ Dir.mkdir options[hash_key], 0o700 unless Dir.exist?(options[hash_key])
14
+ raise "Invalid bootstrapped-#{tag}-dir: does not exist" unless Dir.exist?(options[hash_key])
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ # Cache a bootstrapped checkout of 'master' and use that for time-saving when the SHA
2
+ # has not changed.
3
+ # @param parser [OptionParser object] The OptionParser argument
4
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
5
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:cached_master_dir) do
6
+ has_weight 160
7
+
8
+ def parse(parser, options)
9
+ parser.on('--cached-master-dir PATH', 'Cache bootstrapped origin/master at this path') do |path_in|
10
+ path = File.absolute_path(path_in)
11
+ unless Dir.exist?(path)
12
+ begin
13
+ Dir.mkdir path, 0o755
14
+ rescue Errno::ENOENT => exc
15
+ raise Errno::ENOENT, "Invalid cached master directory path: #{exc}"
16
+ end
17
+ end
18
+ options[:cached_master_dir] = path
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ # When set, --catalog-only will only compile the catalog for the 'to' branch, and skip any
2
+ # diffing activity. The catalog will be printed to STDOUT or written to the output file.
3
+ # @param parser [OptionParser object] The OptionParser argument
4
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
5
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:catalog_only) do
6
+ has_weight 290
7
+
8
+ def parse(parser, options)
9
+ desc = 'Only compile the catalog for the "to" branch but do not diff'
10
+ parser.on('--[no-]catalog-only', desc) do |x|
11
+ options[:catalog_only] = x
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ # Color printing option
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:color) do
5
+ has_weight 80
6
+
7
+ def parse(parser, options)
8
+ parser.on('--[no-]color', 'Enable/disable colors in output') do |color|
9
+ options[:colors] = color
10
+ options[:format] = color ? :color_text : :text
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ # When a file is specified with `source => 'puppet:///modules/something/foo.txt'`, remove
2
+ # the 'source' attribute and populate the 'content' attribute with the text of the file.
3
+ # This allows for a diff of the content, rather than a diff of the location, which is
4
+ # what is most often desired.
5
+ # @param parser [OptionParser object] The OptionParser argument
6
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
7
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:compare_file_text) do
8
+ has_weight 210
9
+
10
+ def parse(parser, options)
11
+ parser.on('--[no-]compare-file-text', 'Compare text, not source location, of file resources') do |x|
12
+ options[:compare_file_text] = x
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ # Debugging option
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:debug) do
5
+ has_weight 110
6
+
7
+ def parse(parser, options)
8
+ parser.on('--[no-]debug', '-d', 'Print debugging messages to STDERR') do |x|
9
+ options[:debug] = x
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ # Toggle on or off the display of data type changes when the string representation
2
+ # is the same. For example with this enabled, '42' (the string) and 42 (the integer)
3
+ # will be displayed as a difference. With this disabled, this is not displayed as a
4
+ # difference.
5
+ # @param parser [OptionParser object] The OptionParser argument
6
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
7
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:display_datatype_changes) do
8
+ has_weight 280
9
+
10
+ def parse(parser, options)
11
+ desc = 'Display changes in data type even when strings match'
12
+ parser.on('--[no-]display-datatype-changes', desc) do |x|
13
+ options[:display_datatype_changes] = x
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ # Provide ability to display details of 'added' resources in the output.
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:display_detail_add) do
5
+ has_weight 250
6
+
7
+ def parse(parser, options)
8
+ parser.on('--[no-]display-detail-add', 'Display parameters and other details for added resources') do |x|
9
+ options[:display_detail_add] = x
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # Display source filename and line number for diffs
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:display_source_file_line) do
5
+ has_weight 200
6
+
7
+ def parse(parser, options)
8
+ parser.on('--[no-]display-source', 'Show source file and line for each difference') do |x|
9
+ options[:display_source_file_line] = x
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,31 @@
1
+ # Path to external node classifier, relative to the base directory of the checkout.
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:enc) do
5
+ has_weight 240
6
+
7
+ def parse(parser, options)
8
+ parser.on('--no-enc', 'Disable ENC') do
9
+ options[:no_enc] = true
10
+ options[:enc] = nil
11
+ options[:from_enc] = nil
12
+ options[:to_enc] = nil
13
+ end
14
+
15
+ parser.on('--enc PATH', 'Path to ENC script, relative to checkout directory or absolute') do |x|
16
+ unless options[:no_enc]
17
+ proposed_enc_path = x.start_with?('/') ? x : File.join(options[:basedir], x)
18
+ raise Errno::ENOENT, "Provided ENC (#{proposed_enc_path}) does not exist" unless File.file?(proposed_enc_path)
19
+ options[:enc] = proposed_enc_path
20
+ end
21
+ end
22
+
23
+ parser.on('--from-enc PATH', 'Path to ENC script (for the from catalog only)') do |x|
24
+ options[:from_enc] = x unless options[:no_enc]
25
+ end
26
+
27
+ parser.on('--to-enc PATH', 'Path to ENC script (for the to catalog only)') do |x|
28
+ options[:to_enc] = x unless options[:no_enc]
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,25 @@
1
+ require 'json'
2
+
3
+ # If pre-compiled catalogs are available, these can be used to short-circuit the build process.
4
+ # These files must exist and be in Puppet catalog format.
5
+ # @param parser [OptionParser object] The OptionParser argument
6
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
7
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:existing_catalogs) do
8
+ has_weight 30
9
+
10
+ def parse(parser, options)
11
+ these_options = { 'from' => :from_catalog, 'to' => :to_catalog }
12
+ these_options.each do |tag, hash_key|
13
+ parser.on("--#{tag}-catalog FILENAME", "Use a pre-compiled catalog '#{tag}'") do |catalog_file|
14
+ path = File.absolute_path(catalog_file)
15
+ raise Errno::ENOENT, "Invalid '#{hash_key} catalog' file provided" unless File.file?(path)
16
+ options[hash_key] = path
17
+ if options[:node].nil?
18
+ x = JSON.parse(File.read(path))
19
+ options[:node] ||= x['data']['name'] if x['data'].is_a?(Hash)
20
+ options[:node] ||= x['name'] if x['name'].is_a?(String)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ # Allow an existing fact file to be provided, to avoid pulling facts from PuppetDB.
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:fact_file) do
5
+ has_weight 150
6
+
7
+ def parse(parser, options)
8
+ parser.on('--fact-file FILENAME', 'Fact file to use instead of node lookup') do |fact_file|
9
+ raise Errno::ENOENT, 'Invalid fact file provided' unless File.file?(fact_file)
10
+ facts = nil
11
+ local_opts = { fact_file_string: File.read(fact_file) }
12
+ if fact_file =~ /\.ya?ml$/
13
+ facts = OctocatalogDiff::Facts.new(local_opts.merge(backend: :yaml))
14
+ elsif fact_file =~ /\.json$/
15
+ facts = OctocatalogDiff::Facts.new(local_opts.merge(backend: :json))
16
+ else
17
+ raise ArgumentError, 'I do not know how to parse the provided fact file. Needs .yaml or .json extension.'
18
+ end
19
+ options[:facts] = facts
20
+ options[:node] ||= facts.facts['name']
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ # Allow override of facts on the command line. Fact overrides can be supplied for the 'to' or 'from' catalog,
2
+ # or for both. There is some attempt to handle data types here (since all items on the command line are strings)
3
+ # by permitting a data type specification as well.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:fact_override) do
5
+ has_weight 320
6
+
7
+ def parse(parser, options)
8
+ # Set 'fact_override_in' because more processing is needed, once the command line options
9
+ # have been parsed, to make this into the final form 'fact_override'.
10
+ OctocatalogDiff::CatalogDiff::Cli::Options.option_globally_or_per_branch(
11
+ parser: parser,
12
+ options: options,
13
+ cli_name: 'fact-override',
14
+ option_name: 'fact_override_in',
15
+ desc: 'Override fact',
16
+ datatype: []
17
+ )
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # Get the facts terminus. Generally this is 'yaml' and a fact file will be loaded from PuppetDB or
2
+ # elsewhere in the environment. However it can be set to 'facter' which will run facter on the host
3
+ # on which this is running.
4
+ # @param parser [OptionParser object] The OptionParser argument
5
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
6
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:facts_terminus) do
7
+ has_weight 310
8
+
9
+ def parse(parser, options)
10
+ termini = %w(yaml facter)
11
+ parser.on('--facts-terminus STRING', "Facts terminus: one of #{termini.join(', ')}") do |x|
12
+ raise ArgumentError, "Invalid facts terminus #{x}; supported: #{termini.join(', ')}" unless termini.include?(x)
13
+ options[:facts_terminus] = x
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ # Set --from-puppetdb to pull most recent catalog from PuppetDB instead of compiling
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:from_puppetdb) do
5
+ has_weight 300
6
+
7
+ def parse(parser, options)
8
+ desc = 'Pull "from" catalog from PuppetDB instead of compiling'
9
+ parser.on('--[no-]from-puppetdb', desc) do |x|
10
+ options[:from_puppetdb] = x
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ # Provide ability to set custom header or to display no header at all
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:header) do
5
+ has_weight 260
6
+
7
+ def parse(parser, options)
8
+ parser.on('--no-header', 'Do not print a header') do
9
+ raise ArgumentError, '--no-header incompatible with --default-header' if options[:header] == :default
10
+ raise ArgumentError, '--no-header incompatible with --header' unless options[:header].nil?
11
+ options[:no_header] = true
12
+ end
13
+ parser.on('--default-header', 'Print default header with output') do
14
+ raise ArgumentError, '--default-header incompatible with --header' unless options[:header].nil?
15
+ raise ArgumentError, '--default-header incompatible with --no-header' unless options[:no_header].nil?
16
+ options[:header] = :default
17
+ end
18
+ parser.on('--header STRING', 'Specify header for output') do |x|
19
+ raise ArgumentError, '--header incompatible with --default-header' if options[:header] == :default
20
+ raise ArgumentError, '--header incompatible with --no-header' unless options[:no_header].nil?
21
+ options[:header] = x
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # Specify a relative path to the Hiera yaml file
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:hiera_config) do
5
+ has_weight 180
6
+
7
+ def parse(parser, options)
8
+ parser.on('--hiera-config PATH', 'Relative path to hiera YAML file') do |path_in|
9
+ raise ArgumentError, '--no-hiera-config incompatible with --hiera-config' if options[:no_hiera_config]
10
+ options[:hiera_config] = path_in
11
+ end
12
+
13
+ parser.on('--no-hiera-config', 'Disable hiera config file installation') do
14
+ raise ArgumentError, '--no-hiera-config incompatible with --hiera-config' if options[:hiera_config]
15
+ options[:no_hiera_config] = true
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ # Specify the path to strip off the datadir to munge hiera.yaml file
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:hiera_path_strip) do
5
+ has_weight 181
6
+
7
+ def parse(parser, options)
8
+ parser.on('--hiera-path-strip PATH', 'Path prefix to strip when munging hiera.yaml') do |path_in|
9
+ options[:hiera_path_strip] = path_in
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # Set hostname, which is used to look up facts in PuppetDB, and in the header of diff display.
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+
5
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:hostname) do
6
+ has_weight 1
7
+
8
+ def parse(parser, options)
9
+ parser.on('--hostname HOSTNAME', '-n', 'Use PuppetDB facts from last run of hostname') do |hostname|
10
+ options[:node] = hostname
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ # Options used when comparing catalogs - set ignored changes.
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:ignore) do
5
+ has_weight 130
6
+
7
+ def parse(parser, options)
8
+ descriptive_text = 'More resources to ignore in format type[title]'
9
+ parser.on('--ignore "Type1[Title1],Type2[Title2],..."', Array, descriptive_text) do |res|
10
+ options[:ignore] ||= []
11
+ res.each do |item|
12
+ if item =~ /\A(.+?)\[(.+)\](.+)/
13
+ h = { type: Regexp.last_match(1), title: Regexp.last_match(2) }
14
+ h[:attr] = Regexp.last_match(3).gsub(/(\\f|::)/, "\f")
15
+ options[:ignore] << h
16
+ elsif item =~ /^(.+?)\[(.+)\]$/
17
+ options[:ignore] << { type: Regexp.last_match(1), title: Regexp.last_match(2) }
18
+ else
19
+ raise ArgumentError, "Ignore #{item} must be in Type[Title] or Type[Title]::Attribute format!"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # Specify attributes to ignore
2
+ # @param parser [OptionParser object] The OptionParser argument
3
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
4
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:ignore_attr) do
5
+ has_weight 190
6
+
7
+ def parse(parser, options)
8
+ parser.on('--ignore-attr "attr1,attr2,..."', Array, 'Attributes to ignore') do |res|
9
+ options[:ignore] ||= []
10
+ res.each do |item|
11
+ item_subst = item.gsub(/(\\f|::)/, "\f")
12
+ options[:ignore] << { attr: item_subst }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ # Provide ability to set one or more tags, which will cause catalog-diff
2
+ # to ignore any changes for any defined type where this tag is set.
3
+ # @param parser [OptionParser object] The OptionParser argument
4
+ # @param options [Hash] Options hash being constructed; this is modified in this method.
5
+ OctocatalogDiff::CatalogDiff::Cli::Options::Option.newoption(:ignore_tags) do
6
+ has_weight 400
7
+
8
+ def parse(parser, options)
9
+ parser.on('--no-ignore-tags', 'Disable ignoring based on tags') do
10
+ if options[:ignore_tags]
11
+ raise ArgumentError, '--no-ignore-tags incompatible with --ignore-tags'
12
+ end
13
+ options[:no_ignore_tags] = true
14
+ end
15
+ parser.on('--ignore-tags STRING1[,STRING2[,...]]', Array, 'Specify tags to ignore') do |x|
16
+ if options[:no_ignore_tags]
17
+ raise ArgumentError, '--ignore-tags incompatible with --no-ignore-tags'
18
+ end
19
+ options[:ignore_tags] ||= []
20
+ options[:ignore_tags].concat x
21
+ end
22
+ end
23
+ end