如何使用“metadata.json”文件设置使用VMware Fusion创建的Vagrant box的版本?
我正在为虚拟机使用Vagrant,并希望开始创建自己的基本框,以尝试匹配生产环境 我已经使用VMware Fusion Pro 8.1.1创建了一个普通的Debian base box,并且我能够如何使用“metadata.json”文件设置使用VMware Fusion创建的Vagrant box的版本?,vagrant,metadata,vmware-fusion,Vagrant,Metadata,Vmware Fusion,我正在为虚拟机使用Vagrant,并希望开始创建自己的基本框,以尝试匹配生产环境 我已经使用VMware Fusion Pro 8.1.1创建了一个普通的Debian base box,并且我能够添加该box,但是我想开始使用box metadata.json来设置版本号。我在中读到唯一需要的键是“provider”,这非常有效,但是当我流浪者框列表时,我得到v0 work-debian7-11-64 (vmware_fusion, 0) 当我删除一个更新的metad
添加该box,但是我想开始使用box metadata.json来设置版本号。我在中读到唯一需要的键是“provider”
,这非常有效,但是当我流浪者框列表时,我得到v0
work-debian7-11-64 (vmware_fusion, 0)
当我删除一个更新的metadata.json
文件并重试时,我可以看到它
$ vagrant box remove work-debian7-11-64
Removing box 'work-debian7-11-64' (v0) with provider 'vmware_fusion'...
如果我按照文档使用“版本”:“0.1.0”
类似于:
{
"name": "hashicorp/precise64",
"description": "This box contains Ubuntu 12.04 LTS 64-bit.",
"versions": [
{
"version": "0.1.0",
"providers": [
{
"name": "virtualbox",
"url": "http://somewhere.com/precise64_010_virtualbox.box",
"checksum_type": "sha1",
"checksum": "foo"
}
]
}
]
}
当我转到添加
框时,我最终出现了一个错误。这是输出的一部分(接着是来自
的的更多细节)
这是我的metadata.json
文件:
{
"name": "workalicious/debian7-11-64",
"description": "Debian 7.11.0 64-bit web server.",
"versions": [{
"version": "0.1.0",
"providers": [{
"name": "vmware_fusion"
}]
}]
}
我想知道是不是我在metadata.json
的格式上做错了什么?当我只使用提供程序
键添加框时
不会出错。我知道有Altas和Packer,但我想在本地尝试一下。我相信我现在对这本书有了更好的理解,读得很慢
我应该在.box
中包含一个metadata.json文件,该文件至少有一个提供程序,这是必需的
在归档文件中,Vagrant需要一个文件:metadata.json。这是一个JSON文件,与上面的box catalog元数据组件完全无关;每个box文件(在box文件内)只有一个metadata.json,而一个目录元数据json文档可以描述同一个box的多个版本,可能跨越多个提供者
metadata.json必须至少包含“provider”键和框中的提供程序。Vagrant使用它来验证盒子的提供者。例如,如果您的框用于VirtualBox,那么metadata.json将如下所示:
如果没有metadata.json文件,或者该文件不包含至少具有“provider”键的有效json,则Vagrant在添加框时将出错,因为它无法验证提供程序
其他键/值可以毫无疑问地添加到元数据中。元数据文件的值被不透明地传递到Vagrant中,插件可以利用它。此时,Vagrant core不使用此文件中的任何其他密钥
这是第1部分(BOX文件),metadata.json
文件,位于.vmwarevm
目录中。第2部分(框元数据)包含另一个METADATA.json文件,其中包含名称、版本、url、校验和和键。。。从文档:
元数据是框(但强烈建议)的可选组件,支持版本控制、更新、单个文件中的多个提供程序等
现在有一个框metadata.json
,可以在vagrant框添加过程中引用它
$ vagrant box add metadata.json --provider vmware_fusion
==> box: Loading metadata for box 'metadata.json'
box: URL: file:///Users/dave/Code/code_resources/vagrant_examples/vagrant-bird-box-vmware-debian-nodesktop/metadata.json
==> box: Adding box 'workalicious/debian71164' (v0.1.0) for provider: vmware_fusion
box: Unpacking necessary files from: file:///Users/dave/Code/code_resources/vagrant_examples/vagrant-bird-box-vmware-debian-nodesktop/debian-7.11-64.vmware.box
box: Calculating and comparing box checksum...
==> box: Successfully added box 'workalicious/debian71164' (v0.1.0) for 'vmware_fusion'!
也许这有助于其他人完成同样的工作流程。FYI,要传递到vagrant box add
的json文件可以有您喜欢的任何名称。如果可以,我会给您另外10+1的答案。
// metadata.json inside of WorkaliciousDebian7-64-nogui.vmwarevm
{
"provider": "vmware_fusion"
}
// get the checksum
$ md5 debian-7.11-64.vmware.box
MD5 (debian-7.11-64.vmware.box) = f1a2b7982031a1e53c1e39011f8d5f37
// metadata.json file used with the vagrant box add
{
"name": "workalicious/debian71164",
"description": "Debian 7.11.0 64-bit web server.",
"versions": [
{
"version": "0.1.0",
"providers": [
{
"name": "vmware_fusion",
"url": "file:///Users/dave/Code/code_resources/vagrant_examples/vagrant-bird-box-vmware-debian-nodesktop/debian-7.11-64.vmware.box",
"checksum_type": "md5",
"checksum": "f1a2b7982031a1e53c1e39011f8d5f37"
}
]
}
]
}
$ vagrant box add metadata.json --provider vmware_fusion
==> box: Loading metadata for box 'metadata.json'
box: URL: file:///Users/dave/Code/code_resources/vagrant_examples/vagrant-bird-box-vmware-debian-nodesktop/metadata.json
==> box: Adding box 'workalicious/debian71164' (v0.1.0) for provider: vmware_fusion
box: Unpacking necessary files from: file:///Users/dave/Code/code_resources/vagrant_examples/vagrant-bird-box-vmware-debian-nodesktop/debian-7.11-64.vmware.box
box: Calculating and comparing box checksum...
==> box: Successfully added box 'workalicious/debian71164' (v0.1.0) for 'vmware_fusion'!