簡體   English   中英

ERB:遍歷數組並輸出每個值作為一行字符串的一部分

[英]ERB: iterate over an array and output each value as part of a one line string

我試圖通過迭代來自木偶數組的數組來編寫sudoers文件。

這是我的傀儡課。 它定義了一個數組oracle_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

從第3行到第6行,我試圖生成Cmnd_Alias但輸出不是我需要的。

我明白了

 1  Defaults    env_keep += "ORACLE_BASE ORACLE_HOME TNS_ADMIN"
 2  
 3  Cmnd_Alias SQLPLUS = '/opt/oracle/regdb/product/12.1.0.2/dbhome_1'/bin/sqlplus
 4  Cmnd_Alias SRVCTL  = '/opt/oracle/regdb/product/12.1.0.2/dbhome_1'/bin/srvctl
 5  Cmnd_Alias VOTEDSK = '/opt/oracle/regdb/product/12.1.0.2/dbhome_1'/bin/crsctl query css votedisk
 6  Cmnd_Alias SQLPLUS = '/opt/oracle/regdb/product/11.2.0.4/dbhome_1'/bin/sqlplus
 7  Cmnd_Alias SRVCTL  = '/opt/oracle/regdb/product/11.2.0.4/dbhome_1'/bin/srvctl
 8  Cmnd_Alias VOTEDSK = '/opt/oracle/regdb/product/11.2.0.4/dbhome_1'/bin/crsctl query css votedisk
 9  
10  Runas_Alias DB    = oracle, regdb
11  Runas_Alias GRID  = oracle, grid
12  
13  zabbix ALL = (GRID) NOPASSWD: VOTEDSK
14  zabbix ALL = (DB) NOPASSWD: SQLPLUS
15  zabbix ALL = (GRID) NOPASSWD: SRVCTL
16  
17  Defaults:zabbix !authenticate
18  Defaults:zabbix !syslog

如何更改迭代語法以生成Cmnd_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 -%>  

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(', ')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM