对 epp 模板使用 puppet hash

2023-12-02

我在 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 -%>

如何将其移植为 epp 模板?我发现这方面的信息很少。请帮忙。


您可以按照以下方法执行此操作:

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

# 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,
    }),
  }
}

更正* ERB 文件的内容以进行比较:

# 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文件内容:

# 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是一个哈希值。

3)我们需要包含stdlib才能访问函数keys and sort。这与 Ruby (ERB) 不同,其中这些方法是内置于语言中的。

4)我相对于Ruby(ERB)简化了代码,因为Puppet(EPP)没有sort_by函数 - 实际上也没有必要在 ERB 中使用它,可以将其重写为:

<% 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 -%>

最后一些测试:

# 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

测试通过了。

查看文档here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 epp 模板使用 puppet hash 的相关文章

随机推荐

  • 根据给定的坐标移动鼠标

    我想要的是 在记录鼠标移动并保存坐标 索引 位置后 我必须加载鼠标坐标并使鼠标根据加载的坐标移动 我没有代码可以给你看 因为我现在陷入困境 private void button3 Click 1 object sender EventAr
  • Linux 相当于 Windows DLL 转发器或 MacOS reexport_library

    我有一个共享库 试图提供一个标准化的接口 基本上是一个函数列表 其中一些功能已由另一个共享库提供 因此 我可以编写附加函数并要求用户链接到这两个库 即让他这样做 g foo c lmine lother 但是 为了让用户更轻松 我不想这样做
  • GCC原子shared_ptr实现

    根据https gcc gnu org bugzilla show bug cgi id 57250 GCC 4 9已经支持原子shared ptr运营 使用 GCC 4 9 2 我能够编译一个使用原子的程序shared ptr The m
  • Bash 脚本查找两个字符串之间的差异

    给定这两个字符串 12345 1245 如果第一个是完整的字符串 而第二个字符串缺少第一个字符串 我希望它返回 3 再次如此 The ball is red The is red 我要回 球 我尝试过比较 diff lt echo 1234
  • 带有匹配媒体的 jQuery 媒体查询

    我正在尝试根据屏幕分辨率更改我的 jQuery 代码 我正在对主要内容区域进行动画处理 并且想在不同的屏幕尺寸上更改其宽度 经过大量在线搜索后 我发现了一些可能有用的东西 但我无法让它工作 这是需要更改的代码片段 它称为 Match Med
  • 如何使用 Symfony 2 应用程序的内部处理程序将用户注销

    Symfony 实现了注销用户和杀死 cookie 的功能 有一个LogoutListener它将这些操作委托给几个注销处理程序 CookieClearingLogoutHandler and SessionLogoutHandler 如果
  • 将IP转换为主机名[重复]

    这个问题在这里已经有答案了 我想编写一个 python 脚本来将 IP 地址转换为主机名 我正在使用 Linux 盒子 我在 whois 命令中没有看到此信息 是否有任何命令始终给出正确的主机名 尽可能准确 Socket库有一个 API 可
  • JavaScript 中的 HtmlSpecialChars 等效项是什么?

    显然 这比我想象的更难找到 而且它甚至是如此简单 有没有类似PHP的函数html特殊字符内置于 JavaScript 中 我知道自己实现它相当容易 但使用内置函数 如果可用 会更好 对于那些不熟悉 PHP 的人来说 htmlspecialc
  • Ubuntu 中的 Composer 全局配置信息存储在哪里?

    我在全局 Composer 配置中添加了错误的 github 令牌 并且无法再次将其删除 I did composer config global auth github oauth github com myWrongTokenDamn
  • 页面更改后未触发页面显示

    我正在使用 jQuery Mobile 我想在用户单击主页上的按钮后将浏览器重定向到另一个页面 为此 我写道 mobile changePage album search results html data area searchArea
  • Google 地图 v3 从地图外部的链接打开信息窗口

    当用户单击地图外部的链接时 我尝试打开信息窗口 不知道我在这里缺少什么 基本上 我有一个城市列表 每个城市都有一个 id var ids 在 ids 上循环 当用户单击该链接 在 click myclick 1 id 上 如该城市的信息窗口
  • 如何保存所有通过 javascript 添加的内联表单?

    我在保存内联表单时遇到问题 它确实保存默认表单 但每当我添加新的内联表单时 它都不会保存 我缺少什么 谁能告诉我错误吗 谢谢 模型 py class Student models Model name models CharField ma
  • 如何在 Java 中使用 HttpSession 跟踪登录尝试?

    我有一个无框架的网络应用程序 我需要实现一种简单的方法来使用会话检查不成功的登录 如果用户尝试使用不正确的用户名 密码组合登录 3 次 他们将有 20 分钟的超时时间 然后才能再次尝试登录 目前我仅在用户成功登录系统时设置用户会话 但是 似
  • 在 GO 中捕获重复组

    我正在尝试创建一个可以解析由大写单词后跟零个或多个封装在双引号中的参数组成的字符串的函数 例如 以下每一行 COPY filename one filename two REMOVE filename LIST x y z DISCONNE
  • 升级到 Grails 1.3.3 后,Grails 依赖注入不再起作用

    项目设置是Flex 3 BlazeDS Spring Flex Integration Grails 当从我的 Flex 客户端调用服务方法时 我的服务类中的依赖注入在 Grails 1 2 1 中工作得很好 当我昨天使用常规的 grail
  • 使用 jQuery 将表行从一个表复制到另一个表

    当选中该行中的复选框时 我需要能够使用 jQuery 将一行从一个表复制到另一个表 我尝试使用 clone 方法但这有非常奇怪的行为 尽管 jQuery 专门针对第二个表中的行 但当复制到第一个表时 它仍然可以成为目标 所以要么clone
  • 为什么临时借用是合法的?

    来自 C 我很惊讶这段代码在 Rust 中是有效的 let x mut String new x push str Hello 在 C 中 您无法获取临时值的地址 并且临时值的寿命不会比它出现的表达式的寿命长 临时在 Rust 中存在多久
  • 从arm汇编函数返回浮点到objective-c

    我编写了一个汇编函数 它可以在 iPhone 4 32 位代码 和 iPhone 6s 64 位代码 上正常运行 我从 Objective C 中的调用函数传入四个浮点数 这是我用于 4 个浮点数的结构 下面是该函数的原型 正如我的 Obj
  • 如何手动下载/降级 Android 模拟器

    我上周更新了 Android Studio 及其组件 但我一直面临模拟器的麻烦 更新之前一切都很好 现在我只想拿回我的旧模拟器 搜索后我发现了这个答案here 手动下载的链接就像http dl google com android repo
  • 对 epp 模板使用 puppet hash

    我在 erb 模板中有下一个代码 proxy cache path keys zone levels max size inactive 如何将其移植为 epp 模板 我发现这方面的信息很少 请帮忙 您可以按照以下方法执行此操作 显示