我正在实现一个木偶提供者,我发现从原始的cli设计中,如果实例组不同,它可以具有多个相同的实例名称。 它看起来如下:
NAME GROUP PARAM
AA DEFAULT ...
BB DEFAULT ...
CC DEFAULT ...
AA TEST ... # can have the same name since the group is different
在这种情况下,您不能将每个实例的名称设置为namevar,因为它不保证唯一性。由于puppet不支持联合键值,我决定使用group和name的组合作为实例的键。
foo_provider{'DEFAULT/AA':
ensure => 'present',
properties => { .... },
}
foo_provider{'DEFAULT/BB':
ensure => 'present',
properties => { .... },
}
...
foo_provider{'TEST/AA':
ensure => 'present',
properties => { .... },
}
通过这种方式,可以使用每个唯一键值存储所有实例。到目前为止看起来还不错。
但是在显式调用每个实例时会出现问题。
# puppet resource foo bar
,其中bar
是实例的名称。
正如原始cli支持的那样,我想仅支持实例名称作为默认值,这意味着,
# puppet resource foo DEFAULT/AA -> this works without any issue
# puppet resource foo TEST/AA -> group name must be defined explicitly unless
the instance is in DEFAULT group
# puppet resource foo AA -> this should be equivalent to DEFAULT/AA as
undefined group name indicates DEFAULT value
前两个方案工作正常,没有任何调整,但我想支持默认组名的隐式自动完成,以方便用户。像,
def verify_input_val()
default_group = "DEFAULT"
usrstr = @resource[:name].split("/")
if usrstr.length == 1
return default_tenant, usrstr[0]
elsif usrstr.length == 2
return usrstr[0], usrstr[1]
else
raise Puppet::Error, "Invalid instance name"
end
end
def exist?
group_name, inst_name = verify_input_val()
full_name = group_name + "/" + inst_name
@resource[:name] = full_name # This doesn't seem effective
# This thus will just look only for "inst_name" not 'full_name'.
@property_hash[:ensure] == :present
end
我发现实例名称可以通过@resource[:name]
访问,但遗憾的是我只能获取值,而不能反向设置,例如@resource[:name] = "blah"
。
有没有办法可以在puppet provider中修改用户输入实例值?
答案 0 :(得分:0)