2016-08-04 4 views
3

У нас есть многомашинный Vagrantfile в нашем проекте repo, который устанавливает стек LAMP и создает некоторые общие базы данных MySQL. Теперь у каждого из нас также есть личная база данных, которую мы бы хотели, чтобы Vagrant создавался как часть первоначального «бродячего» обеспечения. Я поместил свой персональный код обеспечения в файл ~/.vagrant.d/Vagrantfile, но в соответствии с порядком загрузки Vagrantfiles этот код выполняется до кода обеспечения общего Vagrantfile. Мой личный код обеспечения не может добавить какую-либо базу данных MySQL, потому что MySQL просто еще не установлен, так как это является обязанностью общего Vagrantfile.Как создать персональную базу данных во время первого бродяги?

Как это сделать, чтобы общий Vagrantfile установил MySQL и личный Vagrantfile добавляет базу данных после того, как MySQL на месте?

Обновление Вот что я в итоге сделал (я почти ничего не знаю о Руби, так голый со мной).

Vagrantfile (совместно с другими разработчиками):

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 (мой личный файл инициализации, Git игнорируется):

$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 

Это, конечно, продезинфицировать и упрощенных выдержки.

+0

Какое средство обеспечения безопасности вы используете? – Railslide

+0

@Railslide Я использую как оболочку, так и файл, если это то, о чем вы просите. –

ответ

2

Мы нашли самое легкое решение для этого, чтобы указать несколько сценариев обеспечения и создать скрипт «создать базу данных» в сценарии Vagrant, нужно ли ему что-либо делать.

Также вы можете параметризовать этап персонализации, например. создание базы баз данных на ENV ['DB_USERNAME'] и т. д.? Это позволит вам извлечь выгоду из попыток настройки друг друга.

Помимо этого, вы можете написать плагин, чтобы иметь более тонкий контроль над действием Vagrant и подключиться к событиям до/после события.

+0

Я надеялся, что у Vagrant есть встроенная функция для контроля над этим, но, поскольку это не так, ваши предложения кажутся наиболее выполнимыми на данный момент. Спасибо вам за это. –