Class: Kafo::HookContext

Inherits:
BaseContext show all
Defined in:
lib/kafo/hook_context.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseContext

#facts

Constructor Details

#initialize(kafo, logger) ⇒ HookContext

Returns a new instance of HookContext.



22
23
24
25
# File 'lib/kafo/hook_context.rb', line 22

def initialize(kafo, logger)
  @kafo = kafo
  @logger = logger
end

Instance Attribute Details

#kafoKafo::KafoConfigure (readonly)

Returns:



7
8
9
# File 'lib/kafo/hook_context.rb', line 7

def kafo
  @kafo
end

#loggerKafo::Logger (readonly)

some of hooks won’t print any message because logger is not yet configured configuration of logger depends on application configration (log level etc.)

Examples:

logger.warn "this combindation of parameters is untested"

Returns:



16
17
18
# File 'lib/kafo/hook_context.rb', line 16

def logger
  @logger
end

Class Method Details

.execute(kafo, logger, &hook) ⇒ Object



18
19
20
# File 'lib/kafo/hook_context.rb', line 18

def self.execute(kafo, logger, &hook)
  new(kafo, logger).instance_eval(&hook)
end

Instance Method Details

#add_module(module_name, mapping = nil) ⇒ Object

You can add custom modules not explicitly enabled in answer file. This is especially useful if you want to add your plugin to existing installer. This module will become part of answer file so it also preserves parameter values between runs. It also list its options in help output. You can also specify mapping for this module as a second parameter.

Examples:

add_module('my_module')
add_module('foreman::plugin::staypuft', {:dir_name => 'foreman', :manifest_name => 'plugin/staypuft'})

Parameters:

  • module_name (String)
  • mapping (Hash, nil) (defaults to: nil)


90
91
92
93
# File 'lib/kafo/hook_context.rb', line 90

def add_module(module_name, mapping = nil)
  self.kafo.config.add_mapping(module_name, mapping) if mapping
  self.kafo.add_module(module_name)
end

#app_option(*args, &block) ⇒ Clamp::Option

if you want to add new app_option be sure to do as soon as possible (usually boot hook) otherwise it may be too late (e.g. when displaying help)

Examples:

app_option '--log-level', 'LEVEL', 'Log level for log file output', :default => config.app[:log_level]:
app_option ['-n', '--noop'], :flag, 'Run puppet in noop mode?', :default => false

Returns:

  • (Clamp::Option)


37
38
39
# File 'lib/kafo/hook_context.rb', line 37

def app_option(*args, &block)
  self.kafo.class.app_option(*args, &block)
end

#app_option?(option) ⇒ Boolean

Returns whether the given app option exists. This is useful when there’s a conditional option that is determined during boot; this helper can be used in later hooks to determine whether the option exists.

Parameters:

  • option (Symbol, String)

Returns:

  • (Boolean)


45
46
47
# File 'lib/kafo/hook_context.rb', line 45

def app_option?(option)
  self.kafo.config.app.key?(option.to_sym)
end

#app_value(option) ⇒ Object

note the dash to underscore convention

Examples:

app_value(:log_level)

Parameters:

  • option (Symbol, String)


55
56
57
# File 'lib/kafo/hook_context.rb', line 55

def app_value(option)
  self.kafo.config.app[option.to_sym]
end

#exit(code) ⇒ Object

You can trigger installer exit by this method. You must specify exit code as a first argument. You can also specify a symbol alias which is built-in (see exit_handler.rb for more details).

Examples:

exit(0)
exit(:manifest_error)

Parameters:

  • code (Integer, Symbol)


128
129
130
# File 'lib/kafo/hook_context.rb', line 128

def exit(code)
  self.kafo.class.exit(code)
end

#exit_codeObject

Return the current exit code



196
197
198
# File 'lib/kafo/hook_context.rb', line 196

def exit_code
  self.kafo.exit_code
end

#get_custom_config(key) ⇒ Object

You can load a custom config value that has been saved using store_custom_config

Parameters:

  • key (Symbol)


135
136
137
# File 'lib/kafo/hook_context.rb', line 135

def get_custom_config(key)
  self.kafo.config.get_custom(key)
end

#get_custom_fact(key) ⇒ Object

Load a custom fact from the custom fact storage as saved by store_custom_fact

Parameters:

  • key (Symbol)


151
152
153
# File 'lib/kafo/hook_context.rb', line 151

def get_custom_fact(key)
  self.kafo.config.get_custom_fact(key)
end

#has_custom_fact?(key) ⇒ Boolean

Check whether a custom fact exists, regardless of whether or not it has a value.

Parameters:

  • key (Symbol)

Returns:

  • (Boolean)


170
171
172
# File 'lib/kafo/hook_context.rb', line 170

def has_custom_fact?(key)
  self.kafo.config.has_custom_fact?(key)
end

#module_enabled?(module_name) ⇒ Boolean

Check if a module is enabled in the current configuration.

Examples:

module_enabled?('example')

Parameters:

  • module_name (String)

Returns:

  • (Boolean)


101
102
103
104
# File 'lib/kafo/hook_context.rb', line 101

def module_enabled?(module_name)
  mod = self.kafo.module(module_name)
  !mod.nil? && mod.enabled?
end

#module_present?(module_name) ⇒ Boolean

Check if a module is present in the current configuration.

Examples:

module_present?('example')

Parameters:

  • module_name (String)

Returns:

  • (Boolean)


112
113
114
115
# File 'lib/kafo/hook_context.rb', line 112

def module_present?(module_name)
  mod = self.kafo.module(module_name)
  !mod.nil?
end

#param(module_name, parameter_name) ⇒ Kafo::Param?

Return the parameter of a module. Note that the module may not actually be enabled.

Examples:

param('foreman', 'interface').value = 'eth0'
param('foreman', 'interface').value = app_option('bind_on_interface')

Parameters:

  • module_name (String)
  • parameter_name (String)

Returns:



72
73
74
# File 'lib/kafo/hook_context.rb', line 72

def param(module_name, parameter_name)
  self.kafo.param(module_name, parameter_name)
end

#puppet_reportOptional[Kafo::PuppetReport]

Return the Puppet report, if any. Only available after Puppet actual ran.

Returns:



204
205
206
# File 'lib/kafo/hook_context.rb', line 204

def puppet_report
  self.kafo.puppet_report
end

#scenario_dataHash

Return the actual data in the current scenario

Returns:

  • (Hash)


191
192
193
# File 'lib/kafo/hook_context.rb', line 191

def scenario_data
  self.kafo.config.app
end

#scenario_idString

Return the id of the current scenario

Returns:

  • (String)


177
178
179
# File 'lib/kafo/hook_context.rb', line 177

def scenario_id
  self.kafo.config.scenario_id
end

#scenario_pathString

Return the path to the current scenario

Returns:

  • (String)


184
185
186
# File 'lib/kafo/hook_context.rb', line 184

def scenario_path
  self.kafo.config.config_file
end

#store_custom_config(key, value) ⇒ Object

You can save any value into kafo configuration file, this is useful if you need to share a value between more hooks and persist the values for next run

Parameters:

  • key (Symbol)
  • value (Object)


144
145
146
# File 'lib/kafo/hook_context.rb', line 144

def store_custom_config(key, value)
  self.kafo.config.set_custom(key, value)
end

#store_custom_fact(key, value) ⇒ Object

Store any custom fact. This will show up as kafo.scenario.custom.your_fact. It is possible to use structures such as arrays and hashes besides the obvious ones such as strings, integers, booleans.

These facts can also be used in Hiera hierachy definitions.

Parameters:

  • key (Symbol)
  • value (Object)


163
164
165
# File 'lib/kafo/hook_context.rb', line 163

def store_custom_fact(key, value)
  self.kafo.config.set_custom_fact(key, value)
end