Sửa các dịch vụ đã bị vô hiệu hóa trong / etc / default / with Puppet?


13

Tôi đang sử dụng con rối để (về mặt lý thuyết) có được npcd để bắt đầu khi cài đặt, tuy nhiên trên Ubuntu, dịch vụ đó được cài đặt với cài đặt mặc định trong / etc / default / npcd của 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"

Tôi nghĩ rằng khối cấu hình con rối này sẽ đảm nhiệm mọi việc:

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

Nhưng than ôi, nó không, và thực tế là viết lại tập tin trong / etc / default, tôi không biết phải làm gì. Có cách nào đơn giản để kích hoạt dịch vụ mà tôi không thấy không?

Để ghi lại, tôi đang sử dụng Ubuntu 12.04.2 và phiên bản con rối 3.1.0.


Tại sao không chỉ viết lại /etc/default/npcdvới một filetài nguyên? Các filephụ thuộc vào package, và servicephụ thuộc vào file. Tôi luôn luôn tinh chỉnh các tập tin thông qua sedhoặc augeasnếu tôi có thể tránh nó.
larsks

Câu trả lời:


12

Cập nhật tệp đó và sau đó khởi động lại dịch vụ là cách duy nhất. Bạn có thể đẩy một tệp mới và sau đó thực hiện dịch vụ Yêu cầu đó; theo cách đó khi nội dung được cập nhật, dịch vụ sẽ bắt đầu đúng.

Nếu bạn không muốn thay thế hoàn toàn tệp, bạn có thể sử dụng công cụ Puppet augeas để chỉ sửa đổi một dòng trong tệp mặc định.

Có một vài dịch vụ trong Debian và các dẫn xuất của nó không tự khởi động sau khi gói được cài đặt trừ khi được bật trong / etc / default. Loại phiền phức.

Chỉnh sửa: FYI tập lệnh init thực sự đang đọc các giá trị từ tệp đó (chỉ cần tìm nguồn cung cấp thông thường).


1
Hấp dẫn. Tôi có một tâm trí để nộp một lỗi. Nếu bạn đặt "enable" thành "true", thực tế chỉ có nghĩa là nó thực sự kích hoạt tập lệnh (ngoài bất kỳ liên kết tượng trưng nào khác để chạy các cấp).
Matt Simmons

Tôi nghĩ rằng không có cách nào dễ dàng để Puppet biết liệu một dịch vụ có cần tệp "mặc định" được cập nhật để họ không nướng nó vào hay không; có thể dễ dàng hơn để gửi một lỗi với phân phối. Tôi nghi ngờ bạn sẽ nhận được bất kỳ lực kéo nào :-)
Luke

sử dụng một loại được xác định gọi là "defaulted_service" có tài nguyên dịch vụ và cũng là tài nguyên thực thi cập nhật tệp tại chỗ bằng sed nếu cần hoặc tài nguyên tệp sử dụng tùy theo bạn.
Sirex

@MattSimmons Những người tạo ra các gói này nên sử dụng các liên kết tượng trưng và update-rc.dđể bật / tắt dịch vụ, không phải /etc/default- đó không phải là cách tiêu chuẩn để quản lý dịch vụ, vì vậy nó nằm ngoài tầm kiểm soát của con rối.
Shane Madden

8

Đối với địa ngục của nó, tôi đã kiểm tra một vài daemon tiêu chuẩn trên máy 12.04 của mình. Bạn phải quản lý các tập tin, không có cách nào xung quanh nó tại thời điểm này.

snmpd

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

sưu tầm

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

con rối

# 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

Tôi nghĩ rằng một trong những cách khả thi để làm điều đó là sử dụng công cụ augeas với con rối, vd

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

tham khảo hướng dẫn để biết chi tiết


0

Tôi sử dụng sed để sửa đổi các tập tin. Augeas có vẻ như quá mức cần thiết.

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

Ý tưởng lấy từ đây:

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

Vì vậy, trong trường hợp của bạn

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

1
nếu bạn nghĩ rằng augeas là một quá mức, thì cũng không phải là một con rối quá mức? :) Giải pháp của bạn cũng ổn, nhưng bạn cho rằng bạn có tệp và cần dòng nó, vậy nếu nó không có thì sao? Nó sẽ chỉ thất bại mà không nói cho bạn bất cứ điều gì. Tôi tin rằng augeas rất mạnh mẽ, tiện lợi và có mục đích, nó đáng để cài đặt nếu bạn đang sử dụng con rối
DukeLion

Ví dụ của tôi là từ con rối bootstrapping thông qua cloud-init. Tôi nhìn vào augeas và ngay lập tức quyết định tránh nó nếu có thể. Cho đến nay tôi không cần đến các dịch vụ cũng như không cần phải khởi động một dịch vụ khác ngoài con rối để bắt đầu = có.
dmourati

Tôi thực sự tò mò về quan điểm của bạn. Tôi có thể thấy quan điểm của bạn, nhưng không phải những người ủng hộ và con rối sử dụng cùng một hệ tư tưởng cung cấp giao diện cấp cao trừu tượng để quản lý thống nhất? Vì vậy, nếu bạn không thích augeas, làm thế nào bạn thích con rối? Tại sao không ansible sau đó?
DukeLion

Tôi nghĩ rằng cách tiếp cận tốt hơn là chỉnh sửa các tệp cấu hình còn sơ khai hoặc phân đoạn, chẳng hạn như trong apache conf.d, sysctl.d, sudoers.d, v.v. Trong trường hợp đơn giản nhất, nơi các tệp cấu hình bị phân mảnh với các thư mục .d không tồn tại, hãy sử dụng sed / perl / bất cứ thứ gì. Do đó, không cần cho augeas.
dmourati

0

Làm điều này với augeaskiểu trong Puppet là một cách (như được đề xuất bởi @DukeLion).

Một cách khác là sử dụng augeasprovidersmô-đun , với shellvarnhà cung cấp:

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

Điều này tốt hơn vì Augeas sẽ được nhà cung cấp Ruby sử dụng sạch. Nó cũng sẽ quản lý trích dẫn và bình luận tự động.

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.