【问题标题】:makefile pass variable to vagrantfile and start the vagrant VMmakefile 将变量传递给 vagrantfile 并启动 vagrant VM
【发布时间】:2019-09-28 12:38:45
【问题描述】:

我正在为项目编写自动化部署计划。我打算使用 makefile 来控制 vagrant vm 及其操作。我想把所有的用户选项配置都放在makefile里面,包括一些vagrantfile的配置参数,比如CPU、IP等等。但是如何将 makefile 参数传递给 vagrantfile? 我测试使用shell

CPU_NUM ?= 3

init:
    vagrant_cpu= $(CPU_NUM ) vagrant up

但是我不知道vagrantfile如何获取

如果你们能告诉我如何实现参数从 makefile 传递到 vagrantfile,我将不胜感激

【问题讨论】:

    标签: shell makefile vagrant vagrantfile


    【解决方案1】:

    Makefile 很好,但为什么不直接使用 shell 脚本来编写通用脚本呢?但是,要真正回答您的问题:

    你设置环境变量的命令错误,=两边不能有空格。将其更改为:

    init:
        vagrant_cpu=$(CPU_NUM) vagrant up
    

    Vagrantfilejust a Ruby script。这意味着您可以像在 Ruby 中一样使用ENV 访问环境变量。在您的 Vagrantfile 中,您可能会有以下内容:

    config.vm.provider "virtualbox" do |v|
      v.memory = 1024
      v.cpus = ENV["vagrant_cpu"].to_i
    end
    

    注意to_i 转换为整数。

    【讨论】:

    • 那么,如果变量是字符串,那么to_?输入
    • @moluzhui 如果变量是字符串,直接使用ENV["whatever"]即可。所有的环境变量都是字符串,所以如果你需要不同的类型,你只需要转换它们。
    • 比利。其实不是这样的,我用cloud_name=$(CLOUD_NAME) vagrant up传递cloud_name config.vm.define :ENV["cloud_name"] do |node_conf|,结果是The file being loaded and the error message are shown below. This is usually caused by an invalid or undefined variable. Message: undefined method to_sym'`
    • 啊,在那个地方你需要一个符号 (config.vm.define docs)。 : 仅用于将文字转换为符号 (related question)。你需要config.vm.define ENV["cloud_name"].to_sym do |node_conf|——甚至可以在没有.to_sym的情况下工作,但绝对不能拥有:
    • 如果我有很多变量,这种方式似乎很复杂。有没有更简单的方法来做到这一点?我尝试使用prerequisites 统一放置变量,但这不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2021-02-05
    • 1970-01-01
    • 2021-02-17
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多