2016-06-27 23 views
2

Ich verwende Vagrant für virtuelle Maschinen und möchte damit beginnen, meine eigenen Basisboxen zu erstellen, um eine Produktionsumgebung zu finden.Wie stelle ich die Version der Vagrant-Box, die mit VMware Fusion erstellt wurde, mithilfe einer `metadata.json`-Datei ein?

Ich habe eine einfache Debian-Basis-Box mit VMware Fusion Pro 8.1.1 erstellt und ich konnte add die Box, aber ich möchte die Box metadata.json verwenden, um Versionsnummern festzulegen. Ich las in den vagrant doc, dass der einzigen erforderlichen Schlüssel ist die "provider", und das funktioniert gut, aber wenn ich vagrant box list ich v0

work-debian7-11-64    (vmware_fusion, 0) 

bekommen kann ich es sehen, wenn ich mit einer aktualisierten metadata.json Datei wieder entfernen, um zu versuchen.

$ vagrant box remove work-debian7-11-64 
Removing box 'work-debian7-11-64' (v0) with provider 'vmware_fusion'... 

Wenn ich in der Dokumentation folgen und "version":"0.1.0" so etwas wie:

{ 
    "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" 
     } 
     ] 
    } 
    ] 
} 

ich mit einem Fehler am Ende, wenn ich zu add die Box gehen. Dieser Teil der Ausgabe ist (es geht mit mehr Details über mit from)

$ vagrant box add work-debian7-11-64 debian-7.11-64.vmware.box 
==> box: Box file was not detected as metadata. Adding it directly... 
==> box: Adding box 'work-debian7-11-64' (v0) for provider: 
    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 
/opt/vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/box_collection.rb:155:in `block (3 levels) in add': undefined method `to_sym' for nil:NilClass (NoMethodError) 

Das ist mein metadata.json Datei:

{ 
    "name": "workalicious/debian7-11-64", 
    "description": "Debian 7.11.0 64-bit web server.", 
    "versions": [{ 
    "version": "0.1.0", 
    "providers": [{ 
     "name": "vmware_fusion" 
     }] 
    }] 
} 

Ich frage mich, ob es etwas, das ich mit dem tun, ist falsch bin Format der metadata.json? Wenn ich nur den provider Schlüssel verwende, funktioniert box add ohne Fehler. Ich weiß, dass es Altas und Packer gibt, aber ich wollte das lokal versuchen.

Antwort

3

Ich glaube, ich habe jetzt ein besseres Verständnis, nachdem ich die Vagrant doc sehr langsam gelesen habe.

Ich sollte eine metadata.json-Datei in die .box, die mindestens den Anbieter hat, enthalten, es ist erforderlich.

Innerhalb des Archivs erwartet Vagrant eine einzige Datei: metadata.json. Dies ist eine JSON-Datei, die nicht mit der obigen Boxkatalogmetadatenkomponente in Beziehung steht. Es gibt nur eine metadata.json pro Box-Datei (innerhalb der Box-Datei), während ein JSON-Dokument mit Katalogmetadaten mehrere Versionen derselben Box beschreiben kann, die möglicherweise mehrere Anbieter umfasst.

metadata.json muss mindestens den "Provider" -Schlüssel mit dem Provider enthalten, für den die Box bestimmt ist. Vagrant verwendet dies, um den Anbieter der Box zu überprüfen. Zum Beispiel, wenn Ihr Feld für VirtualBox war, würde die metadata.json wie folgt aussehen:

// metadata.json inside of WorkaliciousDebian7-64-nogui.vmwarevm 
{ 
    "provider": "vmware_fusion" 
} 

Wenn es keine metadata.json Datei oder die Datei enthält keine gültige JSON mit mindestens einem "Provider" Schlüssel, dann wird Vagrant Fehler beim Hinzufügen der Box, weil es den Anbieter nicht überprüfen kann.

Andere Schlüssel/Werte können den Metadaten ohne Probleme hinzugefügt werden. Der Wert der Metadatendatei wird undurchsichtig in Vagrant übergeben und Plugins können davon Gebrauch machen. Zu diesem Zeitpunkt verwendet Vagrant Core keine anderen Schlüssel in dieser Datei.

Das ist Teil 1 (BOX FILE), metadata.json Datei im Verzeichnis .vmwarevm. Teil 2 (BOX METADATA) ist mit einem anderen metadata.json Datei mit den Schlüsseln für Namen, die Version, URL, Prüfsumme, und ... Vom doc:

Die Metadaten eine optionale Komponente für eine Box (aber hoch empfohlen), die Versionierung, Aktualisierung, mehrere Anbieter aus einer einzigen Datei und mehr ermöglicht.

// 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" 
     } 
     ] 
    } 
    ] 
} 

Nun, da gibt es eine Box metadata.json, die während der vagrant box add verwiesen werden kann.

$ 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'! 

Vielleicht hilft das jemand anderes die gleiche Art von Workflow zu tun suchen.

+0

FYI, die JSON-Datei an 'vagrant box add' zu übergeben kann einen beliebigen Namen haben, den Sie mögen. – tectux