2016-02-10 73 views
0

我通過我的本地環境變量是這樣的:如何在Vagrant中使用本地環境變量?

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |de| 

    de.vm.box = 'ubuntu/trusty64' 
    de.vm.hostname = 'virtual_machine' 
    de.vm.network 'public_network', bridge:ENV['NETWORK_INTERFACE'], ip:'192.168.2.170' 

    de.vm.provider "virtualbox" do |v| 
    v.memory = 4096 
    v.cpus = 2 
    end 

    de.vm.synced_folder '.', '/vagrant', disabled:true 
    de.vm.synced_folder '../../synced/shared/', '/shared/' 
    de.vm.synced_folder '../../synced/devops/', '/devops/' 

    install = ENV['DEVOPS_HOME'] + '/vagrant/lib/install' 
    de.vm.provision 'shell', path: install + '/basic' 
    de.vm.provision 'shell', path: install + '/java8', args: ['automatic'] 
    de.vm.provision 'shell', path: install + '/aws_cli', args: [ENV['S3_AWS_ACCESS_KEY_ID'],ENV['S3_AWS_SECRET_ACCESS_KEY']] 

    setup = ENV['DEVOPS_HOME'] + '/vagrant/lib/setup' 
    de.vm.provision 'shell', path: setup + '/hosts' 

    sys = ENV['DEVOPS_HOME'] + '/vagrant/lib/system' 
    de.vm.provision 'shell', path: sys + '/add_user', args: ['virtual-machine',ENV['VIRTUAL_MACHINE_PASSWORD']] 

    steps = ENV['DEVOPS_HOME'] + '/vagrant/server/virtual_machine/steps' 
    de.vm.provision 'shell', path: steps + '/install_rserve' 

end 

顯然,我需要設置這個變量對我~/.profile文件。但我想知道是否有另一種方式來做到這一點。我不需要通過Vagrantfile來通知這件事,它看起來不太好。

+1

其工作的一種方式 - 另一種解決辦法,如果你分發盒是這些變量加入到YAML文件(例如,兒子會工作的任何其他文件)和讀取文件到您的Vagrantfile,所以你不需要將變量設置爲你的bash。 –

+0

你有沒有解釋這種方法的鏈接Frédéric?這似乎很有趣。順便說一句,我不會分發我的箱子,至少現在:) –

+0

顯示我的設置在一個可見性答案的例子。並沒有真正的聯繫,因爲我已經通過不同的閱讀,但沒有特別的,但實際上我使用puppet和hiera來實現這一點,所以我共享相同的文件(不知道它的好壞,但我找到它方便) –

回答

2

我設法設置依賴的一種方式是使用外部文件(我使用yaml,但任何文件都可以像json一樣工作.... Vagrantfile是一個ruby腳本,只要您可以使用ruby輕鬆閱讀它你沒事)

使用YAML依賴

:# -*- mode: ruby -*- 
# vi: set ft=ruby : 

require 'yaml' 
settings = YAML.load_file 'settings/common.yaml' 

Vagrant.configure("2") do |config| 

    config.vm.box = settings['host_box'] || "pws/centos65" 
    config.ssh.username = settings['ssh_user'] 

    config.vm.define "db" do |db| 
    db.vm.hostname = settings['db_hostname'] 
    db.vm.network "private_network", ip: settings['host_db_address'] 
    end 

... 

end 

settings/common.yaml將被定義爲

--- 
host_db_address: "192.168.90.51" 
host_app_address: "192.168.90.52" 

db_hostname:  "local.db" 

ssh_user:   "pws" 

由於文件說我的Vagrantfile的例子在評論中,我發現使用這種技術的主要優點是當你分發盒子。我的團隊會克隆項目,必須填寫設置(密碼依賴等)並準備好。

+0

這是一個偉大的解決方案Frédéric!感謝你的分享! :) –