[英]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.