Class: Facter::Core::Aggregate

Inherits:
Object
  • Object
show all
Includes:
LegacyFacter::Core::Resolvable, LegacyFacter::Core::Suitable
Defined in:
lib/facter/custom_facts/core/aggregate.rb

Overview

Since:

  • 2.0.0

Defined Under Namespace

Classes: DependencyError

Instance Attribute Summary collapse

Attributes included from LegacyFacter::Core::Resolvable

#logger, #timeout

Instance Method Summary collapse

Methods included from LegacyFacter::Core::Resolvable

#flush, #limit, #on_flush, #value

Methods included from LegacyFacter::Core::Suitable

#confine, #has_weight, #suitable?, #weight

Constructor Details

#initialize(name, fact) ⇒ Facter::Util::Resolution

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.

Create a new aggregated resolution mechanism.

Parameters:

  • name (String)

    The name of the resolution.

  • fact (Facter::Fact)

    The fact to which this resolution will be added.

Since:

  • 2.0.0



65
66
67
68
69
70
71
72
73
74
# File 'lib/facter/custom_facts/core/aggregate.rb', line 65

def initialize(name, fact)
  @name = name
  @fact = fact

  @confines = []
  @chunks = {}

  @aggregate = nil
  @deps = LegacyFacter::Core::DirectedGraph.new
end

Instance Attribute Details

#confinesArray<LegacyFacter::Core::Confine> (readonly)

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.

Returns An array of confines restricting this to a specific platform.

Returns:

  • (Array<LegacyFacter::Core::Confine>)

    An array of confines restricting this to a specific platform

Since:

  • 2.0.0



47
48
49
# File 'lib/facter/custom_facts/core/aggregate.rb', line 47

def confines
  @confines
end

#depsLegacyFacter::Core::DirectedGraph (readonly)

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.

Returns:

Since:

  • 2.0.0



39
40
41
# File 'lib/facter/custom_facts/core/aggregate.rb', line 39

def deps
  @deps
end

#factFacter::Util::Fact (readonly)

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.

Returns:

Since:

  • 2.0.0



54
55
56
# File 'lib/facter/custom_facts/core/aggregate.rb', line 54

def fact
  @fact
end

#fact_typeSymbol (readonly)

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.

Returns The fact type of the aggregate resolution.

Returns:

  • (Symbol)

    The fact type of the aggregate resolution

Since:

  • 2.0.0



32
33
34
# File 'lib/facter/custom_facts/core/aggregate.rb', line 32

def fact_type
  @fact_type
end

#nameSymbol (readonly)

Returns The name of the aggregate resolution.

Returns:

  • (Symbol)

    The name of the aggregate resolution

Since:

  • 2.0.0



25
26
27
# File 'lib/facter/custom_facts/core/aggregate.rb', line 25

def name
  @name
end

Instance Method Details

#<=>(other) ⇒ bool

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.

Compares the weight of two aggregate facts

Returns:

  • (bool)

    Weight comparison result

Since:

  • 2.0.0



81
82
83
# File 'lib/facter/custom_facts/core/aggregate.rb', line 81

def <=>(other)
  weight <=> other.weight
end

#aggregate {|Hash<Symbol, Object>| ... } ⇒ Facter::Core::Aggregate

Define how all chunks should be combined

Examples:

Merge all chunks

aggregate.aggregate do |chunks|
  final_result = {}
  chunks.each_value do |chunk|
    final_result.deep_merge(chunk)
  end
  final_result
end

Sum all chunks

aggregate.aggregate do |chunks|
  total = 0
  chunks.each_value do |chunk|
    total += chunk
  end
  total
end

Yields:

  • (Hash<Symbol, Object>)

    A hash containing chunk names and chunk values

Returns:

Raises:

  • (ArgumentError)

Since:

  • 2.0.0



167
168
169
170
171
172
# File 'lib/facter/custom_facts/core/aggregate.rb', line 167

def aggregate(&block)
  raise ArgumentError, "#{self.class.name}#aggregate requires a block" unless block_given?

  @aggregate = block
  self
end

#chunk(name, opts = {}, &block) ⇒ Facter::Core::Aggregate

Define a new chunk for the given aggregate

Examples:

Defining a chunk with no dependencies

aggregate.chunk(:mountpoints) do
  # generate mountpoint information
end

Defining an chunk to add mount options

aggregate.chunk(:mount_options, :require => [:mountpoints]) do |mountpoints|
  # `mountpoints` is the result of the previous chunk
  # generate mount option information based on the mountpoints
end

Parameters:

  • name (Symbol)

    A name unique to this aggregate describing the chunk

  • opts (Hash) (defaults to: {})

    Hash with options for the aggregate fact

Returns:

Since:

  • 2.0.0



127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/facter/custom_facts/core/aggregate.rb', line 127

def chunk(name, opts = {}, &block)
  evaluate_params(name, &block)

  deps = Array(opts.delete(:require))

  unless opts.empty?
    raise ArgumentError, "Unexpected options passed to #{self.class.name}#chunk: #{opts.keys.inspect}"
  end

  @deps[name] = deps
  @chunks[name] = block
  self
end

#evaluate(&block) ⇒ String

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.

Evaluates the given block

Returns:

  • (String)

    Result of the block’s evaluation

Since:

  • 2.0.0



103
104
105
# File 'lib/facter/custom_facts/core/aggregate.rb', line 103

def evaluate(&block)
  instance_eval(&block)
end

#options(options) ⇒ nil

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.

Sets options for the aggregate fact

Returns:

  • (nil)

Raises:

  • (ArgumentError)

Since:

  • 2.0.0



90
91
92
93
94
95
96
# File 'lib/facter/custom_facts/core/aggregate.rb', line 90

def options(options)
  accepted_options = %i[name timeout weight fact_type]
  accepted_options.each do |option_name|
    instance_variable_set("@#{option_name}", options.delete(option_name)) if options.key?(option_name)
  end
  raise ArgumentError, "Invalid aggregate options #{options.keys.inspect}" unless options.keys.empty?
end

#resolution_typeSymbol

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.

Returns the fact’s resolution type

Returns:

  • (Symbol)

    The fact’s type

Since:

  • 2.0.0



179
180
181
# File 'lib/facter/custom_facts/core/aggregate.rb', line 179

def resolution_type
  :aggregate
end