Puppet - removendo o usuário que está logado?

5

Acabei de começar a aprender o fantoche e me deparei com um problema. Gostaria de saber se alguém sabia como corrigir. Estou tentando remover um usuário. Recebo uma mensagem de erro informando que ele está logado e não pode ser removido .

Agora, neste caso, eu sei em qual servidor eles estão conectados, então eu poderia simplesmente fazer o logout do usuário e continuar a partir dele. Minha pergunta é, no entanto, o que você faz quando não sabe quais servidores estão registrados para dentro? Tendo em mente, pode haver muitos servidores.

Existe uma opção de remoção de força ou uma maneira de registrar usuários no fantoche?

Código abaixo:

user {'art':

ensure => absent,

}

Erros:

Error: Could not delete user art: Execution of '/usr/sbin/userdel art' returned 8: userdel: user art is currently logged in

Error: /Stage[main]/Main/Node[demo]/User[art]/ensure: change from present to absent failed: Could not delete user art: Execution of '/usr/sbin/userdel art' returned 8: userdel: user art is currently logged in

    
por user3329963 18.07.2014 / 12:39

3 respostas

2

De acordo com esta postagem , você pode desconectar usuários usando pkill -STOP -u USERNAME .
Você pode criar uma definição de recursos algo assim em um fantoche:

define kill_and_delete {
    exec { "killing $title":
        command => "pkill -STOP -u $title",
        onlyif  => "grep '^$title' /etc/passwd",
        before => User[$title],
    }
    user { $title: ensure => absent}
}

Depois, você o usa assim:
kill_and_delete {'art': }
Nota : Eu não testei isso.
consulte pedidos de recursos - antes e exigem e tipo reference - exec .

    
por 18.07.2014 / 13:17
1

Você encerra uma sessão matando seu processo pai, chamado líder da sessão. Descubra com qual processo está:

ps -dN|grep pts/3

ou

Como mencionado por @Nitz

pkill -9 -u username

E para referência, verifique este link:

Como posso forçar outros usuários a sair?

    
por 18.07.2014 / 13:37
1

Eu deparei com o mesmo problema ao excluir um usuário em que os processos estavam em execução. Eu testei minha solução em nosso servidor de produção e, portanto, posso fornecer uma solução válida na qual eu crie usuários em uma classe separada usando variáveis "guarantee". E com base na variável eu decido se devo chamar a sequência de parada do processo ou não da seguinte maneira:

define your_class::user (
  $user   = $name,
  $ensure = 'present',
){

  # only call when user gets removed
  if $ensure == 'absent' {
    exec {
      "killing ${user}":
        command => "pkill -9 -u ${user}",
        # need to check if user exists and processes are running
        # otherwise command would fail with no processes
        onlyif  => "grep '^${user}' /etc/passwd && ps -u ${user}",
        # run before user gets removed
        before  => User[$user];
    }
  }

  # create/remove user with managed home
  user {
    $user:
      ensure     => $ensure,
      home       => "/home/${user}",
      managehome => true,
      shell      => '/bin/bash',
  }
}
    
por 24.03.2015 / 12:37

Tags