Chef脚本中这两个语句之间的区别是什么?

时间:2015-06-16 15:47:25

标签: ruby chef

我正在使用Chef来安装软件包。我在线上收到错误

node.default["installed_pkgs"] << 'amanda'


Undefined node attribute or method `<<' on `node'. To set an attribute, use `<<=value' instead.

如果我将其更改为:

node.default["installed_pkgs"] = 'amanda'
它似乎有用,或者至少它没有错误。我从那个退出的人那里接过来,所以我不确定他的代码,因为我不太了解Chef或Ruby。

2 个答案:

答案 0 :(得分:2)

你的问题来自她: https://github.com/chef/chef/blob/d8172e646d9fbf43e57bca5e20d0ac352ba9a66a/lib/chef/node/attribute_collections.rb#L175

节点不知道&lt;&lt;并认为这是一个属性。

使用

node.default["installed_pkgs"] = 'amanda'

答案 1 :(得分:1)

不同之处在于Ruby。

<<shorthand for appending to the end to an array。如果您有一个数组,并且想要追加到它的末尾,那么您将使用<<

=是香草派。您可以使用此值为变量或散列分配值,但必须确保您要分配的值是合适的;如果你在Ruby期望一个数组时指定一个标量值,那么你的程序就会出错。