onceover 3.18.0 → 3.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/tests.yaml +40 -0
  4. data/.rubocop.yml +20 -2
  5. data/Gemfile +0 -13
  6. data/README.md +275 -113
  7. data/Rakefile +23 -6
  8. data/factsets/CentOS-8.3.2011-64.json +485 -0
  9. data/factsets/Debian-10.4-64.json +476 -0
  10. data/factsets/Debian-8.11-64.json +480 -0
  11. data/factsets/Debian-9.12-64.json +476 -0
  12. data/factsets/Ubuntu-20.04-64.json +504 -0
  13. data/factsets/Windows_Server-2008r2-64.json +184 -184
  14. data/factsets/Windows_Server-2012r2-64.json +165 -165
  15. data/factsets/windows-10-64.json +104 -104
  16. data/features/cache.feature +1 -1
  17. data/features/factsets.feature +33 -4
  18. data/features/step_definitions/cache.rb +4 -4
  19. data/features/step_definitions/common.rb +44 -10
  20. data/features/step_definitions/init.rb +2 -2
  21. data/features/windows.feature +5 -0
  22. data/features/zzz_run.feature +22 -3
  23. data/lib/onceover/controlrepo.rb +25 -16
  24. data/lib/onceover/deploy.rb +3 -1
  25. data/lib/onceover/group.rb +3 -1
  26. data/lib/onceover/node.rb +19 -2
  27. data/lib/onceover/rspec/formatters.rb +6 -1
  28. data/lib/onceover/runner.rb +5 -4
  29. data/lib/onceover/test.rb +3 -2
  30. data/lib/onceover/testconfig.rb +14 -5
  31. data/onceover.gemspec +5 -2
  32. data/spec/fixtures/controlrepos/basic/manifests_alternate/site.pp +2 -0
  33. data/spec/fixtures/controlrepos/caching/Puppetfile +17 -17
  34. data/spec/fixtures/controlrepos/caching/manifests/site.pp +1 -0
  35. data/spec/fixtures/controlrepos/caching/spec/factsets/Debian-10-facter-4.json +1091 -0
  36. data/spec/fixtures/controlrepos/caching/spec/onceover.yaml +13 -12
  37. data/spec/fixtures/controlrepos/custom_puppetfile/Puppetfile.custom +3 -0
  38. data/spec/fixtures/controlrepos/custom_puppetfile/environment.conf +7 -0
  39. data/spec/fixtures/controlrepos/factsets/site/role/manifests/trusted_extensions.pp +6 -0
  40. data/spec/fixtures/controlrepos/factsets/site/role/manifests/trusted_external.pp +6 -0
  41. data/spec/fixtures/controlrepos/factsets/spec/factsets/README.md +7 -0
  42. data/spec/fixtures/controlrepos/factsets/spec/factsets/centos7_notrusted.json +530 -0
  43. data/spec/fixtures/controlrepos/factsets/spec/factsets/centos7_trusted_extensions_nested.json +535 -0
  44. data/spec/fixtures/controlrepos/factsets/spec/factsets/centos7_trusted_extensions_top.json +533 -0
  45. data/spec/fixtures/controlrepos/factsets/spec/factsets/centos7_trusted_external_nested.json +537 -0
  46. data/spec/fixtures/controlrepos/factsets/spec/factsets/centos7_trusted_external_top.json +535 -0
  47. data/spec/fixtures/controlrepos/factsets/spec/factsets/centos_7_facter_4.json +706 -0
  48. data/spec/fixtures/controlrepos/windows/Puppetfile +6 -1
  49. data/spec/fixtures/controlrepos/windows/site-modules/role/manifests/choco.pp +9 -0
  50. data/templates/test_spec.rb.erb +5 -1
  51. metadata +85 -18
  52. data/.travis.yml +0 -19
  53. data/appveyor.yml +0 -38
@@ -76,6 +76,10 @@ class Onceover
76
76
  @@existing_controlrepo.facts(filter, 'trusted')
77
77
  end
78
78
 
79
+ def self.trusted_external_facts(filter = nil)
80
+ @@existing_controlrepo.facts(filter, 'trusted_external')
81
+ end
82
+
79
83
  def self.hiera_config_file
80
84
  @@existing_controlrepo.hiera_config_file
81
85
  end
@@ -123,10 +127,16 @@ class Onceover
123
127
  @profile_regex = opts[:profile_regex] ? Regexp.new(opts[:profile_regex]) : /profile[s]?:{2}/
124
128
  @tempdir = opts[:tempdir] || File.expand_path('./.onceover', @root)
125
129
  $temp_modulepath = nil
126
- @manifest = opts[:manifest] || config['manifest'] ? File.expand_path(config['manifest'], @root) : nil
127
130
  @opts = opts
128
131
  logger.level = :debug if @opts[:debug]
129
132
  @@existing_controlrepo = self
133
+
134
+ # Set the manifest option to the fully expanded path if it's used,
135
+ # default to nil
136
+ manifest = opts[:manifest] || config['manifest'] || nil
137
+ if manifest
138
+ @manifest = File.expand_path(manifest, @root)
139
+ end
130
140
  end
131
141
 
132
142
 
@@ -184,7 +194,14 @@ class Onceover
184
194
  all_facts = []
185
195
  logger.debug "Reading factsets"
186
196
  @facts_files.each do |file|
187
- all_facts << read_facts(file)[key]
197
+ facts_from_file = read_facts(file)
198
+ # Facter 4 removed the top level key 'values' and, instead, puts facts
199
+ # at the top level. The conditional below accounts for this.
200
+ if (key.eql?('values') and facts_from_file.has_key?('values')) or !key.eql?('values')
201
+ all_facts << facts_from_file[key]
202
+ else
203
+ all_facts << facts_from_file
204
+ end
188
205
  end
189
206
  if filter
190
207
  # Allow us to pass a hash of facts to filter by
@@ -195,11 +212,7 @@ class Onceover
195
212
  filter.each do |filter_fact,value|
196
213
  matches << keypair_is_in_hash(hash,filter_fact,value)
197
214
  end
198
- if matches.include? false
199
- false
200
- else
201
- true
202
- end
215
+ !matches.include? false
203
216
  end
204
217
  end
205
218
  return all_facts
@@ -420,7 +433,7 @@ class Onceover
420
433
  rescue StandardError
421
434
  raise "modulepath was not found in environment.conf, don't know where to look for roles & profiles"
422
435
  end
423
-
436
+
424
437
  environment_config
425
438
  end
426
439
 
@@ -444,7 +457,7 @@ class Onceover
444
457
  end
445
458
 
446
459
  def temp_manifest
447
- config['manifest'] ? File.expand_path(config['manifest'], @tempdir) : nil
460
+ @manifest
448
461
  end
449
462
 
450
463
  def self.init(repo)
@@ -587,7 +600,7 @@ class Onceover
587
600
 
588
601
  # Loop over each test, executing the user's block on each
589
602
  tests.each do |tst|
590
- block.call(tst.classes[0].name, tst.nodes[0].name, tst.nodes[0].fact_set, testconfig.pre_condition)
603
+ block.call(tst.classes[0].name, tst.nodes[0].name, tst.nodes[0].fact_set, tst.nodes[0].trusted_set, tst.nodes[0].trusted_external_set, testconfig.pre_condition)
591
604
  end
592
605
  end
593
606
 
@@ -620,11 +633,7 @@ class Onceover
620
633
  else
621
634
  matches << false
622
635
  end
623
- if matches.include? false
624
- false
625
- else
626
- true
627
- end
636
+ !matches.include? false
628
637
  end
629
638
 
630
639
  def get_classes(dir)
@@ -642,7 +651,7 @@ class Onceover
642
651
  def find_classname(filename)
643
652
  file = File.new(filename, "r")
644
653
  while (line = file.gets)
645
- begin
654
+ begin
646
655
  if line =~ /^class (\w+(?:::\w+)*)/
647
656
  return $1
648
657
  end
@@ -83,6 +83,7 @@ class Onceover
83
83
  logger.debug "found #{git_branch} as current working branch"
84
84
  # Only try to modify Puppetfile if it exists
85
85
  unless skip_r10k
86
+ FileUtils.copy repo.puppetfile, "#{temp_controlrepo}/Puppetfile"
86
87
  puppetfile_contents = File.read("#{temp_controlrepo}/Puppetfile")
87
88
 
88
89
  logger.debug "replacing :control_branch mentions in the Puppetfile with #{git_branch}"
@@ -118,10 +119,11 @@ class Onceover
118
119
  prod_dir = "#{repo.tempdir}/#{repo.environmentpath}/production"
119
120
  Dir.chdir(prod_dir) do
120
121
  install_cmd = []
121
- install_cmd << "r10k puppetfile install --color --puppetfile #{repo.puppetfile}"
122
+ install_cmd << 'r10k puppetfile install --color'
122
123
  install_cmd << "--force" if force
123
124
  install_cmd << "--config #{repo.r10k_config_file}" if repo.r10k_config_file
124
125
  install_cmd << (logger.level > 0 ? "--verbose" : "--verbose debug") # Enable debugging if we're debugging
126
+ install_cmd << "--trace" if opts[:trace]
125
127
  install_cmd = install_cmd.join(' ')
126
128
  logger.debug "Running #{install_cmd} from #{prod_dir}"
127
129
  system(install_cmd)
@@ -60,6 +60,7 @@ class Onceover
60
60
  @@all
61
61
  end
62
62
 
63
+ # rubocop:disable Lint/DuplicateBranch
63
64
  def self.valid_members?(members)
64
65
  # Check that they are all the same type
65
66
  # Also catch any errors to assume it's invalid
@@ -71,9 +72,10 @@ class Onceover
71
72
  else
72
73
  return false
73
74
  end
74
- rescue StandardErroor
75
+ rescue StandardError
75
76
  return false
76
77
  end
77
78
  end
79
+ # rubocop:enable Lint/DuplicateBranch
78
80
  end
79
81
  end
data/lib/onceover/node.rb CHANGED
@@ -9,6 +9,7 @@ class Onceover
9
9
  attr_accessor :beaker_node
10
10
  attr_accessor :fact_set
11
11
  attr_accessor :trusted_set
12
+ attr_accessor :trusted_external_set
12
13
 
13
14
  def initialize(name)
14
15
  @name = name
@@ -20,10 +21,26 @@ class Onceover
20
21
  File.basename(facts_file, '.json') == name
21
22
  }
22
23
  @fact_set = Onceover::Node.clean_facts(Onceover::Controlrepo.facts[facts_file_index])
24
+
25
+ # First see if we can find a 'trusted' hash at the top level of our factset
23
26
  @trusted_set = Onceover::Controlrepo.trusted_facts[facts_file_index]
27
+ # If we don't find it, attempt to find a 'trusted.extensions' hash nested in our fact_set
28
+ @trusted_set = @fact_set.dig('trusted', 'extensions') if @trusted_set.nil?
29
+ # If we still can't find any, return an empty hash so the following doesn't blow up user written tests:
30
+ # let(:trusted_facts) { trusted_facts }
31
+ @trusted_set = {} if @trusted_set.nil?
32
+
33
+ # First see if we can find a 'trusted_external' hash at the top level of our factset
34
+ @trusted_external_set = Onceover::Controlrepo.trusted_external_facts[facts_file_index]
35
+ # If we don't find it, attempt to find a 'trusted.external' hash nested in our fact_set
36
+ @trusted_external_set = @fact_set.dig('trusted', 'external') if @trusted_external_set.nil?
37
+ # If we still can't find any, return an empty hash so the following doesn't blow up user written tests:
38
+ # let(:trusted_external_data) { trusted_external_data }
39
+ @trusted_external_set = {} if @trusted_external_set.nil?
24
40
  rescue TypeError
25
- @fact_set = nil
26
- @trusted_set = nil
41
+ @fact_set = {}
42
+ @trusted_set = {}
43
+ @trusted_external_set = {}
27
44
  end
28
45
 
29
46
  @@all << self
@@ -12,7 +12,9 @@ class OnceoverFormatter
12
12
  )
13
13
 
14
14
  COMPILATION_ERROR = %r{error during compilation: (?<error>.*)}
15
+ # rubocop:disable Lint/MixedRegexpCaptureTypes
15
16
  ERROR_WITH_LOCATION = %r{(?<error>.*?)\s(at )?(\((file: (?<file>.*?), )?line: (?<line>\d+)(, column: (?<column>\d+))?\))(; )?}
17
+ # rubocop:enable Lint/MixedRegexpCaptureTypes
16
18
  ERROR_WITHOUT_LOCATION = %r{(?<error>.*?)\son node}
17
19
 
18
20
  def initialize output
@@ -72,6 +74,8 @@ class OnceoverFormatter
72
74
  @output << "\n"
73
75
  end
74
76
 
77
+ # rubocop:disable Style/CombinableLoops
78
+ #
75
79
  # This method takes a notification and formats it into a hash that can be
76
80
  # printed easily
77
81
  def extract_failures notification
@@ -90,6 +94,7 @@ class OnceoverFormatter
90
94
 
91
95
  grouped
92
96
  end
97
+ # rubocop:enable Style/CombinableLoops
93
98
 
94
99
  # Extaracts data out of RSpec failres
95
100
  def extract_failure_data(fails)
@@ -309,4 +314,4 @@ class FailureCollector
309
314
  end
310
315
  }
311
316
  end
312
- end
317
+ end
@@ -1,4 +1,5 @@
1
1
  require 'backticks'
2
+ require 'io/console'
2
3
 
3
4
  class Onceover
4
5
  class Runner
@@ -36,8 +37,6 @@ class Onceover
36
37
  # Create spec_helper_accpetance.rb
37
38
  @config.write_spec_helper_acceptance("#{@repo.tempdir}/spec", @repo)
38
39
 
39
- # TODO: Remove all tests that do not match set tags
40
-
41
40
  if @mode.include?(:spec)
42
41
  # Verify all of the spec tests
43
42
  @config.spec_tests.each { |test| @config.verify_spec_test(@repo, test) }
@@ -83,8 +82,10 @@ class Onceover
83
82
  ENV['RUBYOPT'] = ENV['RUBYOPT'].to_s + ' -W0'
84
83
  end
85
84
 
86
- #`bundle install --binstubs`
87
- #`bin/rake spec_standalone`
85
+ # NOTE: This is the way to provide options to rspec according to:
86
+ # https://github.com/puppetlabs/puppetlabs_spec_helper/blob/master/lib/puppetlabs_spec_helper/rake_tasks.rb#L51
87
+ ENV['CI_SPEC_OPTIONS'] = ENV['CI_SPEC_OPTIONS'].to_s + @config.filter_tags.map { |tag| " --tag #{tag}" }.join unless @config.filter_tags.nil?
88
+
88
89
  if @config.opts[:parallel]
89
90
  logger.debug "Running #{@command_prefix}rake parallel_spec from #{@repo.tempdir}"
90
91
  result = run_command(@command_prefix.strip.split, 'rake', 'parallel_spec')
data/lib/onceover/test.rb CHANGED
@@ -25,10 +25,11 @@ class Onceover
25
25
  @classes = []
26
26
  @test_config = test_config
27
27
  @test_config.delete('classes') # remove classes from the config
28
- @tags = @test_config['tags']
29
28
 
30
29
  # Make sure that tags are an array
31
- @test_config['tags'] = [@test_config['tags']].flatten if @test_config['tags']
30
+ @test_config['tags'] ||= []
31
+ @test_config['tags'] = [@test_config['tags']].flatten
32
+ @tags = @test_config['tags']
32
33
 
33
34
  # Get the nodes we are working on
34
35
  if Onceover::Group.find(on_this)
@@ -289,16 +289,25 @@ class Onceover
289
289
  # Remove tests that do not have matching tags
290
290
  tests.keep_if do |test|
291
291
  filter_list.any? do |filter|
292
- if test.send(method)
293
- test.send(method).include?(filter)
294
- else
295
- false
296
- end
292
+ filter_test test, method, filter
297
293
  end
298
294
  end
299
295
  end
300
296
  end
301
297
  tests
302
298
  end
299
+
300
+ def filter_test(test, method, filter)
301
+ if test.send(method)
302
+ if method == 'tags' && filter.start_with?('~')
303
+ filter = filter.sub(/^~/, '')
304
+ ! test.send(method).include?(filter)
305
+ else
306
+ test.send(method).include?(filter)
307
+ end
308
+ else
309
+ false
310
+ end
311
+ end
303
312
  end
304
313
  end
data/onceover.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "onceover"
7
- s.version = "3.18.0"
7
+ s.version = "3.20.0"
8
8
  s.authors = ["Dylan Ratcliffe"]
9
9
  s.email = ["dylan.ratcliffe@puppet.com"]
10
10
  s.homepage = "https://github.com/dylanratcliffe/onceover"
@@ -22,7 +22,6 @@ Gem::Specification.new do |s|
22
22
  s.add_runtime_dependency 'colored', '~> 1.2'
23
23
  s.add_runtime_dependency 'cri', '>= 2.6'
24
24
  s.add_runtime_dependency 'deep_merge', '>= 1.0.0'
25
- s.add_runtime_dependency 'facter', '< 4.0.0'
26
25
  s.add_runtime_dependency 'git'
27
26
  s.add_runtime_dependency 'logging', '>= 2.0.0'
28
27
  s.add_runtime_dependency 'multi_json', '~> 1.10'
@@ -37,4 +36,8 @@ Gem::Specification.new do |s|
37
36
  s.add_runtime_dependency 'terminal-table', '>= 1.8.0'
38
37
  s.add_runtime_dependency 'versionomy', '>= 0.5.0'
39
38
 
39
+ s.add_development_dependency 'cucumber', '~> 4.1'
40
+ s.add_development_dependency 'pry', '~> 0.13.1'
41
+ s.add_development_dependency 'rubocop', '~> 1.6', '>= 1.6.1'
42
+ s.add_development_dependency 'rubygems-tasks', '~> 0.2.5'
40
43
  end
@@ -0,0 +1,2 @@
1
+ # This will fail all compilations so that we can quickly tell if it's being used
2
+ fail('Using alternate site.pp')
@@ -1,17 +1,17 @@
1
- forge "http://forge.puppetlabs.com"
2
- #
3
- # I want to download some modules to check if r10k feature in Onceover works correctly.
4
- #
5
-
6
- # Versions should be updated to be the latest at the time you start
7
- mod "puppetlabs/stdlib", '4.11.0'
8
-
9
- # Modules from Git
10
- # Examples: https://github.com/puppetlabs/r10k/blob/master/doc/puppetfile.mkd#examples
11
- mod 'apache',
12
- :git => 'https://github.com/puppetlabs/puppetlabs-apache',
13
- :commit => '83401079053dca11d61945bd9beef9ecf7576cbf'
14
-
15
- #mod 'apache',
16
- # :git => 'https://github.com/puppetlabs/puppetlabs-apache',
17
- # :branch => 'docs_experiment'
1
+ forge "http://forge.puppetlabs.com"
2
+ #
3
+ # I want to download some modules to check if r10k feature in Onceover works correctly.
4
+ #
5
+
6
+ # Versions should be updated to be the latest at the time you start
7
+ mod "puppetlabs/stdlib", '4.11.0'
8
+
9
+ # Modules from Git
10
+ # Examples: https://github.com/puppetlabs/r10k/blob/master/doc/puppetfile.mkd#examples
11
+ mod 'apache',
12
+ :git => 'https://github.com/puppetlabs/puppetlabs-apache',
13
+ :commit => '83401079053dca11d61945bd9beef9ecf7576cbf'
14
+
15
+ #mod 'apache',
16
+ # :git => 'https://github.com/puppetlabs/puppetlabs-apache',
17
+ # :branch => 'docs_experiment'
@@ -29,4 +29,5 @@ node default {
29
29
  # This is where you can declare classes for all nodes.
30
30
  # Example:
31
31
  # class { 'my_class': }
32
+ fail('This was using the manifest setting from environment.conf')
32
33
  }
@@ -0,0 +1,1091 @@
1
+ {
2
+ "os": {
3
+ "architecture": "amd64",
4
+ "release": {
5
+ "full": "10.0",
6
+ "major": "10",
7
+ "minor": "0"
8
+ },
9
+ "distro": {
10
+ "id": "Debian",
11
+ "codename": "buster",
12
+ "description": "Debian GNU/Linux 10 (buster)",
13
+ "release": {
14
+ "full": "10.0",
15
+ "major": "10",
16
+ "minor": "0"
17
+ }
18
+ },
19
+ "hardware": "x86_64",
20
+ "selinux": {
21
+ "enabled": false
22
+ },
23
+ "family": "Debian",
24
+ "name": "Debian"
25
+ },
26
+ "augeas": {
27
+ "version": "1.12.0"
28
+ },
29
+ "partitions": {
30
+ "/dev/mapper/localhost--vg-swap_1": {
31
+ "size_bytes": 4294967296,
32
+ "size": "4.00 GiB",
33
+ "filesystem": "swap",
34
+ "uuid": "e1d39dbf-07b1-40f3-bb00-61c373ff3679"
35
+ },
36
+ "/dev/mapper/localhost--vg-root": {
37
+ "size_bytes": 16919822336,
38
+ "size": "15.76 GiB",
39
+ "filesystem": "ext3",
40
+ "uuid": "d5e15cec-ac09-49ac-a7e9-69a0b4d3bd7a",
41
+ "mount": "/"
42
+ },
43
+ "/dev/sda2": {
44
+ "size_bytes": 1024,
45
+ "size": "1.00 KiB"
46
+ },
47
+ "/dev/sda5": {
48
+ "size_bytes": 21216886784,
49
+ "size": "19.76 GiB",
50
+ "filesystem": "LVM2_member",
51
+ "uuid": "PnWAEL-Qhls-LcWt-U7Rd-Odiy-U0k8-8fNFXY",
52
+ "partuuid": "4b9f600f-05"
53
+ },
54
+ "/dev/sda1": {
55
+ "size_bytes": 254803968,
56
+ "size": "243.00 MiB",
57
+ "filesystem": "ext2",
58
+ "uuid": "6e570548-0c10-405c-abbb-2325c6c85912",
59
+ "partuuid": "4b9f600f-01",
60
+ "mount": "/boot"
61
+ }
62
+ },
63
+ "mountpoints": {
64
+ "/dev": {
65
+ "device": "udev",
66
+ "filesystem": "devtmpfs",
67
+ "options": [
68
+ "rw",
69
+ "nosuid",
70
+ "relatime",
71
+ "size=2004744k",
72
+ "nr_inodes=501186",
73
+ "mode=755"
74
+ ],
75
+ "size_bytes": 2052857856,
76
+ "available_bytes": 2052857856,
77
+ "used_bytes": 0,
78
+ "capacity": "0%",
79
+ "size": "1.91 GiB",
80
+ "available": "1.91 GiB",
81
+ "used": "0 bytes"
82
+ },
83
+ "/dev/pts": {
84
+ "device": "devpts",
85
+ "filesystem": "devpts",
86
+ "options": [
87
+ "rw",
88
+ "nosuid",
89
+ "noexec",
90
+ "relatime",
91
+ "gid=5",
92
+ "mode=620",
93
+ "ptmxmode=000"
94
+ ],
95
+ "size_bytes": 0,
96
+ "available_bytes": 0,
97
+ "used_bytes": 0,
98
+ "capacity": "100%",
99
+ "size": "0 bytes",
100
+ "available": "0 bytes",
101
+ "used": "0 bytes"
102
+ },
103
+ "/run": {
104
+ "device": "tmpfs",
105
+ "filesystem": "tmpfs",
106
+ "options": [
107
+ "rw",
108
+ "nosuid",
109
+ "noexec",
110
+ "relatime",
111
+ "size=404128k",
112
+ "mode=755"
113
+ ],
114
+ "size_bytes": 413827072,
115
+ "available_bytes": 408092672,
116
+ "used_bytes": 5734400,
117
+ "capacity": "1.39%",
118
+ "size": "394.66 MiB",
119
+ "available": "389.19 MiB",
120
+ "used": "5.47 MiB"
121
+ },
122
+ "/": {
123
+ "device": "/dev/mapper/localhost--vg-root",
124
+ "filesystem": "ext3",
125
+ "options": [
126
+ "rw",
127
+ "relatime",
128
+ "errors=remount-ro"
129
+ ],
130
+ "size_bytes": 16586805248,
131
+ "available_bytes": 14209556480,
132
+ "used_bytes": 1531260928,
133
+ "capacity": "9.73%",
134
+ "size": "15.45 GiB",
135
+ "available": "13.23 GiB",
136
+ "used": "1.43 GiB"
137
+ },
138
+ "/dev/shm": {
139
+ "device": "tmpfs",
140
+ "filesystem": "tmpfs",
141
+ "options": [
142
+ "rw",
143
+ "nosuid",
144
+ "nodev"
145
+ ],
146
+ "size_bytes": 2069123072,
147
+ "available_bytes": 2069123072,
148
+ "used_bytes": 0,
149
+ "capacity": "0%",
150
+ "size": "1.93 GiB",
151
+ "available": "1.93 GiB",
152
+ "used": "0 bytes"
153
+ },
154
+ "/run/lock": {
155
+ "device": "tmpfs",
156
+ "filesystem": "tmpfs",
157
+ "options": [
158
+ "rw",
159
+ "nosuid",
160
+ "nodev",
161
+ "noexec",
162
+ "relatime",
163
+ "size=5120k"
164
+ ],
165
+ "size_bytes": 5242880,
166
+ "available_bytes": 5242880,
167
+ "used_bytes": 0,
168
+ "capacity": "0%",
169
+ "size": "5.00 MiB",
170
+ "available": "5.00 MiB",
171
+ "used": "0 bytes"
172
+ },
173
+ "/sys/fs/cgroup": {
174
+ "device": "tmpfs",
175
+ "filesystem": "tmpfs",
176
+ "options": [
177
+ "ro",
178
+ "nosuid",
179
+ "nodev",
180
+ "noexec",
181
+ "mode=755"
182
+ ],
183
+ "size_bytes": 2069123072,
184
+ "available_bytes": 2069123072,
185
+ "used_bytes": 0,
186
+ "capacity": "0%",
187
+ "size": "1.93 GiB",
188
+ "available": "1.93 GiB",
189
+ "used": "0 bytes"
190
+ },
191
+ "/dev/mqueue": {
192
+ "device": "mqueue",
193
+ "filesystem": "mqueue",
194
+ "options": [
195
+ "rw",
196
+ "relatime"
197
+ ],
198
+ "size_bytes": 0,
199
+ "available_bytes": 0,
200
+ "used_bytes": 0,
201
+ "capacity": "100%",
202
+ "size": "0 bytes",
203
+ "available": "0 bytes",
204
+ "used": "0 bytes"
205
+ },
206
+ "/dev/hugepages": {
207
+ "device": "hugetlbfs",
208
+ "filesystem": "hugetlbfs",
209
+ "options": [
210
+ "rw",
211
+ "relatime",
212
+ "pagesize=2M"
213
+ ],
214
+ "size_bytes": 0,
215
+ "available_bytes": 0,
216
+ "used_bytes": 0,
217
+ "capacity": "100%",
218
+ "size": "0 bytes",
219
+ "available": "0 bytes",
220
+ "used": "0 bytes"
221
+ },
222
+ "/boot": {
223
+ "device": "/dev/sda1",
224
+ "filesystem": "ext2",
225
+ "options": [
226
+ "rw",
227
+ "relatime",
228
+ "block_validity",
229
+ "barrier",
230
+ "user_xattr",
231
+ "acl"
232
+ ],
233
+ "size_bytes": 246755328,
234
+ "available_bytes": 183791616,
235
+ "used_bytes": 50224128,
236
+ "capacity": "21.46%",
237
+ "size": "235.32 MiB",
238
+ "available": "175.28 MiB",
239
+ "used": "47.90 MiB"
240
+ },
241
+ "/run/user/0": {
242
+ "device": "tmpfs",
243
+ "filesystem": "tmpfs",
244
+ "options": [
245
+ "rw",
246
+ "nosuid",
247
+ "nodev",
248
+ "relatime",
249
+ "size=404124k",
250
+ "mode=700"
251
+ ],
252
+ "size_bytes": 413822976,
253
+ "available_bytes": 413822976,
254
+ "used_bytes": 0,
255
+ "capacity": "0%",
256
+ "size": "394.65 MiB",
257
+ "available": "394.65 MiB",
258
+ "used": "0 bytes"
259
+ }
260
+ },
261
+ "virtual": "vmware",
262
+ "disks": {
263
+ "sr0": {
264
+ "model": "VMware IDE CDR00",
265
+ "size_bytes": 1073741312,
266
+ "size": "1.00 GiB",
267
+ "vendor": "NECVMWar",
268
+ "type": "hdd"
269
+ },
270
+ "sda": {
271
+ "model": "Virtual disk",
272
+ "size_bytes": 21474836480,
273
+ "size": "20.00 GiB",
274
+ "vendor": "VMware",
275
+ "type": "hdd"
276
+ }
277
+ },
278
+ "kernelversion": "4.19.0",
279
+ "ssh": {
280
+ "rsa": {
281
+ "fingerprints": {
282
+ "sha1": "SSHFP 1 1 05576cc92738720d76248d148747cfa8f32712ff",
283
+ "sha256": "SSHFP 1 2 aed61463793821b34ee97afcb8934c5aa13a473e6dd26a61fda080261c01def0"
284
+ },
285
+ "key": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDdoV7A+ji8joSrg4YUCTdFtLt+4Nphb9wBNDlLVdaD03SLXtyFt3vydtKzNjXRPzCSurb96Sfi32hmxHFrimLKMltBuZj0AlLEHlCnYCHDAlgL7cllqxqv5+s0b32cbhmwLx6ghaNk6XDc7hmCZuovnr4b4pHC2mka8P9gl1osb6dTRfsEZiLm3qu1fxMlJU4adS05u1uHAdcX32KF8ty1Q1s9EygwcLfmJOeKTxdA/D4axkuuLuGP48U0KO+ld4tHHb9yVVWKdhoCL3WSMYH7tMA3NRTbsbdEehEvbjQPQprZHk6uCuqcbh7Ua/L8i5/oVCH4FpTF3a+gQeN9wpLj",
286
+ "type": "ssh-rsa"
287
+ },
288
+ "ecdsa": {
289
+ "fingerprints": {
290
+ "sha1": "SSHFP 3 1 108a7a47d204732b908ebb2aa553f797ae85a495",
291
+ "sha256": "SSHFP 3 2 bcaa6eb722707b5a1cb7732f64b4aa303037c24c96731ffa9eb107a062562fb7"
292
+ },
293
+ "key": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL9WhxtGZBEre40NnExVbI5PBO8uqcIoeqFeDdgr3GItFUKNJaTKJnroImYyiU+GP6pPnyW3wsy9rAENm6AfzsY=",
294
+ "type": "ecdsa-sha2-nistp256"
295
+ },
296
+ "ed25519": {
297
+ "fingerprints": {
298
+ "sha1": "SSHFP 4 1 0701e1636d201ea085c317968e75f26003244255",
299
+ "sha256": "SSHFP 4 2 c8379fec233379a68aa6086d8aa6c1dbd8db39fef95fb5fa8a7cee2b60c27dc7"
300
+ },
301
+ "key": "AAAAC3NzaC1lZDI1NTE5AAAAIJgYWtJU2Dn1mY0wpKIZHfUNb+0BMDTXl+cNciltzpQ3",
302
+ "type": "ssh-ed25519"
303
+ }
304
+ },
305
+ "networking": {
306
+ "scope6": "link",
307
+ "mtu": 1500,
308
+ "ip6": "fe80::250:56ff:fe9a:521a",
309
+ "mac": "00:50:56:9a:52:1a",
310
+ "fqdn": "foo.example.com",
311
+ "netmask6": "ffff:ffff:ffff:ffff::",
312
+ "primary": "ens192",
313
+ "network": "10.16.112.0",
314
+ "netmask": "255.255.240.0",
315
+ "domain": "example.com",
316
+ "dhcp": "10.32.22.9",
317
+ "network6": "fe80::",
318
+ "interfaces": {
319
+ "lo": {
320
+ "bindings": [
321
+ {
322
+ "address": "127.0.0.1",
323
+ "netmask": "255.0.0.0",
324
+ "network": "127.0.0.0"
325
+ }
326
+ ],
327
+ "bindings6": [
328
+ {
329
+ "address": "::1",
330
+ "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
331
+ "network": "::1",
332
+ "scope6": "host"
333
+ }
334
+ ],
335
+ "mtu": 65536,
336
+ "ip": "127.0.0.1",
337
+ "netmask": "255.0.0.0",
338
+ "network": "127.0.0.0",
339
+ "ip6": "::1",
340
+ "netmask6": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
341
+ "network6": "::1",
342
+ "scope6": "host"
343
+ },
344
+ "ens192": {
345
+ "mac": "00:50:56:9a:52:1a",
346
+ "bindings": [
347
+ {
348
+ "address": "10.16.124.235",
349
+ "netmask": "255.255.240.0",
350
+ "network": "10.16.112.0"
351
+ }
352
+ ],
353
+ "bindings6": [
354
+ {
355
+ "address": "fe80::250:56ff:fe9a:521a",
356
+ "netmask": "ffff:ffff:ffff:ffff::",
357
+ "network": "fe80::",
358
+ "scope6": "link"
359
+ }
360
+ ],
361
+ "mtu": 1500,
362
+ "dhcp": "10.32.22.9",
363
+ "ip": "10.16.124.235",
364
+ "netmask": "255.255.240.0",
365
+ "network": "10.16.112.0",
366
+ "ip6": "fe80::250:56ff:fe9a:521a",
367
+ "netmask6": "ffff:ffff:ffff:ffff::",
368
+ "network6": "fe80::",
369
+ "scope6": "link"
370
+ }
371
+ },
372
+ "hostname": "foo",
373
+ "ip": "10.16.124.235"
374
+ },
375
+ "timezone": "PST",
376
+ "filesystems": "ext2,ext3,ext4",
377
+ "is_virtual": true,
378
+ "processors": {
379
+ "isa": "unknown",
380
+ "physicalcount": 1,
381
+ "models": [
382
+ "Intel(R) Xeon(R) CPU E5-2697 v4 @ 2.30GHz",
383
+ "Intel(R) Xeon(R) CPU E5-2697 v4 @ 2.30GHz",
384
+ "Intel(R) Xeon(R) CPU E5-2697 v4 @ 2.30GHz",
385
+ "Intel(R) Xeon(R) CPU E5-2697 v4 @ 2.30GHz"
386
+ ],
387
+ "speed": "2.29 GHz",
388
+ "count": 4
389
+ },
390
+ "dmi": {
391
+ "board": {
392
+ "serial_number": "None",
393
+ "manufacturer": "Intel Corporation",
394
+ "product": "440BX Desktop Reference Platform"
395
+ },
396
+ "chassis": {
397
+ "type": "Other",
398
+ "asset_tag": "No Asset Tag"
399
+ },
400
+ "manufacturer": "VMware, Inc.",
401
+ "product": {
402
+ "name": "VMware Virtual Platform",
403
+ "serial_number": "VMware-42 1a af ad 81 f1 50 f3-13 72 c0 e5 63 24 c6 28",
404
+ "uuid": "adaf1a42-f181-f350-1372-c0e56324c628"
405
+ },
406
+ "bios": {
407
+ "vendor": "Phoenix Technologies LTD",
408
+ "release_date": "12/12/2018",
409
+ "version": "6.00"
410
+ }
411
+ },
412
+ "load_averages": {
413
+ "1m": 0.02,
414
+ "5m": 0.05,
415
+ "15m": 0.02
416
+ },
417
+ "path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
418
+ "identity": {
419
+ "uid": 0,
420
+ "user": "root",
421
+ "gid": 0,
422
+ "group": "root",
423
+ "privileged": true
424
+ },
425
+ "kernelmajversion": "4.19",
426
+ "kernelrelease": "4.19.0-5-amd64",
427
+ "system_uptime": {
428
+ "days": 0,
429
+ "seconds": 287,
430
+ "hours": 0,
431
+ "uptime": "0:04 hours"
432
+ },
433
+ "facterversion": "4.0.52",
434
+ "ruby": {
435
+ "sitedir": "/opt/puppetlabs/puppet/lib/ruby/site_ruby/2.7.0",
436
+ "platform": "x86_64-linux",
437
+ "version": "2.7.2"
438
+ },
439
+ "fips_enabled": false,
440
+ "hypervisors": {
441
+ "vmware": {
442
+ "version": "ESXi 6.7"
443
+ },
444
+ "ldom": {
445
+ "domain_name": "foo"
446
+ }
447
+ },
448
+ "memory": {
449
+ "system": {
450
+ "total": "3.85 GiB",
451
+ "total_bytes": 4138246144,
452
+ "used_bytes": 440221696,
453
+ "capacity": "10.64%",
454
+ "available_bytes": 3698024448,
455
+ "available": "3.44 GiB",
456
+ "used": "419.83 MiB"
457
+ },
458
+ "swap": {
459
+ "total": "4.00 GiB",
460
+ "total_bytes": 4294963200,
461
+ "used_bytes": 0,
462
+ "capacity": "0.00%",
463
+ "available_bytes": 4294963200,
464
+ "available": "4.00 GiB",
465
+ "used": "0 bytes"
466
+ }
467
+ },
468
+ "kernel": "Linux",
469
+ "puppetversion": "7.5.0",
470
+ "debian_kernel": "#1 SMP Debian 4.19.37-5 (2019-06-19)\n",
471
+ "who2bug": [],
472
+ "puppet_cert_paths": {
473
+ "confdir": "/etc/puppetlabs/puppet",
474
+ "ssldir": "/etc/puppetlabs/puppet/ssl",
475
+ "cert_dir": "/etc/puppetlabs/puppet/ssl/certs",
476
+ "ca_path": "/etc/puppetlabs/puppet/ssl/certs/ca.pem",
477
+ "client_cert_path": "/etc/puppetlabs/puppet/ssl/certs/.pem",
478
+ "client_key_path": "/etc/puppetlabs/puppet/ssl/private_keys/.pem"
479
+ },
480
+ "puppet_files_dir_present": false,
481
+ "puppet_ssldir": "/etc/puppetlabs/puppet/ssl",
482
+ "puppet_digest_algorithm": "sha256",
483
+ "puppet_config": "/etc/puppetlabs/puppet/puppet.conf",
484
+ "puppet_stringify_facts": false,
485
+ "mco_confdir": "/etc/mcollective/etc",
486
+ "context": "",
487
+ "puppet_inventory_metadata": {
488
+ "packages": {
489
+ "collection_enabled": false,
490
+ "last_collection_time": "0.0s"
491
+ }
492
+ },
493
+ "meltdown": {
494
+ "CVE-2017-5753": {
495
+ "CVE": "2017-5753",
496
+ "description": "SPECTRE VARIANT 1",
497
+ "vulnerable": false,
498
+ "info": {
499
+ "hardware": "Mitigation: __user pointer sanitization"
500
+ }
501
+ },
502
+ "CVE-2017-5715": {
503
+ "CVE": "2017-5715",
504
+ "description": "SPECTRE VARIANT 2",
505
+ "vulnerable": false,
506
+ "info": {
507
+ "hardware": "Full retpoline + IBPB are mitigating the vulnerability"
508
+ }
509
+ },
510
+ "CVE-2017-5754": {
511
+ "CVE": "2017-5754",
512
+ "description": "MELTDOWN",
513
+ "vulnerable": false,
514
+ "info": {
515
+ "hardware": "Mitigation: PTI"
516
+ }
517
+ },
518
+ "CVE-2018-3640": {
519
+ "CVE": "2018-3640",
520
+ "description": "VARIANT 3A",
521
+ "vulnerable": false,
522
+ "info": {
523
+ "hardware": "your CPU microcode mitigates the vulnerability"
524
+ }
525
+ },
526
+ "CVE-2018-3639": {
527
+ "CVE": "2018-3639",
528
+ "description": "VARIANT 4",
529
+ "vulnerable": false,
530
+ "info": {
531
+ "hardware": "Mitigation: Speculative Store Bypass disabled via prctl and seccomp"
532
+ }
533
+ },
534
+ "CVE-2018-3615": {
535
+ "CVE": "2018-3615",
536
+ "description": "L1TF SGX",
537
+ "vulnerable": false,
538
+ "info": {
539
+ "hardware": "your CPU vendor reported your CPU model as not vulnerable"
540
+ }
541
+ },
542
+ "CVE-2018-3620": {
543
+ "CVE": "2018-3620",
544
+ "description": "L1TF OS",
545
+ "vulnerable": false,
546
+ "info": {
547
+ "hardware": "Mitigation: PTE Inversion"
548
+ }
549
+ },
550
+ "CVE-2018-3646": {
551
+ "CVE": "2018-3646",
552
+ "description": "L1TF VMM",
553
+ "vulnerable": false,
554
+ "info": {
555
+ "hardware": "this system is not running a hypervisor"
556
+ }
557
+ },
558
+ "CVE-2018-12126": {
559
+ "CVE": "2018-12126",
560
+ "description": "MSBDS",
561
+ "vulnerable": false,
562
+ "info": {
563
+ "hardware": "Mitigation: Clear CPU buffers; SMT Host state unknown"
564
+ }
565
+ },
566
+ "CVE-2018-12130": {
567
+ "CVE": "2018-12130",
568
+ "description": "MFBDS",
569
+ "vulnerable": false,
570
+ "info": {
571
+ "hardware": "Mitigation: Clear CPU buffers; SMT Host state unknown"
572
+ }
573
+ },
574
+ "CVE-2018-12127": {
575
+ "CVE": "2018-12127",
576
+ "description": "MLPDS",
577
+ "vulnerable": false,
578
+ "info": {
579
+ "hardware": "Mitigation: Clear CPU buffers; SMT Host state unknown"
580
+ }
581
+ },
582
+ "CVE-2019-11091": {
583
+ "CVE": "2019-11091",
584
+ "description": "MDSUM",
585
+ "vulnerable": false,
586
+ "info": {
587
+ "hardware": "Mitigation: Clear CPU buffers; SMT Host state unknown"
588
+ }
589
+ }
590
+ },
591
+ "package_provider": "apt",
592
+ "current_environment": "production",
593
+ "puppet_agent_pid": 2614,
594
+ "windows_java_temp": "\\tmp",
595
+ "lvm_support": true,
596
+ "lvm_vgs": 1,
597
+ "lvm_vg_0": "localhost-vg",
598
+ "lvm_vg_localhost-vg_pvs": "/dev/sda5",
599
+ "lvm_pvs": 1,
600
+ "lvm_pv_0": "/dev/sda5",
601
+ "jenkins_plugins": "",
602
+ "python_release": "2.7",
603
+ "python2_release": "2.7",
604
+ "python3_release": "3.7",
605
+ "os_maj_version": "10",
606
+ "is_pe": false,
607
+ "aio_agent_version": "7.4.1.59",
608
+ "vcsrepo_svn_ver": "",
609
+ "number_string": "",
610
+ "apt_reboot_required": false,
611
+ "function": "",
612
+ "aio_agent_build": "7.4.1.59.g5d5199a8a",
613
+ "python_version": "2.7.16",
614
+ "python2_version": "2.7.16",
615
+ "python3_version": "3.7.3",
616
+ "mongodb_is_master": "not_installed",
617
+ "is_valid_hostname": false,
618
+ "iptables_version": "1.8.2",
619
+ "mysql_server_id": 23180442,
620
+ "staging_http_get": "curl",
621
+ "whereami": "pdx",
622
+ "platform_tag": "debian-10-amd64",
623
+ "puppetserver_installed": false,
624
+ "env_temp_variable": "/tmp",
625
+ "docker_home_dirs": {
626
+ "root": "/root",
627
+ "daemon": "/usr/sbin",
628
+ "bin": "/bin",
629
+ "sys": "/dev",
630
+ "sync": "/bin",
631
+ "games": "/usr/games",
632
+ "man": "/var/cache/man",
633
+ "lp": "/var/spool/lpd",
634
+ "mail": "/var/mail",
635
+ "news": "/var/spool/news",
636
+ "uucp": "/var/spool/uucp",
637
+ "proxy": "/bin",
638
+ "www-data": "/var/www",
639
+ "backup": "/var/backups",
640
+ "list": "/var/list",
641
+ "irc": "/var/run/ircd",
642
+ "gnats": "/var/lib/gnats",
643
+ "nobody": "/nonexistent",
644
+ "_apt": "/nonexistent",
645
+ "systemd-timesync": "/run/systemd",
646
+ "systemd-network": "/run/systemd",
647
+ "systemd-resolve": "/run/systemd",
648
+ "messagebus": "/nonexistent",
649
+ "sshd": "/run/sshd",
650
+ "ntp": "/nonexistent",
651
+ "systemd-coredump": "/"
652
+ },
653
+ "apt_has_updates": true,
654
+ "apt_has_dist_updates": true,
655
+ "apt_package_updates": [
656
+ "base-files",
657
+ "ncurses-bin",
658
+ "libperl5.28",
659
+ "perl",
660
+ "perl-base",
661
+ "perl-modules-5.28",
662
+ "bzip2",
663
+ "libbz2-1.0",
664
+ "ncurses-base",
665
+ "libnss-systemd",
666
+ "libsystemd0",
667
+ "libpam-systemd",
668
+ "systemd",
669
+ "udev",
670
+ "libudev1",
671
+ "systemd-sysv",
672
+ "dbus",
673
+ "libdbus-1-3",
674
+ "libexpat1",
675
+ "libjson-c3",
676
+ "libssl1.1",
677
+ "libcryptsetup12",
678
+ "libidn2-0",
679
+ "libp11-kit0",
680
+ "libgnutls30",
681
+ "libzstd1",
682
+ "libapt-pkg5.0",
683
+ "libapt-inst2.0",
684
+ "apt",
685
+ "apt-utils",
686
+ "gpgv",
687
+ "initramfs-tools-core",
688
+ "initramfs-tools",
689
+ "libext2fs2",
690
+ "e2fsprogs",
691
+ "cron",
692
+ "console-setup-linux",
693
+ "console-setup",
694
+ "keyboard-configuration",
695
+ "python2.7",
696
+ "python2.7-minimal",
697
+ "libpython2.7-stdlib",
698
+ "libpython2.7-minimal",
699
+ "libncurses6",
700
+ "libtinfo6",
701
+ "libncursesw6",
702
+ "libsqlite3-0",
703
+ "python3.7",
704
+ "libpython3.7-stdlib",
705
+ "python3.7-minimal",
706
+ "libpython3.7-minimal",
707
+ "tzdata",
708
+ "iproute2",
709
+ "iputils-ping",
710
+ "libicu63",
711
+ "libxml2",
712
+ "bind9-host",
713
+ "libbind9-161",
714
+ "libisccfg163",
715
+ "libisccc161",
716
+ "libdns1104",
717
+ "libisc1100",
718
+ "libcom-err2",
719
+ "libgssapi-krb5-2",
720
+ "libkrb5-3",
721
+ "libkrb5support0",
722
+ "libk5crypto3",
723
+ "liblwres161",
724
+ "file",
725
+ "libmagic1",
726
+ "libmagic-mgc",
727
+ "krb5-locales",
728
+ "libsasl2-modules-db",
729
+ "libsasl2-2",
730
+ "libldap-common",
731
+ "libldap-2.4-2",
732
+ "ncurses-term",
733
+ "openssh-sftp-server",
734
+ "openssh-server",
735
+ "openssh-client",
736
+ "reportbug",
737
+ "gpgsm",
738
+ "gpg-wks-server",
739
+ "gpg-wks-client",
740
+ "gnupg-utils",
741
+ "gpg-agent",
742
+ "gpg",
743
+ "gnupg-l10n",
744
+ "dirmngr",
745
+ "gnupg",
746
+ "gpgconf",
747
+ "python-apt-common",
748
+ "python3-apt",
749
+ "python3-reportbug",
750
+ "openssl",
751
+ "ca-certificates",
752
+ "libnghttp2-14",
753
+ "curl",
754
+ "libcurl4",
755
+ "distro-info-data",
756
+ "fuse",
757
+ "libfuse2",
758
+ "libefivar1",
759
+ "libefiboot1",
760
+ "grub-pc",
761
+ "grub2-common",
762
+ "grub-pc-bin",
763
+ "libfreetype6",
764
+ "grub-common",
765
+ "libcurl3-gnutls",
766
+ "libisc-export1100",
767
+ "libdns-export1104",
768
+ "libglib2.0-0",
769
+ "libglib2.0-data",
770
+ "rake",
771
+ "libruby2.5",
772
+ "libsasl2-modules",
773
+ "libss2",
774
+ "libx11-data",
775
+ "libx11-6",
776
+ "libxslt1.1",
777
+ "linux-libc-dev",
778
+ "open-vm-tools",
779
+ "patch",
780
+ "rubygems-integration",
781
+ "ruby2.5",
782
+ "sudo",
783
+ "unzip"
784
+ ],
785
+ "apt_package_dist_updates": [
786
+ "base-files",
787
+ "ncurses-bin",
788
+ "libperl5.28",
789
+ "perl",
790
+ "perl-base",
791
+ "perl-modules-5.28",
792
+ "bzip2",
793
+ "libbz2-1.0",
794
+ "ncurses-base",
795
+ "libnss-systemd",
796
+ "libsystemd0",
797
+ "libpam-systemd",
798
+ "systemd",
799
+ "udev",
800
+ "libudev1",
801
+ "systemd-sysv",
802
+ "dbus",
803
+ "libdbus-1-3",
804
+ "libexpat1",
805
+ "libjson-c3",
806
+ "libssl1.1",
807
+ "libcryptsetup12",
808
+ "libidn2-0",
809
+ "libp11-kit0",
810
+ "libgnutls30",
811
+ "libzstd1",
812
+ "libapt-pkg5.0",
813
+ "libapt-inst2.0",
814
+ "apt",
815
+ "apt-utils",
816
+ "gpgv",
817
+ "initramfs-tools-core",
818
+ "initramfs-tools",
819
+ "libext2fs2",
820
+ "e2fsprogs",
821
+ "cron",
822
+ "console-setup-linux",
823
+ "console-setup",
824
+ "keyboard-configuration",
825
+ "python2.7",
826
+ "python2.7-minimal",
827
+ "libpython2.7-stdlib",
828
+ "libpython2.7-minimal",
829
+ "libncurses6",
830
+ "libtinfo6",
831
+ "libncursesw6",
832
+ "libsqlite3-0",
833
+ "python3.7",
834
+ "libpython3.7-stdlib",
835
+ "python3.7-minimal",
836
+ "libpython3.7-minimal",
837
+ "tzdata",
838
+ "iproute2",
839
+ "iputils-ping",
840
+ "libicu63",
841
+ "libxml2",
842
+ "bind9-host",
843
+ "libbind9-161",
844
+ "libisccfg163",
845
+ "libisccc161",
846
+ "libdns1104",
847
+ "libisc1100",
848
+ "libcom-err2",
849
+ "libgssapi-krb5-2",
850
+ "libkrb5-3",
851
+ "libkrb5support0",
852
+ "libk5crypto3",
853
+ "liblwres161",
854
+ "file",
855
+ "libmagic1",
856
+ "libmagic-mgc",
857
+ "krb5-locales",
858
+ "libsasl2-modules-db",
859
+ "libsasl2-2",
860
+ "libldap-common",
861
+ "libldap-2.4-2",
862
+ "ncurses-term",
863
+ "openssh-sftp-server",
864
+ "openssh-server",
865
+ "openssh-client",
866
+ "reportbug",
867
+ "gpgsm",
868
+ "gpg-wks-server",
869
+ "gpg-wks-client",
870
+ "gnupg-utils",
871
+ "gpg-agent",
872
+ "gpg",
873
+ "gnupg-l10n",
874
+ "dirmngr",
875
+ "gnupg",
876
+ "gpgconf",
877
+ "python-apt-common",
878
+ "python3-apt",
879
+ "python3-reportbug",
880
+ "openssl",
881
+ "ca-certificates",
882
+ "libnghttp2-14",
883
+ "curl",
884
+ "libcurl4",
885
+ "distro-info-data",
886
+ "fuse",
887
+ "libfuse2",
888
+ "libefivar1",
889
+ "libefiboot1",
890
+ "grub-pc",
891
+ "grub2-common",
892
+ "grub-pc-bin",
893
+ "libfreetype6",
894
+ "grub-common",
895
+ "libcurl3-gnutls",
896
+ "libisc-export1100",
897
+ "libdns-export1104",
898
+ "libglib2.0-0",
899
+ "libglib2.0-data",
900
+ "rake",
901
+ "libruby2.5",
902
+ "libsasl2-modules",
903
+ "libss2",
904
+ "libx11-data",
905
+ "libx11-6",
906
+ "libxslt1.1",
907
+ "linux-image-4.19.0-14-amd64",
908
+ "linux-image-amd64",
909
+ "linux-libc-dev",
910
+ "open-vm-tools",
911
+ "patch",
912
+ "rubygems-integration",
913
+ "ruby2.5",
914
+ "sudo",
915
+ "unzip"
916
+ ],
917
+ "apt_package_security_updates": [
918
+ "libexpat1",
919
+ "libjson-c3",
920
+ "libssl1.1",
921
+ "libidn2-0",
922
+ "libp11-kit0",
923
+ "libzstd1",
924
+ "libapt-pkg5.0",
925
+ "libapt-inst2.0",
926
+ "apt",
927
+ "apt-utils",
928
+ "libicu63",
929
+ "bind9-host",
930
+ "libbind9-161",
931
+ "libisccfg163",
932
+ "libisccc161",
933
+ "libdns1104",
934
+ "libisc1100",
935
+ "libgssapi-krb5-2",
936
+ "libkrb5-3",
937
+ "libkrb5support0",
938
+ "libk5crypto3",
939
+ "liblwres161",
940
+ "krb5-locales",
941
+ "libsasl2-modules-db",
942
+ "libsasl2-2",
943
+ "libldap-common",
944
+ "libldap-2.4-2",
945
+ "python-apt-common",
946
+ "python3-apt",
947
+ "openssl",
948
+ "libnghttp2-14",
949
+ "curl",
950
+ "libcurl4",
951
+ "grub-pc",
952
+ "grub2-common",
953
+ "grub-pc-bin",
954
+ "libfreetype6",
955
+ "grub-common",
956
+ "libcurl3-gnutls",
957
+ "libisc-export1100",
958
+ "libdns-export1104",
959
+ "libsasl2-modules",
960
+ "linux-libc-dev",
961
+ "patch",
962
+ "sudo"
963
+ ],
964
+ "apt_package_security_dist_updates": [
965
+ "libexpat1",
966
+ "libjson-c3",
967
+ "libssl1.1",
968
+ "libidn2-0",
969
+ "libp11-kit0",
970
+ "libzstd1",
971
+ "libapt-pkg5.0",
972
+ "libapt-inst2.0",
973
+ "apt",
974
+ "apt-utils",
975
+ "libicu63",
976
+ "bind9-host",
977
+ "libbind9-161",
978
+ "libisccfg163",
979
+ "libisccc161",
980
+ "libdns1104",
981
+ "libisc1100",
982
+ "libgssapi-krb5-2",
983
+ "libkrb5-3",
984
+ "libkrb5support0",
985
+ "libk5crypto3",
986
+ "liblwres161",
987
+ "krb5-locales",
988
+ "libsasl2-modules-db",
989
+ "libsasl2-2",
990
+ "libldap-common",
991
+ "libldap-2.4-2",
992
+ "python-apt-common",
993
+ "python3-apt",
994
+ "openssl",
995
+ "libnghttp2-14",
996
+ "curl",
997
+ "libcurl4",
998
+ "grub-pc",
999
+ "grub2-common",
1000
+ "grub-pc-bin",
1001
+ "libfreetype6",
1002
+ "grub-common",
1003
+ "libcurl3-gnutls",
1004
+ "libisc-export1100",
1005
+ "libdns-export1104",
1006
+ "libsasl2-modules",
1007
+ "linux-image-4.19.0-14-amd64",
1008
+ "linux-image-amd64",
1009
+ "linux-libc-dev",
1010
+ "patch",
1011
+ "sudo"
1012
+ ],
1013
+ "apt_updates": 128,
1014
+ "apt_dist_updates": 130,
1015
+ "apt_security_updates": 45,
1016
+ "apt_security_dist_updates": 47,
1017
+ "puppet_vardir": "/opt/puppetlabs/puppet/cache",
1018
+ "puppet_environmentpath": "/etc/puppetlabs/code/environments",
1019
+ "puppet_server": "pe-infranext-prod.infc-aws.puppet.net",
1020
+ "systemd": true,
1021
+ "systemd_version": "241",
1022
+ "systemd_internal_services": {
1023
+ "systemd-boot-check-no-failures.service": "disabled",
1024
+ "systemd-fsck-root.service": "enabled-runtime",
1025
+ "systemd-networkd-wait-online.service": "disabled",
1026
+ "systemd-networkd.service": "disabled",
1027
+ "systemd-resolved.service": "disabled",
1028
+ "systemd-time-wait-sync.service": "disabled",
1029
+ "systemd-timesyncd.service": "enabled"
1030
+ },
1031
+ "network_nexthop_ip": "10.16.112.1",
1032
+ "network_primary_interface": "ens192",
1033
+ "network_primary_ip": "10.16.124.235",
1034
+ "prometheus_alert_manager_running": false,
1035
+ "stage": "crusade",
1036
+ "haszfs": false,
1037
+ "apt_update_last_success": 1615413102,
1038
+ "virt_libvirt": false,
1039
+ "classification": {
1040
+ "hostname": "marital-crusade",
1041
+ "parts": [
1042
+ "marital",
1043
+ "",
1044
+ "",
1045
+ "",
1046
+ "crusade",
1047
+ ""
1048
+ ],
1049
+ "version": 0,
1050
+ "group": "marital",
1051
+ "function": "",
1052
+ "number": "",
1053
+ "number_string": "",
1054
+ "context": "",
1055
+ "stage": "crusade",
1056
+ "id": ""
1057
+ },
1058
+ "ip6tables_version": "1.8.2",
1059
+ "root_home": "/root",
1060
+ "primary_ip": "10.16.124.235",
1061
+ "primary_iface": "eth0",
1062
+ "group": "marital",
1063
+ "function_number": "",
1064
+ "platform_symlink_writable": true,
1065
+ "service_provider": "systemd",
1066
+ "pe_patch": {
1067
+ "package_updates": [],
1068
+ "package_update_count": 0,
1069
+ "missing_update_kbs": [],
1070
+ "security_package_updates": [],
1071
+ "security_package_update_count": 0,
1072
+ "blackouts": {},
1073
+ "pinned_packages": [],
1074
+ "last_run": {},
1075
+ "patch_group": "",
1076
+ "reboot_override": "default",
1077
+ "reboots": {
1078
+ "reboot_required": "unknown"
1079
+ },
1080
+ "block_patching_on_warnings": "false",
1081
+ "warnings": {
1082
+ "update_file": "Update file not found, update information invalid",
1083
+ "security_update_file": "Security update file not found, update information invalid"
1084
+ },
1085
+ "blocked": false,
1086
+ "blocked_reasons": []
1087
+ },
1088
+ "domain": "example.com",
1089
+ "fqdn": "foo.example.com",
1090
+ "hostname": "foo"
1091
+ }