Kukla içeren bir gruba mevcut bir kullanıcıyı ekleme


16

Mevcut bir kullanıcıyı kukla 2.7.18 olan bir gruba eklemek mümkün müdür?

Her biri bir sınıfı tanımlayan iki modülümüz var:

  • modül "kullanıcı" kullanıcı foo ve kullanıcı çubuğu dahil olmak üzere tüm kullanıcıları oluşturur.
  • modül "subversion" çeşitli conf dosyaları ile ilgilenir ve grup svn oluşturur.

Modül "subversion" içindeki svn grubuna foo kullanıcısı eklemek istiyoruz.

Varolan özellik isteğinde açıklandığı gibi üyelik parametresini denedim :

group {
"svn":
    ensure  => present,
    gid     => xxxxx;
}
user {
"foo":
    group      => ["svn"],
    membership => minimum;
}

Ancak aşağıdaki hatayı alıyorum:

err: Uzak sunucudan katalog alınamadı: SUNUCU'da Hata 400: Yinelenen bildirim: Kullanıcı [foo], xx satırında /pathto/modules/subversion/manifests/init.pp dosyasında zaten bildirilmiş; myserver.example.com düğümünde /pathto/modules/users/manifests/init.pp:xxx adresinde yeniden bildirilemiyor.

Bu özellik zaten uygulanmış mı? Değilse, iyi bir geçici çözüm var mı?

Yanıtlar:


15

Kullanıcıları sanal kaynak olarak bildirirseniz , 'gerçekleştir' veya koleksiyon sözdizimini (Kullanıcı <| ... |>) kullanabilirsiniz. İşte bir örnek:

@user { 'foo':
  groups     => ['somegroup'],
  membership => minimum,
}

Ardından, o zaman toplama sözdizimi ile bu sanal kullanıcıyı gerçekleştirin:

User <| title == foo |>

Ve başka bir yerde, artıyı kullanarak bu sanal kaynağın parametrelerine ekleyebilirsiniz:

User <| title == foo |> { groups +> "svn" }

Yani sanırım şu anda sanal kaynaklar dışında bir alternatif yok :( Cevabınız için çok teşekkürler.

1
Kukla sürümleri arasında değiştirilmiş bir yazım hatası veya öznitelik var: Grup değil gruplar (çoğul). Kukla 3.2.2'yi Kullanma
Goran Miskovic

1
Birisi buna kısa bir örnekle genişleyebilir.
mschuett

22

Kukla sanal kaynaklarını kullanmak bunu yapmanın doğru yoludur - ancak kullanıcı tanımlarını değiştiremiyorsanız ve bu arada geçici bir düzeltmeye ihtiyacınız varsa, aşağıdakiler korkunç ve kötüdür, ancak işe yarayacaktır:

exec { 'foo somegroup membership':
  unless  => '/bin/grep -q "somegroup\\S*foo" /etc/group',
  command => '/sbin/usermod -aG somegroup foo',
  require => User['foo'],
}

Temelde sadece bazı grupların henüz kullanıcı foo içerip içermediğini kontrol ediyoruz ... değilse, foo'nun mevcut gruplarına ek olarak normal usermod komutlarını kullanın.


1
Kukla, yürütülebilir dosyalara tam nitelikli yollar bırakabilir. Bunu yansıtacak şekilde düzenlendi.
h7r

2
Korkunç ve hacky, ama gerçekten yararlı. Bir gruba kullanıcı eklemek gibi kavramsal olarak basit bir şey yapmak için yeni bir dil yapısı öğrenmemeyi umuyordum.
BillMan

1
Belki de kullandığımızı getent group somegroup|cut -d: -f4|grep -q foovarsaymamak için daha uygun (tabii ki hackyken) bir yol kullanmak olurdu /etc/group.
falstro

Süper yararlı - teşekkürler. Tam yol aşağıdaki gibi eklemek için "sürece" ve "usermod" değiştirmek zorunda kaldı: unless => "/ user / bin / grep ..." command => "/ user / bin / usermod ..."
JNP Web Geliştirici

@JnpWebDeveloper ve benzerleri için: belgelere göre bir pathparametre de belirleyebilirsiniz . Küresel bir kaynak temerrüde sahip olmayı öneririm, belki de bu $PATHfaktörden çıkar.
cincodenada

2

Teşekkürler - kesin çirkin kesmek, ama işi hallediyor. 'Nagios' grubuna 'nrpe' eklemek için yollandırılmış bir örnek (yukarıdaki yorumları birleştirerek). Burada kullanıcı kukla yerine RPM sağlanan bir paket gerektiren kullandım.

  exec {"nrpe nagios membership":
    unless => "/bin/getent group nagios|/bin/cut -d: -f4|/bin/grep -q nrpe",
    command => "/usr/sbin/usermod -a -G nagios nrpe",
    require => Package['nrpe'],
  }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.