A maneira natural de representar seus dados em uma linguagem de programação seria um hash como este:
$users = {
elion => 'El Lion',
azee => 'Avery Zee',
root => 'Rooty Root,
}
Embora seja possível fazer isso no Puppet, descobri que é melhor decidir o que seria uma definição de recurso para uma única entrada e, em seguida, estruturar o hash como algo que você poderia passar para create_resources () . Nesse caso, isso significaria algo assim:
define student ($full_name) {
notify { "user ${title}":
message => "username: ${title}\n",
}
notify { "fullname ${title}":
message => "fullname: ${full_name}\n",
}
exec { "finger ${title}":
command => "/usr/bin/finger ${title}",
logoutput => true,
}
}
$users = {
elion => { full_name => 'El Lion' },
azee => { full_name => 'Avery Zee' },
root => { full_name => 'Rooty Root },
}
create_resources(student, $users)
No entanto , como observa Ger, você será o melhor se usar Hiera . Hiera permite que você separe seu código (as definições de manifesto) de seus dados (neste caso, os nomes específicos dos alunos). Na íntegra, eis o que eu faria para sua configuração:
-
Coloque os dados do aluno em um arquivo hiera. Você pode usar JSON ou YAML; Eu gosto do YAML. Seria algo assim:
classroom::users: elion: full_name: El Lion azee: full_name: Avery Zee root: full_name: Rooty Root
-
Defina um tipo de recurso para os alunos e coloque-o em
classroom/manifests/student.pp
em$modulepath
do Puppet. Seria parecido com o tipo de recursostudent
acima, mas seria nomeadoclassroom::student
. -
Defina uma classe
classroom
emclassroom/manifests/init.pp
com o seguinte conteúdo:class classroom ( $users = hiera('classroom::users', undef), ) { create_resources(classroom::student, $users) }
Se você estiver usando o Puppet 3.x, a chamada hiera()
nos parâmetros da classe será redundante, mas você precisará dela se ainda estiver no Puppet 2.7.