Como você configura o fantoche para adicionar um usuário ao grupo sudoers quando ele varia em sistemas diferentes (ou, como as variáveis funcionam?)

3

Estou começando a configurar sistemas usando o Puppet e estou com problemas para configurar minha conta de usuário.

Em nosso servidor CentOS 5.3, o grupo sudoers é 'wheel', gid 10. Em nosso servidor Ubuntu 9.10, o grupo é 'sudo', gid 27. Como configuro a conta do grupo para que ambas as caixas recebam o direito group e meu usuário é adicionado ao grupo certo?

Eu tentei dividir essa configuração em os_vars.pp, virt_groups.pp e virt_users.pp.

os_vars.pp:

class os_vars {
  case $operatingsystem {
    centos: {
      $os_admin_group = "wheel"
      $os_admin_group_gid = "10"
    }
    ubuntu: {
      $os_admin_group = "sudo"
      $os_admin_group_gid = "27"
    }
  }
  notice("in os_vars, admin group is: ${os_admin_group}, ${os_admin_group_gid}")
}

virt_groups.pp:

class virt_groups {
  include os_vars
  notice("in virt_groups, admin group is: ${os_admin_group}, ${os_admin_group_gid}")
  @group { $os_admin_group:
    gid => $os_admin_group_gid,
    ensure => present,
  }
}

virt_users.pp:

class virt_users {
  include os_vars
  notice("in virt_users, admin group is: ${os_admin_group}, ${os_admin_group_gid}")
  @user { 'my_user':
    home => '/home/my_user',
    uid => '500',
    groups => [$os_admin_group],
    password => $1BigLongEncrypedStuff
    gid => '500',
    ensure => 'present',
    shell => '/bin/bash'
  }
}

Em os_vars.pp, as variáveis estão definidas corretamente, mas estão vazias em virt_users.pp e virt_groups.pp.

    
por John Whitlock 28.07.2010 / 16:25

2 respostas

1

As variáveis precisam ser definidas e citadas. A sintaxe correta para virt_groups.pp é:

class virt_groups {
  include os_vars
  notice("in virt_groups, admin group is: ${os_vars::os_admin_group}, ${os_vars::os_admin_group_gid}")
  @group { "${os_vars::os_admin_group}:
    gid => "${os_vars::os_admin_group_gid}",
    ensure => present,
  }
}

Isso resolve meu problema imediato, mas ainda parece ser uma maneira desajeitada de lidar com o que provavelmente é um problema comum de marionetes.

    
por 28.07.2010 / 17:00
1

Como na resposta anterior, as variáveis devem ter escopo. Não se preocupe com o ID do grupo: s ou virtual sudo / wheel groups. Se o grupo admin já estiver presente no sistema, você não precisa defini-lo.

Usando o? selector em vez de case torna o código um pouco menos detalhado:

class os_vars {
  $admin_group = $::operatingsystem ? {
     'centos' => 'wheel',
     default  => 'sudo',
  }
  notice("in os_vars, admin group is: ${admin_group}")
}

class virt_users {
  include os_vars
  notice("in virt_groups, admin group is: ${os_vars::admin_group}")
  @user { 'my_user':
    ....
    groups => [$os_vars::admin_group],
  }
}

Se o grupo não existir e você tiver que criá-lo com o Puppet, é melhor deixar o GID fora para evitar colisões. O parâmetro system fornece ao grupo uma identificação da área do sistema:

include os_vars
group {$os_vars::admin_group:
  ensure => present,
  system => true,
}
    
por 23.07.2013 / 16:04

Tags