Templates Chef模板-有条件地插入文本块

Templates Chef模板-有条件地插入文本块,templates,nginx,chef-infra,conditional-statements,Templates,Nginx,Chef Infra,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"]=="t

使用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
#nginx-webapp.conf.erb模板文件
一些工作NGINX配置的东西
位置/网络应用程序{
在某个位置尝试\u文件$uri;
}
其他一些工作NGINX配置的东西
目前,条件文本不会出错,只是永远不会出现。我已通过使用以下命令再次检查模板是否可以查看节点属性:

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

它在配置文件中插入了文本“true”

我看到,我可以插入看起来只是文本的内容,并使用节点中的求值变量

我已经试着换了

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

正文
无济于事

知道我做错了什么吗?谢谢

编辑:

根据Psyreactor的回答,在模板本身中,我不再尝试计算字符串“true”,而是使用以下内容:

SOME WORKING NGINX CONFIG STUFF

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

<% end -%>

SOME OTHER WORKING NGINX CONFIG STUFF
一些工作NGINX配置的东西
位置/网络应用程序{
在某个位置尝试\u文件$uri;
}
其他一些工作NGINX配置的东西

如果节点属性设置为“true”,则此操作不会在配置文件中正确插入文本块!我想我只是假设它仍然是一个字符串,需要这样计算。

假设您有一个属性

node[:test][:bool] = true
在模板中就必须这样做

<% if node[:apache][:bool] -%>
  ServerAlias ​​<% = node[:apache][:aliasl]%>
<% end -%>

服务器别名​​
另一个选项是检查属性是否为null

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

服务器别名​​

你明白“真”和“真”之间的区别吗?我现在明白了。似乎除了true和false之外,所有的东西都存储为字符串。Chef是否只将这些属性存储为布尔值而不是字符串?它存储您设置的任何属性。你可以为一个对象设置一个节点属性,但是一旦它被持久化到服务器上,由于JSON表示,它就会变成一个字符串。