2017-04-26 5 views
0

Ich plane, die Möglichkeit zu implementieren, mehrere SSH-Schlüssel pro Benutzer hinzuzufügen. Für einen einzelnen Schlüssel, habe ich:Array-Iteration mit Position in Puppe

if ($sshkey) { 
    ssh_authorized_key { $resourcename: 
     ensure => 'present', 
     type => 'ssh-rsa', 
     key  => '$sshkey', 
     user => $title, 
     require => User[$title], 
    } 
    } 

Für mehrere Schlüssel, dachte ich, dass dies funktionieren könnte:

if ($sshkeyarray != []) { 
    $sshkeyarray.each |String $singlesshkey| { 
     ssh_authorized_key { $resourcename: 
     ensure => 'present', 
     type => 'ssh-rsa', 
     key  => '$singlesshkey', 
     user => $title, 
     require => User[$title], 
     } 
    } 
    } 

Aber die resource kann nur einmal verwendet werden, so möchte ich Namen geben wie "resourcename_1" für den ersten ssh-Schlüssel und "resourcename_n" für den n-ten Schlüssel.

Wie kann ich das tun? Kann ich die Position des singlesshkey aus dem Array bekommen und sie zum Resourcename hinzufügen?

Antwort

1

Wie in der Dokumentation beschrieben here Sie dies tun können:

$sshkeyarray.each |$index, String $singlesshkey| { 
    ssh_authorized_key { "${resourcename}_${index}": 
     ensure => 'present', 
     type => 'ssh-rsa', 
     key  => $singlesshkey, 
     user => $title, 
     require => User[$title], 
    } 
    } 

Beachten Sie, dass es keine Notwendigkeit für ein leeres Array entweder zu testen ist. Das Schleifen über ein leeres Array bewirkt sowieso nichts.

+0

Perfekt, danke! – Studentus

+1

Wow, das ist ein Detail der 'each()' Funktion, von der ich vorher noch nichts wusste! Ich habe heute etwas Neues gelernt. –

Verwandte Themen