Como adicionar um arquivo aos diretórios home de todos os usuários existentes e futuros

4

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 é:

  1. Nos servidores que estão configurados para instalar o git (não todos eles), solte um (templated) .gitconfig nos diretórios iniciais de todos os usuários existentes . E obviamente, gerencie isso para alterações no modelo.
  2. Adicione o .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!

    
por dty 11.12.2011 / 00:29

4 respostas

2

Você precisará usar dois procedimentos, primeiro para contas já criadas:

link

e outro para usuários futuros:

link

    
por 11.12.2011 / 01:00
2

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.

    
por 11.12.2011 / 11:41
2

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.

    
por 12.12.2011 / 14:49
1

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"],
    }
  }
    
por 18.12.2013 / 17:52

Tags