Dans mon Vagrantfile, je peux spécifier l'URL d'une boîte:
config.vm.box_url = "http://example.com/my-box.pkg"
Selon la documentation la plus récente , je devrais pouvoir créer un fichier JSON contenant les URL des différentes versions de la boîte. La documentation indique également que je peux utiliser l'URL de ce fichier JSON lors de l'exécution vagrant box add
. J'espérais pouvoir utiliser l'URL de ce fichier JSON pour config.vm.box_url
. Cependant, cela ne semble pas fonctionner. Lorsque je l'essaie, il le traite comme un fichier boîte:
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'my-box' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Adding box 'my-box' (v0) for provider: virtualbox
default: Downloading: http://example.com/my-box.pkg.json
default: Progress: 100% (Rate: 876k/s, Estimated time remaining: 0:00:01)
The box failed to unpackage properly. Please verify that the box
file you're trying to add is not corrupted and try again. The
output from attempting to unpackage (if any):
bsdtar.EXE: Unrecognized archive format: Illegal byte sequence
bsdtar.EXE: Error exit delayed from previous errors.
Est-il possible de dire à Vagrant d'utiliser un fichier JSON de métadonnées de boîte dans mon fichier Vagrant? Je préférerais ne pas avoir à utiliser Vagrant Cloud.
Réponses:
À partir d'aujourd'hui (12-07-2016, vagrant 1.8.4), si vous souhaitez exécuter votre propre catalogue manuellement (c'est-à-dire mettre à jour manuellement les zones et modifier le fichier metadata.json), sans le laisser se comporter comme un catalogue réel, gardez à l'esprit les points suivants:
Il n'est pas nécessaire que le fichier s'appelle "metadata.json". Il peut être nommé n'importe quoi, tant qu'il contient les valeurs attendues. J'utilise "metadata.json" ici pour clarifier les étapes suivantes.
chaque fichier metadata.json ne peut contenir qu'une seule boîte. Il peut avoir plusieurs versions, et chaque version peut avoir plusieurs fournisseurs (virtualbox, vmware, libvirt). Si vous avez besoin de plusieurs boîtes (par exemple, "fedora" et "ubuntu"), vous avez besoin de deux fichiers de métadonnées différents.
Vagrant s'attend à ce que le fichier metadata.json ait un type "application / json" (comme mentionné par Nicholas Hinds ci-dessus. Si votre serveur Web ne le renvoie pas (ou renvoie "text / plain"), vagrant supposera qu'il s'agit d'un fichier box réel. et essayez de l’analyser (et échouez misérablement).
L'Atlas de Hashicorp (ce qui s'appelait autrefois le Nuage Vagrant) est une exception à cela, car les redirections vous mènent au contenu servi en tant que "text / html". Ma meilleure hypothèse est que cela a quelque chose à voir avec les redirections (plus de détails ci-dessous).
Le fichier de boîte n'a pas besoin d'être au même endroit que le fichier de métadonnées. Vous pouvez avoir votre fichier de métadonnées dans un serveur Web local et la boîte dans Amazon S3, ce qui ne pose aucun problème.
Donc, autant que je sache, j'ai trouvé le moyen le plus simple de faire fonctionner cela sur un serveur web et j'ai toujours une fonctionnalité assez normale, c'est de faire ceci:
Sur votre hébergeur, créez une structure de fichiers et de répertoires similaire à celle-ci:
(cette disposition signifie que votre "metadata.json" pour box1 devra avoir ses URL pointant vers quelque chose comme " http: // yourhost / boxes / yourname / box1 / box1- $ version1- $ provider.box")
Sur votre .htaccess, assurez-vous que "metadata.json" est défini pour Index de répertoire. Le reste est optionnel, pour le cache négatif et le masquage du contenu réel:
Sur votre environnement, exportez l'URL VAGRANT_SERVER_URL pointant vers votre hébergeur Web. Notez pas de slash final!
Avec cela en place (et tous les fichiers avec le contenu correct), vous pouvez aller et ajouter directement votre boîte:
Puisque "metadata.json" est le fichier d'index du répertoire box1, il doit rediriger le contenu directement vers ce répertoire, vagrant le récupérera, interprétera les métadonnées et téléchargera la boîte appropriée.
la source
Après avoir relu votre question, il semble que vous essayez de faire quelque chose d'un peu différent de ce que je suis - mais je pense que notre objectif final est le même.
Je ne souhaite pas utiliser le service Vagrant Cloud pour héberger mes bases, mais je souhaite pouvoir distribuer un environnement de développement à mon équipe de développement et utiliser les fonctionnalités du
metadata.json
fichier pour gérer un système de gestion des versions pour l'environnement de développement. qui sera ensuite disponible pour mon équipe de développement simplement en utilisant les installations intégrées à vagabond.La documentation vagabonde est vraiment rare dans ce domaine au moment de la rédaction de cet article (le 8/5/2014), sans doute parce que c'est une fonctionnalité relativement nouvelle, mais je suis sûr que le fait que VagrantCloud ait un niveau payant y est aussi pour quelque chose. .
Pour comprendre comment utiliser le
metadata.json
fichier en version et distribuer des boîtes, j'ai jeté un coup d'œil à certaines des machines virtuelles disponibles sur VagrantCloud. Après avoir parcouru ceux-ci et lu une partie du code vagabond, il devint assez facile de comprendre comment atteindre mon objectif.Créez un
metadata.json
fichier pour décrire votre boîte de base, le mien ressemble à ceci:Une fois que j'ai créé mon
metadata.json
fichier, je l'ai téléchargé sur un serveur local s'exécutant sur notre réseau interne (vagrant.domain.local/metadata.json
). Une fois que j'ai fait cela, tout ce qui restait à faire était de le tester avec vagabond:Voila, une boîte privée hébergée à distance, partagée et versionnée, qui ne nécessite pas l'utilisation du nuage vagabond.
Au fur et à mesure que vous créez de nouvelles versions de votre boîte, vous la conditionnerez et modifierez le
metadata.json
fichier. D'après ce que je peux dire, vous pouvez utiliser le schéma de gestion de version de votre choix, qu'il s'agisse du versioning sémantique (1.0.0, 1.0.1, etc.) ou simplement de simples nombres entiers pour les versions (1, 2, 3, etc.). Lorsque votre utilisateur de la boîte de dialoguevagrant up
vagrant vérifie automatiquement la nouvelle version de votre fichier metadata.json, il est invité à le fairevagrant box update
pour mettre à jour la boîte.Vous pouvez également ignorer les bits
vagrant box add <metadata.json url>
etvagrant init
en définissant un Vagrantfile de base avec le nom et l'URL de la boîte, comme suit:Vous pouvez distribuer un fichier Vagrant avec ce contenu et tous les utilisateurs pourront le faire
vagrant up
. Cependant, je ne sais pas comment cela fonctionne lorsque les versions sont mises à jour.la source
~/.vagrant.d/boxes/<your box name>
. Dans ce dossier, vousmetadata_url
trouverez le fichier référencé dans la documentation, qui contient l'URL de votre fichier JSON qui définit vos versions. Vagrant gère tout cela automatiquement, donc tout ce que vous avez à faire estvagrant box add <your metadata.json url>
, alorsvagrant init <boxname> && vagrant up
, vagabond fait le restevagrant box add
n'est nécessaire. Si je pouvais définir l’URL de ce fichier JSON dans Vagrantfile, c’est une étape de moins pour un nouveau développeur qui vient de rejoindre l’équipe pour devenir opérationnel. Cela fonctionne pour les boîtes, mais je ne comprends pas pourquoi cela ne fonctionne pas pour le fichier JSON.config.vm.box
ANDconfig.vm.box_url
oùbox
est le nom de votre boîte etbox_url
l'URL de votre fichier JSON.Vagrant exige que les URL de métadonnées de boîte soient fournies avec le
application/json
type de contenu. L'erreur que vous obtenez indique que vagrant a interprété votre URL comme une boîte standard.Assurez-vous que votre serveur HTTP définit l'en-
Content-Type
tête de manière appropriée. La plupart des serveurs HTTP définiront automatiquement l'en-Content-Type
tête surapplication/json
si votre fichier a l'extension..json
la source
Je pense que vous avez mélangé leurs directives ..
Ce qui suit est tiré du site Web vagrant:
FICHIER DE BOITE
Le fichier de boîte actuel est la partie requise pour Vagrant. Il est recommandé de toujours utiliser un fichier de métadonnées à côté d'un fichier boîte, mais les fichiers boîte directe sont pris en charge pour des raisons héritées de Vagrant.
Box files are compressed using tar, tar.gz, or zip. The contents of the archive can be anything, and is specific to each provider.
Le noyau vagabond lui-même ne déballe les boîtes que pour une utilisation ultérieure.Within the archive, Vagrant does expect a single file: "metadata.json".
Il s'agit d'un fichier JSON qui n'a aucun lien avec le composant "métadonnées de boîte" ci-dessus.This file must contain at least the "provider" key with the provider the box is for
. Par exemple, si votre boîte était destinée à VirtualBox, le fichier metadata.json ressemblerait à ceci:If there is no metadata.json file or the file does not contain valid JSON with at least a "provider" key, then Vagrant will error when adding the box.
Donc, je pense que votre format de fichier de boîte est probablement faux. Soit il n’est pas compressé avec le format recommandé, soit vous n’avez pas inclus de fichier metadata.json dans l’archive.
la source
Vous pouvez essayer https://github.com/sparkoo/boxitory . C'est simple, un serveur de jar. Vous le dirigez vers le répertoire où vous avez vos boîtes de vagabond et crée une interface http compatible pour vagabond. Ensuite, il vous suffit de le pointer depuis votre fichier vagrant et vous avez terminé. Vous n'avez pas à gérer manuellement les fichiers JSON décrivant vos boîtes, ajoutant de nouvelles versions, fournisseurs, etc. Tout est fait pour vous gratuitement. Il suffit d’ajouter un nouveau fichier boîte et Boxitory le renvoie instantanément sur demande.
la source