Включить каталог конфигурационных файлов для Vagrantfile

#ruby #vagrant #vagrantfile

#ruby #бродяга #бродячий файл

Вопрос:

У меня есть Vagrantfile , который имеет следующую полустандартную настройку:

 Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.network :forwarded_port, guest: 80, host: 8080, auto_correct: true
  config.vm.network "private_network", ip: "192.168.56.40"
  config.vm.hostname = "development.local"
  config.vm.boot_timeout = 600

  config.vm.provider "virtualbox" do |v|
    v.name = "development.local"
    v.memory = "1024"
    v.check_guest_additions = true
  end

  config.vm.provision :shell, path: "bootstrap.sh"
end

 

Моя цель — автоматически включать файлы в папку , в которой настроен сайт vagrant up .

Для настроек apache мне удалось создать хороший скрипт bash, который анализирует папку и настраивает sites-enabled все конфигурации в папке.

Я хотел бы также поделиться этими папками внутри Vagrantfile без необходимости изменять ядро, подобно тому, как apache анализирует sites-enabled папку. Это означало бы, что я могу легко поделиться этим полем с другими, без необходимости менять Vagrantfile его каждый раз, когда я запускаю тестовую среду и хочу поделиться новой папкой.

Обычный синтаксис таков:

 config.vm.synced_folder "../some-folder/", "/var/www/some-folder", owner: "www-data"
 

Используя псевдокод, это то, к чему я стремлюсь:

 foreach([$files_in_$folder] as $synced_folder) {

    require $synced_folder_config_file;
    // ^ this would be a small config file

}
 

Обратите внимание, что преимущество небольшого конфигурационного файла заключается в том, что другие параметры могут быть указаны для каждого файла (например, разные владельцы / разрешения и т.д.).

Ключевые вещи, которые нужно сделать:

  • проанализировать содержимое папки
  • убедитесь, что эта конфигурация выполняется как часть vagrant up

Я едва прикасался к ruby, так что прошу прощения, если это очевидно.

Спасибо

Ответ №1:

После некоторых исследований и множества повторений и up / down / destroy:

Создайте соответствующие файлы в /synced-folders/ , каждый из которых состоит из чего -то вроде:

 config.vm.synced_folder "../development.local/", "/var/www/development.local", owner: "www-data"
 

Затем, в вашем Vagrantfile :

 Dir[File.dirname(__FILE__)   '/synced-folders/*.rb'].each {|file| eval File.read(file) }
 

Это анализирует каталог и eval удаляет их.