web-dev-qa-db-ja.com

Puppetを使用して環境変数を設定する

VagrantとPuppetを使用して、開発環境用の仮想マシンをセットアップしています。 .ppファイルにいくつかの環境変数を設定するだけです。 Ubuntu 64ビット用の仮想ボックスとVagrantベースボックスを使用します。

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

$bar = 'bar'

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

しかし、プロビジョニング時にエラーが発生します:コマンド 'export'が見つかりませんでした。

これは十分に単純であるように思えますが、execタイプの何らかの種類のrequireまたはpathがありませんか?ドキュメントには、環境変数を設定する環境オプションがあることに気付きました。それを使用する必要がありますか?

20
bgrantdev

操り人形の実行で使用可能な変数のみが必要な場合、何が悪いのですか:

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

17
John

これを実現する最も簡単な方法は、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でのみテストしました

16

私がそれを回避した方法は、/ 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を返します

4
Tony Z

このexecの環境変数を設定する以下を試すことができます。

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

/etc/environmentの行で環境変数を定義することで環境変数を設定でき、puppetのfile_lineを使用してファイル内の行を確認できます。これら2つを次のソリューションに結合します。

file_line { "foo_env_var":
    ensure  => present,
    line    => "Foo=${bar}",
    path    => "/etc/environment",
}
2
7yl4r

/ 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',
}
2
N. DaSilva

これは古い質問ですが、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ファイルに追加され続けます。

0
Cameron