2016-11-28 76 views
0

我继承了一本食谱,它按照常规在./attributes/default.rb文件中设置了一些属性。我可以在Chef属性声明中使用双引号吗?

但是,我们有一个问题与线中的一条,那就是:

default["obscured"]["mysql"] = "#{node['jboss']['jboss_home']}/modules/com/mysql/jdbc/main" 

运行时,将其写入到这个节点为:

{}/com/mysql/jdbc/main 

我可以证实,节点['jboss'] ['jboss_home']属性存在且具有正确的值。

所以,我不能看到上述任何问题,只是在我们的食谱中这种类型的每个其他声明都对要设置的属性(即左侧)使用单引号,而不是双引号。我从来没有听说过这是一个问题,但我对厨师很新颖。

有没有规定说他们必须是单引号?

回答

0

答案是没有规则。

在像这样使用双引号是完全没问题:

default["obscured"]["mysql"] = blah blah 

我知道的原因是,我刚刚发现一个是一套,用双引号,实际工作。 :-)

0

你在那里有什么好的,你如何确认node['jboss']['jboss_home']的价值,以及你如何在模板中使用它?

在Ruby中,单引号和双引号文字都成为String s,但单引号相对文字,而双引号允许反斜杠转义和#{}插值。

0

你最有可能击中派生属性问题:

https://coderanger.net/derived-attributes/

被设置jboss_home属性之前在你的食谱属性代码得到解析。不管怎样,解决方案是将插值移动到配方代码中。

您可以使用普通的旧ruby变量而不是您尝试构建的属性 - 特别是如果系统中没有其他设置设置该属性。

你也应该能够从您的属性文件中删除声明,并在配方代码中使用此还有:虽然你需要提前放置该声明在run_list

node.default_unless["obscured"]["mysql"] = 
    "#{node['jboss']['jboss_home']}/modules/com/mysql/jdbc/main" 

,您曾经使用node["obscured"]["mysql"]前作为任何资源的参数。

相关问题