1111# The cache is stored in $libdir/facts_dot_d.cache as a mode
1212# 600 file and will have the end result of not calling your
1313# fact scripts more often than is needed
14-
1514class Facter ::Util ::DotD
1615 require 'yaml'
1716
18- def initialize ( dir = " /etc/facts.d" , cache_file = File . join ( Puppet [ :libdir ] , " facts_dot_d.cache" ) )
17+ def initialize ( dir = ' /etc/facts.d' , cache_file = File . join ( Puppet [ :libdir ] , ' facts_dot_d.cache' ) )
1918 @dir = dir
2019 @cache_file = cache_file
2120 @cache = nil
22- @types = { " .txt" => :txt , " .json" => :json , " .yaml" => :yaml }
21+ @types = { ' .txt' => :txt , ' .json' => :json , ' .yaml' => :yaml }
2322 end
2423
2524 def entries
26- Dir . entries ( @dir ) . reject { |f | f =~ / ^\. |\. ttl$/ } . sort . map { |f | File . join ( @dir , f ) }
25+ Dir . entries ( @dir ) . reject { |f | f =~ %r{ ^\. |\. ttl$} } . sort . map { |f | File . join ( @dir , f ) }
2726 rescue
2827 [ ]
2928 end
@@ -35,17 +34,17 @@ def fact_type(file)
3534
3635 type = :script if type == :unknown && File . executable? ( file )
3736
38- return type
37+ type
3938 end
4039
4140 def txt_parser ( file )
4241 File . readlines ( file ) . each do |line |
43- if line =~ /^([^=]+)=(.+)$/
44- var = $1; val = $2
42+ next unless line =~ %r{^([^=]+)=(.+)$}
43+ var = Regexp . last_match ( 1 )
44+ val = Regexp . last_match ( 2 )
4545
46- Facter . add ( var ) do
47- setcode { val }
48- end
46+ Facter . add ( var ) do
47+ setcode { val }
4948 end
5049 end
5150 rescue StandardError => e
@@ -60,7 +59,7 @@ def json_parser(file)
6059 raise
6160 end
6261
63- JSON . load ( File . read ( file ) ) . each_pair do |f , v |
62+ JSON . parse ( File . read ( file ) ) . each_pair do |f , v |
6463 Facter . add ( f ) do
6564 setcode { v }
6665 end
@@ -85,25 +84,25 @@ def script_parser(file)
8584 result = cache_lookup ( file )
8685 ttl = cache_time ( file )
8786
88- unless result
87+ if result
88+ Facter . debug ( "Using cached data for #{ file } " )
89+ else
8990 result = Facter ::Util ::Resolution . exec ( file )
9091
9192 if ttl > 0
9293 Facter . debug ( "Updating cache for #{ file } " )
9394 cache_store ( file , result )
9495 cache_save!
9596 end
96- else
97- Facter . debug ( "Using cached data for #{ file } " )
9897 end
9998
10099 result . split ( "\n " ) . each do |line |
101- if line =~ /^(.+)=(.+)$/
102- var = $1; val = $2
100+ next unless line =~ %r{^(.+)=(.+)$}
101+ var = Regexp . last_match ( 1 )
102+ val = Regexp . last_match ( 2 )
103103
104- Facter . add ( var ) do
105- setcode { val }
106- end
104+ Facter . add ( var ) do
105+ setcode { val }
107106 end
108107 end
109108 rescue StandardError => e
@@ -113,15 +112,15 @@ def script_parser(file)
113112
114113 def cache_save!
115114 cache = load_cache
116- File . open ( @cache_file , "w" , 0600 ) { |f | f . write ( YAML . dump ( cache ) ) }
117- rescue
115+ File . open ( @cache_file , 'w' , 0o600 ) { |f | f . write ( YAML . dump ( cache ) ) }
116+ rescue # rubocop:disable Lint/HandleExceptions - Is meant to be suppressed
118117 end
119118
120119 def cache_store ( file , data )
121120 load_cache
122121
123- @cache [ file ] = { : data => data , : stored => Time . now . to_i }
124- rescue
122+ @cache [ file ] = { data : data , stored : Time . now . to_i }
123+ rescue # rubocop:disable Lint/HandleExceptions - Is meant to be suppressed
125124 end
126125
127126 def cache_lookup ( file )
@@ -131,21 +130,18 @@ def cache_lookup(file)
131130
132131 ttl = cache_time ( file )
133132
134- if cache [ file ]
135- now = Time . now . to_i
133+ return nil unless cache [ file ]
134+ now = Time . now . to_i
136135
137- return cache [ file ] [ :data ] if ttl == -1
138- return cache [ file ] [ :data ] if ( now - cache [ file ] [ :stored ] ) <= ttl
139- return nil
140- else
141- return nil
142- end
136+ return cache [ file ] [ :data ] if ttl == -1
137+ return cache [ file ] [ :data ] if ( now - cache [ file ] [ :stored ] ) <= ttl
138+ return nil
143139 rescue
144140 return nil
145141 end
146142
147143 def cache_time ( file )
148- meta = file + " .ttl"
144+ meta = file + ' .ttl'
149145
150146 return File . read ( meta ) . chomp . to_i
151147 rescue
@@ -154,11 +150,11 @@ def cache_time(file)
154150
155151 def load_cache
156152 unless @cache
157- if File . exist? ( @cache_file )
158- @cache = YAML . load_file ( @cache_file )
159- else
160- @cache = { }
161- end
153+ @cache = if File . exist? ( @cache_file )
154+ YAML . load_file ( @cache_file )
155+ else
156+ { }
157+ end
162158 end
163159
164160 return @cache
@@ -172,28 +168,26 @@ def create
172168 type = fact_type ( fact )
173169 parser = "#{ type } _parser"
174170
175- if respond_to? ( "#{ type } _parser" )
176- Facter . debug ( "Parsing #{ fact } using #{ parser } " )
171+ next unless respond_to? ( "#{ type } _parser" )
172+ Facter . debug ( "Parsing #{ fact } using #{ parser } " )
177173
178- send ( parser , fact )
179- end
174+ send ( parser , fact )
180175 end
181176 end
182177end
183178
184-
185- mdata = Facter . version . match ( /(\d +)\. (\d +)\. (\d +)/ )
179+ mdata = Facter . version . match ( %r{(\d +)\. (\d +)\. (\d +)} )
186180if mdata
187- ( major , minor , patch ) = mdata . captures . map { |v | v . to_i }
181+ ( major , minor , _patch ) = mdata . captures . map { |v | v . to_i }
188182 if major < 2
189183 # Facter 1.7 introduced external facts support directly
190- unless major == 1 and minor > 6
191- Facter ::Util ::DotD . new ( " /etc/facter/facts.d" ) . create
192- Facter ::Util ::DotD . new ( " /etc/puppetlabs/facter/facts.d" ) . create
184+ unless major == 1 && minor > 6
185+ Facter ::Util ::DotD . new ( ' /etc/facter/facts.d' ) . create
186+ Facter ::Util ::DotD . new ( ' /etc/puppetlabs/facter/facts.d' ) . create
193187
194188 # Windows has a different configuration directory that defaults to a vendor
195189 # specific sub directory of the %COMMON_APPDATA% directory.
196- if Dir . const_defined? 'COMMON_APPDATA' then
190+ if Dir . const_defined? 'COMMON_APPDATA' # rubocop:disable Metrics/BlockNesting : Any attempt to alter this breaks it
197191 windows_facts_dot_d = File . join ( Dir ::COMMON_APPDATA , 'PuppetLabs' , 'facter' , 'facts.d' )
198192 Facter ::Util ::DotD . new ( windows_facts_dot_d ) . create
199193 end
0 commit comments