Files
puppet-openstacklib/lib/puppet/provider/openstack_config/ini_setting.rb
Takashi Kajinami 8effa49fc0 Allow customizing separator for ini file
The api-paste.ini accepts not only "=" but also ":" and some services
like Barbican have been using ":" for their default api-paste.ini
files.

[composite:main]
use = egg:Paste#urlmap
/: barbican_version
/v1: barbican-api-keystone

This change introduces the logic to pick up separator from resource
definition, so that we can implement resource parameters to use
different separators.

Change-Id: I21ab398f5d4f96673f3e2060263a9ba6691fef98
2021-10-12 21:05:40 +09:00

87 lines
2.0 KiB
Ruby

require 'facter'
Puppet::Type.type(:openstack_config).provide(
:ini_setting,
:parent => Puppet::Type.type(:ini_setting).provider(:ruby)
) do
def exists?
immutable_string = Facter.value(:os_immutable) || '<_IMMUTABLE_>'
if resource[:value] == ensure_absent_val
resource[:ensure] = :absent
elsif resource[:value] == immutable_string or resource[:value] == [immutable_string]
resource[:value] = value
# when the value is undefined, we keep it that way.
if value.nil? or (value.kind_of?(Array) and value[0].nil?)
resource[:ensure] = :absent
end
end
super
end
def create
resource[:value] = transform(:to, resource[:value])
super
end
def section
resource[:name].split('/', 2).first
end
def setting
resource[:name].split('/', 2).last
end
def value=(value)
new_value = transform(:to, value)
ini_file.set_value(section, setting, new_value)
ini_file.save
end
def value
value = ini_file.get_value(section, setting)
new_value = transform(:from, value)
@property_hash[:value] = new_value
new_value
end
def ensure_absent_val
resource[:ensure_absent_val]
end
def transform_to
return nil unless resource.to_hash.has_key? :transform_to
resource[:transform_to]
end
def transform_to=(value)
@property_hash[:transform_to] = value
end
def separator
if resource.class.validattr?(:key_val_separator)
resource[:key_val_separator] || '='
else
'='
end
end
def file_path
self.class.file_path
end
def transform(direction, value)
new_value = value
if !transform_to.nil? && !transform_to.empty?
transformation_function = "#{direction}_#{transform_to}".to_sym
if self.respond_to?(transformation_function)
new_value = send(transformation_function, value)
else
error("Cannot find transformation #{transformation_function} for #{value}")
end
end
new_value
end
end