1

有没有办法让 Puppet 区分

my_custom_type { 'key':
  value => 'blah',
}

my_custom_type { 'key':
  value => ['blah'],
}

声明资源属性时?

Puppet::Type#set_parameters这是一个自定义类型,所以我有完整的红宝石控制,但都显示Puppet::Property#should='blah'.

我在 Ruby 2.0.0 之上使用 Puppet 3.4.3(通过 Boxen)。我不确定更改其中任何一个版本对我来说有多容易。

上下文:我正在实现的自定义类型编辑 Apple 属性列表(.plist文件),其中字符串和包含单个字符串元素的数组完全不同。

像这样声明属性

newproperty(:value, :array_matching => :all) do

沿着

https://docs.puppetlabs.com/guides/custom_types.html#customizing-behaviour

似乎没有改变set_parametersshould=接收什么,他们只是Puppet::Property#should返回['blah']而不是'blah'在这两种情况下。似乎差异在解析器级别被进一步抛出。

提供

my_custom_type { 'key':
  value => [['blah']],
}

也无济于事 - 结果相同。

请注意:

我意识到我可以通过在声明中提供其他信息来解决这个问题,如下所示:

my_custom_type { 'key':
  value => ['blah'],
  is_array => true,
}

或者

my_custom_type { 'key':
  value_array => ['blah'],
}

我想知道是否有一种方法可以捕获是否声明了数组或标量...尽管请随时向我解释为什么这样做在 Puppet 世界中是不明智的或异端的;我对这个陌生的地方有点陌生。

4

1 回答 1

0

底层的单元素特殊情况在 puppet3 中已被弃用,并且很长一段时间以来都不是该语言行为的一部分。请参阅https://tickets.puppetlabs.com/browse/PUP-1299

于 2018-03-29T12:40:25.823 回答