VagrantとPuppetを使用して、開発環境用の仮想マシンをセットアップしています。 .ppファイルにいくつかの環境変数を設定するだけです。 Ubuntu 64ビット用の仮想ボックスとVagrantベースボックスを使用します。
私は現在これを持っています。
$bar = 'bar'
class foobar {
exec { 'foobar':
command => "export Foo=${bar}",
}
}
しかし、プロビジョニング時にエラーが発生します:コマンド 'export'が見つかりませんでした。
これは十分に単純であるように思えますが、execタイプの何らかの種類のrequireまたはpathがありませんか?ドキュメントには、環境変数を設定する環境オプションがあることに気付きました。それを使用する必要がありますか?
操り人形の実行で使用可能な変数のみが必要な場合、何が悪いのですか:
Exec { environment => [ "foo=$bar" ] }
?
これを実現する最も簡単な方法は、env変数を/ etc/environmentに配置することです。これにより、すべて(またはほとんどすべて)で使用できるようになります。
このようなもの:
class example($somevar) {
file { "/etc/environment":
content => inline_template("SOMEVAR=${somevar}")
}
}
クラスをパラメータ化する理由は、自動変数ルックアップを使用してhieraからターゲットにできるようにするためです( http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup ) .../etc/environmentに何かを貼り付けている場合、実際に環境固有にするのが通常最良です。
注:これはubuntuでのみテストしました
私がそれを回避した方法は、/ etc/profile.dも使用することです:
$bar = 'bar'
file { "/etc/profile.d/my_test.sh":
content => "export Foo=${bar}",
mode => 755
}
これにより、ログインするたびに(sshなど)、変数$ MYVARが環境にエクスポートされます。 puppetとログイン(ex ssh localhost)で申請した後、echo $ Fooはbarを返します
このexec
の環境変数を設定する以下を試すことができます。
class foobar {
exec { 'foobar' :
command => "/bin/bash -c \"export Foo=${bar}\"",
}
}
/etc/environment
の行で環境変数を定義することで環境変数を設定でき、puppetのfile_line
を使用してファイル内の行を確認できます。これら2つを次のソリューションに結合します。
file_line { "foo_env_var":
ensure => present,
line => "Foo=${bar}",
path => "/etc/environment",
}
/ etc/environmentファイルの既存の内容を保持しながら、次のようなことが機能します。
/ code/environments/{environment} /manifests/environment/variable.pp:
define profile::environment::variable (
$variable_name,
$value,
$ensure => present,
) {
file_line { $variable_name:
path => '/etc/environment',
ensure => $ensure,
line => "$variable_name=$value",
match => "$variable_name=",
}
}
使用法(ノードマニフェストの本文内):
profile::environment::variable { 'Java_HOME':
variable_name => 'Java_HOME',
value => '/usr/lib/jvm/Java-1.8.0',
}
これは古い質問ですが、PS1
プロンプト値を設定し、次のように.bashrc
ファイルに追加することができました。
$PS1 = '\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \$ '
そしてクラス内:
exec {"vagrant-Prompt":
unless => "grep -F 'export PS1=\"${PS1}\"' ${HOME_DIR}/.bashrc",
command => "echo 'export PS1=\"${PS1}\"' >> ${HOME_DIR}/.bashrc",
user => "${APP_USER}",
}
-F
は、grep
を固定文字列として解釈します。そうしないと、それが見つからず、.bashrc
ファイルに追加され続けます。