puppet_factset 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b4a6717d77c082bdc0dd85ce3cdafe30d02d0e7d
4
- data.tar.gz: 4af78d58b9b1ed249ceff348003b83d240b86a0f
3
+ metadata.gz: 48b580ff5dc4c047ca6e9440475f930e6d0a862e
4
+ data.tar.gz: ae9d7f14350fc87c0910fd3a16aa4b960b0aef8a
5
5
  SHA512:
6
- metadata.gz: 16e681ca99696a96928d7f50d72fa0eca89d049135ab959384dac59127b0be7284773fdd2ef025ebe847a87d37f144008e1dd22250b8290c6b1aa27ae475535d
7
- data.tar.gz: 58c291dbf9e943dd33cadf8687bac54a07c84d6d55e36b47cc05448045c1cbdd73b3e7b6ffa4a0b28b54989a406280a0e79f3483cc9427b475d29544ad0e9bab
6
+ metadata.gz: 13239c7af64c5e01953c285572b84eca39f47580721226a7b7aa65c6f0ecf8ed87eda76ce67f6923d227d028b5983b65dc434e7a27bf63cf1cf04f15fb002921
7
+ data.tar.gz: 4e33159277ce2e35c5a32270a65c5e3b0aa08a40a871e9f0d8968fc283b310655c29beae3caa9b37f04cb61061f8115417dd1b952d63eccb9074e79e8f31eb0d
data/README.md CHANGED
@@ -71,6 +71,30 @@ factsets = PuppetFactset::factsets
71
71
 
72
72
  * The `factsets` array will be sorted A-Z
73
73
 
74
+ ## Merging additional facts/handling external facts
75
+ Sometimes you need to ensure that a fact is present without worrying to much about its real-world value, for example external facts or custom in-module facts that do things such as query for the system for package versions, etc.
76
+
77
+ `puppet_factset` will automatically merge the hiera data found in all `.json` files found inside the `spec/merge_facts` directory, relative to the current working directory into factset data for each OS when accessed via the above API (the factset files themselves are unchanged).
78
+
79
+ #### Worked example
80
+
81
+ ```json
82
+ spec/merge_facts/extra_fact.json
83
+ {
84
+ "extra_fact": "hello"
85
+ }
86
+ ```
87
+
88
+
89
+ ```ruby
90
+ require 'puppet_factset'
91
+ fact_hash = PuppetFactset::factset_hash(system_name)
92
+ puts fact_hash["extra_fact"] # from your json file
93
+ puts fact_hash["osfamily"] # from the facts shipped inside this gem
94
+ ```
95
+
96
+ Note that its possible to silently override shipped factsets using this method as well. I regard this as a feature.
97
+
74
98
  ## Development
75
99
 
76
100
  * RSpec tests are provided, please ensure these pass before and after adding any ruby code to the project
@@ -2,6 +2,9 @@ require "puppet_factset/version"
2
2
  require "json"
3
3
 
4
4
  module PuppetFactset
5
+
6
+ MERGE_FACTS_DIR = File.join("spec", "merge_facts")
7
+
5
8
  # Return the name of the directory holding the factsets
6
9
  def self.factset_dir
7
10
  File.expand_path(File.join(File.dirname(__FILE__), '..', 'res', 'factset'))
@@ -11,6 +14,8 @@ module PuppetFactset
11
14
  def self.factset_hash(factset_name)
12
15
  data = JSON.parse(File.read(File.join(factset_dir(), "#{factset_name}.json")))
13
16
 
17
+ merge_facts(data["values"])
18
+
14
19
  # The facts are tucked away inside the 'values' element so just return that
15
20
  data["values"]
16
21
  end
@@ -21,4 +26,18 @@ module PuppetFactset
21
26
  File.basename(f).gsub('.json','')
22
27
  }.sort
23
28
  end
29
+
30
+ # If a directory exists at `merge_facts` relative to the current directory then
31
+ # all JSON files present in this directory will be loaded and merged into passed
32
+ # in factset
33
+ #
34
+ # @param factset Hash of facts (will be modified in-place)
35
+ def self.merge_facts(factset)
36
+ Dir["#{MERGE_FACTS_DIR}/*.json"].each { |json_file|
37
+ puts json_file
38
+ facts = JSON.parse(File.read(json_file))
39
+ puts facts
40
+ factset.merge!(facts)
41
+ }
42
+ end
24
43
  end
@@ -1,3 +1,3 @@
1
1
  module PuppetFactset
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet_factset
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoff Williams
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2017-04-16 00:00:00.000000000 Z
13
+ date: 2017-04-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler