webentwicklung-frage-antwort-db.com.de

Geben Sie die Vagrantfile-Pfadangabe an, wenn dies nicht Plugin ist

Gibt es eine Möglichkeit, den Pfad einer Vagrantfile genau anzugeben? Mein Unternehmen möchte so etwas tun: Geben Sie zum Testen auf einer Confluence-Maschine einen Befehl wie vagrant spinup confluence ein, und weisen Sie dann auf eine Vagrantfile in einem anderen Verzeichnis, das die Confluence-Umgebung enthält, und ruft dann alle diese Maschinen auf. 

Es scheint jedoch nicht so zu sein, dass es eine Möglichkeit gibt, explizit anzugeben, welche Vagrantfile verwendet werden soll, und ich bin bei Ruby etwas (sehr) neu, daher fällt es mir schwer, mein eigenes Plugin dafür zu schreiben. Hat jemand Empfehlungen, was zu tun ist? Oder hat jemand etwas Ähnliches getan?

26
addicted2unix

Es ist keine separate Vagrant-Datei erforderlich. Sie können einfach mehrere VMs in derselben Datei definieren. Die Dokumentation finden Sie hier: http://docs.vagrantup.com/v2/multi-machine/index.html

Wenn Sie nur einen VM in Ihrer 'normalen' Umgebung und einen VM für Ihre 'Zusammenfluss'-Umgebung verwenden, müssen Sie einfach nur jeden VMdefinieren. _ und vagrant up- die spezifische VM.

Wenn Sie über mehrere Computer verfügen, aus denen sich jede Ihrer Umgebungen zusammensetzt, haben Sie zwei Optionen. Sie können reguläre Ausdrücke verwenden und sicherstellen, dass Sie die Befehle richtig benennen und eingeben. Sie können auch ein wenig Logik in Ihre Vagrant-Datei einfügen, um es den Benutzern zu erleichtern .

Mit einem kleinen Hack in Ihrer Vagrantfile können Sie zum Beispiel Folgendes tun:

Vagrant.configure('2') do |config|

    if ARGV[1] == 'confluence'
        ARGV.delete_at(1)
        confluence = true
    else
        confluence = false
    end

    config.vm.provider :virtualbox do |virtualbox, override|

        #virtualbox.gui = true

        virtualbox.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
        virtualbox.customize ["modifyvm", :id, "--memory", 512]

        override.vm.box = 'Ubuntu 12.10 x64 Server'
        override.vm.box_url = 'http://goo.gl/wxdwM'

    end

    if confluence == false

        config.vm.define :normal1 do |normal1|

            normal1.vm.hostname = 'normal1'
            normal1.vm.network :private_network, ip: "192.168.1.1"

        end

        config.vm.define :normal2 do |normal2|

            normal2.vm.hostname = 'normal2'
            normal2.vm.network :private_network, ip: "192.168.1.2"

        end

    end

    if confluence == true

        config.vm.define :confluence1 do |confluence1|

            confluence1.vm.hostname = 'confluence1'
            confluence1.vm.network :private_network, ip: "192.168.1.3"

        end

        config.vm.define :confluence2 do |confluence2|

            confluence2.vm.hostname = 'confluence2'
            confluence2.vm.network :private_network, ip: "192.168.1.4"

        end

    end

end

Jetzt bringt vagrant up Ihre normalen VMs auf und vagrant up confluence Ihre Konfluenz-VMs!

22
Matt Cooper

Neben der Antwort von Andrew Lorente können Sie auch die Umgebungsvariable VAGRANT_VAGRANTFILE verwenden, um den Dateinamen der Vagrantfile anzugeben. Dies hat gegenüber VAGRANT_CWD den Vorteil, dass das aktuelle Arbeitsverzeichnis nicht geändert wird, was bei relativen Pfaden hilfreich sein kann.

Das folgende Beispiel führt vagrant up auf Vagrantfile.other aus:

VAGRANT_VAGRANTFILE=Vagrantfile.other vagrant up

Anmerkungen

51
Mark Hobson

Während andere Antwortende richtig sind, dass dieser spezielle Fall keine separaten Vagrantfiles benötigt, gibt es meines Erachtens legitime Verwendungen, um einen Vagrantfile-Pfad anzugeben - beispielsweise vagrant ssh-config-Informationen in einem Skript.

Zum Glück können Sie dies tun, indem Sie die Umgebungsvariable VAGRANT_CWD setzen:

VAGRANT_CWD=~/some/path/ vagrant ssh-config

Dies scheint nirgendwo dokumentiert zu sein, aber Sie können es in der Quelle sehen. 

19
Erin Call

Sie können beliebig viele verschiedene Vagrantfiles haben. Erstellen Sie einfach ein neues Verzeichnis für Ihr Projekt (das aus nur einer oder mehreren VMs bestehen kann), dann cd in dieses Verzeichnis und führen Sie vagrant init aus, damit Vagrant eine neue Vagrantfile erstellt, die dann an Ihre Bedürfnisse angepasst werden kann. Um Ihr VM mit dieser neuen Vagrantfile zu starten, führen Sie einfach vagrant up in dem Verzeichnis aus, in dem es gespeichert ist.

2
avhilchen

Wenn Sie Shell-Befehle in Klammern setzen, wird eine Sub-Shell erstellt. Mit Git für Windows (oder bash unter Linux/OS X) können Sie Folgendes tun:

(cd test/Ruby; vagrant up)

1
danizen