[英]loop, if else over hiera hash in erb template
我的freeradius木偶模塊幾乎完成了。 我現在面臨一個問題,該問題是如何遍歷ERB模板中的哈希鍵。 我正在使用802.1x的radius來驗證用戶身份。 如果用戶是特定LDAP組的成員,radius將為其分配與該組關聯的VLAN,依此類推。 這是我當前的配置:
/etc/freeradius/sites-available/inner-tunnel
....
....
....
ldap
if (LDAP-Group == vlan_101) {
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-ID = 101
}
}
elsif (LDAP-Group == vlan_102) {
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-ID = 102
}
}
elsif (LDAP-Group == vlan_103) {
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-ID = 103
}
}
else {
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-ID = 110
}
}
....
....
....
我想通過ERB模板創建此文件。
普通郵件
test_freeradius::tunnel:
'vlan_101':
vlan: '101'
'vlan_102':
vlan: '102'
'vlan_103':
vlan: '103'
'vlan_110':
vlan: '110'
我正在使用以下定義。
定義test_freeradius :: tunnel
define test_freeradius::tunnel (
$vlan,
){
include test_freeradius::service
file { '/etc/freeradius/sites-available/inner-tunnel' :
ensure => 'file',
owner => 'root',
group => 'freerad',
mode => '0644',
content => template("${module_name}/tunnel.erb"),
require => Class['test_freeradius::install'],
notify => Service['freeradius'],
}
}
並立即在init.pp中調用它
初始化文件
....
....
$groups = hiera('test_freeradius::tunnel')
create_resources(test_freeradius::tunnel, $groups)
....
....
是否可以使用ERB模板創建內部隧道文件,該怎么辦? 還是應該僅將其用作沒有hiera的簡單文件並在文件中進行更改?
我可以解決它,因此我不知道它是否是干凈的Ruby代碼。 由於file
資源的重復聲明,我不得不重新排列我的定義。
定義test_freeradius :: tunnel
define test_freeradius::tunnel (
$vlan,
){
include test_freeradius::service
ensure_resource('file', '/etc/freeradius/sites-available/inner-tunnel', {
ensure => 'file',
owner => 'root',
group => 'freerad',
mode => '0644',
content => template("${module_name}/tunnel.erb"),
require => Class['test_freeradius::install'],
notify => Service['freeradius'],
}
)
ensure_resource('file', '/etc/freeradius/sites-enabled/inner-tunnel', {
ensure => 'link',
target => '/etc/freeradius/sites-available/inner-tunnel',
}
)
}
這是tunnel.erb的相關部分:
隧道
.....
.....
.....
ldap
<% @groups.each do |key,value| -%>
<% if key == 'vlan_10' %>
if (LDAP-Group == vlan_10) {
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-ID = 10
}
}
<% else %>
elsif (LDAP-Group == <%= key %>) {
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-ID = <%= value['vlan'] %>
}
}
<% end -%>
<% end -%>
.....
.....
.....
我擺脫了最后一個else
語句,因為我將對來賓LAN和WLAN使用LDAP組。
我會很高興提出任何使代碼更簡潔的建議。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.