【问题标题】:Output ruby array via an erb template通过 erb 模板输出 ruby​​ 数组
【发布时间】:2012-08-10 22:17:30
【问题描述】:

我正在使用 puppet 为 ruby​​ 程序提供一组常量。 我需要提供一组主机名,我的程序将在这些主机名上进行迭代。

在我之前使用的 bash 脚本中,我只是将其作为 puppet 变量

hosts => "host1,host2"

我作为 bash 脚本提供的

HOSTS=<%= hosts %>

显然这对 ruby​​ 不太适用 - 我需要它的格式

hosts = ["host1","host2"]

因为

p hosts

puts my_array.inspect

提供输出

["host1","host2"]

我希望使用其中之一。 不幸的是,我终其一生都无法弄清楚如何做到这一点。 我已经尝试了以下各项:

<% p hosts %>
<% puts hosts.inspect %>

我发现某处他们指出我需要将“function_”放在函数调用前面......这似乎不起作用。我已经确定了一个迭代模型:

[<% hosts.each do |host| -%>"<%=host%>",<% end -%>]

这行得通,给我

["host1","host2",]

但是结尾的逗号感觉很草率。整个事情感觉马虎。有没有人有更好的方法?还是我所做的最好的选择?

【问题讨论】:

    标签: ruby templates erb puppet


    【解决方案1】:

    我已经通过这种方式解决了(Puppet v3.0.1):

    {
        "your_key1": {
            "your_key2": [<% puppet_var.join('", "').each do |val| %>"<%= val %>"<% end -%>]
        }
    }
    

    如果 $puppet_var 是一个类似 [ "a", "b" ] 的数组,输出应该类似于:

    {
        "your_key1": {
            "your_key2": ["a", "b"]
        }
    }
    

    【讨论】:

      【解决方案2】:

      Ruby 允许使用括号之间的 %w 快捷方式来初始化数组。这样就可以了:

      hosts = %w{<%= hosts.join(' ') %>}
      

      【讨论】:

        【解决方案3】:

        使用to_json

        hosts.to_json
        => "[\"host1\",\"host2\"]"
        

        【讨论】:

        • 我仍然需要对其进行一些后期处理以去除转义字符和多余的引号,不是吗?
        • 不,它们被转义了,因为它们在双引号内。这就是它在控制台中的样子。当你在erb中输出它就可以了。
        • 啊,酷。我会试一试,看看它是否能满足我的需要。谢谢!
        • 啊。显然傀儡不明白这一点。无法从远程服务器检索目录:服务器上的错误 400:无法解析模板工具/link_config.erb:#012 文件路径:/etc/puppet/environments/ultradns_development/modules/tools/templates/link_config.erb#012 行:2 #012 详细信息:["puppetmaster-useast1b01-01.dev.ultradns.net"] 的未定义方法 `to_json':Array#012 at /etc/puppet/environments/ultradns_development/modules/tools/manifests/link_scripts.pp:31在节点 job-useast1b01-01.dev.ultradns.net
        • 对不起,是的。我没有仔细阅读您的问题,并假设它是针对导轨的。 to_s 似乎在这种情况下应该可以工作。实际上,您最初的 HOSTS=&lt;%= hosts %&gt; 似乎应该可以工作。你确定不是吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多