Class: Kafo::Configuration
- Inherits:
-
Object
- Object
- Kafo::Configuration
- Defined in:
- lib/kafo/configuration.rb
Constant Summary collapse
- DEFAULT =
{ :log_dir => '/var/log/kafo', :log_name => 'configuration.log', :log_level => 'info', :no_prefix => false, :mapping => {}, :answer_file => './config/answers.yaml', :installer_dir => '.', :modules_dir => './modules', :default_values_dir => '/tmp', :colors => Configuration.colors_possible?, :color_of_background => :dark, :hook_dirs => [], :custom => {} }
Instance Attribute Summary collapse
-
#answer_file ⇒ Object
readonly
Returns the value of attribute answer_file.
-
#config_file ⇒ Object
readonly
Returns the value of attribute config_file.
Class Method Summary collapse
Instance Method Summary collapse
-
#[](key) ⇒ Object
if a value is a true we return empty hash because we have no specific options for a particular puppet module.
- #add_mapping(module_name, mapping) ⇒ Object
- #add_module(name) ⇒ Object
- #app ⇒ Object
- #config_header ⇒ Object
- #configure_application ⇒ Object
- #get_custom(key) ⇒ Object
-
#initialize(file, persist = true) ⇒ Configuration
constructor
A new instance of Configuration.
- #module_enabled?(mod) ⇒ Boolean
- #modules ⇒ Object
- #params_default_values ⇒ Object
- #save_configuration(configuration) ⇒ Object
- #set_custom(key, value) ⇒ Object
- #store(data, file = nil) ⇒ Object
Constructor Details
#initialize(file, persist = true) ⇒ Configuration
Returns a new instance of Configuration.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/kafo/configuration.rb', line 31 def initialize(file, persist = true) @config_file = file @persist = persist configure_application @logger = KafoConfigure.logger @answer_file = app[:answer_file] begin @data = YAML.load_file(@answer_file) rescue Errno::ENOENT => e puts "No answer file at #{@answer_file} found, can not continue" KafoConfigure.exit(:no_answer_file) end @config_dir = File.dirname(@config_file) end |
Instance Attribute Details
#answer_file ⇒ Object (readonly)
Returns the value of attribute answer_file.
9 10 11 |
# File 'lib/kafo/configuration.rb', line 9 def answer_file @answer_file end |
#config_file ⇒ Object (readonly)
Returns the value of attribute config_file.
9 10 11 |
# File 'lib/kafo/configuration.rb', line 9 def config_file @config_file end |
Class Method Details
.colors_possible? ⇒ Boolean
11 12 13 |
# File 'lib/kafo/configuration.rb', line 11 def self.colors_possible? !`which tput 2> /dev/null`.empty? && `tput colors`.to_i > 0 end |
Instance Method Details
#[](key) ⇒ Object
if a value is a true we return empty hash because we have no specific options for a particular puppet module
121 122 123 124 |
# File 'lib/kafo/configuration.rb', line 121 def [](key) value = @data[key] value.is_a?(Hash) ? value : {} end |
#add_mapping(module_name, mapping) ⇒ Object
95 96 97 98 |
# File 'lib/kafo/configuration.rb', line 95 def add_mapping(module_name, mapping) app[:mapping][module_name] = mapping save_configuration(app) end |
#add_module(name) ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/kafo/configuration.rb', line 87 def add_module(name) mod = PuppetModule.new(name).parse unless modules.map(&:name).include?(mod.name) mod.enable @modules << mod end end |
#app ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/kafo/configuration.rb', line 61 def app @app ||= begin begin configuration = YAML.load_file(@config_file) rescue => e configuration = {} end result = DEFAULT.merge(configuration || {}) result[:password] ||= PasswordManager.new.password result end end |
#config_header ⇒ Object
131 132 133 134 135 |
# File 'lib/kafo/configuration.rb', line 131 def config_header files = [app[:config_header_file], File.join(KafoConfigure.gem_root, '/config/config_header.txt')].compact file = files.select { |f| File.exists?(f) }.first @config_header ||= file.nil? ? '' : File.read(file) end |
#configure_application ⇒ Object
55 56 57 58 59 |
# File 'lib/kafo/configuration.rb', line 55 def configure_application result = app save_configuration(result) result end |
#get_custom(key) ⇒ Object
75 76 77 |
# File 'lib/kafo/configuration.rb', line 75 def get_custom(key) custom_storage[key.to_sym] end |
#module_enabled?(mod) ⇒ Boolean
126 127 128 129 |
# File 'lib/kafo/configuration.rb', line 126 def module_enabled?(mod) value = @data[mod.is_a?(String) ? mod : mod.identifier] !!value || value.is_a?(Hash) end |
#modules ⇒ Object
83 84 85 |
# File 'lib/kafo/configuration.rb', line 83 def modules @modules ||= @data.keys.map { |mod| PuppetModule.new(mod).parse } end |
#params_default_values ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/kafo/configuration.rb', line 100 def params_default_values @params_default_values ||= begin @logger.debug "Creating tmp dir within #{app[:default_values_dir]}..." temp_dir = Dir.mktmpdir(nil, app[:default_values_dir]) KafoConfigure.exit_handler.register_cleanup_path temp_dir @logger.info "Parsing default values from puppet modules..." command = PuppetCommand.new("$temp_dir=\"#{temp_dir}\" #{includes} dump_values(#{params})").append('2>&1').command @logger.debug `#{command}` unless $?.exitstatus == 0 log = app[:log_dir] + '/' + app[:log_name] puts "Could not get default values, check log file at #{log} for more information" @logger.error "Could not get default values, cannot continue" KafoConfigure.exit(:defaults_error) end @logger.info "... finished" YAML.load_file(File.join(temp_dir, 'default_values.yaml')) end end |
#save_configuration(configuration) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/kafo/configuration.rb', line 48 def save_configuration(configuration) return true unless @persist FileUtils.touch @config_file File.chmod 0600, @config_file File.open(@config_file, 'w') { |file| file.write(format(YAML.dump(configuration))) } end |
#set_custom(key, value) ⇒ Object
79 80 81 |
# File 'lib/kafo/configuration.rb', line 79 def set_custom(key, value) custom_storage[key.to_sym] = value end |
#store(data, file = nil) ⇒ Object
137 138 139 140 141 142 |
# File 'lib/kafo/configuration.rb', line 137 def store(data, file = nil) filename = file || answer_file FileUtils.touch filename File.chmod 0600, filename File.open(filename, 'w') { |file| file.write(config_header + format(YAML.dump(data))) } end |