可以将标量和单个元素数组作为资源属性进行伪区分



有没有一种方法可以让Puppet区分

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

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

在声明资源属性时?

这是针对自定义类型的,所以我有完整的ruby land控制,但两者都显示为Puppet::Type#set_parameters,因此Puppet::Property#should=显示为'blah'

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

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

像一样声明属性

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

沿着的路线

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

似乎并没有改变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'],
}

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

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

最新更新