2016-06-15 11 views
0

私は、Vagrant設定にAnsible(ローカル)プロビジョナを使用しています。プロビジョナーに環境変数を渡すことをお勧めしますか?環境変数をVagrantのプロビジョナに渡します。

例えば、私はENV=development vagrant upを実行し、Vagrantに環境変数ENVをAnabilitiesに渡したいとします。

$ vagrant provision 
==> default: Running provisioner: ansible_local... 
    default: Running ansible-playbook... 
ERROR: Expecting property name: line 1 column 2 (char 1) 
Ansible failed to complete successfully. Any error output should be 
visible above. Please fix these errors and try again. 

:私は(たとえAnsibleでenv変数を使用せずに)vagrant provisionを実行したときに

Vagrant.configure(2) do |vagrant| 
    # other configuration 
    vagrant.vm.provision :ansible_local do |ansible| 
     ansible.playbook = "ansible/server.yml" 
     ansible.extra_vars = { 
      env: ENV.fetch("ENV", "development") 
      } 
    end 
end 

しかし、私は以下の取得:

私はVagrant documentationから取られ、extra_varsを使用してみましたansible.extra_varsを削除するとこのエラーは修正されますが、私が望むものを達成できません。

+0

それはうまくいくように見えますが、 'ENV'という環境変数を持っているのがRubyや他のどこかでひどくクラッシュしているのだろうかと思います。 'ENV.fetch(" foobar "、" development ")'を試してから、 'export foobar =" notdevelopment "'で試してみるとどうなりますか? – ydaetskcoR

+0

@ydaetskcoR事実ですが、これは 'env:" development "'を行うと同じ結果になります。 –

+0

ああ、そこに行くと、それは 'env'変数名がAnsibleに衝突することになるでしょう。それを別のものにしてみてください – ydaetskcoR

答えて

0

環境変数を設定する必要はありますか?

可能であれば、私は別のアプローチを使用しようとします。あなたが責任ある環境変数を使用することを期待している場合は、インベントリgroup_varsファイルに値を設定してください。この値は、ローカルプロビジョニングの変更担当者にのみ有効です。適切なインベントリgroup_varsファイルを更新することによって、他の環境で同じ変数に対して異なる値を使用する可能性があります。

+0

環境変数を使用すると、私が使用する環境を簡単に変更することができます。もちろん、ファイルベースの設定を使用することは可能ですが、他のほとんどのプロダクションシステム(CIの使用など)では、使用事例。 –

+0

合意。あなたが言うように、多くの技術は環境変数でカスタマイズすることができます。基礎となる技術のための、安全で環境に優しいファイルベースの構成は、互いに排他的ではありません。あなたがそれを開いているなら、私はもっと具体的な例を挙げることができます。 – tphummel

関連する問題