Naprawianie usług, które zostały wyłączone w / etc / default / with puppet?


13

Korzystam z marionetki, aby (teoretycznie) uruchomić npcd podczas instalacji, jednak w Ubuntu ta usługa jest instalowana z domyślnym ustawieniem w / etc / default / npcd z 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"

Myślałem, że ten blok konfiguracji lalek załatwi sprawy:

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

Ale niestety tak nie jest, a właściwie przepisywanie pliku w / etc / default, nie jestem pewien, co robić. Czy istnieje prosty sposób włączenia usługi, której nie widzę?

Dla przypomnienia używam Ubuntu 12.04.2 i wersji marionetkowej 3.1.0.


Dlaczego nie po prostu przepisać /etc/default/npcdz filezasobu? fileZależy od packagei servicezależy od file. Zawsze jestem ostrożny w edytowaniu plików za pośrednictwem sedlub augeasjeśli mogę tego uniknąć.
larsks

Odpowiedzi:


12

Aktualizacja tego pliku, a następnie ponowne uruchomienie usługi to jedyny sposób. Możesz wcisnąć nowy plik, a następnie ustawić usługę Wymagaj tego; w ten sposób po zaktualizowaniu zawartości usługa uruchomi się poprawnie.

Jeśli nie chcesz całkowicie zamieniać pliku, możesz użyć narzędzia Puppet augeas, aby po prostu zmodyfikować pojedynczą linię w pliku domyślnym.

W Debianie i jego pochodnych jest kilka usług, które nie uruchamiają się automatycznie po zainstalowaniu pakietu, chyba że są włączone w / etc / default. Trochę irytujące.

Edycja: FYI skrypt init w rzeczywistości odczytuje wartości z tego pliku (zwykle po prostu go pozyskuje).


1
Ciekawy. Mam ochotę zgłosić błąd. Jeśli ustawisz „enable” na „true”, ma to sens tylko, że w rzeczywistości włącza skrypt (oprócz różnych linków symbolicznych do uruchamiania poziomów).
Matt Simmons,

Myślę, że nie ma łatwego sposobu, aby Puppet wiedział, czy usługa będzie potrzebowała zaktualizować plik „defaults”, aby go nie wkleić; może być łatwiej zgłosić błąd w dystrybucji. Wątpię jednak, czy dostaniesz przyczepność :-)
Luke

użyj zdefiniowanego typu o nazwie coś takiego jak „defaulted_service”, który ma zasób usługi, a także zasób exec, który aktualizuje plik w miejscu za pomocą sed, jeśli to konieczne, lub zasób pliku, który używa augeas, zależnie od ciebie.
Sirex,

@MattSimmons Ludzie tworzący te pakiety powinni korzystać z dowiązań symbolicznych oraz update-rc.ddo włączania / wyłączania usługi, a nie /etc/default- to nie jest standardowy sposób zarządzania usługami, więc nie można tego kontrolować.
Shane Madden

8

Do diabła z tym sprawdziłem kilka standardowych demonów na moich komputerach 12.04. Musisz zarządzać plikiem, w żadnym momencie nie można go obejść.

snmpd

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

zebrane

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

marionetka

# Start puppet on boot?
START=yes

mdadm

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

haproksy

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

6

Myślę, że jednym z możliwych sposobów, aby to zrobić, jest użycie narzędzia augeas z marionetką, np

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

szczegółowe informacje można znaleźć w instrukcji obsługi


0

Używam sed do modyfikacji pliku. Augeas wydaje się przesadą.

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

Pomysł zaczerpnięty stąd:

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

Więc w twoim przypadku

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

1
jeśli uważasz, że augeas to przesada, czy marionetka też nie jest przesada? :) Twoje rozwiązanie jest również w porządku, ale zakładasz, że masz plik i potrzebujesz go w wierszu, więc co, jeśli go nie ma? po prostu zawiedzie, nie mówiąc ci nic. Uważam, że augeas jest tak solidny, wygodny i celowy, że warto go zainstalować, jeśli używasz marionetki
DukeLion

Mój przykład pochodzi z ładowania marionetki przez chmurę-inicjację. Spojrzałem na augeas i od razu postanowiłem go unikać, jeśli to w ogóle możliwe. Do tej pory nie potrzebowałem augeas ani nie musiałem uruchamiać innej usługi oprócz marionetki, aby rozpocząć = tak.
dmourati,

Jestem naprawdę ciekawy twojego punktu widzenia. Rozumiem, o co ci chodzi, ale czy augeas i marionetka nie stosują tej samej ideologii zapewniania abstrakcyjnego interfejsu najwyższego poziomu dla zunifikowanego zarządzania? Więc jeśli nie lubisz augeas, dlaczego lubisz marionetkę? Dlaczego więc nie odpowiadasz?
DukeLion,

Wydaje mi się, że lepszym rozwiązaniem jest edytowanie plików konfiguracyjnych kodu pośredniczącego lub fragmentów, takich jak apache conf.d, sysctl.d, sudoers.d itp. Próbowanie przekopania się przez inne pliki konfiguracyjne po prostu mnie nie lubią. W najprostszym przypadku, gdy nie istnieją pofragmentowane pliki konfiguracyjne z katalogami .d, użyj sed / perl / cokolwiek. Dlatego nie ma potrzeby augeas.
dmourati,

0

Robienie tego z augeastypem w Puppet jest jednym ze sposobów (jak sugeruje @DukeLion).

Innym sposobem jest użycie augeasprovidersmodułu z shellvardostawcą:

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

Jest to lepsze, ponieważ Augeas będzie używany wyłącznie przez dostawcę Ruby. Będzie również automatycznie zarządzać cytowaniem i komentowaniem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.