Um tipo definido deve funcionar muito bem para o problema de owner
.
define usermailbox {
# creates dir /path/to/username:
file { "/path/to/$title":
ensure => directory,
owner => $title,
group => 'mail',
mode => 0660,
}
}
Para preencher a partir de uma fonte externa, o Hiera é uma boa opção - ele é integrado ao Puppet depois da 3.0, mas você Você precisará instalá-lo separadamente em seu sistema mestre se ainda estiver no 2.7. Se você for usá-lo, você também pode considerar mudar para ele como um meio mais flexível de fazer suas definições de nós.
Onde você coloca a lista de usuários depende se isso precisa ser aplicado a apenas um sistema, ou a múltiplos ... mas por enquanto, digamos que o queremos especificamente para este sistema.
Então, no seu /etc/puppet/hiera.yaml
(a configuração de como o Hiera procura por dados), você terá algo assim:
:backends:
- yaml
:hierarchy:
- %{::clientcert}
- common
:yaml:
:datadir: '/etc/puppet/hieradata'
Para node.example.com
, ele procurará um arquivo /etc/puppet/hieradata/node.example.com.yaml
(ou common.yaml
como prioridade mais baixa, para que você possa usá-lo se desejar que essa lista esteja disponível para vários catálogos de servidores). Crie esse arquivo e forneceremos a lista de usuários no formato YAML:
mailbox_users:
- user1
- user2
- user3
Em seguida, podemos usar uma chamada hiera
para pegar essa lista, puxá-la como uma variável e usá-la para configurar o define
acima para cada usuário na lista.
usermailbox { hiera(mailbox_users): }