Author Topic: Importar desde CSV, usuarios a grupos (Zentyal 3) [RESUELTO]  (Read 2652 times)

capel

  • Zen Apprentice
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
Importar desde CSV, usuarios a grupos (Zentyal 3) [RESUELTO]
« on: January 02, 2013, 06:24:49 pm »
Buenas tardes,

LLevo unas horas dandole vueltas al asunto y no saco nada en claro. Quiero que al mismo tiempo que crea el usuario lo añada a un grupo pero me quedo en la creación del usuario sin asignarlo...

Me baso en el script de ejemplo http://doc.zentyal.org/es/develop.html añadiendo lo siguiente:

    [...]
    chomp ($line);
    my $user;
    my ($username, $givenname, $surname, $password, $group) = split(',', $line);
    $user->{'user'} = $username;
    $user->{'givenname'} = $givenname;
    $user->{'surname'} = $surname;
    $user->{'password'} = $password;
    $user->{'ou'} = $group;      # Documentado como parámetro en UsersAndGroups::User.pm
    push (@users, $user);
    [...]


Gracias y un saludo.
« Last Edit: January 22, 2013, 04:20:48 pm by capel »

rjechevers

  • Zen Apprentice
  • *
  • Posts: 1
  • Karma: +0/-0
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3)
« Reply #1 on: January 11, 2013, 09:41:14 pm »
Hola esta es  el script que tengo y funciona correctamente


#!/usr/bin/perl

use strict;
use warnings;

use EBox;
use EBox::UsersAndGroups::User;

EBox::init();

my @users = ();

open(my $USERS,"/tmp/users") or die "Error opening 'users' file: $!";
while(my $line = <$USERS>) {
   chomp ($line);
   my $user;
   my ($username,$givenname,$surname,$password, $group) = split(',',$line);
   $user->{'user'} = $username;
   $user->{'givenname'} = $givenname;
   $user->{'surname'} = $surname;
   $user->{'password'} = $password;
 push (@users, $user);
}
close($USERS);
foreach my $user (@users) {
    EBox::UsersAndGroups::User->create($user, 0);
}

1;

Nota

1 El Script debes ponerlo en /tmp y el archivo de datos
2 El formato del archivo es  usuario,nombre,apellido,clave,

Saludos desde Panamá  y espero que les sirva
« Last Edit: January 11, 2013, 09:43:05 pm by rjechevers »

capel

  • Zen Apprentice
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3)
« Reply #2 on: January 14, 2013, 04:55:36 pm »
Gracias por aportación rjechevers pero lo que busco es asociar esos usuarios a un grupo concreto. Hasta donde veo en tu script el 5º campo que recoges del CSV es el del grupo pero luego no lo usas en ningún lado.

Pd1: tanto 'bulkusers' como 'users' ya los ejecutaba desde '/tmp/', es raro que aun habiéndolos creado con root no funcionen desde cualquier carpeta.

Gracias de todos modos. Un saludo.

capel

  • Zen Apprentice
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3)
« Reply #3 on: January 17, 2013, 11:48:35 am »
Tengo que decir que es la primera vez que tengo que tocar perl y después de unas horas documentandome he llegado al siguiente script:

#!/usr/bin/perl

use strict;
use warnings;

use EBox;
use EBox::UsersAndGroups::User;
use EBox::UsersAndGroups;

EBox::init();

my @users;

open (my $USERS, 'users');

while (my $line = <$USERS>) {
    chomp ($line);
    my $user;
   
    my ($username, $givenname, $surname, $password, $grupo) = split(',', $line);
    $user->{'user'} = $username;
    $user->{'givenname'} = $givenname;
    $user->{'surname'} = $surname;
    $user->{'password'} = $password;   
    my $g= EBox::UsersAndGroups->group($grupo);  # instancia en $g el grupo pasado por el csv
   
    if (!(-d "/home/$username")) {   
      my $u= EBox::UsersAndGroups::User->create($user, 0);
      $u-> addGroup($g);     # añade el usuario a su grupo
   }                              
}
   
close ($USERS);

1;



El error que me devuelve es el siguiente:

Can't use string ("EBox::UsersAndGroups") as a HASH ref while "strict refs" in use at /usr/share/perl5/EBox/LdapModule.pm line 60.

Sin saber como solventarlo, ¿ideas?

Un saludo y gracias.

capel

  • Zen Apprentice
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3)
« Reply #4 on: January 17, 2013, 12:15:20 pm »
Bueno he avanzado un poco más en el asunto, logro agregar un usuario a un grupo que no existe:

#!/usr/bin/perl

use strict;
use warnings;

use EBox;
use EBox::UsersAndGroups::User;
use EBox::UsersAndGroups;

EBox::init();

my @users;

open (my $USERS, 'users');

while (my $line = <$USERS>) {
    chomp ($line);
    my $user;
   
    my ($username, $givenname, $surname, $password, $grupo) = split(',', $line);
    $user->{'user'} = $username;
    $user->{'givenname'} = $givenname;
    $user->{'surname'} = $surname;
    $user->{'password'} = $password; 
    my $g= EBox::UsersAndGroups::Group->create($grupo, 0);
   
    if (!(-d "/home/$username")) {   
      my $u= EBox::UsersAndGroups::User->create($user, 0);
      $g->addMember($u);
   }                              
}
   
close ($USERS);

1;



Lo que intento y no consigo es "capturar" ese objeto grupo existente. GetObject, ::Group->name('$grupo'), ... nada me sirve.

Un saludo.

jsalamero

  • Zentyal Staff
  • Zen Hero
  • *****
  • Posts: 1419
  • Karma: +45/-1
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3)
« Reply #5 on: January 22, 2013, 12:04:47 pm »
Hola capel,

prueba con:

        use EBox::Global;

        my $users = EBox::Global->modInstance('users');
        my $group = $users->group($groupname);
        $group->addMember($u)

Un saludo,

capel

  • Zen Apprentice
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3)
« Reply #6 on: January 22, 2013, 04:20:03 pm »
Perfecto, funciona correctamente.

Dejo el script completo para que el resto pueda echar mano de él:


#!/usr/bin/perl

use strict;
use warnings;

use EBox;
use EBox::UsersAndGroups::User;
use EBox::Global;

EBox::init();

my $users = EBox::Global->modInstance('users');


my @users;

open (my $USERS, 'users');

while (my $line = <$USERS>) {
    chomp ($line);
    my $user;
   
    my ($username, $givenname, $surname, $password, $grupo) = split(',', $line);
    $user->{'user'} = $username;
    $user->{'givenname'} = $givenname;
    $user->{'surname'} = $surname;
    $user->{'password'} = $password;   
       
    my $u= EBox::UsersAndGroups::User->create($user, 0);
    my $group = $users->group($grupo);
    $group->addMember($u);                         
}
   
close ($USERS);

1;
« Last Edit: March 04, 2013, 06:40:43 pm by capel »

jsalamero

  • Zentyal Staff
  • Zen Hero
  • *****
  • Posts: 1419
  • Karma: +45/-1
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3) [RESUELTO]
« Reply #7 on: January 25, 2013, 12:45:07 pm »
Estupendo, ¡gracias por compartir esto!

fernando

  • Zen Apprentice
  • *
  • Posts: 3
  • Karma: +0/-0
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3) [RESUELTO]
« Reply #8 on: March 01, 2013, 11:33:12 am »
Buenos días,

    Buscando información sobre la importación de usuario he llegado hasta el foro y he visto el script que solucionaba mi problema, pero al intentar ejecutarlo me da un error. No entiendo de perl, pero comparando con otros scripts que aparecen en el mismo hilo creo que hay que modificar un par de cosas al final del script.

Actualmente pone:

........
  my $u= EBox::UsersAndGroups::User->create($user, 0);
    my $group = $users->group($grupo);
    $group->addMember($u)
   }                             
}
   
close ($USERS);

1;

Y creo que habría que añadir un ; después de $group->addMember($u).
Y creo que sobra un }

Creo que quedaría así

........
  my $u= EBox::UsersAndGroups::User->create($user, 0);
    my $group = $users->group($grupo);
    $group->addMember($u);
}
   
close ($USERS);

1;


Lo he probado con la modificación y parece que funciona, pero sería preferible que el usuario capel que el el creador del script, o alguien que entienda más que yo comprobara si el cambio es correcto o no.


Un saludo y gracias por el script, me ha venido muy bien.

Fernando.

capel

  • Zen Apprentice
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
Re: Importar desde CSV, usuarios a grupos (Zentyal 3) [RESUELTO]
« Reply #9 on: March 04, 2013, 06:39:43 pm »
Modificado, pequeño error al editar algo de código complementario que no venia a cuento para algo general.

Gracias por el detalle fernando, un saludo.