2016-08-04 35 views
3

Wir haben eine Multi-Maschine-Vagrantfile in unserem Projekt Repo, die einen LAMP-Stack erstellt und einige gemeinsame MySQL-Datenbanken erstellt. Nun, jeder von uns hat auch eine persönliche Datenbank, die Vagrant als Teil der anfänglichen "vagabund up" Provisioning erstellen soll. Ich habe meinen persönlichen Provisioning-Code in ~/.vagrant.d/Vagrantfile platziert, aber gemäß der Ladereihenfolge von Vagrantfiles läuft dieser Code vor dem Bereitstellungscode der allgemeinen Vagrant-Datei. Mein persönlicher Bereitstellungscode kann keine MySQL-Datenbank hinzufügen, da MySQL einfach noch nicht installiert wurde, da dies in der gemeinsamen Vagrant-Datei liegt.Wie stelle ich eine persönliche Datenbank während des ersten Aufwands bereit?

Wie kann ich es haben, dass die gemeinsame Vagrantfile MySQL installiert und die persönliche Vagrantfile eine Datenbank hinzufügt, sobald MySQL vorhanden ist?

Update Hier ist was ich getan habe (ich weiß fast nichts über Ruby, so nackt mit mir).

Vagrantfile (mit anderen Entwicklern gemeinsam):

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

    config.vm.define "dev14" do |dev14| 

    dev14.vm.box = "ubuntu/trusty64" 

    dev14.vm.provision "file", source: "common.sql", destination: "common.sql" 

    dev14.vm.provision "shell", inline: <<-SHELL 

     sudo apt-get update 
     sudo apt-get install -y apache2 
     sudo apt-get install -y php5 
     sudo apt-get install -y mysql-server 
     sudo apt-get install -y mysql-client 

     mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS common" 
     mysql -uroot -proot common < common.sql 

    SHELL 

    # User specific provisioning 
    $dev14 = dev14 
    load './provision.dev14.rb' if File.exists?('./provision.dev14.rb') 

    end 

end 

provision.dev14.rb (meine persönliche Provisioning-Datei, Git ignoriert):

$dev14.vm.provision "file", source: "personal.sql", destination: "personal.sql" 

$dev14.vm.provision "shell", inline: <<-SHELL 

    mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS personal" 
    mysql -uroot -proot personal < personal.sql 

SHELL 

Diese sind natürlich hygienisiert und vereinfachte Ausschnitte.

+0

Welchen Provisioner verwenden Sie? – Railslide

+0

@Railslide Ich verwende sowohl Shell als auch Datei, wenn Sie das fragen. –

Antwort

2

Wir fanden die einfachste Lösung dafür, mehrere Provisionsskripts anzugeben und Ihr Vagrant-Dateiskript "create the database" festzustellen, ob es etwas tun muss oder nicht.

Auch können Sie die Personalisierungsstufe z. Datenbank-Erstellung auf ENV ['DB_USERNAME'] etc.? Dies würde es Ihnen ermöglichen, das Setup des anderen zu versuchen.

Darüber hinaus können Sie ein Plug-in schreiben, mit dem Sie besser steuern können, welche Vagrant-Aktion ausgeführt wird, und sich anmelden, um Aktionsereignisse vor/nachzustellen.

+0

Ich hatte gehofft Vagrant hatte eine eingebaute Funktion, um dies zu kontrollieren, aber da es nicht funktioniert, scheinen Ihre Vorschläge zu diesem Zeitpunkt die machbarste. Danke für das. –