【问题标题】:puppet compare string in the erb templateerb 模板中的 puppet 比较字符串
【发布时间】:2019-01-31 17:01:42
【问题描述】:

我们有 puppet 版本 3.8.7。我有返回 dovecot 版本的事实:2.2 或 2.3。在 erb 模板中,我有下一个构造:

# SSL/TLS protocols to use
111 <% if @dovecot_version =~ "2.2" -%>
112 ssl_protocols = !SSLv2 !SSLv3
113 
114 # Diffie-Hellman parameters length
115 ssl_dh_parameters_length = 2048
116 <% else -%>
117 ssl_min_protocol = SSLv3
118 
119 # Diffie-Hellman parameters length
120 #ssl_dh_parameters_length = 2048
121 <% end -%>    

应用后,我看到下一条错误消息:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Failed to parse template cpanel/dovecot.conf.erb:
  Filepath: org/jruby/RubyString.java
  Line: 1730
  Detail: type mismatch: String given
at /etc/puppet/environments/testing/modules/cpanel/manifests/dovecot.pp:34 on node server1.development.local
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

变量类型有什么问题?我如何比较字符串?谢谢你的回答

【问题讨论】:

    标签: ruby puppet erb


    【解决方案1】:

    Ruby 的=~ 运算符用于将字符串匹配到正则表达式。操作数可以按任意顺序出现,但必须是正则表达式。在您的情况下,两者都是字符串。

    要比较字符串是否相等,请使用普通的==!= 运算符。

    【讨论】:

    • 我尝试使用==!= 也无法正常工作。
    • @AndriiK.,您提出的问题的答案,“变量类型有什么问题?我如何比较字符串?”正是我所介绍的。因此,如果使用== 代替=~ 会给您带来错误,尤其是如果它给您带来same 错误,那么您可能问错了问题。在这种情况下,我建议更新您的问题以提供minimal reproducible example
    • 我测试过,@JohnBollinger 的回答是正确的。我重现了类型不匹配错误并确认更改为== 解决了这个问题。
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多