Class: Chef::NodeMap
- Inherits:
-
Object
- Object
- Chef::NodeMap
- Defined in:
- lib/chef/node_map.rb
Direct Known Subclasses
Instance Method Summary collapse
-
#delete_canonical(key, value) ⇒ Object
private
Seriously, don’t use this, it’s nearly certain to change on you.
-
#get(node, key, canonical: nil) ⇒ Object
Get a value from the NodeMap via applying the node to the filters that were set on the key.
-
#list(node, key, canonical: nil) ⇒ Object
List all matches for the given node and key from the NodeMap, from most-recently added to oldest.
-
#set(key, value, platform: nil, platform_version: nil, platform_family: nil, os: nil, on_platform: nil, on_platforms: nil, canonical: nil, override: nil) {|node| ... } ⇒ NodeMap
Set a key/value pair on the map with a filter.
Instance Method Details
#delete_canonical(key, value) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Seriously, don’t use this, it’s nearly certain to change on you
104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/chef/node_map.rb', line 104 def delete_canonical(key, value) remaining = map[key] if remaining remaining.delete_if { |matcher| matcher[:canonical] && Array(matcher[:value]) == Array(value) } if remaining.empty? map.delete(key) remaining = nil end end remaining end |
#get(node, key, canonical: nil) ⇒ Object
Get a value from the NodeMap via applying the node to the filters that were set on the key.
76 77 78 79 |
# File 'lib/chef/node_map.rb', line 76 def get(node, key, canonical: nil) raise ArgumentError, "first argument must be a Chef::Node" unless node.is_a?(Chef::Node) || node.nil? list(node, key, canonical: canonical).first end |
#list(node, key, canonical: nil) ⇒ Object
List all matches for the given node and key from the NodeMap, from most-recently added to oldest.
93 94 95 96 97 98 99 |
# File 'lib/chef/node_map.rb', line 93 def list(node, key, canonical: nil) raise ArgumentError, "first argument must be a Chef::Node" unless node.is_a?(Chef::Node) || node.nil? return [] unless map.has_key?(key) map[key].select do |matcher| node_matches?(node, matcher) && canonical_matches?(canonical, matcher) end.map { |matcher| matcher[:value] } end |
#set(key, value, platform: nil, platform_version: nil, platform_family: nil, os: nil, on_platform: nil, on_platforms: nil, canonical: nil, override: nil) {|node| ... } ⇒ NodeMap
Set a key/value pair on the map with a filter. The filter must be true when applied to the node in order to retrieve the value.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/chef/node_map.rb', line 34 def set(key, value, platform: nil, platform_version: nil, platform_family: nil, os: nil, on_platform: nil, on_platforms: nil, canonical: nil, override: nil, &block) Chef.log_deprecation("The on_platform option to node_map has been deprecated") if on_platform Chef.log_deprecation("The on_platforms option to node_map has been deprecated") if on_platforms platform ||= on_platform || on_platforms filters = {} filters[:platform] = platform if platform filters[:platform_version] = platform_version if platform_version filters[:platform_family] = platform_family if platform_family filters[:os] = os if os new_matcher = { value: value, filters: filters } new_matcher[:block] = block if block new_matcher[:canonical] = canonical if canonical new_matcher[:override] = override if override # The map is sorted in order of preference already; we just need to find # our place in it (just before the first value with the same preference level). insert_at = nil map[key] ||= [] map[key].each_with_index do |matcher, index| cmp = compare_matchers(key, new_matcher, matcher) insert_at ||= index if cmp && cmp <= 0 end if insert_at map[key].insert(insert_at, new_matcher) else map[key] << new_matcher end map end |