puppetを使用して/ etc / profileに行を追加しますか?


16

puppetを使用して、現在のJDKとTomcatをインストールします。

package {
    [ "openjdk-6-jdk", "openjdk-6-doc", "openjdk-6-jre",
      "tomcat6", "tomcat6-admin", "tomcat6-common", "tomcat6-docs", 
      "tomcat6-user" ]:
    ensure => present,
}

今、私は追加したいと思います

JAVA_HOME="/usr/lib/java"
export JAVA_HOME

/etc/profileちょうど道のこのアウトを取得します。私はまだドキュメントで簡単な答えを見つけていません。これを行うための推奨される方法はありますか?

一般に、このファイルをそこに配置するか、そのファイルを変更するようにパペットに指示するにはどうすればよいですか?私はそれを試して、サーバーのセットアップのログを保持するために、単一ノード(スタンドアロンモード)でpuppetを使用しています


1
Puppetを使用する場合は、ビルド済みモジュールのExample42をご覧ください。彼らは常にあなたが望むように動作するとは限りませんが、彼らは一貫性と安定しています。github.com/example42/puppet-modules
kashani

回答:


26

/etc/profile.d/サフィックスを付けてファイルを追加します.sh。他のディストリビューションでは言えないが、Red HatとDebianおよび派生物の/ etc / profileの一部として提供されます。一般的に言えば、可能な限り、分散ファイルを置き換えるよりもスニペットを追加する方が安全です。

したがって、パペットでは、次のようにします。

file { "/etc/profile.d/set_java_home.sh":
    ensure => present,
    source => ...[whatever's appropriate for your setup]...,
    ...
}

これはあなたが探しているものですか、それとも詳細が必要ですか?


1
これはOpenSUSEとGentooでも機能します。
カミルキジエル

1
ありがとう、それは素晴らしい。ほぼ動作するようになったので、.ppasソースに関連するファイルを参照する適切な方法を見つける必要があります。
ミク

1
Puppet 0.25以上のソース=> puppet:/// $ modulename / $ fileで、実際のシステムパスが$ modulename / files / $ fileであると
想定

2
puppet:/// $ modulename / files / $ filename表記を使用すると、IIRC 2.6.5以降では非推奨の警告が表示されます。puppet:/// modules / $ modulename / files / $ filenameのように見えるはずです
-ztron

42

マークのソリューションは、すべての人のプロファイルにデータを追加するのに最適ですが、ファイルにいくつかの行があることを確認する必要がある場合、Puppet Labsには、必要なことを行うfile_lineを含むstdlibという素晴らしいモジュールがあります。以前は、execタイプでechoとgrepを使用してこれを行いましたが、file_lineは非常に簡単でクリーンです。

ヘルプは次のとおりです。

Ensures that a given line is contained within a file. The implementation
matches the full line, including whitespace at the beginning and end. If
the line is not contained in the given file, Puppet will add the line to
ensure the desired state. Multiple resources may be declared to manage
multiple lines in the same file.

Example:

file_line { 'sudo_rule':
   path => '/etc/sudoers',
   line => '%sudo ALL=(ALL) ALL',
}
file_line { 'sudo_rule_nopw':
   path => '/etc/sudoers',
   line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
}

In this example, Puppet will ensure both of the specified lines are
contained in the file /etc/sudoers.

2
クライアントでpluginsyncが有効になっていることを確認してください。有効になっていないと、サイレントに失敗するようです。
gak

1
ここに直接アンカー付きのドキュメントがありますforge.puppetlabs.com/puppetlabs/stdlib#resources
Francesco
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.