/ etc / default /で無効にされているサービスをpuppetで修正しますか?


13

私は(理論的に)インストール時にnpcdを開始するためにpuppetを使用していますが、Ubuntuでは、そのサービスはRUN = "no"の/ etc / default / npcdにデフォルト設定でインストールされています。

 $ 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"

私はこのパペット設定のブロックが物事の世話をすると思うだろう:

    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それを回避できる場合は、ファイルを編集するのが嫌です。
ラースク

回答:


12

そのファイルを更新してからサービスを再起動することが唯一の方法です。新しいファイルをプッシュしてから、サービスにそれを要求させることができます。そのようにして、コンテンツが更新されると、サービスが適切に開始されます。

ファイル全体を置き換えたくない場合は、Puppet augeasツールを使用して、デフォルトファイルの1行を変更するだけです。

Debianおよびその派生物には、パッケージのインストール後に自動起動しないサービスがいくつかあります。/etc/defaultで有効になっている場合を除きます。ちょっと迷惑です。

編集:参考までに、initスクリプトは実際にそのファイルから値を読み取っています(通常はソースを取得するだけです)。


1
面白い。バグを報告する気があります。"enable"を "true"に設定した場合、実際には(実行レベルへのさまざまなシンボリックリンクに加えて)スクリプトを有効にするだけです。
マットシモンズ

サービスが「デフォルト」ファイルを更新する必要があるかどうかをPuppetが簡単に知る方法はないので、焼き付けていないと思います。ディストリビューションでバグを報告する方が簡単かもしれません。しかし、あなたがどんな牽引力も得ることを疑います:
ルーク

「defaulted_service」などのサービスリソースを持つ定義済みタイプを使用し、必要に応じてsedを使用して所定の場所でファイルを更新するexecリソース、またはaugeasを使用するファイルリソースを使用します。
Sirex

@MattSimmonsこれらのパッケージを作成する人は、シンボリックリンクをupdate-rc.d使用し、サービスを有効/無効/etc/defaultにする必要があります。サービスを管理する標準的な方法ではないため、人形の制御外です。
シェーンマッデン

8

ちなみに、12.04マシンのいくつかの標準デーモンをチェックしました。ファイルを管理する必要がありますが、この時点では回避できません。

snmpd

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

集めた

# 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

ハプロキシ

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

6

実行可能な方法の1つは、パペットでオージェツールを使用することだと思います。

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

詳細については、マニュアルを参照してください


0

sedを使用してファイルを変更します。Augeasはやり過ぎのようです。

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は非常に堅牢で、便利で、目的にふさわしいと思うので、人形を使用している場合はインストールする価値があります
-DukeLion

私の例は、cloud-initを介したパペットのブートストラップです。私はオージェを見て、可能な限りそれを避けることをすぐに決めました。これまでのところ、augeasは必要ありませんし、start = yesにパペット以外の別のサービスをブートストラップする必要もありません。
-dmourati

私はあなたの視点に本当に興味があります。私はあなたのポイントを見ることができますが、オージェと人形は、統一された管理のために抽象的なトップレベルのインターフェースを提供するという同じイデオロギーを使用していませんか?オージェが気に入らないのなら、どうしてパペットが好きですか?どうして無理なの?
デュークライオン

より良いアプローチは、Apache conf.d、sysctl.d、sudoers.dなどのスタブまたはフラグメント構成ファイルを編集することだと思います。他の構成ファイルを自分のやり方でつなげようとしても、私にとっては魅力的ではありません。.dディレクトリを持つ断片化された構成ファイルが存在しない最も単純なケースでは、sed / perl / whateverを使用します。したがって、オージェは必要ありません。
-dmourati

0

augeasPuppet の型を使用してこれを行うことは、1つの方法です(@DukeLionが示唆するとおり)。

もう1つの方法は、プロバイダーでaugeasprovidersmoduleを使用することshellvarです。

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

これは、RubyプロバイダーがAugeasをきれいに使用するためです。また、引用とコメントを自動的に管理します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.