2017-05-12 2 views
0

Ich bin fast fertig mit meinem Freeradius Puppenmodul. Ich stehe nun vor einem Problem, wie man Hash-Schlüssel in einer ERB-Vorlage durchläuft. Ich verwende Radius für 802.1x, um Benutzer zu authentifizieren. Wenn ein Benutzer Mitglied einer bestimmten LDAP-Gruppe ist, weist Radius ihm den dieser Gruppe zugeordneten VLAN zu und so weiter. Dies ist meine aktuelle Konfiguration:Schleife, wenn sonst über Hiera Hash in ERB Vorlage

/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 
    } 
} 
    .... 
    .... 
    .... 

Ich mag würde diese Datei über ERB-Vorlage erstellen.

common.yaml

test_freeradius::tunnel: 
    'vlan_101': 
     vlan: '101' 
    'vlan_102': 
     vlan: '102' 
    'vlan_103': 
     vlan: '103' 
    'vlan_110': 
     vlan: '110' 

und ich folgendes verwende definieren.

definieren 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'], 
    } 
} 

und es jetzt in init.pp

init.pp

.... 
.... 
$groups = hiera('test_freeradius::tunnel') 
create_resources(test_freeradius::tunnel, $groups) 
.... 
.... 

Aufruf Ist es möglich, die inner zu erstellen Tunneldatei mit ERB-Vorlage, wie könnte ich das tun? Oder sollte ich es einfach als eine einfache Datei ohne Hiera verwenden und Änderungen in der Datei vornehmen?

+0

Ein Puppet-Hash wird in ERB als Ruby-Hash angezeigt. Sie können auf den Schlüsselsatz zugreifen, nach Werten suchen oder den gesamten Hash über die von allen Ruby-Hashes bereitgestellten Methoden durchlaufen. –

+0

@JohnBollinger, Danke für die Antwort. Mein Problem ist hier das "elif" und das "else" Statement. Ich denke, nur mit einer 'if'-Anweisung wird es einfacher mit einer Anweisung, indem Sie die Schlüssel durchlaufen und den Wert hinzufügen. Ich finde einfach keine Möglichkeit, die "elsif" - und "else" -Anweisungen zu verwenden. – Max

Antwort

1

Ich könnte es lösen, also weiß ich nicht, ob es ein sauberer Ruby-Code ist. Ich musste meine Definition wegen der doppelten Deklaration der Ressource file neu anordnen.

definieren 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', 
    } 
) 
} 

Und hier ist der entsprechende Abschnitt des tunnel.erb:

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 -%> 
..... 
..... 
..... 

ich losgeworden die letzte else Anweisung, da ich eine LDAP-Gruppe für Gast-LAN ​​und W verwenden werde LAN.

Ich freue mich über Vorschläge, um den Code ein wenig sauberer zu machen.

Danke!

Verwandte Themen