Ruby ERB:迭代数组并将每个值作为一行字符串的一部分输出

Ruby ERB:迭代数组并将每个值作为一行字符串的一部分输出,ruby,iteration,puppet,erb,Ruby,Iteration,Puppet,Erb,我试图通过迭代来自puppet数组的数组来编写sudoers文件 这是我的木偶课。它定义了一个数组oracle\u homes 1 class oracle_home { 2 $oracle_homes = split($::oracle_homes, ',') 3 file { '/tmp/oracle_homes': 4 ensure => file, 5 content => template('oracle/oracle.sudoer.erb'),

我试图通过迭代来自puppet数组的数组来编写sudoers文件

这是我的木偶课。它定义了一个数组
oracle\u homes

1 class oracle_home {
2   $oracle_homes = split($::oracle_homes, ',')
3   file { '/tmp/oracle_homes':
4     ensure  => file,
5     content => template('oracle/oracle.sudoer.erb'),
6   } 
7 }       
8 
9 require oracle_home
这是erb模板

 1 Defaults    env_keep += "ORACLE_BASE ORACLE_HOME TNS_ADMIN"
 2 
 3 <% @oracle_homes.each do |oracle_home| -%>
 4 Cmnd_Alias SQLPLUS = <%= oracle_home -%>/bin/sqlplus
 5 Cmnd_Alias SRVCTL  = <%= oracle_home -%>/bin/srvctl
 6 Cmnd_Alias VOTEDSK = <%= oracle_home -%>/bin/crsctl query css votedisk
 7 <% end -%>  
 8 
 9 Runas_Alias DB    = oracle, regdb
10 Runas_Alias GRID  = oracle, grid
11 
12 zabbix ALL = (GRID) NOPASSWD: VOTEDSK
13 zabbix ALL = (DB) NOPASSWD: SQLPLUS
14 zabbix ALL = (GRID) NOPASSWD: SRVCTL
15 
16 Defaults:zabbix !authenticate
17 Defaults:zabbix !syslog
如何更改迭代语法以生成
Cmnd\u Alias
这样的行

Cmnd_Alias SQLPLUS = /opt/oracle/regdb/product/12.1.0.2/dbhome_1/bin/sqlplus, /opt/oracle/regdb/product/11.2.0.4/dbhome_1/bin/sqlplus
Cmnd_Alias VOTEDSK = /opt/oracle/regdb/product/12.1.0.2/dbhome_1/bin/crsctl query css votedisk, /opt/oracle/regdb/product/11.2.0.4/dbhome_1/bin/crsctl query css votedisk
我会试着替换

3 <% @oracle_homes.each do |oracle_home| -%>
4 Cmnd_Alias SQLPLUS = <%= oracle_home -%>/bin/sqlplus
5 Cmnd_Alias SRVCTL  = <%= oracle_home -%>/bin/srvctl
6 Cmnd_Alias VOTEDSK = <%= oracle_home -%>/bin/crsctl query css votedisk
7 <% end -%>  
3
4 Cmnd_别名SQLPLUS=/bin/SQLPLUS
5 Cmnd_别名SRVCTL=/bin/SRVCTL
6 Cmnd_别名VOTEDSK=/bin/crsctl查询css votedisk
7.

Cmnd\u别名SQLPLUS=
Cmnd_别名SRVCTL=
Cmnd_别名VOTEDSK=
sql\u plus=[]
srv_ctl=[]
投票桌=[]

sql\u plus我不确定生成的版本中的单引号
来自何处。它们可能已经是
$:oracle_homes
的一部分。你能告诉我们原始代码<代码>::Oracle Hyths看起来是什么样子?考虑完全在模板内部进行事实值操作,而不是在清单中做一些事情,然后将它传递给模板,以便进一步操作。我更担心时间复杂度。在同一个数组上循环三次,结果还是错误的吗?你能告诉我哪里的流量不对吗
3 <% @oracle_homes.each do |oracle_home| -%>
4 Cmnd_Alias SQLPLUS = <%= oracle_home -%>/bin/sqlplus
5 Cmnd_Alias SRVCTL  = <%= oracle_home -%>/bin/srvctl
6 Cmnd_Alias VOTEDSK = <%= oracle_home -%>/bin/crsctl query css votedisk
7 <% end -%>  
Cmnd_Alias SQLPLUS = <%= @oracle_homes.map { |path| "#{path}/bin/sqlplus" }.join(', ') %>
Cmnd_Alias SRVCTL  = <%= @oracle_homes.map { |path| "#{path}/bin/srvctl" }.join(', ') %>
Cmnd_Alias VOTEDSK = <%= @oracle_homes.map { |path| "#{path}/bin/crsctl query css votedisk" }.join(', ') %>
sql_plus = []

srv_ctl = []

vote_desk = []

<% @oracle_homes.each do |oracle_home| -%>

    sql_plus << "#{oracle_home}/bin/sqlplus"

    srv_ctl << "#{oracle_home}/bin/srvctl"

    vote_desk << "#{oracle_home}/bin/crsctl query css votedisk"  
<% end -%>

Cmnd_Alias SQLPLUS = sql_plus.join(', ')

Cmnd_Alias SRVCTL  = srv_ctl.join(', ')

Cmnd_Alias VOTEDSK = vote_desk.join(', ')