厨师模板 - 有条件地插入一块文本

时间:2014-07-21 22:05:58

标签: templates nginx chef conditional-statements

使用Chef,只有满足条件才能从模板插入文本块吗?

我们说我们有一个属性:

node["webapp"]["run"] = "true"

如果webapp为true,我们只想在sites-enabled / app.conf中的nginx .conf中输入一个条目,如下所示:

#The nginx-webapp.conf.erb template file

SOME WORKING NGINX CONFIG STUFF

<% if node["webapp"]["run"]=="true" -%>
location /webapp {      
    try_files  $uri @some_other_location;
}

<% end -%>

SOME OTHER WORKING NGINX CONFIG STUFF

就目前而言,条件文本没有错误输出,它只是永远不会出现。我已经仔细检查了模板是否可以通过以下方式查看节点属性:

<%= node["webapp"]["run"] %>

哪个DID插入文字&#34; true&#34;进入配置文件。

我在Chef and erb templates. How to use boolean code blocks中看到我可以从节点插入看似只是带有评估变量的文本。

我尝试过更改

<% if node[:webapp][:run]=="true" -%>
TEXT
<% end -%>

无济于事。

任何想法我做错了什么?谢谢!

编辑:

根据Psyreactor的回答,在模板本身我停止尝试评估字符串&#34; true&#34;而是用这个:

SOME WORKING NGINX CONFIG STUFF

<% if node["webapp"]["run"] -%>
location /webapp {      
    try_files  $uri @some_other_location;
}

<% end -%>

SOME OTHER WORKING NGINX CONFIG STUFF

如果节点属性设置为&#34; true&#34;这会在配置文件中正确插入文本块。我想我只是假设它仍然是一个需要进行评估的字符串。

1 个答案:

答案 0 :(得分:6)

假设您有一个属性

node[:test][:bool] = true
模板中的

必须要做

<% If node[:apache][:bool] -%>
  ServerAlias ​​<% = node[:apache][:aliasl]%>
<% End -%>

另一种选择是检查属性是否为空

<% Unless node [:icinga][:core][:server_alias].nil? %>
  ServerAlias ​​<% = node[:icinga][:core][:server_alias]%>
<% End%>

我希望能帮助你。

抱歉我的英文 最好的问候