2013-08-23 3 views
16

私は開発環境用の仮想マシンをセットアップするために人形と一緒に迷路を使用しています。 .ppファイルにいくつかの環境変数を設定するだけです。 Ubuntu 64ビット用の仮想ボックスと不気味なベースボックスを使用する。人形で環境変数を設定する

私はこれを現在持っています。

$bar = 'bar' 

class foobar { 
    exec { 'foobar': 
    command => "export Foo=${bar}", 
    } 
} 

プロビジョニング時にエラーが発生しました:「エクスポート」コマンドを見つけることができませんでした。

これは、私がexecのタイプのために必要なものかパスのいくつかの種類が不足しているので、これは十分に単純なはずですか?私は、環境変数を設定するための環境オプションがドキュメントにあることに気付きました。あなたが試みることができる

答えて

3

:これをacomplishする

class foobar { 
    exec { 'foobar' : 
    command => "/bin/bash -c \"export Foo=${bar}\"", 
    } 
} 
+0

私は実際にその解決策を見つけました。コマンドが見つからないというエラーを取り除きますが、残念ながら期待した結果が得られません。仮想マシンにsshを実行すると環境変数Fooが設定されません。 – bgrantdev

+3

これは無駄です。この 'exec'リソースのために特別にフォークされたシェルの環境を変更します。このシェルは、直ちに終了します。輸出は効果がありません。 –

15

最も簡単な方法は、/ etc /環境でお使いのenv VARSを置くことで、これは彼らがすべて(またはほとんどすべて)にご利用いただけます保証します。このような

何か:パラメータ化クラスを持つため

class example($somevar) { 
    file { "/etc/environment": 
     content => inline_template("SOMEVAR=${somevar}") 
    } 
} 

理由は、/ etc /環境に何かを貼り付けている場合、あなたが...自動変数の参照(http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup)とhieraからそれをターゲットにすることができそうです実際に環境固有のものにするのが通常です。

注:

Exec { environment => [ "foo=$bar" ] } 

:あなただけいただきました!間違ったと、人形の実行で使用可能な変数が必要な場合は、私が唯一のubuntu

+0

私は、これが私の '/ etc/environment'を汚染するということを私が嫌うよりも単純で簡潔な修正が好きです。ありがとう。 – 7yl4r

17

でこれをテストしてみましたか?

+1

execステートメントは、彼がサーバーにログインするときの変数をエクスポートしません。 – ptierno

+6

私はそれを知っています - それはあなたが人形の実行で利用可能な変数だけを必要とすると言った理由です。質問には、ユーザーシェルで変数を設定する必要があるとは記載されていません – John

4

私はそれを回避得た方法でもを/etc/profile.dを使用することです:

$bar = 'bar' 
file { "/etc/profile.d/my_test.sh": 
    content => "export Foo=${bar}", 
    mode => 755 
} 

これは、あなたがログイン毎回(元のSSH)は、変数$ MYVARがご使用の環境にエクスポートされることを保証します。 puppetとlogin(例:ssh localhost)を使用して適用した後、echo $ Fooはbarを返します

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ファイルに追加され続けます。

関連する問題