我正在使用Ansible(本地)配置器进行我的Vagrant设置。是否有推荐的方法将环境变量传递给配置程序?
例如,我想运行ENV=development vagrant up
并让Vagrant将环境变量ENV
传递给Ansible。
我尝试使用extra_vars
取自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 provision
但是,当我运行env
(甚至没有使用Ansible中的$ 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.extra_vars
删除double
修复了此错误,但后来我无法实现我想要的目标。
答案 0 :(得分:2)
要访问development
环境变量,请使用:ENV['development']
语法。
您还可以将其分配给文件开头的变量:
development = ENV['development']
并使用变量代替:
ansible.extra_vars = {
env: development
}
以下面的Vagrantfile
为例。
答案 1 :(得分:2)
您需要为Vagrant安装插件:
vagrant plugin install vagrant-env
我希望我的代码段对您有所帮助:
config.vm.define "k8s-master" do |master|
master.vm.box = IMAGE_NAME
master.env.enable # Enable vagrant-env(.env)
master.vm.network "private_network", ip: "192.168.50.10"
master.vm.hostname = "k8s-master"
master.vm.provision "ansible" do |ansible|
ansible.playbook = "./playbooks/master.yml"
ansible.compatibility_mode = "2.0"
ansible.extra_vars = {
env: development,
}
end
end
只要您运行Vagrant命令,便会添加config.env.enable,它将.env加载到ENV中,从而可以进行自定义。
而且您可以在内部剧本中将其用作{{ variable_name }}
。
答案 2 :(得分:0)
需要设置环境变量的是什么?
如果可能,我会尽量使用不同的方法。如果您希望在ansible中对环境变量执行操作,则可以在库存group_vars文件中设置该值,该文件仅对本地配置流浪者有效。其他环境可以通过更新相应的库存group_vars文件为同一变量使用不同的值。