Você precisará usar dois procedimentos, primeiro para contas já criadas:
e outro para usuários futuros:
Estou começando a usar o fantoche para gerenciar alguns servidores e não sei como alcançar o seguinte.
Eu tenho um módulo users
que uso para criar usuários comuns em todos os servidores. Eu tenho um módulo git
que eu uso para instalar o git e configurar o sistema em /etc/gitconfig
. O que eu gostaria de fazer é:
.gitconfig
nos diretórios iniciais de todos os usuários existentes . E obviamente, gerencie isso para alterações no modelo. .gitconfig
para todos os futuros usuários. Mas eu não sinto que isso pertence ao módulo users
- acho que pertence ao módulo git
. Parece que eu quero saber quando algum usuário foi adicionado (não apenas uma determinada instância do usuário) e, em seguida, ser capaz de acessar os parâmetros dessa criação de usuário (por exemplo, diretório inicial, nome real e nome de usuário). Essencialmente, a parte 2 seria fácil se eu tivesse implantado um modelo .gitconfig
para todos os usuários criados pelo módulo users
. Mas eu realmente não quero que os usuários tenham um arquivo .gitconfig
se o git não estiver instalado no sistema. Então, o que estou realmente tentando dizer é "para todos os usuários gerenciados neste sistema, se o git estiver instalado, gerencie um arquivo .gitconfig
".
Obrigado!
Será mais fácil se os usuários e nós que precisam ter o git forem gerenciados pelo fantoche:
class git {
packakge { "git":
ensure => installed,
}
}
class users {
user { ... }
file { "/home/${user}/.gitconfig":
ensure => present,
content => template("gitconfig"),
require => Class["git"],
}
}
Em seguida, para cada nó do git, inclua class git.
for all managed users on this system,
Então, você precisa definir isso no módulo de usuários ou exportar um recurso virtual a partir dele. Dado o uso, não vejo uma maneira de fazer isso com recursos virtuais.
if git is installed,
Estritamente falando, crie um fato personalizado para verificar se ele está instalado. Por exemplo:
# git.rb
Facter.add("git") do
setcode do
%x{/usr/bin/test -x /usr/bin/git && /bin/echo yes || /bin/echo no}.chomp
end
end
Por outro lado, o módulo git
poderia exportar um recurso virtual, como o arquivo .gitconfig
, e o módulo do usuário poderia realizá-lo. Eu não acho que é possível realizar o mesmo recurso em um caminho parametrizado (diretório inicial do usuário).
manage a .gitconfig file
Bem, isso você sabe fazer.
Se você quiser apenas garantir um arquivo base, use tags. O recurso de arquivo virtual só será percebido se a classe git tiver sido incluída. Você pode configurar isso com um modelo para adicionar o nome de usuário e o email. Isso pode causar problemas se os usuários quiserem personalizar sua configuração do git (o fantoche irá sobrescrever suas alterações).
class git {
@file { 'git_user_config':
tag => 'git_user_config',
path => '/tmp/.gitconfig',
content => template("git/gitconfig.erb"),
require => Package["git"],
}
}
class user {
# user defs here
File <| tag == 'git_user_config' |> {
path => "/home/${user}/.gitconfig",
}
}
Você também pode aproveitar o recurso getparam do puppet-stdlib ( link ).
Código não testado, não tenho certeza se isso funcionaria. Geralmente eu gosto muito dos recursos virtuais marcados.
class users {
user {...}
if ( (defined(Package['git']) && (getparam(Package['git'],'ensure') == 'present') ) {
file {
"/home/${user}/.gitconfig":
ensure => present,
content => template("git/gitconfig.erb"),
require => Class["git"],
}
}
Tags puppet