แก้ไขบริการที่ถูกปิดใช้งานใน / etc / default / ด้วย puppet หรือไม่


13

ฉันกำลังใช้หุ่นกระบอกกับ (ตามหลักวิชา) รับ npcd เพื่อเริ่มการติดตั้งอย่างไรก็ตามบน Ubuntu บริการนั้นติดตั้งพร้อมการตั้งค่าเริ่มต้นใน / etc / default / npcd ของ RUN = "no":

 $ cat /etc/default/npcd 
 # Default settings for the NPCD init script.

 # Should NPCD be started? ("yes" to enable)
 RUN="no"

 # Additional options that are passed to the daemon.
 DAEMON_OPTS="-d -f /etc/pnp4nagios/npcd.cfg"

ฉันคิดว่า block ของ puppet config นี้จะดูแลสิ่งต่าง ๆ :

    service { "npcd":
       enable   => true,
       ensure   => "running",
       require  => Package["pnp4nagios"],
    }   

แต่อนิจจามันไม่ได้และขาดการเขียนไฟล์ใหม่ใน / etc / default ฉันไม่แน่ใจว่าต้องทำอะไร มีวิธีที่ตรงไปตรงมาเพื่อเปิดใช้งานบริการที่ฉันไม่เห็นหรือไม่?

สำหรับบันทึกฉันใช้ Ubuntu 12.04.2 และ puppet เวอร์ชัน 3.1.0


ทำไมไม่เขียนใหม่/etc/default/npcdด้วยfileทรัพยากร? fileขึ้นอยู่กับpackageและขึ้นอยู่กับservice fileฉันมักจะแก้ไขไฟล์ผ่านบ่อยๆsedหรือaugeasหากฉันสามารถหลีกเลี่ยงได้
larsks

คำตอบ:


12

การอัปเดตไฟล์นั้นจากนั้นเริ่มบริการใหม่เป็นวิธีเดียวเท่านั้น คุณสามารถพุชไฟล์ใหม่แล้วทำให้บริการต้องการสิ่งนั้น; วิธีนั้นเมื่อเนื้อหาได้รับการอัพเดตบริการจะเริ่มขึ้นอย่างเหมาะสม

หากคุณไม่ต้องการแทนที่ไฟล์ทั้งหมดคุณสามารถใช้เครื่องมือ Puppet augeas เพื่อแก้ไขบรรทัดเดียวในไฟล์ค่าเริ่มต้น

มีบริการบางอย่างใน Debian และตราสารอนุพันธ์ที่ไม่เริ่มระบบอัตโนมัติหลังจากติดตั้งแพคเกจเว้นแต่ว่าจะเปิดใช้งานใน / etc / default น่ารำคาญ

แก้ไข: FYI สคริปต์เริ่มต้นกำลังอ่านค่าจากไฟล์นั้น


1
น่าสนใจ ฉันมีความคิดที่จะยื่นข้อบกพร่อง หากคุณตั้งค่า "เปิดใช้งาน" เป็น "จริง" จะทำให้รู้สึกว่าเปิดใช้งานสคริปต์เท่านั้น (นอกเหนือจาก symlink ต่างๆเพื่อเรียกใช้ระดับ)
แมตต์ซิมมอนส์

ฉันคิดว่าไม่มีวิธีที่ง่ายสำหรับ Puppet ที่จะรู้ว่าบริการจะต้องมีการอัปเดตไฟล์ "ค่าเริ่มต้น" หรือไม่เพื่อให้พวกเขาไม่ได้อบในนั้น อาจเป็นเรื่องง่ายกว่าที่จะยื่นข้อบกพร่องด้วยการกระจาย ฉันสงสัยว่าคุณจะได้รับแรงฉุด แต่อย่างใด :-)
ลุค

ใช้ประเภทที่กำหนดไว้ซึ่งเรียกว่า "defaulted_service" ซึ่งมีทรัพยากรบริการและทรัพยากร exec ที่อัปเดตไฟล์โดยใช้ sed หากจำเป็นหรือทรัพยากรไฟล์ที่ใช้ augeas ขึ้นอยู่กับคุณ
Sirex

@ MattSimmons ผู้ที่สร้างแพ็คเกจเหล่านี้ควรใช้ symlink และupdate-rc.dเปิด / ปิดบริการไม่ใช่/etc/defaultไม่ใช่วิธีมาตรฐานในการจัดการบริการดังนั้นมันจึงอยู่นอกเหนือการควบคุมของหุ่นเชิด
เชนแมดเดน

8

สำหรับนรกของมันฉันตรวจสอบ daemons มาตรฐานสองสามเครื่องของฉัน 12.04 คุณต้องจัดการไฟล์โดยไม่มีวิธีแก้ไขในเวลานี้

snmpd

# snmpd control (yes means start daemon).
SNMPDRUN=yes

collectd

# 0: start collectd on boot, 1: do not start collectd on boot
# default: 0
DISABLE=0

หุ่นเชิด

# Start puppet on boot?
START=yes

mdadm

# START_DAEMON:
#   should mdadm start the MD monitoring daemon during boot?
START_DAEMON=true

haproxy

# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1

6

ฉันคิดว่าวิธีหนึ่งที่เป็นไปได้ที่จะทำคือใช้เครื่องมือ augeas กับหุ่นเชิดเช่น

augeas { "npcd_default":
  changes => [
    "set /files/etc/default/npcd/Run yes",
  ],
}

ดูคู่มือสำหรับรายละเอียด


0

ฉันใช้ sed เพื่อแก้ไขไฟล์ Augeas ดูเหมือน overkill

sed -i /etc/default/puppet -e 's/START=no/START=yes/'

แนวคิดที่นำมาจากที่นี่:

http://www.codelord.net/2010/12/19/using-puppet-to-automatically-configure-new-ec2-instances/

ดังนั้นในกรณีของคุณ

sed -i /etc/default/npcd -e 's/RUN="no"/RUN="yes"/'

1
ถ้าคุณคิดว่า augeas เป็น overkill หุ่นเชยก็ไม่ใช่ overkill ด้วยใช่ไหม :) ทางออกของคุณก็โอเค แต่คุณคิดว่าคุณมีไฟล์และจำเป็นต้องวางมันดังนั้นถ้ามันไม่มี มันจะล้มเหลวโดยไม่บอกอะไรคุณ ฉันเชื่อว่า augeas นั้นแข็งแกร่งทนทานสะดวกสบายและมีจุดประสงค์ที่คุ้มค่าหากคุณกำลังใช้หุ่นเชิด
DukeLion

ตัวอย่างของฉันมาจากหุ่นกระบอกบู๊ตผ่านคลาวด์ init ฉันดูที่ augeas และตัดสินใจหลีกเลี่ยงในทันทีหากเป็นไปได้ จนถึงตอนนี้ฉันไม่ต้องการ augeas และฉันไม่จำเป็นต้องบูตเครื่องบริการอื่นนอกจากหุ่นเพื่อเริ่ม = ใช่
dmourati

ฉันอยากรู้จริงๆเกี่ยวกับมุมมองของคุณ ฉันเห็นจุดของคุณ แต่ไม่ใช่ augeas และ puppet ใช้อุดมการณ์เดียวกันในการให้ส่วนต่อประสานระดับนามธรรมระดับสูงสำหรับการจัดการแบบรวม? ดังนั้นถ้าคุณไม่ชอบ augeas ทำไมคุณถึงชอบหุ่นเชิด? ทำไมจึงไม่สามารถพูดได้
DukeLion

ฉันคิดว่าวิธีที่ดีกว่าคือการแก้ไขไฟล์ stub หรือแฟรกเมนต์แฟรกเมนต์เช่นใน apache conf.d, sysctl.d, sudoers.d ฯลฯ พยายามที่จะแยกไฟล์ของคุณผ่านไฟล์ปรับแต่งอื่น ๆ ในกรณีที่ง่ายที่สุดที่ไม่มีไฟล์การแยกส่วนที่มีไดเรกทอรี. d อยู่ให้ใช้ sed / perl / what ดังนั้นจึงไม่จำเป็นต้อง augeas
dmourati

0

การทำสิ่งนี้กับaugeasประเภทใน Puppet เป็นวิธีหนึ่ง (ตามที่แนะนำโดย @DukeLion)

อีกวิธีคือใช้augeasprovidersโมดูลกับshellvarผู้ให้บริการ:

shellvar { 'npcd_default':
  ensure   => present,
  target   => '/etc/default/npcd',
  variable => 'RUN',
  value    => 'yes',
  comment  => 'We want npcd to run',
}

นี่จะดีกว่าเพราะ Augeas จะถูกใช้อย่างหมดจดโดยผู้ให้บริการ Ruby นอกจากนี้ยังจะจัดการข้อความและแสดงความคิดเห็นโดยอัตโนมัติ

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