ruby - erb sudoers 迭代数组的哈希值

标签 ruby puppet erb

我尝试通过 puppet 动态生成 sudoers 文件。这里我有这样的 hieradata:

---
  sudoparameters:
    cmnd_aliases:
      CMND_ALIAS_A:
        - /path/to/command_a *
        - /path/to/command_b *
      CMND_ALIAS_B:
        - /path/to/command_c
        - /path/to/command_d *
    runas_aliases:
      RUNAS_ALIAS_A:
        - runas_user_a, runas_user_b
      RUNAS_ALIAS_B:
        - runas_user_a, runas_user_c
    defaults:
      - user!authenticate
      - user!systlog
    commands:
      - user ALL=(root) NOPASSWD:/usr/sbin/puppetd --test agent --server=*
      - user ALL=(root) NOPASSWD:/usr/bin/lsof -a *
      - user ALL=(RUNAS_ALIAS_A) NOPASSWD: CMND_ALIAS_A

还有一个像这样的 erb 模板:

<% @sudoparameters['cmnd_aliases'].each do |cmnd_alias| -%> 
Cmnd_Alias <%= cmnd_alias %> <%= cmnd_alias.map { |path| path.join(', ') } %>
<% end -%> 

<% @sudoparameters['runas_aliases'].each do |runas_alias| -%> 
Runas_Aliases <%= runas_alias %> <%= runas_alias.map { |path| path.join(', ') } %>
<% end -%> 

<% @sudoparameters['defaults'].each do |default| -%> 
Defaults:<%= default %>
<% end -%> 

<% @sudoparameters['commands'].each do |command| -%> 
<%= command %>
<% end -%> 

我迭代 cmnd_aliases 和 runas_aliases 的方法不起作用。如果这些数组存在于 sudoparameter 哈希中,我如何才能生成 Cmnd_Aliases 和 Runas_Aliases 的逗号分隔列表?

干杯

基督教

最佳答案

为了解决这个问题,我将每个 block 包装成:

<% if (@sudoparameters['cmnd_aliases'] != nil) then -%>
  <% @sudoparameters['cmnd_aliases'].each do |cmnd_alias| -%>
  Cmnd_Alias <%= cmnd_alias %> <%= cmnd_alias.map { |path| path.join(', ') } %>
  <% end -%>

<% end -%>

但目前 cmnd_alias.map 无法按预期工作。我收到以下错误。

Detail: undefined method `join' for "CMND_ALIAS_A":String

为了解决这个问题,我将键和值保存到不同的变量并将连接直接应用于值。

<% if (@sudoparameters['cmnd_aliases'] != nil) then -%> 
<% @sudoparameters['cmnd_aliases'].each do |cmnd_alias_key, cmnd_alias_value| -%> 
Cmnd_Alias <%= cmnd_alias_key %> <%= cmnd_alias_value.join(', ') %>
<% end -%> 

<% end -%> 
<% if (@sudoparameters['runas_aliases'] != nil) then -%> 
<% @sudoparameters['runas_aliases'].each do |runas_alias_key, runas_alias_value| -%> 
Runas_Aliases <%= runas_alias_key %> <%= runas_alias_value.join(', ') %>
<% end -%> 

<% end -%> 
<% if (@sudoparameters['defaults'] != nil) then -%> 
<% @sudoparameters['defaults'].each do |default| -%> 
Defaults:<%= default %>
<% end -%> 

<% end -%> 
<% @sudoparameters['commands'].each do |command| -%> 
<%= command %>
<% end -%>

关于ruby - erb sudoers 迭代数组的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40341644/

相关文章:

ruby - 检查文件是否包含字符串

puppet - 我可以通过 puppet manifest 安装 puppet 模块吗?

Ubuntu 10.04 Puppet 和 Apache,apache 服务无法启动

javascript - 如何将值从js传递到html.erb渲染函数

javascript - Rails,JavaScript 中的 erb : how to remove it

ruby - 有人可以解释这个 ruby​​ 基本计算器代码如何处理加法和减法吗?

ruby - 无法让 cucumber 在 Windows 下使用 Ruby 2.x

ruby-on-rails-3 - 导轨 3 : How to render ERb template in rake task?

mysql - ruby on rails,嵌套属性,采用最高属性

java - Puppet 启动 Tomcat 时汉字显示不正确,手动启动时可以正常工作