Thêm người dùng hiện tại vào một nhóm có con rối


16

Có thể thêm người dùng hiện tại vào một nhóm với con rối 2.7,18 không?

Chúng tôi có hai mô-đun, mỗi mô-đun xác định một lớp:

  • mô-đun "người dùng" tạo tất cả người dùng, bao gồm cả người dùng foo và thanh người dùng.
  • mô-đun "lật đổ" xử lý các tệp conf khác nhau và tạo nhóm svn.

Chúng tôi muốn thêm người dùng foo vào nhóm svn bên trong mô đun "lật đổ".

Tôi đã thử tham số thành viên như được mô tả trong yêu cầu tính năng hiện có :

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

Nhưng tôi nhận được lỗi sau:

err: Không thể truy xuất danh mục từ máy chủ từ xa: Lỗi 400 trên SERVER: Khai báo trùng lặp: Người dùng [foo] đã được khai báo trong tệp /pathto/modules/subversion/manifests/init.pp tại dòng xx; không thể xác định lại tại /pathto/modules/users/manifests/init.pp:xxx trên nút myserver.example.com

Là tính năng này đã được thực hiện? Nếu không, có một cách giải quyết tốt?

Câu trả lời:


15

Nếu bạn khai báo người dùng là tài nguyên ảo , thì bạn có thể sử dụng 'nhận ra' hoặc cú pháp bộ sưu tập (Người dùng <| ... |>). Đây là một ví dụ:

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

Sau đó nhận ra rằng người dùng ảo với cú pháp bộ sưu tập sau đó:

User <| title == foo |>

Và ở nơi khác, bạn có thể thêm vào các tham số cho tài nguyên ảo đó bằng cách sử dụng phép cộng:

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

Vì vậy, tôi đoán không có sự thay thế nào ngoại trừ các nguồn tài nguyên ảo tại thời điểm này :( Cảm ơn rất nhiều về câu trả lời.

1
Có một lỗi đánh máy hoặc thuộc tính được thay đổi giữa các phiên bản Puppet: Nó không phải là nhóm mà là nhóm (số nhiều). Sử dụng rối 3.2.2
Goran Miskovic

1
ai đó có thể mở rộng về điều này với một ví dụ ngắn.
mschuett

21

Sử dụng tài nguyên ảo Puppet là cách đúng đắn để làm điều đó - nhưng nếu bạn không thể thay đổi định nghĩa người dùng và cần sửa lỗi trong khi đó, điều sau đây thật kinh khủng và hacky, nhưng sẽ hoạt động:

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

Về cơ bản, chúng tôi chỉ kiểm tra xem một số nhóm có chứa người dùng foo chưa ... nếu không, hãy sử dụng các lệnh usermod bình thường để thêm nó ngoài các nhóm hiện có mà foo thuộc về.


1
Con rối có thể sắp xếp lại các đường dẫn đủ điều kiện để thực thi. Chỉnh sửa để phản ánh điều này.
h7r

2
Kinh khủng & hacky, nhưng thực sự hữu ích. Tôi đã hy vọng không phải học một cấu trúc ngôn ngữ mới để làm một cái gì đó đơn giản về mặt khái niệm như thêm người dùng vào một nhóm.
Billman

1
Có lẽ một cách thích hợp hơn (trong khi vẫn đang bị hack tất nhiên) sẽ được sử dụng getent group somegroup|cut -d: -f4|grep -q foođể không cho rằng chúng ta đang sử dụng /etc/group.
falstro

Siêu hữu ích - cảm ơn. Tôi đã phải thay đổi "trừ khi" và "usermod" để bao gồm đường dẫn đầy đủ như sau: trừ khi => "/ user / bin / grep ..." lệnh => "/ user / bin / usermod ..."
JNP Nhà phát triển web

Đối với @jnpWebDeveloper và những người như họ: theo tài liệu , bạn cũng có thể chỉ định một paththam số. Tôi đề nghị có một mặc định tài nguyên toàn cầu, có lẽ điều đó kéo vào $PATHtừ facter.
cincodenada

2

Cảm ơn - chắc chắn hack, nhưng nó hoàn thành công việc. Đây là một ví dụ có đường dẫn (kết hợp các ý kiến ​​trên) để thêm 'nrpe' vào nhóm 'nagios'. Tôi đã sử dụng một gói yêu cầu vì người dùng ở đây là RPM được cung cấp thay vì bằng con rối.

  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'],
  }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.