Class: Puppet::Settings::BaseSetting

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/settings/base_setting.rb

Overview

The base setting type

Constant Summary collapse

HOOK_TYPES =

Hooks are called during different parts of the settings lifecycle:

  • :on_write_only - This is the default hook type. The hook will be called if its value is set in ‘main` or programmatically. If its value is set in a section that doesn’t match the application’s run mode, it will be ignored entirely. If the section does match the run mode, the value will be used, but the hook will not be called!

  • :on_define_and_write - The hook behaves the same as above, except it is also called immediately when the setting is defined in Puppet::Settings.define_settings. In that case, the hook receives the default value as specified.

  • :on_initialize_and_write - The hook will be called if the value is set in ‘main`, the section that matches the run mode, or programmatically.

Set.new([:on_define_and_write, :on_initialize_and_write, :on_write_only]).freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ BaseSetting

Create the new element. Pretty much just sets the name.



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/puppet/settings/base_setting.rb', line 89

def initialize(args = {})
  @settings = args.delete(:settings)
  unless @settings
    raise ArgumentError, "You must refer to a settings object"
  end

  # explicitly set name prior to calling other param= methods to provide meaningful feedback during
  # other warnings
  @name = args[:name] if args.include? :name

  # set the default value for call_hook
  @call_hook = :on_write_only if args[:hook] and !(args[:call_hook])
  @has_hook = false

  if args[:call_hook] and !(args[:hook])
    # TRANSLATORS ':call_hook' and ':hook' are specific setting names and should not be translated
    raise ArgumentError, _("Cannot reference :call_hook for :%{name} if no :hook is defined") % { name: @name }
  end

  args.each do |param, value|
    method = param.to_s + "="
    unless respond_to? method
      raise ArgumentError, _("%{class_name} (setting '%{setting}') does not accept %{parameter}") %
                           { class_name: self.class, setting: args[:name], parameter: param }
    end

    send(method, value)
  end
  unless desc
    raise ArgumentError, _("You must provide a description for the %{class_name} config option") % { class_name: name }
  end
end

Instance Attribute Details

#call_hookObject

Returns the value of attribute call_hook.



10
11
12
# File 'lib/puppet/settings/base_setting.rb', line 10

def call_hook
  @call_hook
end

#default(check_application_defaults_first = false) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/puppet/settings/base_setting.rb', line 137

def default(check_application_defaults_first = false)
  if @default.is_a? Proc
    # Give unit tests a chance to reevaluate the call by removing the instance variable
    unless instance_variable_defined?(:@evaluated_default)
      @evaluated_default = @default.call
    end
    default_value = @evaluated_default
  else
    default_value = @default
  end
  return default_value unless check_application_defaults_first

  @settings.value(name, :application_defaults, true) || default_value
end

#deprecatedObject

Returns the value of attribute deprecated.



10
11
12
# File 'lib/puppet/settings/base_setting.rb', line 10

def deprecated
  @deprecated
end

#descObject

Returns the value of attribute desc.



9
10
11
# File 'lib/puppet/settings/base_setting.rb', line 9

def desc
  @desc
end

#nameObject

Returns the value of attribute name.



9
10
11
# File 'lib/puppet/settings/base_setting.rb', line 9

def name
  @name
end

#sectionObject

Returns the value of attribute section.



9
10
11
# File 'lib/puppet/settings/base_setting.rb', line 9

def section
  @section
end

#shortObject

Returns the value of attribute short.



10
11
12
# File 'lib/puppet/settings/base_setting.rb', line 10

def short
  @short
end

Class Method Details

.available_call_hook_valuesObject



30
31
32
# File 'lib/puppet/settings/base_setting.rb', line 30

def self.available_call_hook_values
  HOOK_TYPES.to_a
end

Instance Method Details

#allowed_on_commandline?Boolean

True if we should raise a deprecation_warning if the setting is found in puppet.conf, but not if the user sets it on the commandline

Returns:

  • (Boolean)


221
222
223
# File 'lib/puppet/settings/base_setting.rb', line 221

def allowed_on_commandline?
  @deprecated == :allowed_on_commandline
end

#call_hook_on_define?Boolean

Returns:

  • (Boolean)

See Also:

  • {HOOK_TYPES}


52
53
54
# File 'lib/puppet/settings/base_setting.rb', line 52

def call_hook_on_define?
  call_hook == :on_define_and_write
end

#call_hook_on_initialize?Boolean

Returns:

  • (Boolean)

See Also:

  • {HOOK_TYPES}


57
58
59
# File 'lib/puppet/settings/base_setting.rb', line 57

def call_hook_on_initialize?
  call_hook == :on_initialize_and_write
end

#completely_deprecated?Boolean

True if we should raise a deprecation_warning if the setting is submitted on the commandline or is set in puppet.conf.

Returns:

  • (Boolean)


215
216
217
# File 'lib/puppet/settings/base_setting.rb', line 215

def completely_deprecated?
  @deprecated == :completely
end

#deprecated?Boolean

Returns:

  • (Boolean)


209
210
211
# File 'lib/puppet/settings/base_setting.rb', line 209

def deprecated?
  !!@deprecated
end

#getopt_argsObject

get the arguments in getopt format



62
63
64
65
66
67
68
# File 'lib/puppet/settings/base_setting.rb', line 62

def getopt_args
  if short
    [["--#{name}", "-#{short}", GetoptLong::REQUIRED_ARGUMENT]]
  else
    [["--#{name}", GetoptLong::REQUIRED_ARGUMENT]]
  end
end

#has_hook?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/puppet/settings/base_setting.rb', line 84

def has_hook?
  @has_hook
end

#hook=(block) ⇒ Object



79
80
81
82
# File 'lib/puppet/settings/base_setting.rb', line 79

def hook=(block)
  @has_hook = true
  meta_def :handle, &block
end

#inspectObject



225
226
227
# File 'lib/puppet/settings/base_setting.rb', line 225

def inspect
  %Q(<#{self.class}:#{object_id} @name="#{@name}" @section="#{@section}" @default="#{@default}" @call_hook="#{@call_hook}">)
end

#iscreatedObject



122
123
124
# File 'lib/puppet/settings/base_setting.rb', line 122

def iscreated
  @iscreated = true
end

#iscreated?Boolean

Returns:

  • (Boolean)


126
127
128
# File 'lib/puppet/settings/base_setting.rb', line 126

def iscreated?
  @iscreated
end

#munge(value) ⇒ Object

Modify the value when it is first evaluated



187
188
189
# File 'lib/puppet/settings/base_setting.rb', line 187

def munge(value)
  value
end

#optparse_argsObject

get the arguments in OptionParser format



71
72
73
74
75
76
77
# File 'lib/puppet/settings/base_setting.rb', line 71

def optparse_args
  if short
    ["--#{name}", "-#{short}", desc, :REQUIRED]
  else
    ["--#{name}", desc, :REQUIRED]
  end
end

Print the value for the user in a config compatible format



192
193
194
# File 'lib/puppet/settings/base_setting.rb', line 192

def print(value)
  munge(value)
end

#set_meta(meta) ⇒ Object



196
197
198
# File 'lib/puppet/settings/base_setting.rb', line 196

def set_meta(meta)
  Puppet.notice("#{name} does not support meta data. Ignoring.")
end

#to_configObject

Convert the object to a config statement.



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/puppet/settings/base_setting.rb', line 153

def to_config
  require_relative '../../puppet/util/docs'
  # Scrub any funky indentation; comment out description.
  str = Puppet::Util::Docs.scrub(@desc).gsub(/^/, "# ") + "\n"

  # Add in a statement about the default.
  str << "# The default value is '#{default(true)}'.\n" if default(true)

  # If the value has not been overridden, then print it out commented
  # and unconverted, so it's clear that that's the default and how it
  # works.
  value = @settings.value(name)

  if value != @default
    line = "#{@name} = #{value}"
  else
    line = "# #{@name} = #{@default}"
  end

  str << (line + "\n")

  # Indent
  str.gsub(/^/, "    ")
end

#value(bypass_interpolation = false) ⇒ String

Returns Retrieves the value, or if it’s not set, retrieves the default.

Parameters:

  • bypass_interpolation (Boolean) (defaults to: false)

    Set this true to skip the interpolation step, returning the raw setting value. Defaults to false.

Returns:

  • (String)

    Retrieves the value, or if it’s not set, retrieves the default.



182
183
184
# File 'lib/puppet/settings/base_setting.rb', line 182

def value(bypass_interpolation = false)
  @settings.value(name, nil, bypass_interpolation)
end