2016-07-20 55 views
0

我使用Packer構建一個VirtualBox虛擬機,我想使用export_opts參數設置一些虛擬機元數據(例如描述,版本)。 docs如何使用packer export_opts?

export_opts(字符串數組) - 傳遞給VBoxManage導出的其他選項。這對傳遞產品信息以包含在生成的設備文件中很有用。

我試圖做到這一點在bash腳本中調用打包機:

desc=' ... some ...' 
desc+=' ... multiline ...' 
desc+=' ... description ...' 
# this is actually done using printf, shortened for clarity 
export_opts='[ "version", "0.2.0", "description", "${desc}" ]' 

# the assembled string looks OK 
echo "export_opts: ${export_opts}" 

packer build \ 
     ... (more options) ... 
    -var "export_opts=${export_opts}"    \ 
     ... (more options) ... 
    <packer configuration file> 

我也試過--version代替version並把version和值到相同的字符串,但沒有這個工程;一旦導出並重新導入,虛擬機描述是空的。

有沒有人有一些工作示例代碼或可以幫助我與我做錯了什麼?

非常感謝。

更新:

Anthony Staunton's approach,我想通了,加入

"export_opts": [ "--vsys", "0", "--version", "0.2.0", "--description", "some test description" ], 

封隔器JSON文件不工作;將與--var相同的字符串傳遞給Packer不起作用。

回答

0

終於解決了問題,更新了包裝文檔用以下的例子來指定數據

pullrequests待定:

打包器JSON配置文件示例:

{ 
    "type": "virtualbox-ovf", 
    "export_opts": 
    [ 
    "--manifest", 
    "--vsys", "0", 
    "--description", "{{user `vm_description`}}", 
    "--version", "{{user `vm_version`}}" 
    ], 
    "format": "ova", 
} 

VirtualBox VM description可能包含任意字符串; GUI解釋HTML格式。但是,JSON格式不允許值內的任意換行符。通過封隔器調用,比如在此之前準備在外殼的字符串添加多行說明(殼剪斷更容易複製&粘貼>延續字符):

vm_description='some 
multiline 
description' 

vm_version='0.2.0' 

packer build \ 
    -var "vm_description=${vm_description}" \ 
    -var "vm_version=${vm_version}"   \ 
    "packer_conf.json" 
0

你可能在你的包裝JSON文件

"export_opts": [ "--vsys 0 --version \"0.2.0\"", "{{.Name}} --description \"${desc}\" " ], 
+0

一旦語法固定的工作,不使用工作一個Packer'--var'雖然;看到我的更新 – ssc

相關問題