การเพิ่มผู้ใช้ที่มีอยู่ให้กับกลุ่มที่มีหุ่นเชิด


16

เป็นไปได้ไหมที่จะเพิ่มผู้ใช้ที่มีอยู่ในกลุ่มที่มีหุ่นกระบอก 2.7.18

เรามีสองโมดูลแต่ละคนกำหนดหนึ่งคลาส:

  • โมดูล "ผู้ใช้" สร้างผู้ใช้ทั้งหมดรวมถึงผู้ใช้ foo และแถบผู้ใช้
  • โมดูล "การโค่นล้ม" เกี่ยวข้องกับไฟล์ conf ต่างๆและสร้างกลุ่ม svn

เราต้องการเพิ่มผู้ใช้ foo ให้กับกลุ่ม svn ภายในโมดูล "การโค่นล้ม"

ฉันได้ลองพารามิเตอร์สมาชิกตามที่อธิบายไว้ในคำขอคุณลักษณะที่มีอยู่ :

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

แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาด: ไม่สามารถดึงข้อมูลแคตตาล็อกจากรีโมตเซิร์ฟเวอร์: ข้อผิดพลาด 400 บนเซิร์ฟเวอร์: การประกาศซ้ำ: ผู้ใช้ [foo] ถูกประกาศแล้วในไฟล์ /pathto/modules/subversion/manifests/init.pp ที่บรรทัด xx; ไม่สามารถประกาศใหม่ได้ที่ /pathto/modules/users/manifests/init.pp:xxx บน node myserver.example.com

คุณสมบัตินี้ใช้งานไปแล้วหรือไม่? ถ้าไม่เป็นเช่นนั้นจะมีวิธีแก้ปัญหาที่ดี?

คำตอบ:


15

หากคุณประกาศให้ผู้ใช้เป็นทรัพยากรเสมือนคุณสามารถใช้ 'ตระหนักถึง' หรือไวยากรณ์ของการรวบรวม (ผู้ใช้ <| ... |>) นี่คือตัวอย่าง:

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

จากนั้นตระหนักว่าผู้ใช้เสมือนที่มีไวยากรณ์การรวบรวมแล้ว:

User <| title == foo |>

และที่อื่น ๆ คุณสามารถเพิ่มพารามิเตอร์สำหรับทรัพยากรเสมือนนั้นโดยใช้เครื่องหมายบวก:

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

ดังนั้นฉันเดาว่าไม่มีทางเลือกอื่นนอกจาก ressources เสมือนในเวลานี้ :( ขอบคุณมากสำหรับคำตอบ

1
มีการพิมพ์หรือคุณลักษณะที่เปลี่ยนไประหว่างรุ่น Puppet: ไม่ใช่กลุ่ม แต่เป็นกลุ่ม (พหูพจน์) ใช้หุ่น 3.2.2
Goran Miskovic

1
ใครบางคนสามารถขยายในเรื่องนี้ด้วยตัวอย่างสั้น ๆ
mschuett

21

การใช้ทรัพยากรเสมือนของ Puppet เป็นวิธีที่เหมาะสมในการทำเช่นนั้น - แต่ถ้าคุณไม่สามารถเปลี่ยนนิยามผู้ใช้และต้องการการแก้ไขปัญหาชั่วคราวในขณะนี้สิ่งต่อไปนี้น่ากลัวและแฮ็ค

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

โดยพื้นฐานแล้วเราแค่ตรวจสอบว่า somegroup มี user foo หรือยัง ... ถ้าไม่ใช่ให้ใช้คำสั่ง usermod ปกติเพื่อเพิ่มเข้าไปนอกเหนือจากกลุ่มที่มีอยู่ที่เป็นของ foo


1
Puppet อาจ riquire พา ธ แบบเต็มไปยัง executables แก้ไขเพื่อสะท้อนสิ่งนี้
h7r

2
น่ากลัว & แฮ็ค แต่มีประโยชน์จริงๆ ฉันหวังว่าจะไม่ต้องเรียนรู้โครงสร้างภาษาใหม่เพื่อทำสิ่งที่เป็นแนวคิดง่าย ๆ เหมือนกับการเพิ่มผู้ใช้ไปยังกลุ่ม
BillMan

1
บางทีอาจจะเป็นที่เหมาะสมมากขึ้น (ในขณะที่ยังคงความ hacky แน่นอน) วิธีที่จะใช้จะไม่ถือว่าเรากำลังใช้getent group somegroup|cut -d: -f4|grep -q foo /etc/group
falstro

สุดยอดประโยชน์ - ขอบคุณ ฉันต้องเปลี่ยน "เว้นแต่" และ "usermod" เพื่อรวมเส้นทางแบบเต็มดังต่อไปนี้: เว้นแต่ => "/ ผู้ใช้ / bin / grep ... " คำสั่ง => "/ ผู้ใช้ / bin / usermod ... "
JNP นักพัฒนาเว็บ

สำหรับ @jnpWebDeveloper และสิ่งที่ชอบ: ตามเอกสารคุณสามารถระบุpathพารามิเตอร์ได้เช่นกัน ฉันขอแนะนำให้เริ่มต้นทรัพยากรทั่วโลกซึ่งอาจ$PATHมาจาก facter
cincodenada

2

ขอบคุณ - แฮ็คที่น่าเกลียดอย่างแน่นอน แต่มันก็ทำให้งานเสร็จ ต่อไปนี้เป็นตัวอย่างที่มีเส้นทาง (การรวมความคิดเห็นด้านบน) เพื่อเพิ่ม 'nrpe' ในกลุ่ม 'nagios' ฉันใช้แพคเกจที่ต้องการเนื่องจากผู้ใช้ที่นี่เป็น RPM ที่เตรียมไว้แทนที่จะเป็นหุ่นเชิด

  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'],
  }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.