2

我在 Puppet 中创建了一个自定义类型(此示例已简化)。如果我这样使用它(两个项目collections)......

 my_type { "example1":
    ensure => present,
    collections => ["abc", "def"]
  }

...在我的提供者中,resource[:collections]Array. 这很好,也对。

但如果collections只包含 1 项...

 my_type { "example2":
    ensure => present,
    collections => ["abc"],
  }

...resource[:collections]是一个String,这是最令人不安的,也是处理的痛苦。

这是一个 Ruby 的东西,一个 Puppet 的东西(我对两者都是新手)还是只是我偶然发现的编码世界中的一些宇宙皱纹?更重要的是,是否有解决方法?还是我只是做错了?我以前被告知过。不要退缩。

4

2 回答 2

2

虽然我无法告诉您为什么会发生这种情况,但处理可以是数组或单个对象的事物的标准解决方法是使用 splat 运算符,如下所示[*foo]:如果foo是一个数组,它的元素将被“分解”成一个新的,所以你仍然有一个数组。如果foo只是一个普通对象,那么您现在有一个单元素数组。

于 2011-08-19T06:54:57.183 回答
0

这不是红宝石的事情。

resource = { :collection => ["abc"] }
resource[:collection].class
=> Array

如果 Puppet DSL 会改变这种行为,这似乎有点奇怪,因为它毕竟是基于 Ruby 的。但如果确实如此,你可以接受迈克尔斯的建议。例子:

[*resource[:collection]]
=> ["abc"]
resource[:str]="abc"
resource[:str]
=> "abc"
[*resource[:str]]
=> ["abc"]
于 2011-08-19T09:22:26.230 回答