首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对epp模板使用伪散列

对epp模板使用伪散列
EN

Stack Overflow用户
提问于 2017-07-29 09:20:13
回答 1查看 4.3K关注 0票数 1

我在erb模板中有下一个代码:

代码语言:javascript
复制
<% if @proxy_cache_path.is_a?(Hash) -%>
<% @proxy_cache_path.sort_by{|k,v| k}.each do |key,value| -%>
  proxy_cache_path        <%= key %> keys_zone=<%= value %> levels=<%= @proxy_cache_levels %> max_size=<%= @proxy_cache_max_size %> inactive=<%= @proxy_cache_inactive -%>
<% end -%>

如何将其移植到epp模板?我发现它的信息很低。请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 12:04:51

以下是你如何做到的:

显示示例类以及如何声明ERB和EPP模板以进行比较:

代码语言:javascript
复制
# manifests/init.pp
class foo () {
  $proxy_cache_path = {
    'apples'  => 1,
    'bananas' => 2,
  }
  $proxy_cache_levels = 2
  $proxy_cache_max_size = 2
  $proxy_cache_inactive = 2

  # Showing use of ERB:
  file { '/foo':
    ensure  => file,
    content => template('foo/mytemplate.erb')
  }

  # Showing use of EPP, which requires an explicit parameters hash:
  file { '/bar':
    ensure  => file,
    content => epp('foo/mytemplate.epp', {
      'proxy_cache_path'     => $proxy_cache_path,
      'proxy_cache_levels'   => $proxy_cache_levels,
      'proxy_cache_max_size' => $proxy_cache_max_size,
      'proxy_cache_inactive' => $proxy_cache_inactive,
    }),
  }
}

更正*供比较的雇员再培训局档案的内容:

代码语言:javascript
复制
# templates/mytemplate.erb     
<% if @proxy_cache_path.is_a?(Hash) -%>
<% @proxy_cache_path.sort_by{|k,v| k}.each do |key,value| -%>
  proxy_cache_path        <%= key %> keys_zone=<%= value %> levels=<%= @proxy_cache_levels %> max_size=<%= @proxy_cache_max_size %> inactive=<%= @proxy_cache_inactive -%>
<% end -%>
<% end -%>

(*问题中的代码缺少关闭的end。)

EPP文件的内容:

代码语言:javascript
复制
# templates/mytemplate.epp 
<%- | Hash[String, Integer] $proxy_cache_path, Integer $proxy_cache_levels, Integer $proxy_cache_max_size, Integer $proxy_cache_inactive | -%>
<% include stdlib -%>
<% $proxy_cache_path.keys.sort.each |$key| { -%>
  proxy_cache_path        <%= $key %> keys_zone=<%= $proxy_cache_path[$key] %> levels=<%= $proxy_cache_levels %> max_size=<%= $proxy_cache_max_size %> inactive=<%= $proxy_cache_inactive -%>
<% } -%>

有关EPP模板文件内容的注意事项:

1)参数及其类型定义在模板的第一行。使用这一行是可选的,但很好的做法。

2)由于我们在第一行中声明了类型,因此测试$proxy_cache_path是否是Hash是不必要的,也是多余的。

3)为了访问keyssort函数,需要包含stdlib。这与Ruby (ERB)不同,在那里这些方法是内置到语言中的。

4)我简化了相对于Ruby ( ERB )的代码,因为木偶没有sort_by函数,而且实际上也没有必要在ERB中使用它,它可以重写为:

代码语言:javascript
复制
<% if @proxy_cache_path.is_a?(Hash) -%>
<%   @proxy_cache_path.sort.each do |key,value| -%>
  proxy_cache_path        <%= key %> keys_zone=<%= value %> levels=<%= @proxy_cache_levels %> max_size=<%= @proxy_cache_max_size %> inactive=<%= @proxy_cache_inactive -%>
<%   end -%>
<% end -%>

最后,进行一些测试:

代码语言:javascript
复制
# spec/classes/test_spec.rb:
require 'spec_helper'

describe 'foo', :type => :class do
  it 'content in foo should be the same as in bar' do
    foo = catalogue.resource('file', '/foo').send(:parameters)[:content]
    bar = catalogue.resource('file', '/bar').send(:parameters)[:content]
    expect(foo).to eq bar
  end
end

考试就通过了。

见docs 这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45387586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档