Menambahkan pengguna yang ada ke grup dengan boneka

16

Apakah mungkin menambahkan pengguna yang ada ke grup dengan boneka 2.7.18?

Kami memiliki dua modul, masing-masing mendefinisikan satu kelas:

  • modul "user" membuat semua pengguna, termasuk foo pengguna dan bilah pengguna.
  • modul "subversi" berkaitan dengan berbagai file conf dan membuat grup svn.

Kami ingin menambahkan foo pengguna ke grup svn di dalam modul "subversi".

Saya sudah mencoba parameter keanggotaan seperti yang dijelaskan dalam permintaan fitur yang ada :

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

Tapi saya mendapatkan kesalahan berikut:

err: Tidak dapat mengambil katalog dari server jauh: Kesalahan 400 pada SERVER: Deklarasi rangkap: Pengguna [foo] sudah dinyatakan dalam file /pathto/modules/subversion/manifests/init.pp pada baris xx; tidak dapat mendeklarasikan ulang di /pathto/modules/users/manifests/init.pp:xxx pada node myserver.example.com

Apakah fitur ini sudah diterapkan? Jika tidak, apakah ada solusi yang baik?


sumber

Jawaban:

15

Jika Anda mendeklarasikan pengguna sebagai sumber daya virtual , Anda kemudian dapat menggunakan sintaks 'realisasi' atau koleksi (Pengguna <| ... |>). Ini sebuah contoh:

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

Kemudian sadari bahwa pengguna virtual dengan sintaks kumpulan:

User <| title == foo |>

Dan di tempat lain Anda dapat menambahkan ke parameter untuk sumber daya virtual menggunakan tanda tambah:

User <| title == foo |> { groups +> "svn" }
dotplus
sumber
Jadi saya kira tidak ada alternatif selain sumber daya virtual saat ini :( Terima kasih banyak atas jawabannya.
1
Ada kesalahan ketik atau atribut yang berubah di antara versi Wayang: Ini bukan grup tetapi grup (jamak). Menggunakan Puppet 3.2.2
Goran Miskovic
1
dapatkah seseorang memperluas ini dengan contoh singkat.
mschuett
21

Menggunakan sumber daya virtual Wayang adalah cara yang tepat untuk melakukannya - tetapi jika Anda tidak dapat mengubah definisi pengguna dan memerlukan perbaikan sementara, hal-hal berikut mengerikan dan hacky, tetapi akan berfungsi:

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

Pada dasarnya kami hanya memeriksa apakah ada grup yang berisi pengguna foo ... jika tidak, gunakan perintah usermod yang normal untuk menambahkannya di samping grup yang ada di dalamnya.

dodocaptain
sumber
1
Wayang mungkin memerlukan jalur yang sepenuhnya memenuhi syarat untuk dieksekusi. Diedit untuk mencerminkan ini.
h7r
2
Mengerikan & hacky, tetapi sangat membantu. Saya berharap tidak harus belajar bahasa baru untuk melakukan sesuatu yang secara konsep sederhana seperti menambahkan pengguna ke grup.
BillMan
1
Mungkin (sementara masih Hacky tentu saja) cara yang lebih tepat akan menggunakan getent group somegroup|cut -d: -f4|grep -q foountuk tidak menganggap kita sedang menggunakan /etc/group.
falstro
Sangat membantu - terima kasih. Saya harus mengubah "kecuali" dan "usermod" untuk menyertakan path lengkap sebagai berikut: kecuali => "/ user / bin / grep ..." command => "/ user / bin / usermod ..."
JNP Pengembang Web
Untuk @jnpWebDeveloper dan yang menyukainya: sesuai dokumentasi , Anda juga dapat menentukan pathparameter. Saya menyarankan memiliki standar sumber daya global, mungkin itu menarik $PATHdari facter.
cincodenada
2

Terima kasih - hack jelek pasti, tapi itu menyelesaikan pekerjaan. Berikut adalah contoh lintasan (menggabungkan komentar di atas) untuk menambahkan 'nrpe' ke grup 'nagios'. Saya menggunakan paket yang membutuhkan karena pengguna di sini adalah RPM yang disediakan daripada oleh boneka.

  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'],
  }
Bill McGonigle
sumber